From db7c2c5743dd2d02e891721149282104ba573a15 Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Thu, 29 Jun 2017 18:48:29 +0300 Subject: [PATCH 01/39] Move the sidebar to archive window --- src/main/windows.js | 6 +-- src/renderer/components/sidebar-backup.js | 27 ++++++++++++ .../{recent-files.js => sidebar.js} | 42 ++++++++++++------- src/renderer/components/workspace.js | 37 +++++++++++----- .../{recent-files.js => sidebar.js} | 4 +- src/renderer/index.js | 1 - src/renderer/styles/workspace.global.scss | 5 ++- src/shared/actions/archives.js | 8 ++-- 8 files changed, 92 insertions(+), 38 deletions(-) create mode 100644 src/renderer/components/sidebar-backup.js rename src/renderer/components/{recent-files.js => sidebar.js} (68%) rename src/renderer/containers/{recent-files.js => sidebar.js} (84%) diff --git a/src/main/windows.js b/src/main/windows.js index cf0161a1..3c67f98e 100644 --- a/src/main/windows.js +++ b/src/main/windows.js @@ -12,14 +12,14 @@ export function setupWindows() { windowManager.setBuildProcedure('main', callback => { // Create the browser window. const win = new BrowserWindow({ - width: 870, - height: 550, + width: 950, + height: 700, minWidth: 680, minHeight: 500, title: app.getName(), titleBarStyle: 'hidden-inset', show: process.env.NODE_ENV === 'development', - vibrancy: 'light' + vibrancy: 'dark' }); win.loadURL(getPathToFile('views/index.html')); diff --git a/src/renderer/components/sidebar-backup.js b/src/renderer/components/sidebar-backup.js new file mode 100644 index 00000000..6ca6de11 --- /dev/null +++ b/src/renderer/components/sidebar-backup.js @@ -0,0 +1,27 @@ +import React, { Component } from 'react'; +import styled from 'styled-components'; +import { Button } from '@buttercup/ui'; +import ArchiveList from '../containers/archive-list'; +import Column from './column'; + +const Wrapper = styled.div` + width: var(--sidebar-width); + height: 100%; + background-color: var(--sidebar-bg); + display: flex; +`; + +export default class Sidebar extends Component { + render() { + return ( + + moi} + footer={} + > + + + + ); + } +} diff --git a/src/renderer/components/recent-files.js b/src/renderer/components/sidebar.js similarity index 68% rename from src/renderer/components/recent-files.js rename to src/renderer/components/sidebar.js index 14fdd729..6bb36b8b 100644 --- a/src/renderer/components/recent-files.js +++ b/src/renderer/components/sidebar.js @@ -2,6 +2,7 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; import HistoryIcon from 'react-icons/lib/go/history'; import { Button } from '@buttercup/ui'; +import styled from 'styled-components'; import { brands } from '../../shared/buttercup/brands'; import styles from '../styles/recent-files'; import { parsePath } from '../system/utils'; @@ -9,6 +10,13 @@ import { showContextMenu } from '../system/menu'; import EmptyView from './empty-view'; import Column from './column'; +const Wrapper = styled.div` + width: var(--sidebar-width); + height: 100%; + background-color: var(--sidebar-bg); + display: flex; +`; + const File = ({archive, onClick, onRemoveClick}) => { const { base, dir } = parsePath(archive.path); return ( @@ -76,25 +84,27 @@ class RecentFiles extends Component { } const footer = ( - + ); return ( - -
-
History:
-
    - {archives.map(archive => - this.props.onClick(archive)} - onRemoveClick={() => this.props.onRemoveClick(archive.id)} - /> - )} -
-
-
+ + +
+
History:
+
    + {archives.map(archive => + this.props.onClick(archive)} + onRemoveClick={() => this.props.onRemoveClick(archive.id)} + /> + )} +
+
+
+
); } } diff --git a/src/renderer/components/workspace.js b/src/renderer/components/workspace.js index e60274f6..50a194c5 100644 --- a/src/renderer/components/workspace.js +++ b/src/renderer/components/workspace.js @@ -1,23 +1,38 @@ import PropTypes from 'prop-types'; import React from 'react'; -import Intro from '../components/intro'; +import styled from 'styled-components'; import Archive from '../components/archive'; +import Sidebar from '../containers/sidebar'; import '../styles/workspace.global.scss'; import UpdateNotice from './update-notice'; +const Scene = styled.div` + flex: 1; + overflow: hidden; + max-width: 100%; +`; + +const Primary = styled.div` + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + transform: translateX(var(--sidebar-width)); +`; + const Workspace = ({ currentArchive, update, installUpdate, setColumnSize, columnSizes }) => { return ( -
- { - (currentArchive === null) - ? - : - } + + Hello + + + installUpdate()} /> -
+ ); }; diff --git a/src/renderer/containers/recent-files.js b/src/renderer/containers/sidebar.js similarity index 84% rename from src/renderer/containers/recent-files.js rename to src/renderer/containers/sidebar.js index 738e72b5..2ee6932e 100644 --- a/src/renderer/containers/recent-files.js +++ b/src/renderer/containers/sidebar.js @@ -1,7 +1,7 @@ import { connect } from 'react-redux'; import { removeArchive, clearArchives, loadArchive } from '../../shared/actions/archives'; import { getSortedArchives } from '../../shared/selectors'; -import RecentFiles from '../components/recent-files'; +import ArchiveList from '../components/sidebar'; export default connect( state => ({ @@ -12,4 +12,4 @@ export default connect( onClearClick: clearArchives, onClick: loadArchive } -)(RecentFiles); +)(ArchiveList); diff --git a/src/renderer/index.js b/src/renderer/index.js index b0f3ada4..77124e64 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -23,7 +23,6 @@ Buttercup.Web.HashingTools.patchCorePBKDF(); window.__defineGetter__('rpc', () => rpc); const store = configureStore({}, 'renderer'); -setWindowSize(870, 550, 'light'); setupShortcuts(store); rpc.on('ready', () => { diff --git a/src/renderer/styles/workspace.global.scss b/src/renderer/styles/workspace.global.scss index 29280533..00cab003 100644 --- a/src/renderer/styles/workspace.global.scss +++ b/src/renderer/styles/workspace.global.scss @@ -37,6 +37,7 @@ body { padding: 0; display: flex; height: 100%; + overflow: hidden; -webkit-app-region: drag; } @@ -48,7 +49,7 @@ body, button, input, select, textarea { box-sizing: border-box; } -#root, #root > div { +#root { display: flex; flex: 1; } @@ -75,6 +76,8 @@ input, button, textarea, :focus { --spacing-half: 6px; --spacing-one: 12px; --spacing-two: 20px; + --sidebar-width: 250px; + --sidebar-bg: RGBA(33, 37, 43, .9); --gray-light: #F5F7FA; --gray: #E4E9F2; --gray-dark: #777; diff --git a/src/shared/actions/archives.js b/src/shared/actions/archives.js index 7fe20e27..f658cf98 100644 --- a/src/shared/actions/archives.js +++ b/src/shared/actions/archives.js @@ -32,12 +32,12 @@ export const loadArchive = payload => async (dispatch, getState) => { dispatch(setCurrentArchive(archive.id)); dispatch(reloadGroups()); - dispatch(addArchive(archive)); + // dispatch(addArchive(archive)); // Changes to interface: - const [width, height] = getWindowSize(getState()); - setWindowSize(width, height, 'dark'); - window.document.title = `${path.basename(archive.path)} - Buttercup`; + // const [width, height] = getWindowSize(getState()); + // setWindowSize(width, height, 'dark'); + // window.document.title = `${path.basename(archive.path)} - Buttercup`; } catch (err) { } }; From 4daee43343f37b191997bc5282ebd8b3fb0c3566 Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Thu, 29 Jun 2017 19:05:54 +0300 Subject: [PATCH 02/39] Replace IPC file operation with fs --- src/renderer/system/buttercup/ipc-datasource.js | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/renderer/system/buttercup/ipc-datasource.js b/src/renderer/system/buttercup/ipc-datasource.js index b98f03cc..7b364cda 100644 --- a/src/renderer/system/buttercup/ipc-datasource.js +++ b/src/renderer/system/buttercup/ipc-datasource.js @@ -1,4 +1,4 @@ -import { ipcRenderer as ipc } from 'electron'; +import fs from 'fs'; import { TextDatasource, DatasourceAdapter } from 'buttercup-web'; const registerDatasource = DatasourceAdapter.registerDatasource; @@ -15,7 +15,7 @@ export class IpcDatasource extends TextDatasource { load(password) { return Promise - .resolve(ipc.sendSync('read-archive', this.path)) + .resolve(fs.readFileSync(this.path, 'utf8')) .then(content => { this.setContent(content); return super.load(password); @@ -26,10 +26,7 @@ export class IpcDatasource extends TextDatasource { return super .save(archive, password) .then(encryptedContent => { - ipc.sendSync('write-archive', { - filename: this.path, - content: encryptedContent - }); + fs.writeFileSync(this.path, encryptedContent, 'utf8'); }); } From 2b6bae3adf7b7e367d8b45d849e3561caddd1749 Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Fri, 30 Jun 2017 00:05:32 +0300 Subject: [PATCH 03/39] Implement Archive Manager --- src/renderer/components/sidebar.js | 17 +++-- src/renderer/index.js | 15 +++- src/renderer/system/buttercup/archive.js | 41 ++++++---- src/shared/actions/archives.js | 61 ++++++++++----- src/shared/actions/types.js | 2 + src/shared/buttercup/archive.js | 46 ++++++++++++ .../buttercup/ipc-datasource.js | 0 src/shared/buttercup/storage.js | 74 +++++++++++++++++++ src/shared/buttercup/store.js | 31 ++++++++ src/shared/reducers/archives.js | 29 +++++--- src/shared/reducers/index.js | 3 +- 11 files changed, 267 insertions(+), 52 deletions(-) create mode 100644 src/shared/buttercup/archive.js rename src/{renderer/system => shared}/buttercup/ipc-datasource.js (100%) create mode 100644 src/shared/buttercup/storage.js create mode 100644 src/shared/buttercup/store.js diff --git a/src/renderer/components/sidebar.js b/src/renderer/components/sidebar.js index 6bb36b8b..382ec6b6 100644 --- a/src/renderer/components/sidebar.js +++ b/src/renderer/components/sidebar.js @@ -18,16 +18,17 @@ const Wrapper = styled.div` `; const File = ({archive, onClick, onRemoveClick}) => { - const { base, dir } = parsePath(archive.path); + // const { base, dir } = parsePath(archive.path); + const { name } = archive; return (
  • { e.stopPropagation(); showContextMenu([{ - label: `Unlock ${base}`, + label: `Unlock ${name}`, click: onClick }, { - label: `Remove ${base} from history`, + label: `Remove ${name} from history`, click: onRemoveClick }]); }} @@ -37,8 +38,8 @@ const File = ({archive, onClick, onRemoveClick}) => {
    -
    {base}
    -
    {dir}
    +
    {name}
    + {/*
    {dir}
    */}
  • @@ -79,9 +80,9 @@ class RecentFiles extends Component { render() { const { archives } = this.props; - if (archives.length === 0) { - return this.renderEmptyState(); - } + // if (archives.length === 0) { + // return this.renderEmptyState(); + // } const footer = ( diff --git a/src/renderer/index.js b/src/renderer/index.js index 77124e64..a0555f82 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -3,13 +3,14 @@ import React from 'react'; import { render } from 'react-dom'; import { AppContainer } from 'react-hot-loader'; import configureStore from '../shared/store/configure-store'; +import { getSharedArchiveManager } from '../shared/buttercup/archive'; +import { linkArchiveManagerToStore } from '../shared/buttercup/store'; import { loadArchiveFromSource } from '../shared/actions/archives'; import * as groupActions from '../shared/actions/groups'; import * as uiActions from '../shared/actions/ui'; import rpc from './system/rpc'; import { getWorkspace } from './system/buttercup/archive'; import { importHistoryFromRequest, showHistoryPasswordPrompt } from './system/buttercup/import'; -import { setWindowSize } from './system/utils'; import { setupShortcuts } from './system/shortcuts'; import Root from './containers/root'; @@ -23,6 +24,10 @@ Buttercup.Web.HashingTools.patchCorePBKDF(); window.__defineGetter__('rpc', () => rpc); const store = configureStore({}, 'renderer'); +// temp +global.archiveManager = getSharedArchiveManager(); + +linkArchiveManagerToStore(store); setupShortcuts(store); rpc.on('ready', () => { @@ -33,6 +38,14 @@ rpc.on('load-archive', payload => { store.dispatch(loadArchiveFromSource(payload)); }); +window.test = () => { + store.dispatch(loadArchiveFromSource({ + type: 'ipc', + path: '/Users/sallar/Desktop/sallar.bcup', + isNew: false + })); +}; + rpc.on('is-in-workspace', () => { rpc.emit('in-workspace', getWorkspace() !== null); }); diff --git a/src/renderer/system/buttercup/archive.js b/src/renderer/system/buttercup/archive.js index 05cc0080..574e1299 100644 --- a/src/renderer/system/buttercup/archive.js +++ b/src/renderer/system/buttercup/archive.js @@ -1,5 +1,5 @@ import { Workspace, Archive, createCredentials, DatasourceAdapter } from 'buttercup-web'; -import './ipc-datasource'; +// import './ipc-datasource'; let __currentWorkspace = null; @@ -51,24 +51,35 @@ async function parseConfig(config, passwordCredentials) { } export async function loadWorkspace(masterConfig, masterPassword) { + // const { isNew, credentials, datasource, config } = await parseConfig(masterConfig, masterPassword); + // const dsInstance = DatasourceAdapter.objectToDatasource(datasource, credentials); + const passwordCredentials = createCredentials.fromPassword(masterPassword); - const { isNew, credentials, datasource, config } = await parseConfig(masterConfig, masterPassword); - const dsInstance = DatasourceAdapter.objectToDatasource(datasource, credentials); + const { credentials, datasource, type, path } = masterConfig; + const encryptedCredentials = createCredentials(type, credentials); + encryptedCredentials.setValue('datasource', { + type, + ...datasource + }); - if (isNew === true) { - await createDefaults(dsInstance, passwordCredentials); - } + console.log(passwordCredentials, encryptedCredentials); - const workspace = await createWorkspace(dsInstance, passwordCredentials); - __currentWorkspace = { - instance: workspace, - ...config - }; - return { - id: getArchive().getID(), - ...config - }; + + // if (isNew === true) { + // await createDefaults(dsInstance, passwordCredentials); + // } + + // const workspace = await createWorkspace(dsInstance, passwordCredentials); + // __currentWorkspace = { + // instance: workspace, + // ...config + // }; + + // return { + // id: getArchive().getID(), + // ...config + // }; } export function getWorkspace() { diff --git a/src/shared/actions/archives.js b/src/shared/actions/archives.js index f658cf98..1ccd0853 100644 --- a/src/shared/actions/archives.js +++ b/src/shared/actions/archives.js @@ -7,31 +7,56 @@ import { showPasswordDialog } from '../../renderer/system/dialog'; import { setWindowSize } from '../../renderer/system/utils'; import { getWindowSize } from '../selectors'; import { reloadGroups } from './groups'; -import { ARCHIVES_ADD, ARCHIVES_REMOVE, ARCHIVES_SET_CURRENT, ARCHIVES_CLEAR } from './types'; +import { + ARCHIVES_ADD, + ARCHIVES_REMOVE, + ARCHIVES_UNLOCK, + ARCHIVES_SET_CURRENT, + ARCHIVES_SET +} from './types'; -export const addArchive = createAction(ARCHIVES_ADD, payload => ({ - ...payload, - lastAccessed: (new Date()).getTime() -})); +import { addArchiveToArchiveManager } from '../buttercup/archive'; + +export const addArchive = createAction(ARCHIVES_ADD); export const setCurrentArchive = createAction(ARCHIVES_SET_CURRENT); export const removeArchive = createAction(ARCHIVES_REMOVE); -export const clearArchives = createAction(ARCHIVES_CLEAR); +export const unlockArchive = createAction(ARCHIVES_UNLOCK); +export const resetArchives = createAction(ARCHIVES_SET); export const loadArchive = payload => async (dispatch, getState) => { try { - const archive = await showPasswordDialog( - password => loadWorkspace(payload, password).catch(err => { - const unknownMessage = 'An unknown error has occurred'; - return Promise.reject( - isError(err) - ? err.message || unknownMessage - : unknownMessage - ); - }) - ); + // loadWorkspace(payload, 'sallar'); + + addArchiveToArchiveManager(payload, 'sallar'); + + // const pass = 'sallar'; + // const archiveCredentials = createCredentials.fromPassword(pass); + // const sourceCredentials = createCredentials("webdav"); + // sourceCredentials.username = "webdavuser"; + // sourceCredentials.password = "webdavpass"; + // sourceCredentials.setValue("datasource", JSON.stringify({ + // type: "webdav" + // })); + + // const id = await archiveManager.addSource("filename", sourceCredentials, archiveCredentials, isNew); + + // const source = archiveManager.sources[id]; + // source.workspace.primary.archive; + // archiveManager.unlock(id, password); + + // const archive = await showPasswordDialog( + // password => loadWorkspace(payload, password).catch(err => { + // const unknownMessage = 'An unknown error has occurred'; + // return Promise.reject( + // isError(err) + // ? err.message || unknownMessage + // : unknownMessage + // ); + // }) + // ); - dispatch(setCurrentArchive(archive.id)); - dispatch(reloadGroups()); + // dispatch(setCurrentArchive(archive.id)); + // dispatch(reloadGroups()); // dispatch(addArchive(archive)); // Changes to interface: diff --git a/src/shared/actions/types.js b/src/shared/actions/types.js index b66828a6..fcb3bb7a 100644 --- a/src/shared/actions/types.js +++ b/src/shared/actions/types.js @@ -34,5 +34,7 @@ export const UPDATE_INSTALL = 'buttercup/ui/UPDATE_INSTALL'; export const ARCHIVES_ADD = 'buttercup/archives/ADD'; export const ARCHIVES_REMOVE = 'buttercup/archives/REMOVE'; +export const ARCHIVES_UNLOCK = 'buttercup/archives/UNLOCK'; export const ARCHIVES_CLEAR = 'buttercup/archives/CLEAR'; +export const ARCHIVES_SET = 'buttercup/archives/SET'; export const ARCHIVES_SET_CURRENT = 'buttercup/archives/SET_CURRENT'; diff --git a/src/shared/buttercup/archive.js b/src/shared/buttercup/archive.js new file mode 100644 index 00000000..8f378d24 --- /dev/null +++ b/src/shared/buttercup/archive.js @@ -0,0 +1,46 @@ +import path from 'path'; +import { + ArchiveManager, + createCredentials +} from 'buttercup-web'; +import ElectronStorageInterface from './storage'; +import './ipc-datasource'; + +let __sharedManager = null; + +export function addArchiveToArchiveManager(masterConfig, masterPassword) { + const { credentials, datasource, type, path: filePath, isNew } = masterConfig; + + const passwordCredentials = createCredentials.fromPassword(masterPassword); + const sourceCredentials = createCredentials(type, credentials); + sourceCredentials.setValue('datasource', JSON.stringify({ + type, + ...datasource + })); + + const manager = getSharedArchiveManager(); + + return manager.addSource( + path.basename(filePath), + sourceCredentials, + passwordCredentials, + isNew + ); +} + +export function removeArchiveFromArchiveManager(archiveId) { + const manager = getSharedArchiveManager(); + return manager.remove(archiveId); +} + +export function unlockArchive(archiveId, masterPassword) { + const manager = getSharedArchiveManager(); + return manager.unlock(archiveId, masterPassword); +} + +export function getSharedArchiveManager() { + if (__sharedManager === null) { + __sharedManager = new ArchiveManager(new ElectronStorageInterface()); + } + return __sharedManager; +} diff --git a/src/renderer/system/buttercup/ipc-datasource.js b/src/shared/buttercup/ipc-datasource.js similarity index 100% rename from src/renderer/system/buttercup/ipc-datasource.js rename to src/shared/buttercup/ipc-datasource.js diff --git a/src/shared/buttercup/storage.js b/src/shared/buttercup/storage.js new file mode 100644 index 00000000..e8ca36e1 --- /dev/null +++ b/src/shared/buttercup/storage.js @@ -0,0 +1,74 @@ +import Buttercup from 'buttercup-web'; +import storage from 'electron-json-storage'; + +const { StorageInterface } = Buttercup.storage; + +/** + * Interface for localStorage + * @augments StorageInterface + */ +export default class ElectronStorageInterface extends StorageInterface { + /** + * Get all keys from storage + * @returns {Promise.>} A promise that resolves with an array of keys + */ + getAllKeys() { + return new Promise((resolve, reject) => { + storage.keys((err, keys) => { + if (err) { + return reject(err); + } + return resolve(keys.filter(key => key.startsWith('buttercup-')).map(key => key.substr(10))); + }); + }); + } + + /** + * Get the value of a key + * @param {String} name The key name + * @returns {Promise.} A promise that resolves with the value + */ + getValue(name) { + return new Promise((resolve, reject) => { + storage.get(`buttercup-${name}`, (err, result) => { + if (err) { + return reject(err); + } + return resolve(result.value); + }); + }); + } + + /** + * Remove a key from the storage + * @param {String} key The key to remove + * @returns {Promise} A promise that resolves once the item has been removed + */ + removeKey(key) { + return new Promise((resolve, reject) => { + storage.remove(`buttercup-${key}`, err => { + if (err) { + return reject(err); + } + return resolve(); + }); + }); + } + + /** + * Set the value for a key + * @param {String} name The key name + * @param {String} value The value to set + * @returns {Promise} A promise that resolves when the value is set + */ + setValue(name, value) { + return new Promise((resolve, reject) => { + storage.set(`buttercup-${name}`, { value }, err => { + if (err) { + return reject(err); + } + return resolve(); + }); + }); + } +} diff --git a/src/shared/buttercup/store.js b/src/shared/buttercup/store.js new file mode 100644 index 00000000..7f37a9e8 --- /dev/null +++ b/src/shared/buttercup/store.js @@ -0,0 +1,31 @@ +import { getSharedArchiveManager } from './archive'; +import { + addArchive, + removeArchive, + unlockArchive, +} from '../actions/archives.js'; + +export function linkArchiveManagerToStore(store) { + const archiveManager = getSharedArchiveManager(); + + // attach listeners + archiveManager.on('sourceAdded', function __handleNewSource(sourceInfo) { + console.log('Source added', sourceInfo); + store.dispatch(addArchive(sourceInfo)); + }); + archiveManager.on('sourceRehydrated', function __handleRehydratedSource(sourceInfo) { + console.log('Source rehydrated', sourceInfo); + store.dispatch(addArchive(sourceInfo)); + }); + archiveManager.on('sourceUnlocked', function __handleUnlockedSource(sourceInfo) { + console.log('Source unlocked', sourceInfo); + store.dispatch(unlockArchive(sourceInfo.id)); + }); + archiveManager.on('sourceRemoved', function __handleRemovedSource(sourceInfo) { + console.log('Source removed', sourceInfo); + store.dispatch(removeArchive(sourceInfo.id)); + }); + + // rehydrate + archiveManager.rehydrate(); +} diff --git a/src/shared/reducers/archives.js b/src/shared/reducers/archives.js index f49d0b9c..33e8ddd8 100644 --- a/src/shared/reducers/archives.js +++ b/src/shared/reducers/archives.js @@ -1,20 +1,31 @@ import { createIdentityReducer } from '../utils/redux'; -import { ARCHIVES_ADD, ARCHIVES_REMOVE, ARCHIVES_SET_CURRENT, ARCHIVES_CLEAR } from '../actions/types'; +import { + ARCHIVES_ADD, + ARCHIVES_REMOVE, + ARCHIVES_UNLOCK, + ARCHIVES_SET_CURRENT, +} from '../actions/types'; export default function archivesReducer(state = [], action) { switch (action.type) { case ARCHIVES_ADD: - return { + return [ ...state, - [action.payload.id]: action.payload - }; + action.payload + ]; case ARCHIVES_REMOVE: { - const nextState = {...state}; - delete nextState[action.payload]; - return nextState; + return state.filter(archive => archive.id !== action.payload); } - case ARCHIVES_CLEAR: - return []; + case ARCHIVES_UNLOCK: + return state.map(archive => { + if (archive.id === action.payload) { + return { + ...archive, + status: 'unlocked' + }; + } + return archive; + }); default: return state; } diff --git a/src/shared/reducers/index.js b/src/shared/reducers/index.js index 444818a4..c9563762 100644 --- a/src/shared/reducers/index.js +++ b/src/shared/reducers/index.js @@ -9,13 +9,14 @@ import update from './update'; export default function getRootReducer(scope = 'main') { let reducers = { settingsByArchiveId, - archives, + // archives, update, }; if (scope === 'renderer') { reducers = { ...reducers, + archives, currentArchive, groups, entries, From ee6401f8fa2c9396777259473e33c325b549e7ec Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Fri, 30 Jun 2017 00:26:50 +0300 Subject: [PATCH 04/39] Unlock and remove archive --- src/renderer/components/sidebar.js | 11 +++-- src/renderer/containers/sidebar.js | 4 +- src/shared/actions/archives.js | 75 +++++++++++++----------------- src/shared/buttercup/archive.js | 2 +- src/shared/buttercup/store.js | 14 +++--- 5 files changed, 50 insertions(+), 56 deletions(-) diff --git a/src/renderer/components/sidebar.js b/src/renderer/components/sidebar.js index 382ec6b6..d99cf9d2 100644 --- a/src/renderer/components/sidebar.js +++ b/src/renderer/components/sidebar.js @@ -17,7 +17,7 @@ const Wrapper = styled.div` display: flex; `; -const File = ({archive, onClick, onRemoveClick}) => { +const File = ({ archive, onUnlockClick, onClick, onRemoveClick }) => { // const { base, dir } = parsePath(archive.path); const { name } = archive; return ( @@ -26,9 +26,9 @@ const File = ({archive, onClick, onRemoveClick}) => { e.stopPropagation(); showContextMenu([{ label: `Unlock ${name}`, - click: onClick + click: onUnlockClick }, { - label: `Remove ${name} from history`, + label: `Remove ${name} from Buttercup`, click: onRemoveClick }]); }} @@ -49,13 +49,15 @@ const File = ({archive, onClick, onRemoveClick}) => { File.propTypes = { archive: PropTypes.object, onClick: PropTypes.func, - onRemoveClick: PropTypes.func + onRemoveClick: PropTypes.func, + onUnlockClick: PropTypes.func }; class RecentFiles extends Component { static propTypes = { archives: PropTypes.array, onRemoveClick: PropTypes.func, + onUnlockClick: PropTypes.func, onClearClick: PropTypes.func, onClick: PropTypes.func }; @@ -99,6 +101,7 @@ class RecentFiles extends Component { archive={archive} key={archive.id} onClick={() => this.props.onClick(archive)} + onUnlockClick={() => this.props.onUnlockClick(archive.id)} onRemoveClick={() => this.props.onRemoveClick(archive.id)} /> )} diff --git a/src/renderer/containers/sidebar.js b/src/renderer/containers/sidebar.js index 2ee6932e..52d7697f 100644 --- a/src/renderer/containers/sidebar.js +++ b/src/renderer/containers/sidebar.js @@ -1,5 +1,5 @@ import { connect } from 'react-redux'; -import { removeArchive, clearArchives, loadArchive } from '../../shared/actions/archives'; +import { removeArchive, unlockArchive, loadArchive } from '../../shared/actions/archives'; import { getSortedArchives } from '../../shared/selectors'; import ArchiveList from '../components/sidebar'; @@ -9,7 +9,7 @@ export default connect( }), { onRemoveClick: removeArchive, - onClearClick: clearArchives, + onUnlockClick: unlockArchive, onClick: loadArchive } )(ArchiveList); diff --git a/src/shared/actions/archives.js b/src/shared/actions/archives.js index 1ccd0853..045e78b7 100644 --- a/src/shared/actions/archives.js +++ b/src/shared/actions/archives.js @@ -1,63 +1,54 @@ -import path from 'path'; import isError from 'is-error'; import { createAction } from 'redux-actions'; -import { loadWorkspace } from '../../renderer/system/buttercup/archive'; import { ArchiveTypes } from '../buttercup/types'; import { showPasswordDialog } from '../../renderer/system/dialog'; -import { setWindowSize } from '../../renderer/system/utils'; -import { getWindowSize } from '../selectors'; import { reloadGroups } from './groups'; import { ARCHIVES_ADD, ARCHIVES_REMOVE, ARCHIVES_UNLOCK, - ARCHIVES_SET_CURRENT, - ARCHIVES_SET + ARCHIVES_SET_CURRENT } from './types'; -import { addArchiveToArchiveManager } from '../buttercup/archive'; +import { + addArchiveToArchiveManager, + removeArchiveFromArchiveManager, + unlockArchiveInArchiveManager +} from '../buttercup/archive'; -export const addArchive = createAction(ARCHIVES_ADD); +// Store Actions +export const addArchiveToStore = createAction(ARCHIVES_ADD); +export const removeArchiveFromStore = createAction(ARCHIVES_REMOVE); +export const unlockArchiveInStore = createAction(ARCHIVES_UNLOCK); export const setCurrentArchive = createAction(ARCHIVES_SET_CURRENT); -export const removeArchive = createAction(ARCHIVES_REMOVE); -export const unlockArchive = createAction(ARCHIVES_UNLOCK); -export const resetArchives = createAction(ARCHIVES_SET); - -export const loadArchive = payload => async (dispatch, getState) => { - try { - // loadWorkspace(payload, 'sallar'); - - addArchiveToArchiveManager(payload, 'sallar'); - // const pass = 'sallar'; - // const archiveCredentials = createCredentials.fromPassword(pass); - // const sourceCredentials = createCredentials("webdav"); - // sourceCredentials.username = "webdavuser"; - // sourceCredentials.password = "webdavpass"; - // sourceCredentials.setValue("datasource", JSON.stringify({ - // type: "webdav" - // })); - - // const id = await archiveManager.addSource("filename", sourceCredentials, archiveCredentials, isNew); +// Impure Buttercup actions +export const removeArchive = payload => () => { + return removeArchiveFromArchiveManager(payload); +}; - // const source = archiveManager.sources[id]; - // source.workspace.primary.archive; - // archiveManager.unlock(id, password); +export const unlockArchive = payload => () => { + return showPasswordDialog( + password => unlockArchiveInArchiveManager(payload, password) + ); +}; - // const archive = await showPasswordDialog( - // password => loadWorkspace(payload, password).catch(err => { - // const unknownMessage = 'An unknown error has occurred'; - // return Promise.reject( - // isError(err) - // ? err.message || unknownMessage - // : unknownMessage - // ); - // }) - // ); +export const loadArchive = payload => async (dispatch, getState) => { + try { + // try to load archive by showing a password dialog + const archiveId = await showPasswordDialog( + password => addArchiveToArchiveManager(payload, password).catch(err => { + const unknownMessage = 'An unknown error has occurred'; + return Promise.reject( + isError(err) + ? err.message || unknownMessage + : unknownMessage + ); + }) + ); - // dispatch(setCurrentArchive(archive.id)); + dispatch(setCurrentArchive(archiveId)); // dispatch(reloadGroups()); - // dispatch(addArchive(archive)); // Changes to interface: // const [width, height] = getWindowSize(getState()); diff --git a/src/shared/buttercup/archive.js b/src/shared/buttercup/archive.js index 8f378d24..5aa404d9 100644 --- a/src/shared/buttercup/archive.js +++ b/src/shared/buttercup/archive.js @@ -33,7 +33,7 @@ export function removeArchiveFromArchiveManager(archiveId) { return manager.remove(archiveId); } -export function unlockArchive(archiveId, masterPassword) { +export function unlockArchiveInArchiveManager(archiveId, masterPassword) { const manager = getSharedArchiveManager(); return manager.unlock(archiveId, masterPassword); } diff --git a/src/shared/buttercup/store.js b/src/shared/buttercup/store.js index 7f37a9e8..da57578d 100644 --- a/src/shared/buttercup/store.js +++ b/src/shared/buttercup/store.js @@ -1,8 +1,8 @@ import { getSharedArchiveManager } from './archive'; import { - addArchive, - removeArchive, - unlockArchive, + addArchiveToStore, + removeArchiveFromStore, + unlockArchiveInStore, } from '../actions/archives.js'; export function linkArchiveManagerToStore(store) { @@ -11,19 +11,19 @@ export function linkArchiveManagerToStore(store) { // attach listeners archiveManager.on('sourceAdded', function __handleNewSource(sourceInfo) { console.log('Source added', sourceInfo); - store.dispatch(addArchive(sourceInfo)); + store.dispatch(addArchiveToStore(sourceInfo)); }); archiveManager.on('sourceRehydrated', function __handleRehydratedSource(sourceInfo) { console.log('Source rehydrated', sourceInfo); - store.dispatch(addArchive(sourceInfo)); + store.dispatch(addArchiveToStore(sourceInfo)); }); archiveManager.on('sourceUnlocked', function __handleUnlockedSource(sourceInfo) { console.log('Source unlocked', sourceInfo); - store.dispatch(unlockArchive(sourceInfo.id)); + store.dispatch(unlockArchiveInStore(sourceInfo.id)); }); archiveManager.on('sourceRemoved', function __handleRemovedSource(sourceInfo) { console.log('Source removed', sourceInfo); - store.dispatch(removeArchive(sourceInfo.id)); + store.dispatch(removeArchiveFromStore(sourceInfo.id)); }); // rehydrate From 5de7a3f7533af5bc1b9ce3a51cd3f1af4c4dc78e Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Fri, 30 Jun 2017 21:17:17 +0300 Subject: [PATCH 05/39] Load archive and get groups --- src/renderer/components/sidebar.js | 2 +- src/renderer/index.js | 10 +- src/shared/actions/archives.js | 31 +++-- src/shared/actions/groups.js | 114 +++++++++--------- src/shared/buttercup/archive.js | 29 ++++- .../system => shared}/buttercup/groups.js | 80 +++--------- .../{selectors/index.js => selectors.js} | 2 +- 7 files changed, 123 insertions(+), 145 deletions(-) rename src/{renderer/system => shared}/buttercup/groups.js (53%) rename src/shared/{selectors/index.js => selectors.js} (98%) diff --git a/src/renderer/components/sidebar.js b/src/renderer/components/sidebar.js index d99cf9d2..b3762ade 100644 --- a/src/renderer/components/sidebar.js +++ b/src/renderer/components/sidebar.js @@ -100,7 +100,7 @@ class RecentFiles extends Component { this.props.onClick(archive)} + onClick={() => this.props.onClick(archive.id)} onUnlockClick={() => this.props.onUnlockClick(archive.id)} onRemoveClick={() => this.props.onRemoveClick(archive.id)} /> diff --git a/src/renderer/index.js b/src/renderer/index.js index a0555f82..d3f87d24 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -5,7 +5,7 @@ import { AppContainer } from 'react-hot-loader'; import configureStore from '../shared/store/configure-store'; import { getSharedArchiveManager } from '../shared/buttercup/archive'; import { linkArchiveManagerToStore } from '../shared/buttercup/store'; -import { loadArchiveFromSource } from '../shared/actions/archives'; +import { addArchiveFromSource } from '../shared/actions/archives'; import * as groupActions from '../shared/actions/groups'; import * as uiActions from '../shared/actions/ui'; import rpc from './system/rpc'; @@ -15,8 +15,8 @@ import { setupShortcuts } from './system/shortcuts'; import Root from './containers/root'; // Unhandled rejections -const unhandled = require('electron-unhandled'); -unhandled(); +// const unhandled = require('electron-unhandled'); +// unhandled(); // Make crypto faster! Buttercup.Web.HashingTools.patchCorePBKDF(); @@ -35,11 +35,11 @@ rpc.on('ready', () => { }); rpc.on('load-archive', payload => { - store.dispatch(loadArchiveFromSource(payload)); + store.dispatch(addArchiveFromSource(payload)); }); window.test = () => { - store.dispatch(loadArchiveFromSource({ + store.dispatch(addArchiveFromSource({ type: 'ipc', path: '/Users/sallar/Desktop/sallar.bcup', isNew: false diff --git a/src/shared/actions/archives.js b/src/shared/actions/archives.js index 045e78b7..f5db21fe 100644 --- a/src/shared/actions/archives.js +++ b/src/shared/actions/archives.js @@ -23,6 +23,11 @@ export const unlockArchiveInStore = createAction(ARCHIVES_UNLOCK); export const setCurrentArchive = createAction(ARCHIVES_SET_CURRENT); // Impure Buttercup actions +export const loadArchive = payload => dispatch => { + dispatch(setCurrentArchive(payload)); + dispatch(reloadGroups()); +}; + export const removeArchive = payload => () => { return removeArchiveFromArchiveManager(payload); }; @@ -33,7 +38,7 @@ export const unlockArchive = payload => () => { ); }; -export const loadArchive = payload => async (dispatch, getState) => { +export const addArchive = payload => async (dispatch, getState) => { try { // try to load archive by showing a password dialog const archiveId = await showPasswordDialog( @@ -47,8 +52,8 @@ export const loadArchive = payload => async (dispatch, getState) => { }) ); - dispatch(setCurrentArchive(archiveId)); - // dispatch(reloadGroups()); + // Load the newly added archive + dispatch(loadArchive(archiveId)); // Changes to interface: // const [width, height] = getWindowSize(getState()); @@ -57,8 +62,8 @@ export const loadArchive = payload => async (dispatch, getState) => { } catch (err) { } }; -export const loadArchiveFromFile = ({ path, isNew = false }) => dispatch => { - dispatch(loadArchive({ +export const addArchiveFromFile = ({ path, isNew = false }) => dispatch => { + dispatch(addArchive({ type: ArchiveTypes.FILE, isNew, path, @@ -68,8 +73,8 @@ export const loadArchiveFromFile = ({ path, isNew = false }) => dispatch => { })); }; -export const loadArchiveFromWebdav = ({ path, endpoint, credentials, isNew = false }, type) => dispatch => { - dispatch(loadArchive({ +export const addArchiveFromWebdav = ({ path, endpoint, credentials, isNew = false }, type) => dispatch => { + dispatch(addArchive({ type, isNew, path, @@ -81,8 +86,8 @@ export const loadArchiveFromWebdav = ({ path, endpoint, credentials, isNew = fal })); }; -export const loadArchiveFromDropbox = ({ path, token, isNew = false }) => dispatch => { - dispatch(loadArchive({ +export const addArchiveFromDropbox = ({ path, token, isNew = false }) => dispatch => { + dispatch(addArchive({ type: ArchiveTypes.DROPBOX, isNew, path, @@ -93,19 +98,19 @@ export const loadArchiveFromDropbox = ({ path, token, isNew = false }) => dispat })); }; -export const loadArchiveFromSource = payload => dispatch => { +export const addArchiveFromSource = payload => dispatch => { const { type, ...config } = payload; switch (type) { case ArchiveTypes.DROPBOX: - dispatch(loadArchiveFromDropbox(config)); + dispatch(addArchiveFromDropbox(config)); break; case ArchiveTypes.OWNCLOUD: case ArchiveTypes.NEXTCLOUD: case ArchiveTypes.WEBDAV: - dispatch(loadArchiveFromWebdav(config, type)); + dispatch(addArchiveFromWebdav(config, type)); break; case ArchiveTypes.FILE: - dispatch(loadArchiveFromFile(config)); + dispatch(addArchiveFromFile(config)); break; default: break; diff --git a/src/shared/actions/groups.js b/src/shared/actions/groups.js index d36ec240..d23b7f0f 100644 --- a/src/shared/actions/groups.js +++ b/src/shared/actions/groups.js @@ -1,14 +1,14 @@ import { createAction } from 'redux-actions'; import { showConfirmDialog } from '../../renderer/system/dialog'; -import * as groupTools from '../../renderer/system/buttercup/groups'; +import * as groupTools from '../buttercup/groups'; import { loadEntries } from './entries'; import { addExpandedKeys } from './ui'; +import { getCurrentArchiveId } from '../selectors'; import { GROUPS_SELECTED, GROUPS_SET_SORT, GROUPS_RESET, - GROUPS_MOVE, GROUPS_RENAME, GROUPS_ADD_NEW_CHILD, GROUPS_DISMISS, @@ -19,73 +19,67 @@ export const renameGroup = createAction(GROUPS_RENAME); export const dismissNewGroup = createAction(GROUPS_DISMISS); export const setSortMode = createAction(GROUPS_SET_SORT); -export function removeGroup(id) { - return dispatch => { - groupTools.deleteGroup(id); - dispatch(reloadGroups()); - }; -} +export const removeGroup = groupId => (dispatch, getState) => { + const archiveId = getCurrentArchiveId(getState()); + groupTools.deleteGroup(archiveId, groupId); + dispatch(reloadGroups()); +}; -export function addGroup(parentId) { - return dispatch => { - dispatch(addExpandedKeys(parentId)); - dispatch({ - type: GROUPS_ADD_NEW_CHILD, - payload: parentId - }); - }; -} +export const addGroup = parentId => dispatch => { + dispatch(addExpandedKeys(parentId)); + dispatch({ + type: GROUPS_ADD_NEW_CHILD, + payload: parentId + }); +}; -export function saveGroup(isNew, groupId, title) { - return dispatch => { - if (isNew) { - groupTools.createGroup(groupId, title); - } else { - groupTools.saveGroup(groupId, title); - } - dispatch(reloadGroups()); - }; -} +export const saveGroup = (isNew, groupId, title) => (dispatch, getState) => { + const archiveId = getCurrentArchiveId(getState()); + if (isNew) { + groupTools.createGroup(archiveId, groupId, title); + } else { + groupTools.saveGroup(archiveId, groupId, title); + } + dispatch(reloadGroups()); +}; -export function reloadGroups() { - return dispatch => { - const groups = groupTools.getGroups(); - dispatch(resetGroups(groups)); +export const reloadGroups = () => (dispatch, getState) => { + const archiveId = getCurrentArchiveId(getState()); + const groups = groupTools.getGroups(archiveId); + dispatch(resetGroups(groups)); - if (groups.length > 0) { - dispatch(loadGroup(groups[0].id)); - } - }; -} + if (groups.length > 0) { + // dispatch(loadGroup(groups[0].id)); + } +}; -export function moveGroupToParent(groupId, parentId, dropToGap) { - return dispatch => { - groupTools.moveGroup(groupId, parentId, dropToGap); - dispatch(reloadGroups()); - dispatch({ - type: GROUPS_MOVE, - payload: { - parentId, - groupId - } - }); - }; -} +export const moveGroupToParent = (groupId, parentId, dropToGap) => (dispatch, getState) => { + const archiveId = getCurrentArchiveId(getState()); + groupTools.moveGroup(archiveId, groupId, parentId, dropToGap); + dispatch(reloadGroups()); + // dispatch({ + // type: GROUPS_MOVE, + // payload: { + // parentId, + // groupId + // } + // }); +}; -export function loadGroup(groupId) { - return dispatch => { - dispatch({ - type: GROUPS_SELECTED, - payload: groupId - }); - dispatch(loadEntries(groupId)); - }; -} +export const loadGroup = groupId => (dispatch, getState) => { + // const archiveId = getCurrentArchiveId(getState()); + dispatch({ + type: GROUPS_SELECTED, + payload: groupId + }); + // dispatch(loadEntries(archiveId, groupId)); +}; -export const emptyTrash = () => dispatch => { +export const emptyTrash = () => (dispatch, getState) => { + const archiveId = getCurrentArchiveId(getState()); showConfirmDialog('Are you sure you want to empty Trash?', resp => { if (resp === 0) { - groupTools.emptyTrash(); + groupTools.emptyTrash(archiveId); dispatch(reloadGroups()); } }); diff --git a/src/shared/buttercup/archive.js b/src/shared/buttercup/archive.js index 5aa404d9..8f7688fb 100644 --- a/src/shared/buttercup/archive.js +++ b/src/shared/buttercup/archive.js @@ -1,8 +1,5 @@ import path from 'path'; -import { - ArchiveManager, - createCredentials -} from 'buttercup-web'; +import { ArchiveManager, createCredentials } from 'buttercup-web'; import ElectronStorageInterface from './storage'; import './ipc-datasource'; @@ -44,3 +41,27 @@ export function getSharedArchiveManager() { } return __sharedManager; } + +export function getArchive(archiveId) { + const manager = getSharedArchiveManager(); + const sourceIndex = manager.indexOfSource(archiveId); + const source = manager.sources[sourceIndex]; + return source.workspace.primary.archive; +} + +export function saveWorkspace(archiveId) { + const manager = getSharedArchiveManager(); + const sourceIndex = manager.indexOfSource(archiveId); + const { workspace } = manager.sources[sourceIndex]; + + return workspace + .localDiffersFromRemote() + .then(differs => differs + ? workspace.mergeSaveablesFromRemote().then(() => true) + : false + ) + .then(shouldSave => shouldSave + ? workspace.save() + : null + ); +} diff --git a/src/renderer/system/buttercup/groups.js b/src/shared/buttercup/groups.js similarity index 53% rename from src/renderer/system/buttercup/groups.js rename to src/shared/buttercup/groups.js index 61fb7b38..bba2e306 100644 --- a/src/renderer/system/buttercup/groups.js +++ b/src/shared/buttercup/groups.js @@ -1,14 +1,8 @@ import { Group } from 'buttercup-web'; -import { saveWorkspace as save, getArchive } from './archive'; - -/** - * Return recursive groups JSON structure - * - * @export - * @returns {Object} JSON structure - */ -export function getGroups() { - const arch = getArchive(); +import { getArchive, saveWorkspace } from './archive'; + +export function getGroups(archiveId) { + const arch = getArchive(archiveId); return arch.getGroups().map( group => Object.assign(group.toObject(Group.OutputFlag.Groups), { isTrash: group.isTrash() @@ -16,15 +10,8 @@ export function getGroups() { ); } -/** - * Create a new group under a parent group - * - * @export - * @param {string} parentId - * @param {string} groupName - */ -export function createGroup(parentId, groupName) { - const arch = getArchive(); +export function createGroup(archiveId, parentId, groupName) { + const arch = getArchive(archiveId); let group = null; if (parentId === null) { @@ -40,18 +27,12 @@ export function createGroup(parentId, groupName) { group.createGroup(groupName); if (groupName.toLowerCase() !== 'untitled') { - save(); + saveWorkspace(archiveId); } } -/** - * Delete a group - * - * @export - * @param {string} groupId - */ -export function deleteGroup(groupId) { - const arch = getArchive(); +export function deleteGroup(archiveId, groupId) { + const arch = getArchive(archiveId); const group = arch.findGroupByID(groupId); if (!group) { @@ -59,18 +40,11 @@ export function deleteGroup(groupId) { } group.delete(); - save(); + saveWorkspace(archiveId); } -/** - * Save group title - * - * @export - * @param {string} groupId - * @param {string} title - */ -export function saveGroup(groupId, title) { - const arch = getArchive(); +export function saveGroup(archiveId, groupId, title) { + const arch = getArchive(archiveId); const group = arch.findGroupByID(groupId); if (!group) { @@ -78,18 +52,11 @@ export function saveGroup(groupId, title) { } group.setTitle(title); - save(); + saveWorkspace(archiveId); } -/** - * Move group to another parent - * - * @export - * @param {string} groupId - * @param {string} parentId - */ -export function moveGroup(groupId, parentId, dropToGap = false) { - const arch = getArchive(); +export function moveGroup(archiveId, groupId, parentId, dropToGap = false) { + const arch = getArchive(archiveId); const group = arch.findGroupByID(groupId); let parent = parentId ? arch.findGroupByID(parentId) : arch; @@ -102,24 +69,15 @@ export function moveGroup(groupId, parentId, dropToGap = false) { } group.moveToGroup(parent); - save(); + saveWorkspace(archiveId); } -/** - * Empty Trash Group - * @export - */ -export function emptyTrash() { - const arch = getArchive(); +export function emptyTrash(archiveId) { + const arch = getArchive(archiveId); arch.emptyTrash(); - save(); + saveWorkspace(archiveId); } -/** - * Find a Group's parent Group - * @param {String} groupId Group ID to comapre - * @param {Buttercup.Group} group Group Object - */ function findParentGroup(groupId, group) { const groups = group.getGroups(); for (const subGroup of groups) { diff --git a/src/shared/selectors/index.js b/src/shared/selectors.js similarity index 98% rename from src/shared/selectors/index.js rename to src/shared/selectors.js index 72e34dc7..82175feb 100644 --- a/src/shared/selectors/index.js +++ b/src/shared/selectors.js @@ -5,7 +5,7 @@ import { sortDeepByKey, sortByLastAccessed, deepFindById -} from '../utils/collection'; +} from './utils/collection'; // Archive -> From e3ff96e1e38be4408146045df848084e971bbd77 Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Fri, 30 Jun 2017 21:47:14 +0300 Subject: [PATCH 06/39] Entries actions --- src/shared/actions/entries.js | 56 ++++++++----------- src/shared/actions/groups.js | 7 +-- .../system => shared}/buttercup/entries.js | 30 +++++----- src/shared/buttercup/groups.js | 10 +--- 4 files changed, 44 insertions(+), 59 deletions(-) rename src/{renderer/system => shared}/buttercup/entries.js (79%) diff --git a/src/shared/actions/entries.js b/src/shared/actions/entries.js index 113d5256..678faffa 100644 --- a/src/shared/actions/entries.js +++ b/src/shared/actions/entries.js @@ -1,7 +1,7 @@ -import * as entryTools from '../../renderer/system/buttercup/entries'; +import { createAction } from 'redux-actions'; +import * as entryTools from '../buttercup/entries'; import { showConfirmDialog } from '../../renderer/system/dialog'; -import { getCurrentGroupId } from '../selectors'; - +import { getCurrentGroupId, getCurrentArchiveId } from '../selectors'; import { ENTRIES_LOADED, ENTRIES_SELECTED, @@ -14,38 +14,36 @@ import { ENTRIES_SET_SORT, } from './types'; -export const loadEntries = groupId => ({ - type: ENTRIES_LOADED, - payload: entryTools.loadEntries(groupId) -}); - -export const selectEntry = entryId => ({ - type: ENTRIES_SELECTED, - payload: entryId -}); +export const selectEntry = createAction(ENTRIES_SELECTED); +export const changeMode = createAction(ENTRIES_CHANGE_MODE); +export const setFilter = createAction(ENTRIES_SET_FILTER); +export const setSortMode = createAction(ENTRIES_SET_SORT); -export const changeMode = mode => () => ({ - type: ENTRIES_CHANGE_MODE, - payload: mode +export const loadEntries = (archiveId, groupId) => ({ + type: ENTRIES_LOADED, + payload: entryTools.loadEntries(archiveId, groupId) }); -export const updateEntry = newValues => dispatch => { +export const updateEntry = newValues => (dispatch, getState) => { + const archiveId = getCurrentArchiveId(getState()); dispatch({ type: ENTRIES_UPDATE, payload: newValues }); - entryTools.updateEntry(newValues); + entryTools.updateEntry(archiveId, newValues); dispatch(changeMode('view')()); }; export const newEntry = newValues => (dispatch, getState) => { - const currentGroupId = getCurrentGroupId(getState()); + const state = getState(); + const currentGroupId = getCurrentGroupId(state); + const archiveId = getCurrentArchiveId(state); if (!currentGroupId) { return null; } - entryTools.createEntry(newValues, currentGroupId).then(entryObj => { + entryTools.createEntry(archiveId, currentGroupId, newValues).then(entryObj => { dispatch({ type: ENTRIES_CREATE, payload: entryObj @@ -56,7 +54,8 @@ export const newEntry = newValues => (dispatch, getState) => { }); }; -export const moveEntry = (entryId, groupId) => dispatch => { +export const moveEntry = (entryId, groupId) => (dispatch, getState) => { + const archiveId = getCurrentArchiveId(getState()); dispatch({ type: ENTRIES_MOVE, payload: { @@ -64,27 +63,18 @@ export const moveEntry = (entryId, groupId) => dispatch => { groupId } }); - entryTools.moveEntry(entryId, groupId); + entryTools.moveEntry(archiveId, entryId, groupId); }; -export const deleteEntry = entryId => dispatch => { +export const deleteEntry = entryId => (dispatch, getState) => { + const archiveId = getCurrentArchiveId(getState()); showConfirmDialog('Are you sure?', resp => { if (resp === 0) { dispatch({ type: ENTRIES_DELETE, payload: entryId }); - entryTools.deleteEntry(entryId); + entryTools.deleteEntry(archiveId, entryId); } }); }; - -export const setFilter = filter => ({ - type: ENTRIES_SET_FILTER, - payload: filter -}); - -export const setSortMode = sortKey => ({ - type: ENTRIES_SET_SORT, - payload: sortKey -}); diff --git a/src/shared/actions/groups.js b/src/shared/actions/groups.js index d23b7f0f..9155ec01 100644 --- a/src/shared/actions/groups.js +++ b/src/shared/actions/groups.js @@ -4,7 +4,6 @@ import * as groupTools from '../buttercup/groups'; import { loadEntries } from './entries'; import { addExpandedKeys } from './ui'; import { getCurrentArchiveId } from '../selectors'; - import { GROUPS_SELECTED, GROUPS_SET_SORT, @@ -49,7 +48,7 @@ export const reloadGroups = () => (dispatch, getState) => { dispatch(resetGroups(groups)); if (groups.length > 0) { - // dispatch(loadGroup(groups[0].id)); + dispatch(loadGroup(groups[0].id)); } }; @@ -67,12 +66,12 @@ export const moveGroupToParent = (groupId, parentId, dropToGap) => (dispatch, ge }; export const loadGroup = groupId => (dispatch, getState) => { - // const archiveId = getCurrentArchiveId(getState()); + const archiveId = getCurrentArchiveId(getState()); dispatch({ type: GROUPS_SELECTED, payload: groupId }); - // dispatch(loadEntries(archiveId, groupId)); + dispatch(loadEntries(archiveId, groupId)); }; export const emptyTrash = () => (dispatch, getState) => { diff --git a/src/renderer/system/buttercup/entries.js b/src/shared/buttercup/entries.js similarity index 79% rename from src/renderer/system/buttercup/entries.js rename to src/shared/buttercup/entries.js index 6c33c07f..8d0aef60 100644 --- a/src/renderer/system/buttercup/entries.js +++ b/src/shared/buttercup/entries.js @@ -1,4 +1,4 @@ -import { saveWorkspace as save, getArchive } from './archive'; +import { saveWorkspace, getArchive } from './archive'; function entryToObj(entry) { const obj = entry.toObject(); @@ -12,8 +12,8 @@ function entryToObj(entry) { }; } -export function loadEntries(groupId) { - const arch = getArchive(); +export function loadEntries(archiveId, groupId) { + const arch = getArchive(archiveId); const group = arch.findGroupByID(groupId); if (!group) { @@ -23,8 +23,8 @@ export function loadEntries(groupId) { return group.getEntries().map(entry => entryToObj(entry)); } -export function updateEntry(entryObj) { - const arch = getArchive(); +export function updateEntry(archiveId, entryObj) { + const arch = getArchive(archiveId); const entry = arch.getEntryByID(entryObj.id); if (!entry) { @@ -64,11 +64,11 @@ export function updateEntry(entryObj) { }); // Save workspace - save(); + saveWorkspace(archiveId); } -export function createEntry(newValues, groupId) { - const arch = getArchive(); +export function createEntry(archiveId, groupId, newValues) { + const arch = getArchive(archiveId); const group = arch.findGroupByID(groupId); if (!group) { @@ -87,13 +87,13 @@ export function createEntry(newValues, groupId) { entry.setMeta(meta.key, meta.value); }); - save(); + saveWorkspace(archiveId); return Promise.resolve(entryToObj(entry)); } -export function deleteEntry(entryId) { - const arch = getArchive(); +export function deleteEntry(archiveId, entryId) { + const arch = getArchive(archiveId); const entry = arch.getEntryByID(entryId); if (!entry) { @@ -101,11 +101,11 @@ export function deleteEntry(entryId) { } entry.delete(); - save(); + saveWorkspace(archiveId); } -export function moveEntry(entryId, groupId) { - const arch = getArchive(); +export function moveEntry(archiveId, entryId, groupId) { + const arch = getArchive(archiveId); const entry = arch.getEntryByID(entryId); const group = arch.findGroupByID(groupId); @@ -114,5 +114,5 @@ export function moveEntry(entryId, groupId) { } entry.moveToGroup(group); - save(); + saveWorkspace(archiveId); } diff --git a/src/shared/buttercup/groups.js b/src/shared/buttercup/groups.js index bba2e306..2679e58c 100644 --- a/src/shared/buttercup/groups.js +++ b/src/shared/buttercup/groups.js @@ -12,13 +12,9 @@ export function getGroups(archiveId) { export function createGroup(archiveId, parentId, groupName) { const arch = getArchive(archiveId); - let group = null; - - if (parentId === null) { - group = arch; - } else { - group = arch.findGroupByID(parentId); - } + const group = (parentId === null) + ? arch + : arch.findGroupByID(parentId); if (!group) { throw new Error('Group has not been found.'); From 8aeebcc890c86dba1a6787475cfe92ec6662f50e Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Fri, 30 Jun 2017 22:28:22 +0300 Subject: [PATCH 07/39] Move import tools (WIP) --- src/renderer/index.js | 7 +- src/renderer/system/buttercup/archive.js | 108 ------------------ .../system => shared}/buttercup/import.js | 2 +- src/shared/reducers/settings.js | 6 + 4 files changed, 8 insertions(+), 115 deletions(-) delete mode 100644 src/renderer/system/buttercup/archive.js rename src/{renderer/system => shared}/buttercup/import.js (89%) diff --git a/src/renderer/index.js b/src/renderer/index.js index d3f87d24..3198498e 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -9,8 +9,7 @@ import { addArchiveFromSource } from '../shared/actions/archives'; import * as groupActions from '../shared/actions/groups'; import * as uiActions from '../shared/actions/ui'; import rpc from './system/rpc'; -import { getWorkspace } from './system/buttercup/archive'; -import { importHistoryFromRequest, showHistoryPasswordPrompt } from './system/buttercup/import'; +import { importHistoryFromRequest, showHistoryPasswordPrompt } from '../shared/buttercup/import'; import { setupShortcuts } from './system/shortcuts'; import Root from './containers/root'; @@ -46,10 +45,6 @@ window.test = () => { })); }; -rpc.on('is-in-workspace', () => { - rpc.emit('in-workspace', getWorkspace() !== null); -}); - rpc.on('size-change', size => { store.dispatch(uiActions.setWindowSize(size)); }); diff --git a/src/renderer/system/buttercup/archive.js b/src/renderer/system/buttercup/archive.js deleted file mode 100644 index 574e1299..00000000 --- a/src/renderer/system/buttercup/archive.js +++ /dev/null @@ -1,108 +0,0 @@ -import { Workspace, Archive, createCredentials, DatasourceAdapter } from 'buttercup-web'; -// import './ipc-datasource'; - -let __currentWorkspace = null; - -function createWorkspace(datasource, passwordCredentials) { - const workspace = new Workspace(); - - return datasource - .load(passwordCredentials) - .then(archive => { - workspace.setPrimaryArchive( - archive, - datasource, - passwordCredentials - ); - return workspace; - }); -} - -function createDefaults(datasource, passwordCredentials) { - const archive = Archive.createWithDefaults(); - return datasource.save(archive, passwordCredentials); -} - -async function parseConfig(config, passwordCredentials) { - let { credentials, datasource, encryptedCredentials, isNew, ...rest } = config; - - if (typeof encryptedCredentials === 'string') { - credentials = await createCredentials.fromSecureString(encryptedCredentials, passwordCredentials); - datasource = credentials.getValueOrFail('datasource'); - } else { - datasource = { - type: config.type, - ...datasource - }; - encryptedCredentials = createCredentials(rest.type, credentials); - encryptedCredentials.setValue('datasource', datasource); - encryptedCredentials = await encryptedCredentials.toSecureString(passwordCredentials); - } - - return { - isNew, - credentials, - datasource, - config: { - ...rest, - encryptedCredentials - } - }; -} - -export async function loadWorkspace(masterConfig, masterPassword) { - // const { isNew, credentials, datasource, config } = await parseConfig(masterConfig, masterPassword); - // const dsInstance = DatasourceAdapter.objectToDatasource(datasource, credentials); - - const passwordCredentials = createCredentials.fromPassword(masterPassword); - const { credentials, datasource, type, path } = masterConfig; - const encryptedCredentials = createCredentials(type, credentials); - encryptedCredentials.setValue('datasource', { - type, - ...datasource - }); - - console.log(passwordCredentials, encryptedCredentials); - - - - // if (isNew === true) { - // await createDefaults(dsInstance, passwordCredentials); - // } - - // const workspace = await createWorkspace(dsInstance, passwordCredentials); - // __currentWorkspace = { - // instance: workspace, - // ...config - // }; - - // return { - // id: getArchive().getID(), - // ...config - // }; -} - -export function getWorkspace() { - if (__currentWorkspace === null) { - return null; - } - return __currentWorkspace; -} - -export function getArchive() { - return getWorkspace().instance.primary.archive; -} - -export function saveWorkspace() { - const workspace = getWorkspace().instance; - return workspace - .localDiffersFromRemote() - .then(differs => differs - ? workspace.mergeSaveablesFromRemote().then(() => true) - : false - ) - .then(shouldSave => shouldSave - ? workspace.save() - : null - ); -} diff --git a/src/renderer/system/buttercup/import.js b/src/shared/buttercup/import.js similarity index 89% rename from src/renderer/system/buttercup/import.js rename to src/shared/buttercup/import.js index 0b98eb99..11bc51b7 100644 --- a/src/renderer/system/buttercup/import.js +++ b/src/shared/buttercup/import.js @@ -1,5 +1,5 @@ import { Archive } from 'buttercup-web'; -import { showPasswordDialog } from '../dialog'; +import { showPasswordDialog } from '../../renderer/system/dialog'; import { getArchive, saveWorkspace } from './archive'; export function importHistoryFromRequest(request) { diff --git a/src/shared/reducers/settings.js b/src/shared/reducers/settings.js index ef2646f1..745b70b9 100644 --- a/src/shared/reducers/settings.js +++ b/src/shared/reducers/settings.js @@ -1,4 +1,5 @@ import uiReducer from './ui'; +import { ARCHIVES_REMOVE } from '../actions/types'; function itemReducer(state = {}, action) { return { @@ -14,5 +15,10 @@ export default function archivesReducer(state = {}, action) { [archiveId]: itemReducer(state[archiveId], action) }; } + if (action.type === ARCHIVES_REMOVE && state[action.payload]) { + const newState = {...state}; + delete newState[action.payload]; + return newState; + } return state; } From bb6253fe3c3430bba58cd24ba89519fea5b726aa Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Fri, 30 Jun 2017 22:35:53 +0300 Subject: [PATCH 08/39] Add archives to sidebar --- src/renderer/components/sidebar.js | 32 ++++++++++++++++++++++++------ src/renderer/containers/sidebar.js | 6 +++++- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/renderer/components/sidebar.js b/src/renderer/components/sidebar.js index b3762ade..1bb1c193 100644 --- a/src/renderer/components/sidebar.js +++ b/src/renderer/components/sidebar.js @@ -58,15 +58,28 @@ class RecentFiles extends Component { archives: PropTypes.array, onRemoveClick: PropTypes.func, onUnlockClick: PropTypes.func, - onClearClick: PropTypes.func, + onOpenClick: PropTypes.func, + onNewClick: PropTypes.func, + onCloudClick: PropTypes.func, onClick: PropTypes.func }; - showContextMenu = () => { + showCreateMenu = () => { showContextMenu([ { - label: 'Clear History', - click: this.props.onClearClick + label: 'Open Archive File', + accelerator: 'CmdOrCtrl+O', + click: this.props.onOpenClick + }, + { + label: 'New Archive File', + accelerator: 'CmdOrCtrl+N', + click: this.props.onNewClick + }, + { + label: 'Connect Cloud Sources', + accelerator: 'CmdOrCtrl+Shift+C', + click: this.props.onCloudClick } ]); } @@ -87,12 +100,19 @@ class RecentFiles extends Component { // } const footer = ( - + ); return ( - +
    History:
      diff --git a/src/renderer/containers/sidebar.js b/src/renderer/containers/sidebar.js index 52d7697f..b47c1830 100644 --- a/src/renderer/containers/sidebar.js +++ b/src/renderer/containers/sidebar.js @@ -1,5 +1,6 @@ import { connect } from 'react-redux'; import { removeArchive, unlockArchive, loadArchive } from '../../shared/actions/archives'; +import { openArchive, newArchive, openFileManager } from '../../shared/actions/files'; import { getSortedArchives } from '../../shared/selectors'; import ArchiveList from '../components/sidebar'; @@ -10,6 +11,9 @@ export default connect( { onRemoveClick: removeArchive, onUnlockClick: unlockArchive, - onClick: loadArchive + onClick: loadArchive, + onOpenClick: openArchive, + onNewClick: newArchive, + onCloudClick: openFileManager } )(ArchiveList); From 01bf1991dbc3f933d001b3275b66deb3e8d58acc Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Sat, 1 Jul 2017 02:20:45 +0300 Subject: [PATCH 09/39] Better UI for sidebar --- package-lock.json | 32 +++++++++++----------------- package.json | 2 +- src/renderer/components/sidebar.js | 1 - src/renderer/components/workspace.js | 24 ++++++--------------- src/renderer/system/utils.js | 4 ---- 5 files changed, 21 insertions(+), 42 deletions(-) diff --git a/package-lock.json b/package-lock.json index ff941df6..e296ff64 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "buttercup", - "version": "0.17.2", + "version": "0.18.0", "lockfileVersion": 1, "dependencies": { "7zip": { @@ -1744,9 +1744,9 @@ "dev": true }, "buttercup-web": { - "version": "0.32.0", - "resolved": "https://registry.npmjs.org/buttercup-web/-/buttercup-web-0.32.0.tgz", - "integrity": "sha1-5tlmB3fIvc1QiUAs2HR/T/TUA3I=", + "version": "0.32.1", + "resolved": "https://registry.npmjs.org/buttercup-web/-/buttercup-web-0.32.1.tgz", + "integrity": "sha1-YQuiogVs8zkNDxxD07ykcpie42w=", "dev": true, "dependencies": { "assert-plus": { @@ -1756,9 +1756,9 @@ "dev": true }, "buttercup": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/buttercup/-/buttercup-0.41.0.tgz", - "integrity": "sha1-KeNwUogtjyXA0XJ/7CI/RNI6nNA=", + "version": "0.41.1", + "resolved": "https://registry.npmjs.org/buttercup/-/buttercup-0.41.1.tgz", + "integrity": "sha1-OuNB3mEV8MmeG81W2s/o/X0jNAc=", "dev": true }, "debug": { @@ -1790,18 +1790,6 @@ "resolved": "https://registry.npmjs.org/verror/-/verror-1.9.0.tgz", "integrity": "sha1-EHqKLRTDNYb8S7gwBXzS0Zripu4=", "dev": true - }, - "webdav": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/webdav/-/webdav-0.10.0.tgz", - "integrity": "sha1-3n9pNRQB7KsjufUHwjXhpHyZ9nc=", - "dev": true - }, - "webdav-fs": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/webdav-fs/-/webdav-fs-1.3.0.tgz", - "integrity": "sha1-2xROSLIqWzGDCL4fNExK7Xnx+0w=", - "dev": true } } }, @@ -3946,6 +3934,12 @@ "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", "dev": true }, + "eventemitter3": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz", + "integrity": "sha1-teEHm1n7XhuidxwKmTvgYKWMmbo=", + "dev": true + }, "events": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", diff --git a/package.json b/package.json index cf6682c2..6508fe88 100644 --- a/package.json +++ b/package.json @@ -126,7 +126,7 @@ "babel-register": "^6.18.0", "babili-webpack-plugin": "^0.1.1", "buttercup-importer": "~0.9.1", - "buttercup-web": "~0.32.0", + "buttercup-web": "^0.32.1", "classnames": "^2.2.5", "concurrently": "^2.1.0", "cross-env": "^1.0.8", diff --git a/src/renderer/components/sidebar.js b/src/renderer/components/sidebar.js index 1bb1c193..a3f4cef3 100644 --- a/src/renderer/components/sidebar.js +++ b/src/renderer/components/sidebar.js @@ -5,7 +5,6 @@ import { Button } from '@buttercup/ui'; import styled from 'styled-components'; import { brands } from '../../shared/buttercup/brands'; import styles from '../styles/recent-files'; -import { parsePath } from '../system/utils'; import { showContextMenu } from '../system/menu'; import EmptyView from './empty-view'; import Column from './column'; diff --git a/src/renderer/components/workspace.js b/src/renderer/components/workspace.js index 50a194c5..bc91b2dc 100644 --- a/src/renderer/components/workspace.js +++ b/src/renderer/components/workspace.js @@ -1,38 +1,28 @@ import PropTypes from 'prop-types'; import React from 'react'; import styled from 'styled-components'; +import { Flex, Box } from 'styled-flexbox'; import Archive from '../components/archive'; import Sidebar from '../containers/sidebar'; import '../styles/workspace.global.scss'; import UpdateNotice from './update-notice'; -const Scene = styled.div` - flex: 1; - overflow: hidden; - max-width: 100%; -`; - -const Primary = styled.div` - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - transform: translateX(var(--sidebar-width)); +const Primary = styled(Box)` + position: relative; `; const Workspace = ({ currentArchive, update, installUpdate, setColumnSize, columnSizes }) => { return ( - - Hello - + + + installUpdate()} /> - + ); }; diff --git a/src/renderer/system/utils.js b/src/renderer/system/utils.js index b7271f1e..ad8d60e2 100644 --- a/src/renderer/system/utils.js +++ b/src/renderer/system/utils.js @@ -24,10 +24,6 @@ export function selectElementContents(el) { sel.addRange(range); } -export function parsePath(filepath) { - return path.parse(filepath); -} - export function setWindowSize(width, height, vibrancy) { currentWindow.setSize(width, height, false); if (typeof vibrancy !== 'undefined') { From a9cc3d5f891855ea323c07c20f1aa0d11384898d Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Sat, 1 Jul 2017 02:28:59 +0300 Subject: [PATCH 10/39] Unlock and load archive --- src/shared/actions/archives.js | 4 +++- src/shared/actions/entries.js | 7 ++++++- src/shared/buttercup/archive.js | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/shared/actions/archives.js b/src/shared/actions/archives.js index f5db21fe..54e13e1c 100644 --- a/src/shared/actions/archives.js +++ b/src/shared/actions/archives.js @@ -32,9 +32,11 @@ export const removeArchive = payload => () => { return removeArchiveFromArchiveManager(payload); }; -export const unlockArchive = payload => () => { +export const unlockArchive = payload => dispatch => { return showPasswordDialog( password => unlockArchiveInArchiveManager(payload, password) + ).then( + archiveId => dispatch(loadArchive(archiveId)) ); }; diff --git a/src/shared/actions/entries.js b/src/shared/actions/entries.js index 678faffa..02f6496a 100644 --- a/src/shared/actions/entries.js +++ b/src/shared/actions/entries.js @@ -15,10 +15,15 @@ import { } from './types'; export const selectEntry = createAction(ENTRIES_SELECTED); -export const changeMode = createAction(ENTRIES_CHANGE_MODE); +// export const changeMode = createAction(ENTRIES_CHANGE_MODE); export const setFilter = createAction(ENTRIES_SET_FILTER); export const setSortMode = createAction(ENTRIES_SET_SORT); +export const changeMode = mode => () => ({ + type: ENTRIES_CHANGE_MODE, + payload: mode +}); + export const loadEntries = (archiveId, groupId) => ({ type: ENTRIES_LOADED, payload: entryTools.loadEntries(archiveId, groupId) diff --git a/src/shared/buttercup/archive.js b/src/shared/buttercup/archive.js index 8f7688fb..ea283fc7 100644 --- a/src/shared/buttercup/archive.js +++ b/src/shared/buttercup/archive.js @@ -32,7 +32,7 @@ export function removeArchiveFromArchiveManager(archiveId) { export function unlockArchiveInArchiveManager(archiveId, masterPassword) { const manager = getSharedArchiveManager(); - return manager.unlock(archiveId, masterPassword); + return manager.unlock(archiveId, masterPassword).then(() => archiveId); } export function getSharedArchiveManager() { From 69ad0fa5aee3675daade3d23bb6e5cf784744b09 Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Sat, 1 Jul 2017 03:03:49 +0300 Subject: [PATCH 11/39] Safer group move --- src/shared/actions/groups.js | 21 ++++++++++---------- src/shared/reducers/groups.js | 35 ++++++++++++++++++++++++++++++---- src/shared/utils/collection.js | 13 +++++++++++++ 3 files changed, 55 insertions(+), 14 deletions(-) diff --git a/src/shared/actions/groups.js b/src/shared/actions/groups.js index 9155ec01..ae4ae522 100644 --- a/src/shared/actions/groups.js +++ b/src/shared/actions/groups.js @@ -9,6 +9,7 @@ import { GROUPS_SET_SORT, GROUPS_RESET, GROUPS_RENAME, + GROUPS_MOVE, GROUPS_ADD_NEW_CHILD, GROUPS_DISMISS, } from './types'; @@ -52,17 +53,17 @@ export const reloadGroups = () => (dispatch, getState) => { } }; -export const moveGroupToParent = (groupId, parentId, dropToGap) => (dispatch, getState) => { +export const moveGroupToParent = (groupId, parentId, gapDrop) => (dispatch, getState) => { const archiveId = getCurrentArchiveId(getState()); - groupTools.moveGroup(archiveId, groupId, parentId, dropToGap); - dispatch(reloadGroups()); - // dispatch({ - // type: GROUPS_MOVE, - // payload: { - // parentId, - // groupId - // } - // }); + groupTools.moveGroup(archiveId, groupId, parentId, gapDrop); + dispatch({ + type: GROUPS_MOVE, + payload: { + parentId, + groupId, + gapDrop + } + }); }; export const loadGroup = groupId => (dispatch, getState) => { diff --git a/src/shared/reducers/groups.js b/src/shared/reducers/groups.js index f12dfb00..2c53d25d 100644 --- a/src/shared/reducers/groups.js +++ b/src/shared/reducers/groups.js @@ -1,6 +1,5 @@ import { combineReducers } from 'redux'; -import { deepAdd, deepFilter, deepMap } from '../utils/collection'; - +import { deepAdd, deepFilter, deepMap, deepFindById, deepFindParentById } from '../utils/collection'; import { GROUPS_ADD_NEW_CHILD, GROUPS_DISMISS, @@ -8,7 +7,8 @@ import { GROUPS_SET_SORT, GROUPS_RESET, GROUPS_REMOVE, - GROUPS_RENAME + GROUPS_RENAME, + GROUPS_MOVE } from '../actions/types'; // Reducers -> @@ -31,12 +31,39 @@ function groups(state = [], action) { title: '', isNew: true }); - case GROUPS_DISMISS: + case GROUPS_DISMISS: { const newState = deepFilter(state, 'groups', group => !group.isNew); return deepMap(newState, 'groups', item => ({ ...item, isRenaming: false })); + } + case GROUPS_MOVE: { + let { groupId, parentId, gapDrop } = action.payload; + const group = deepFindById(state, groupId, 'groups'); + const newState = deepFilter(state, 'groups', group => group.id !== groupId); + if (gapDrop) { + parentId = deepFindParentById(state, parentId, 'groups'); + } + if (parentId === null) { + return [ + ...newState, + group + ]; + } + return deepMap(newState, 'groups', item => { + if (item.id === parentId) { + return { + ...item, + groups: [ + ...item.groups, + group + ] + }; + } + return item; + }); + } case GROUPS_RESET: return action.payload; case GROUPS_REMOVE: diff --git a/src/shared/utils/collection.js b/src/shared/utils/collection.js index 02845c4b..4772ea51 100644 --- a/src/shared/utils/collection.js +++ b/src/shared/utils/collection.js @@ -88,3 +88,16 @@ export function deepFindById(list, id, key) { } return null; } + +export function deepFindParentById(list, id, key, currentId = null) { + for (const item of list) { + if (item.id === id) { + return currentId; + } + const findInChildren = deepFindParentById(item[key], id, key, item.id); + if (findInChildren !== false) { + return findInChildren; + } + } + return false; +} From 990679d17f2d6422c0e2b8fdcfeb182fe9687d5a Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Sat, 1 Jul 2017 19:39:38 +0300 Subject: [PATCH 12/39] Flatten groups structure --- package-lock.json | 6 + package.json | 1 + src/renderer/components/tree-view/index.js | 2 + .../components/tree-view/tree-label.js | 11 +- src/renderer/containers/tree-view.js | 5 +- src/shared/actions/groups.js | 106 +++++++++--- src/shared/actions/types.js | 3 +- src/shared/buttercup/groups.js | 70 +++++--- src/shared/reducers/groups.js | 159 ++++++++++++------ src/shared/selectors.js | 22 ++- src/shared/utils/collection.js | 65 ------- 11 files changed, 271 insertions(+), 179 deletions(-) diff --git a/package-lock.json b/package-lock.json index e296ff64..2345e09f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9024,6 +9024,12 @@ "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", "dev": true }, + "normalizr": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/normalizr/-/normalizr-3.2.3.tgz", + "integrity": "sha1-iHVcZN5BiwQPpq0TKbLeXDJQrEk=", + "dev": true + }, "npm-install-package": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/npm-install-package/-/npm-install-package-2.1.0.tgz", diff --git a/package.json b/package.json index 6508fe88..6651146b 100644 --- a/package.json +++ b/package.json @@ -177,6 +177,7 @@ "ms": "^0.7.2", "node-noop": "^1.0.0", "node-sass": "^3.10.1", + "normalizr": "^3.2.3", "pify": "^2.3.0", "prop-types": "^15.5.10", "raw-loader": "^0.5.1", diff --git a/src/renderer/components/tree-view/index.js b/src/renderer/components/tree-view/index.js index 0b7990ce..b57e1d00 100644 --- a/src/renderer/components/tree-view/index.js +++ b/src/renderer/components/tree-view/index.js @@ -142,6 +142,7 @@ class TreeView extends Component { onAddClick={this.handleAddClick} onRemoveClick={this.handleRemoveClick} onSaveClick={this.props.onSaveClick} + onCreateNew={this.props.onCreateNew} onDismissClick={this.props.onDismissClick} /> } @@ -188,6 +189,7 @@ TreeView.propTypes = { sortMode: PropTypes.string, onRemoveClick: PropTypes.func, onSaveClick: PropTypes.func, + onCreateNew: PropTypes.func, onDismissClick: PropTypes.func, onAddClick: PropTypes.func, onRenameClick: PropTypes.func, diff --git a/src/renderer/components/tree-view/tree-label.js b/src/renderer/components/tree-view/tree-label.js index 42fa3ca4..20afb800 100644 --- a/src/renderer/components/tree-view/tree-label.js +++ b/src/renderer/components/tree-view/tree-label.js @@ -14,16 +14,17 @@ class TreeLabel extends Component { node: PropTypes.object, onDismissClick: PropTypes.func, onSaveClick: PropTypes.func, + onCreateNew: PropTypes.func, onRightClick: PropTypes.func }; handleSave = title => { const { isNew, parentId, id } = this.props.node; - this.props.onSaveClick( - isNew, - isNew ? parentId : id, - title - ); + if (isNew) { + this.props.onCreateNew(parentId, id, title); + } else { + this.props.onSaveClick(id, title); + } } handleDismiss = () => { diff --git a/src/renderer/containers/tree-view.js b/src/renderer/containers/tree-view.js index 5da3dec0..24754028 100644 --- a/src/renderer/containers/tree-view.js +++ b/src/renderer/containers/tree-view.js @@ -14,8 +14,9 @@ export default connect( { onAddClick: groupTools.addGroup, onRemoveClick: groupTools.removeGroup, - onSaveClick: groupTools.saveGroup, - onDismissClick: groupTools.dismissNewGroup, + onSaveClick: groupTools.saveGroupTitle, + onCreateNew: groupTools.createNewGroup, + onDismissClick: groupTools.dismissNewGroups, onRenameClick: groupTools.renameGroup, onEmptyTrash: groupTools.emptyTrash, onMoveGroup: groupTools.moveGroupToParent, diff --git a/src/shared/actions/groups.js b/src/shared/actions/groups.js index ae4ae522..b877c02f 100644 --- a/src/shared/actions/groups.js +++ b/src/shared/actions/groups.js @@ -1,9 +1,16 @@ import { createAction } from 'redux-actions'; +import uuid from 'uuid'; import { showConfirmDialog } from '../../renderer/system/dialog'; import * as groupTools from '../buttercup/groups'; import { loadEntries } from './entries'; import { addExpandedKeys } from './ui'; -import { getCurrentArchiveId } from '../selectors'; +import { + getCurrentArchiveId, + getDismissableGroupIds, + getGroupsById, + getTrashGroupId, + getTrashChildrenIds +} from '../selectors'; import { GROUPS_SELECTED, GROUPS_SET_SORT, @@ -12,35 +19,76 @@ import { GROUPS_MOVE, GROUPS_ADD_NEW_CHILD, GROUPS_DISMISS, + GROUPS_UPDATE, } from './types'; -export const resetGroups = createAction(GROUPS_RESET); +export const resetGroups = createAction(GROUPS_RESET, payload => groupTools.normalizeGroups(payload)); export const renameGroup = createAction(GROUPS_RENAME); -export const dismissNewGroup = createAction(GROUPS_DISMISS); export const setSortMode = createAction(GROUPS_SET_SORT); +export const dismissGroup = createAction(GROUPS_DISMISS); +export const updateGroup = createAction(GROUPS_UPDATE); +export const moveGroup = createAction(GROUPS_MOVE); +export const setCurrentGroup = createAction(GROUPS_SELECTED); +export const addNewGroup = createAction(GROUPS_ADD_NEW_CHILD); +export const addTemporaryGroup = createAction(GROUPS_ADD_NEW_CHILD, payload => ({ + parentId: payload, + group: { + id: uuid.v4(), + parentId: payload, + title: '', + isNew: true + } +})); + +export const dismissNewGroups = () => (dispatch, getState) => { + const ids = getDismissableGroupIds(getState()); + ids.forEach(id => dispatch(dismissGroup(id))); +}; export const removeGroup = groupId => (dispatch, getState) => { const archiveId = getCurrentArchiveId(getState()); + const isInTrash = groupTools.isGroupInTrash(archiveId, groupId); + groupTools.deleteGroup(archiveId, groupId); - dispatch(reloadGroups()); + + // Delete + if (isInTrash) { + dispatch(dismissGroup(groupId)); + } else { + const state = getState(); + const allGroups = getGroupsById(state); + const fromParentId = groupTools.findParentId(allGroups, groupId); + const toParentId = getTrashGroupId(state); + + dispatch(moveGroup({ + fromParentId, + toParentId, + groupId + })); + } }; +// @todo: fix expanded keys export const addGroup = parentId => dispatch => { dispatch(addExpandedKeys(parentId)); - dispatch({ - type: GROUPS_ADD_NEW_CHILD, - payload: parentId - }); + dispatch(addTemporaryGroup(parentId)); }; -export const saveGroup = (isNew, groupId, title) => (dispatch, getState) => { +export const createNewGroup = (parentId, temporaryGroupId, title) => (dispatch, getState) => { const archiveId = getCurrentArchiveId(getState()); - if (isNew) { - groupTools.createGroup(archiveId, groupId, title); - } else { - groupTools.saveGroup(archiveId, groupId, title); - } - dispatch(reloadGroups()); + const group = groupTools.createGroup(archiveId, parentId, title); + + dispatch(dismissNewGroups()); + dispatch(addNewGroup({ + parentId, + group + })); +}; + +export const saveGroupTitle = (groupId, title) => (dispatch, getState) => { + const archiveId = getCurrentArchiveId(getState()); + const group = groupTools.saveGroup(archiveId, groupId, title); + dispatch(updateGroup(group)); }; export const reloadGroups = () => (dispatch, getState) => { @@ -54,33 +102,39 @@ export const reloadGroups = () => (dispatch, getState) => { }; export const moveGroupToParent = (groupId, parentId, gapDrop) => (dispatch, getState) => { - const archiveId = getCurrentArchiveId(getState()); - groupTools.moveGroup(archiveId, groupId, parentId, gapDrop); + const state = getState(); + const archiveId = getCurrentArchiveId(state); + const allGroups = getGroupsById(state); + const fromParentId = groupTools.findParentId(allGroups, groupId); + const toParentId = gapDrop ? groupTools.findParentId(allGroups, parentId) : parentId; + + groupTools.moveGroup(archiveId, groupId, toParentId); dispatch({ type: GROUPS_MOVE, payload: { - parentId, - groupId, - gapDrop + fromParentId, + toParentId, + groupId } }); }; export const loadGroup = groupId => (dispatch, getState) => { const archiveId = getCurrentArchiveId(getState()); - dispatch({ - type: GROUPS_SELECTED, - payload: groupId - }); + dispatch(setCurrentGroup(groupId)); dispatch(loadEntries(archiveId, groupId)); }; +// @todo: remove expanded key from trash export const emptyTrash = () => (dispatch, getState) => { - const archiveId = getCurrentArchiveId(getState()); + const state = getState(); + const archiveId = getCurrentArchiveId(state); + const trashIds = getTrashChildrenIds(state); + showConfirmDialog('Are you sure you want to empty Trash?', resp => { if (resp === 0) { + trashIds.forEach(id => dispatch(dismissGroup(id))); groupTools.emptyTrash(archiveId); - dispatch(reloadGroups()); } }); }; diff --git a/src/shared/actions/types.js b/src/shared/actions/types.js index fcb3bb7a..0b5289fd 100644 --- a/src/shared/actions/types.js +++ b/src/shared/actions/types.js @@ -14,13 +14,14 @@ export const FILES_NEW = 'buttercup/files/NEW'; export const FILES_CANCELLED = 'buttercup/files/CANCELLED'; export const GROUPS_SELECTED = 'buttercup/groups/SELECTED'; -export const GROUPS_ADD_NEW_CHILD = 'buttercup/groups/ADD_CHILD'; +export const GROUPS_ADD_NEW_CHILD = 'buttercup/groups/ADD_NEW_CHILD'; export const GROUPS_DISMISS = 'buttercup/groups/DISMISS'; export const GROUPS_MOVE = 'buttercup/groups/MOVE'; export const GROUPS_SET_SORT = 'buttercup/groups/SET_SORT'; export const GROUPS_RESET = 'buttercup/groups/RESET'; export const GROUPS_REMOVE = 'buttercup/groups/REMOVE'; export const GROUPS_RENAME = 'buttercup/groups/RENAME'; +export const GROUPS_UPDATE = 'buttercup/groups/UPDATE'; export const TREE_ADD_EXPANDED_KEY = 'buttercup/ui/TREE_ADD_EXPANDED_KEY'; export const TREE_SET_EXPANDED_KEYS = 'buttercup/ui/TREE_SET_EXPANDED_KEYS'; diff --git a/src/shared/buttercup/groups.js b/src/shared/buttercup/groups.js index 2679e58c..3470ebb2 100644 --- a/src/shared/buttercup/groups.js +++ b/src/shared/buttercup/groups.js @@ -1,5 +1,37 @@ import { Group } from 'buttercup-web'; import { getArchive, saveWorkspace } from './archive'; +import { normalize, denormalize, schema } from 'normalizr'; + +const group = new schema.Entity('groups'); +const groups = new schema.Array(group); +group.define({ groups }); + +export function normalizeGroups(payload) { + return normalize(payload, groups); +} + +export function denormalizeGroups(shownIds, allIds) { + return denormalize(shownIds, groups, { groups: allIds }); +} + +export function groupToObject(group) { + const obj = group.toObject(); + return { + ...obj, + isTrash: group.isTrash, + groups: obj.groups.map(g => g.id) + }; +} + +export function findParentId(groups, groupId) { + return Object.keys(groups).find(parentId => { + const group = groups[parentId]; + if (group.groups && group.groups.indexOf(groupId) !== -1) { + return true; + } + return false; + }); +} export function getGroups(archiveId) { const arch = getArchive(archiveId); @@ -12,19 +44,19 @@ export function getGroups(archiveId) { export function createGroup(archiveId, parentId, groupName) { const arch = getArchive(archiveId); - const group = (parentId === null) - ? arch - : arch.findGroupByID(parentId); + const group = parentId ? arch.findGroupByID(parentId) : arch; if (!group) { throw new Error('Group has not been found.'); } - group.createGroup(groupName); + const newGroup = group.createGroup(groupName); if (groupName.toLowerCase() !== 'untitled') { saveWorkspace(archiveId); } + + return groupToObject(newGroup); } export function deleteGroup(archiveId, groupId) { @@ -49,16 +81,14 @@ export function saveGroup(archiveId, groupId, title) { group.setTitle(title); saveWorkspace(archiveId); + + return groupToObject(group); } -export function moveGroup(archiveId, groupId, parentId, dropToGap = false) { +export function moveGroup(archiveId, groupId, parentId) { const arch = getArchive(archiveId); const group = arch.findGroupByID(groupId); - let parent = parentId ? arch.findGroupByID(parentId) : arch; - - if (dropToGap) { - parent = findParentGroup(parentId, arch); - } + const parent = parentId ? arch.findGroupByID(parentId) : arch; if (!group || !parent) { throw new Error('Group has not been found.'); @@ -68,22 +98,14 @@ export function moveGroup(archiveId, groupId, parentId, dropToGap = false) { saveWorkspace(archiveId); } +export function isGroupInTrash(archiveId, groupId) { + const arch = getArchive(archiveId); + const group = arch.findGroupByID(groupId); + return group.isInTrash(); +} + export function emptyTrash(archiveId) { const arch = getArchive(archiveId); arch.emptyTrash(); saveWorkspace(archiveId); } - -function findParentGroup(groupId, group) { - const groups = group.getGroups(); - for (const subGroup of groups) { - if (subGroup.getID() === groupId) { - return group; - } - const findInChildren = findParentGroup(groupId, subGroup); - if (findInChildren !== false) { - return findInChildren; - } - } - return false; -} diff --git a/src/shared/reducers/groups.js b/src/shared/reducers/groups.js index 2c53d25d..adb3734c 100644 --- a/src/shared/reducers/groups.js +++ b/src/shared/reducers/groups.js @@ -1,14 +1,13 @@ import { combineReducers } from 'redux'; -import { deepAdd, deepFilter, deepMap, deepFindById, deepFindParentById } from '../utils/collection'; import { GROUPS_ADD_NEW_CHILD, GROUPS_DISMISS, GROUPS_SELECTED, GROUPS_SET_SORT, GROUPS_RESET, - GROUPS_REMOVE, GROUPS_RENAME, - GROUPS_MOVE + GROUPS_MOVE, + GROUPS_UPDATE, } from '../actions/types'; // Reducers -> @@ -22,62 +21,125 @@ function currentGroup(state = null, action) { } } -function groups(state = [], action) { +function byId(state = {}, action) { switch (action.type) { - case GROUPS_ADD_NEW_CHILD: - return deepAdd(state, action.payload, 'groups', { - id: Math.random().toString(), - parentId: action.payload, - title: '', - isNew: true - }); - case GROUPS_DISMISS: { - const newState = deepFilter(state, 'groups', group => !group.isNew); - return deepMap(newState, 'groups', item => ({ - ...item, - isRenaming: false - })); + case GROUPS_ADD_NEW_CHILD: { + const { group, parentId } = action.payload; + let newState = {...state}; + if (parentId !== null) { + newState = { + ...newState, + [parentId]: { + ...newState[parentId], + groups: [ + ...newState[parentId].groups, + group.id + ] + } + }; + } + return { + ...newState, + [group.id]: group + }; } + case GROUPS_DISMISS: + return Object.keys(state).reduce((newState, id) => { + if (id === action.payload) { + return newState; + } + newState[id] = { + ...state[id], + groups: state[id].groups.filter(groupId => groupId !== action.payload) + }; + return newState; + }, {}); case GROUPS_MOVE: { - let { groupId, parentId, gapDrop } = action.payload; - const group = deepFindById(state, groupId, 'groups'); - const newState = deepFilter(state, 'groups', group => group.id !== groupId); - if (gapDrop) { - parentId = deepFindParentById(state, parentId, 'groups'); + const { groupId, fromParentId, toParentId } = action.payload; + + if (toParentId === fromParentId) { + return state; } - if (parentId === null) { - return [ + + let newState = {...state}; + + if (fromParentId) { + newState = { ...newState, - group - ]; + [fromParentId]: { + ...newState[fromParentId], + groups: newState[fromParentId].groups.filter(id => id !== groupId) + } + }; } - return deepMap(newState, 'groups', item => { - if (item.id === parentId) { - return { - ...item, + + if (toParentId) { + newState = { + ...newState, + [toParentId]: { + ...newState[toParentId], groups: [ - ...item.groups, - group + ...newState[toParentId].groups, + groupId ] - }; - } - return item; - }); + } + }; + } + + return newState; } case GROUPS_RESET: - return action.payload; - case GROUPS_REMOVE: - return []; + return action.payload.entities.groups; case GROUPS_RENAME: - return deepMap(state, 'groups', item => { - if (item.id === action.payload) { - return { - ...item, - isRenaming: true - }; + return { + ...state, + [action.payload]: { + ...state[action.payload], + isRenaming: true } - return item; - }); + }; + case GROUPS_UPDATE: + return { + ...state, + [action.payload.id]: action.payload + }; + default: + return state; + } +} + +function shownIds(state = [], action) { + switch (action.type) { + case GROUPS_ADD_NEW_CHILD: + if (!action.payload.parentId) { + return [ + ...state, + action.payload.group.id + ]; + } + return state; + case GROUPS_MOVE: { + const { groupId, fromParentId, toParentId } = action.payload; + + if (toParentId === fromParentId) { + return state; + } + + if (!fromParentId) { + return state.filter(id => id !== groupId); + } + if (!toParentId) { + return [ + ...state, + groupId + ]; + } + return state; + } + case GROUPS_DISMISS: + return state.filter(id => id !== action.payload); + case GROUPS_RESET: + return action.payload.result; default: return state; } @@ -93,7 +155,8 @@ function sortMode(state = 'title-asc', action) { } export default combineReducers({ - byId: groups, + byId, + shownIds, currentGroup, sortMode }); diff --git a/src/shared/selectors.js b/src/shared/selectors.js index 82175feb..c4ef9fa0 100644 --- a/src/shared/selectors.js +++ b/src/shared/selectors.js @@ -3,9 +3,9 @@ import { filterByText, sortByKey, sortDeepByKey, - sortByLastAccessed, - deepFindById + sortByLastAccessed } from './utils/collection'; +import { denormalizeGroups } from './buttercup/groups'; // Archive -> @@ -80,13 +80,19 @@ export const getEntries = createSelector( // Groups -> -export const getAllGroups = state => state.groups.byId; +export const getAllGroups = state => denormalizeGroups(state.groups.shownIds, state.groups.byId); +export const getDismissableGroupIds = state => Object.keys(state.groups.byId) + .filter(groupId => state.groups.byId[groupId].isNew); +export const getGroupsById = state => state.groups.byId; export const getCurrentGroupId = state => state.groups.currentGroup; - -export const getCurrentGroup = createSelector( - getAllGroups, - getCurrentGroupId, - (groups, groupId) => deepFindById(groups, groupId, 'groups') +export const getCurrentGroup = state => state.groups.currentGroup ? state.groups.byId[state.groups.currentGroup] : null; +export const getTrashGroupId = state => Object.keys(state.groups.byId) + .find(groupId => state.groups.byId[groupId].isTrash); + +export const getTrashChildrenIds = createSelector( + getGroupsById, + getTrashGroupId, + (groups, trashGroup) => groups[trashGroup].groups ); export const getGroups = createSelector( diff --git a/src/shared/utils/collection.js b/src/shared/utils/collection.js index 4772ea51..08594fa7 100644 --- a/src/shared/utils/collection.js +++ b/src/shared/utils/collection.js @@ -36,68 +36,3 @@ export function sortDeepByKey(list, sortKey, childrenKey) { }; }); } - -export function deepFilter(list, key, fn) { - return list - .filter(fn) - .map(item => ({ - ...item, - [key]: deepFilter(item[key], key, fn) - })); -} - -export function deepMap(list, key, fn) { - return list - .map(fn) - .map(item => ({ - ...item, - [key]: deepMap(item[key], key, fn) - })); -} - -export function deepAdd(list, id, key, newItem) { - if (id === null) { - return [ - newItem, - ...list - ]; - } - return list.map(item => { - return { - ...item, - [key]: (item.id === id) - ? [newItem, ...item[key]] - : deepAdd(item[key], id, key, newItem) - }; - }); -} - -export function deepFindById(list, id, key) { - if (!Array.isArray(list)) { - return null; - } - - for (const item of list) { - if (item.id === id) { - return item; - } - const resultInChild = deepFindById(item[key], id, key); - if (resultInChild !== null) { - return resultInChild; - } - } - return null; -} - -export function deepFindParentById(list, id, key, currentId = null) { - for (const item of list) { - if (item.id === id) { - return currentId; - } - const findInChildren = deepFindParentById(item[key], id, key, item.id); - if (findInChildren !== false) { - return findInChildren; - } - } - return false; -} From 527bf0587919259119014ca7b639ee84002555e4 Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Sat, 1 Jul 2017 22:51:08 +0300 Subject: [PATCH 13/39] Settings and menu improvements --- .babelrc | 2 +- config/webpack.config.development.js | 4 +- package-lock.json | 266 +++++++++++++++++---------- package.json | 14 +- src/main/config/menu/edit.js | 61 +++--- src/main/config/menu/view.js | 44 +---- src/main/config/menu/window.js | 37 ++-- src/main/windows.js | 4 +- src/renderer/containers/workspace.js | 2 +- src/renderer/index.js | 4 +- src/shared/actions/settings.js | 8 + src/shared/actions/ui.js | 4 - src/shared/buttercup/store.js | 4 - src/shared/reducers/index.js | 3 +- src/shared/reducers/settings.js | 28 ++- src/shared/reducers/ui.js | 25 --- 16 files changed, 267 insertions(+), 243 deletions(-) create mode 100644 src/shared/actions/settings.js diff --git a/.babelrc b/.babelrc index 43484cf8..097880cd 100644 --- a/.babelrc +++ b/.babelrc @@ -35,7 +35,7 @@ }, "development": { "plugins": [ - "react-hot-loader/babel" + // "react-hot-loader/babel" ] } } diff --git a/config/webpack.config.development.js b/config/webpack.config.development.js index 43b28de8..ecc58d19 100644 --- a/config/webpack.config.development.js +++ b/config/webpack.config.development.js @@ -9,8 +9,8 @@ module.exports = merge(baseConfig, { entry: { main: [ 'react-hot-loader/patch', - 'webpack-dev-server/client?http://localhost:3000/', - 'webpack/hot/only-dev-server', + // 'webpack-dev-server/client?http://localhost:3000/', + // 'webpack/hot/only-dev-server', resolve(__dirname, '../src/renderer/index') ], fileManager: resolve(__dirname, '../src/renderer/file-manager') diff --git a/package-lock.json b/package-lock.json index 2345e09f..fd5ae94b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3138,23 +3138,23 @@ "dev": true }, "electron": { - "version": "1.6.10", - "resolved": "https://registry.npmjs.org/electron/-/electron-1.6.10.tgz", - "integrity": "sha1-Twuc1ZbjVwC1cSj5iMwdLOZ+VnE=", + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/electron/-/electron-1.6.11.tgz", + "integrity": "sha1-vnnA69zv7bW/KBF0CYAPpTus7/o=", "dev": true, "dependencies": { "@types/node": { - "version": "7.0.29", - "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.29.tgz", - "integrity": "sha512-+8JrLZny/uR+d/jLK9eaV63buRM7X/gNzQk57q76NS4KNKLSKOmxJYFIlwuP2zDvA7wqZj05POPhSd9Z1hYQpQ==", + "version": "7.0.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.33.tgz", + "integrity": "sha512-8fVvl6Yyk3jZvSYxRMS9/AmZJ5RXCOP9N4xSlykyBViVESu751pxHYTN14Embn1Fem78YwEHdC7p7KGQQpwunw==", "dev": true } } }, "electron-builder": { - "version": "19.4.2", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-19.4.2.tgz", - "integrity": "sha512-2QOYo9U/vCZ7ueNjdGLUeqnc8el1+S0Q8IWvYxVIWXIASk0V+9SIuV8GrtU0rxdOhKk/c/KKe2iuL0A6XvNMMg==", + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-19.11.1.tgz", + "integrity": "sha512-OTlGhjJml0R8aK1CeiWpWpfePYh0uDFKsycmRGdaix8rY/1vKLPy9sl5KTXOHU6tGP6GdKqNJMEgB/EuqaYnWw==", "dev": true, "dependencies": { "ajv": { @@ -3169,6 +3169,12 @@ "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", "dev": true }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, "boxen": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.1.0.tgz", @@ -3193,48 +3199,18 @@ "integrity": "sha1-qEk/C3te7sglJbXHWH+n3nyoWcE=", "dev": true }, - "electron-builder-http": { - "version": "19.4.2", - "resolved": "https://registry.npmjs.org/electron-builder-http/-/electron-builder-http-19.4.2.tgz", - "integrity": "sha512-9t0W0ynQT3Aul+XAzwg16bfBzJ8GS6aQ9oPVMR4IiBu0Z7DTpWeorrtlrhr6XJzs0c0mkK8/YL18Pjn9696iNg==", - "dev": true - }, - "electron-builder-util": { - "version": "19.4.2", - "resolved": "https://registry.npmjs.org/electron-builder-util/-/electron-builder-util-19.4.2.tgz", - "integrity": "sha512-khgF/4VdsdW4sY2nZLjGgeAqVgueW3+s5OFSFY7EuU0LqZ81ZZz7hR0MvcLf1xXxbPswkHFJWASMVseWXGwmDg==", - "dev": true - }, "electron-download-tf": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/electron-download-tf/-/electron-download-tf-4.3.1.tgz", "integrity": "sha1-eTDySgjjZp6q04pffyiKEEYcr3I=", "dev": true }, - "electron-osx-sign": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.4.6.tgz", - "integrity": "sha1-I5ji18q1wdjD7quxzUkDdlKOw5o=", - "dev": true - }, - "electron-publish": { - "version": "19.4.2", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-19.4.2.tgz", - "integrity": "sha512-WSJHY+F4IHq4HtWftz0uPhpFX7DIRzgjtrtd1VwMctckVg3H3SzxEgfGUAE8xolKHsErGXqBubHDHd+66szSZg==", - "dev": true - }, "esprima": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", "dev": true }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true - }, "fs-extra": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", @@ -3247,6 +3223,12 @@ "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", "dev": true }, + "hosted-git-info": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "dev": true + }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", @@ -3271,16 +3253,10 @@ "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", "dev": true }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true - }, - "mime": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz", - "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=", + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true }, "package-json": { @@ -3295,34 +3271,16 @@ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true - }, "string-width": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.0.0.tgz", - "integrity": "sha1-Y1xUNsxypuDDh87KJ41OLuxSaH4=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.0.tgz", + "integrity": "sha1-AwZkVh/BRslCPsfZeP4kV0N/5tA=", "dev": true }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true }, "sumchecker": { @@ -3360,15 +3318,21 @@ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", "dev": true - }, - "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", - "dev": true } } }, + "electron-builder-http": { + "version": "19.7.2", + "resolved": "https://registry.npmjs.org/electron-builder-http/-/electron-builder-http-19.7.2.tgz", + "integrity": "sha512-zapTJKvK4eACcTgBVlyeFaJ63cXujpWjOLKKRHL8uYOHLp5CYHYgXlM6kN8L7zjz5uVjA51hy9NsSyIQZ8S3Mw==", + "dev": true + }, + "electron-builder-util": { + "version": "19.11.0", + "resolved": "https://registry.npmjs.org/electron-builder-util/-/electron-builder-util-19.11.0.tgz", + "integrity": "sha512-hs1FMwCKQeE2FltfQgOahXj/z2RsGpcGQ2zQZ1Y5wkhHbk+ylIA73u4Y80MkG7C7v7RhB20jrm5Z3ENSPUdz8g==", + "dev": true + }, "electron-chromedriver": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/electron-chromedriver/-/electron-chromedriver-1.6.0.tgz", @@ -3382,9 +3346,9 @@ "dev": true }, "electron-devtools-installer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/electron-devtools-installer/-/electron-devtools-installer-2.0.1.tgz", - "integrity": "sha1-1S3LOkMKlbdx3AHY3rE/y9qo0Tw=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/electron-devtools-installer/-/electron-devtools-installer-2.2.0.tgz", + "integrity": "sha1-mBPmgRr81p3co8rlQW23Lqfs+2o=", "dev": true }, "electron-download": { @@ -3406,15 +3370,15 @@ "dev": true }, "electron-json-storage": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/electron-json-storage/-/electron-json-storage-3.0.5.tgz", - "integrity": "sha1-UXAtLCXcXHUsjUylBBLugKV2g6Q=", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/electron-json-storage/-/electron-json-storage-3.0.6.tgz", + "integrity": "sha1-6huaCLaPiU0XrgtNuKSS/CwrGSw=", "dev": true, "dependencies": { "async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.4.1.tgz", - "integrity": "sha1-YqVrJ5yYoR0JhwlqAcw+6463u9c=", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", + "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", "dev": true }, "minimist": { @@ -3443,6 +3407,26 @@ "integrity": "sha1-zPo+CbOfMhRoyQpkJwE4CjQHnxo=", "dev": true }, + "electron-osx-sign": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.4.6.tgz", + "integrity": "sha1-I5ji18q1wdjD7quxzUkDdlKOw5o=", + "dev": true + }, + "electron-publish": { + "version": "19.11.0", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-19.11.0.tgz", + "integrity": "sha512-jR3Q3MyL9bs+FRMjdgVoskUlP4fO94K+aZFclQmlhcjLvrTF5JdzRY8c4J9Nf0WPGUa9X8LZjZI9+z4PkPg9gA==", + "dev": true, + "dependencies": { + "mime": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz", + "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=", + "dev": true + } + } + }, "electron-rpc": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/electron-rpc/-/electron-rpc-2.0.1.tgz", @@ -3456,9 +3440,9 @@ "dev": true }, "electron-unhandled": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/electron-unhandled/-/electron-unhandled-0.1.1.tgz", - "integrity": "sha1-/ybseBzMsTCyldQ79AbB68Bf4dU=", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/electron-unhandled/-/electron-unhandled-0.2.0.tgz", + "integrity": "sha1-5mvaW5PIQ5Knt9e34mfZDC0MGuM=", "dev": true }, "electron-updater": { @@ -3543,6 +3527,12 @@ "integrity": "sha1-oRXDJQS2MC6Fp2Jp16V8zdli41k=", "dev": true }, + "ensure-error": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ensure-error/-/ensure-error-0.1.0.tgz", + "integrity": "sha1-zz/TNlv3/YMkRzHL1PMABtmd8lk=", + "dev": true + }, "env-paths": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz", @@ -8846,12 +8836,6 @@ "integrity": "sha512-j8XsFGCLw79vWXkZtMSmmLaOk9z5SQ9bV/tkbZVCqvgwzrjAGq66igobLofHtF63NvMTp2WjytpsNTGKa+XRIQ==", "dev": true }, - "node-forge": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.1.tgz", - "integrity": "sha1-naYR6giYL0uUIGs760zJZl8gwwA=", - "dev": true - }, "node-gyp": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", @@ -11155,9 +11139,9 @@ "dev": true, "dependencies": { "inline-style-prefixer": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-3.0.5.tgz", - "integrity": "sha1-AJKIGzourfG9YZ3ENyZVcxb3YEI=", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-3.0.6.tgz", + "integrity": "sha1-sn/jCbQWijHq84yOjGCrnnwRcx8=", "dev": true } } @@ -11570,6 +11554,12 @@ "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", "dev": true }, + "rwlock": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/rwlock/-/rwlock-5.0.0.tgz", + "integrity": "sha1-iI1qd6M1HMGiCSBO8u4XIgk4Ns8=", + "dev": true + }, "rx": { "version": "2.3.24", "resolved": "https://registry.npmjs.org/rx/-/rx-2.3.24.tgz", @@ -13681,6 +13671,80 @@ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true }, + "yargs": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "dev": true, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true + }, + "string-width": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.0.tgz", + "integrity": "sha1-AwZkVh/BRslCPsfZeP4kV0N/5tA=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, "yargs-parser": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", diff --git a/package.json b/package.json index 6651146b..d0de1b9f 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "prestart:renderer": "npm run clean", "start:renderer": "webpack-dev-server --config ./config/webpack.config.development --progress", "prestart:main": "npm run clean", - "start:main": "cross-env HOT=1 BABEL_ENV=node NODE_ENV=development electron -r babel-register ./src/main/app", + "start:main": "cross-env HOT=1 BABEL_ENV=node NODE_ENV=development electron --disable-gpu -r babel-register ./src/main/app", "prerelease": "npm run clean", "release": "npm run build && npm run package", "package:linux": "build --linux --x64", @@ -135,15 +135,15 @@ "del": "^2.2.1", "devtron": "^1.4.0", "dropbox-fs": "^0.0.5", - "electron": "^1.6.10", - "electron-builder": "^19.4.2", + "electron": "^1.6.11", + "electron-builder": "^19.11.1", "electron-debug": "^1.1.0", - "electron-devtools-installer": "2.0.1", + "electron-devtools-installer": "^2.2.0", "electron-installer-dmg": "^0.1.2", - "electron-json-storage": "^3.0.2", + "electron-json-storage": "^3.0.6", "electron-log": "^2.2.6", "electron-rpc": "^2.0.1", - "electron-unhandled": "^0.1.1", + "electron-unhandled": "^0.2.0", "electron-updater": "^2.3.0", "eslint": "^3.19.0", "eslint-config-standard": "^10.2.1", @@ -191,7 +191,7 @@ "react-icons": "^2.2.1", "react-redux": "^5.0.5", "react-router-dom": "^4.0.0", - "react-split-pane": "^0.1.61", + "react-split-pane": "^0.1.63", "redux": "^3.5.2", "redux-actions": "^2.0.1", "redux-electron-store": "^0.4.1", diff --git a/src/main/config/menu/edit.js b/src/main/config/menu/edit.js index 969dc681..78efca1c 100644 --- a/src/main/config/menu/edit.js +++ b/src/main/config/menu/edit.js @@ -1,35 +1,28 @@ -export default [ - { - label: 'Undo', - accelerator: 'CmdOrCtrl+Z', - role: 'undo' - }, - { - label: 'Redo', - accelerator: 'Shift+CmdOrCtrl+Z', - role: 'redo' - }, - { - type: 'separator' - }, - { - label: 'Cut', - accelerator: 'CmdOrCtrl+X', - role: 'cut' - }, - { - label: 'Copy', - accelerator: 'CmdOrCtrl+C', - role: 'copy' - }, - { - label: 'Paste', - accelerator: 'CmdOrCtrl+V', - role: 'paste' - }, - { - label: 'Select All', - accelerator: 'CmdOrCtrl+A', - role: 'selectall' - } +import { isOSX } from '../../lib/platform'; + +const menu = [ + { role: 'undo' }, + { role: 'redo' }, + { type: 'separator' }, + { role: 'cut' }, + { role: 'copy' }, + { role: 'paste' }, + { role: 'pasteandmatchstyle' }, + { role: 'delete' }, + { role: 'selectall' } ]; + +if (isOSX()) { + menu.push( + { type: 'separator' }, + { + label: 'Speech', + submenu: [ + { role: 'startspeaking' }, + { role: 'stopspeaking' } + ] + } + ); +} + +export default menu; diff --git a/src/main/config/menu/view.js b/src/main/config/menu/view.js index a88b961b..146c9a5a 100644 --- a/src/main/config/menu/view.js +++ b/src/main/config/menu/view.js @@ -1,41 +1,7 @@ -import { isOSX } from '../../lib/platform'; - export default [ - { - label: 'Reload', - accelerator: 'CmdOrCtrl+R', - click(item, focusedWindow) { - if (focusedWindow) { - focusedWindow.reload(); - } - } - }, - { - label: 'Toggle Full Screen', - accelerator: (() => { - if (isOSX()) { - return 'Ctrl+Command+F'; - } - return 'F11'; - })(), - click: (item, focusedWindow) => { - if (focusedWindow) { - focusedWindow.setFullScreen(!focusedWindow.isFullScreen()); - } - } - }, - { - label: 'Toggle Developer Tools', - accelerator: (function() { - if (isOSX()) { - return 'Alt+Command+I'; - } - return 'Ctrl+Shift+I'; - })(), - click: (item, focusedWindow) => { - if (focusedWindow) { - focusedWindow.toggleDevTools(); - } - } - } + { role: 'reload' }, + { role: 'forcereload' }, + { role: 'toggledevtools' }, + { type: 'separator' }, + { role: 'togglefullscreen' } ]; diff --git a/src/main/config/menu/window.js b/src/main/config/menu/window.js index 51de7767..71f3197c 100644 --- a/src/main/config/menu/window.js +++ b/src/main/config/menu/window.js @@ -1,19 +1,20 @@ -export default [ - { - label: 'Minimize', - accelerator: 'CmdOrCtrl+M', - role: 'minimize' - }, - { - label: 'Close', - accelerator: 'CmdOrCtrl+W', - role: 'close' - }, - { - type: 'separator' - }, - { - label: 'Bring All to Front', - role: 'front' - } +import { isOSX } from '../../lib/platform'; + +const menu = [ + { role: 'minimize' }, + { role: 'close' }, + { type: 'separator' }, + { role: 'front' } ]; + +if (isOSX()) { + menu.push( + { role: 'close' }, + { role: 'minimize' }, + { role: 'zoom' }, + { type: 'separator' }, + { role: 'front' } + ); +} + +export default menu; diff --git a/src/main/windows.js b/src/main/windows.js index 3c67f98e..bcaa805f 100644 --- a/src/main/windows.js +++ b/src/main/windows.js @@ -1,5 +1,5 @@ import { app, BrowserWindow } from 'electron'; -import { throttle } from 'lodash'; +import debounce from 'lodash/debounce'; import { getWindowManager } from './lib/window-manager'; import { getPathToFile } from './lib/utils'; import { createRPC } from './lib/rpc'; @@ -55,7 +55,7 @@ export function setupWindows() { } }); - win.on('resize', throttle(() => { + win.on('resize', debounce(() => { rpc.emit('size-change', win.getSize()); }, 2000)); diff --git a/src/renderer/containers/workspace.js b/src/renderer/containers/workspace.js index 42ca065c..727ca151 100644 --- a/src/renderer/containers/workspace.js +++ b/src/renderer/containers/workspace.js @@ -1,7 +1,7 @@ import { connect } from 'react-redux'; import Workspace from '../components/workspace'; import { installUpdate } from '../../shared/actions/update'; -import { setColumnSize } from '../../shared/actions/ui'; +import { setColumnSize } from '../../shared/actions/settings'; import { getCurrentArchive, getColumnSizes } from '../../shared/selectors'; export default connect( diff --git a/src/renderer/index.js b/src/renderer/index.js index 3198498e..7f2922d4 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -7,7 +7,7 @@ import { getSharedArchiveManager } from '../shared/buttercup/archive'; import { linkArchiveManagerToStore } from '../shared/buttercup/store'; import { addArchiveFromSource } from '../shared/actions/archives'; import * as groupActions from '../shared/actions/groups'; -import * as uiActions from '../shared/actions/ui'; +import { setWindowSize } from '../shared/actions/settings'; import rpc from './system/rpc'; import { importHistoryFromRequest, showHistoryPasswordPrompt } from '../shared/buttercup/import'; import { setupShortcuts } from './system/shortcuts'; @@ -46,7 +46,7 @@ window.test = () => { }; rpc.on('size-change', size => { - store.dispatch(uiActions.setWindowSize(size)); + store.dispatch(setWindowSize(size)); }); rpc.on('import-history', request => { diff --git a/src/shared/actions/settings.js b/src/shared/actions/settings.js new file mode 100644 index 00000000..6e16e0af --- /dev/null +++ b/src/shared/actions/settings.js @@ -0,0 +1,8 @@ +import { createAction } from 'redux-actions'; +import { + WINDOW_SIZE_SET, + COLUMN_SIZE_SET, +} from './types'; + +export const setColumnSize = createAction(COLUMN_SIZE_SET); +export const setWindowSize = createAction(WINDOW_SIZE_SET); diff --git a/src/shared/actions/ui.js b/src/shared/actions/ui.js index cbc53ef5..9df8ce58 100644 --- a/src/shared/actions/ui.js +++ b/src/shared/actions/ui.js @@ -3,11 +3,7 @@ import { createLocalAction } from '../utils/redux'; import { TREE_ADD_EXPANDED_KEY, TREE_SET_EXPANDED_KEYS, - COLUMN_SIZE_SET, - WINDOW_SIZE_SET, } from './types'; export const setExpandedKeys = createLocalAction(TREE_SET_EXPANDED_KEYS); export const addExpandedKeys = createLocalAction(TREE_ADD_EXPANDED_KEY); -export const setColumnSize = createLocalAction(COLUMN_SIZE_SET); -export const setWindowSize = createLocalAction(WINDOW_SIZE_SET); diff --git a/src/shared/buttercup/store.js b/src/shared/buttercup/store.js index da57578d..97176cba 100644 --- a/src/shared/buttercup/store.js +++ b/src/shared/buttercup/store.js @@ -10,19 +10,15 @@ export function linkArchiveManagerToStore(store) { // attach listeners archiveManager.on('sourceAdded', function __handleNewSource(sourceInfo) { - console.log('Source added', sourceInfo); store.dispatch(addArchiveToStore(sourceInfo)); }); archiveManager.on('sourceRehydrated', function __handleRehydratedSource(sourceInfo) { - console.log('Source rehydrated', sourceInfo); store.dispatch(addArchiveToStore(sourceInfo)); }); archiveManager.on('sourceUnlocked', function __handleUnlockedSource(sourceInfo) { - console.log('Source unlocked', sourceInfo); store.dispatch(unlockArchiveInStore(sourceInfo.id)); }); archiveManager.on('sourceRemoved', function __handleRemovedSource(sourceInfo) { - console.log('Source removed', sourceInfo); store.dispatch(removeArchiveFromStore(sourceInfo.id)); }); diff --git a/src/shared/reducers/index.js b/src/shared/reducers/index.js index c9563762..c74e62d6 100644 --- a/src/shared/reducers/index.js +++ b/src/shared/reducers/index.js @@ -2,7 +2,7 @@ import { combineReducers } from 'redux'; import { reducer as form } from 'redux-form'; import groups from './groups'; import entries from './entries'; -import settingsByArchiveId from './settings'; +import { settings, settingsByArchiveId } from './settings'; import archives, { currentArchive } from './archives'; import update from './update'; @@ -21,6 +21,7 @@ export default function getRootReducer(scope = 'main') { groups, entries, form, + settings, }; } diff --git a/src/shared/reducers/settings.js b/src/shared/reducers/settings.js index 745b70b9..8e073566 100644 --- a/src/shared/reducers/settings.js +++ b/src/shared/reducers/settings.js @@ -1,5 +1,7 @@ +import { combineReducers } from 'redux'; import uiReducer from './ui'; -import { ARCHIVES_REMOVE } from '../actions/types'; +import { createIdentityReducer } from '../utils/redux'; +import { ARCHIVES_REMOVE, COLUMN_SIZE_SET, WINDOW_SIZE_SET } from '../actions/types'; function itemReducer(state = {}, action) { return { @@ -7,7 +9,7 @@ function itemReducer(state = {}, action) { }; } -export default function archivesReducer(state = {}, action) { +export function settingsByArchiveId(state = {}, action) { const archiveId = action.meta && action.meta.archiveId; if (archiveId) { return { @@ -22,3 +24,25 @@ export default function archivesReducer(state = {}, action) { } return state; } + +function columnSizes(state = { tree: 230, entries: 230 }, action) { + switch (action.type) { + case COLUMN_SIZE_SET: + return { + ...state, + [action.payload.name]: action.payload.size + }; + default: + return state; + } +} + +const windowSize = createIdentityReducer( + WINDOW_SIZE_SET, + [950, 700] +); + +export const settings = combineReducers({ + columnSizes, + windowSize +}); diff --git a/src/shared/reducers/ui.js b/src/shared/reducers/ui.js index 8264cca8..bc2d1fe4 100644 --- a/src/shared/reducers/ui.js +++ b/src/shared/reducers/ui.js @@ -1,10 +1,7 @@ import { combineReducers } from 'redux'; -import { createIdentityReducer } from '../utils/redux'; import { TREE_ADD_EXPANDED_KEY, TREE_SET_EXPANDED_KEYS, - COLUMN_SIZE_SET, - WINDOW_SIZE_SET, } from '../actions/types'; function treeExpandedKeys(state = [], action) { @@ -21,28 +18,6 @@ function treeExpandedKeys(state = [], action) { } } -function columnSizes(state = {tree: 230, entries: 230}, action) { - if (!action.payload || !action.payload.name || !action.payload.size) { - return state; - } - switch (action.type) { - case COLUMN_SIZE_SET: - return { - ...state, - [action.payload.name]: action.payload.size - }; - default: - return state; - } -} - -export const windowSize = createIdentityReducer( - WINDOW_SIZE_SET, - [950, 700] -); - export default combineReducers({ treeExpandedKeys, - columnSizes, - windowSize }); From 0c334d8350f76ad4fb74fc653226b7905b71fb48 Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Sun, 2 Jul 2017 16:02:25 +0300 Subject: [PATCH 14/39] Replace RPC with IPC --- src/main/actions.js | 42 +++++++--------- src/main/config/menu/file.js | 15 ------ src/main/lib/files.js | 95 ++++++++++++++++-------------------- src/main/lib/rpc.js | 54 -------------------- src/main/utils/window.js | 17 +++++++ src/main/windows.js | 26 ++-------- src/renderer/index.js | 20 +++----- src/renderer/system/rpc.js | 60 ----------------------- src/renderer/system/utils.js | 4 +- src/shared/actions/files.js | 4 +- 10 files changed, 94 insertions(+), 243 deletions(-) delete mode 100644 src/main/lib/rpc.js create mode 100644 src/main/utils/window.js delete mode 100644 src/renderer/system/rpc.js diff --git a/src/main/actions.js b/src/main/actions.js index 8df943ab..a4d739d2 100644 --- a/src/main/actions.js +++ b/src/main/actions.js @@ -1,8 +1,8 @@ import { ipcMain as ipc, BrowserWindow } from 'electron'; -import fs from 'fs-extra'; import { pushUpdate, updateInstalled } from '../shared/actions/update'; import { getWindowManager } from './lib/window-manager'; import { startAutoUpdate, installUpdates } from './lib/updater'; +import { openFile, newFile } from './lib/files'; const windowManager = getWindowManager(); @@ -11,35 +11,29 @@ export function setupActions(store) { store.dispatch(updateInstalled()); if (process.env.NODE_ENV !== 'development') { - try { - startAutoUpdate((releaseNotes, releaseName) => { - store.dispatch(pushUpdate({ - releaseNotes, - releaseName - })); - }); + startAutoUpdate((releaseNotes, releaseName) => { + store.dispatch(pushUpdate({ + releaseNotes, + releaseName + })); + }); - ipc.on('quit-and-install', () => { - installUpdates(); - }); - } catch (err) { - console.warn('Auto update failed.'); - } + ipc.on('quit-and-install', () => { + installUpdates(); + }); } - ipc.on('read-archive', (event, arg) => { - fs.ensureFileSync(arg); - event.returnValue = fs.readFileSync(arg).toString('utf-8'); - }); - - ipc.on('write-archive', (event, arg) => { - fs.outputFileSync(arg.filename, arg.content); - event.returnValue = true; - }); - ipc.on('show-file-manager', () => { windowManager.buildWindowOfType('file-manager', null, { parent: BrowserWindow.getFocusedWindow() }); }); + + ipc.on('open-file-dialog', () => { + openFile(); + }); + + ipc.on('new-file-dialog', () => { + newFile(); + }); } diff --git a/src/main/config/menu/file.js b/src/main/config/menu/file.js index d7fc47ec..7673b069 100644 --- a/src/main/config/menu/file.js +++ b/src/main/config/menu/file.js @@ -1,8 +1,5 @@ -import { getWindowManager } from '../../lib/window-manager'; import { openFile, openFileForImporting, newFile } from '../../lib/files'; -const windowManager = getWindowManager(); - export default [ { label: 'New Archive', @@ -40,18 +37,6 @@ export default [ type: 'separator' }, { - label: 'Open New Window', - accelerator: 'CmdOrCtrl+Shift+N', - click: () => { - windowManager.buildWindowOfType('main'); - } - }, - { - type: 'separator' - }, - { - label: 'Close Window', - accelerator: 'CmdOrCtrl+W', role: 'close' } ]; diff --git a/src/main/lib/files.js b/src/main/lib/files.js index d2363168..1bd0048f 100644 --- a/src/main/lib/files.js +++ b/src/main/lib/files.js @@ -1,9 +1,10 @@ import path from 'path'; -import { BrowserWindow, dialog } from 'electron'; +import { BrowserWindow, dialog, ipcMain as ipc } from 'electron'; import { ArchiveTypes } from '../../shared/buttercup/types'; import { isWindows } from './platform'; import { getWindowManager } from './window-manager'; import { importArchive } from './buttercup'; +import { getMainWindow } from '../utils/window'; const windowManager = getWindowManager(); const dialogOptions = { @@ -27,14 +28,14 @@ function normalizePath(filePath) { * @returns {void} */ function showOpenDialog(focusedWindow) { - const filename = dialog.showOpenDialog(focusedWindow, { + dialog.showOpenDialog(focusedWindow, { ...dialogOptions, title: 'Load a Buttercup Archive' + }, filename => { + if (filename && filename.length > 0) { + loadFile(filename[0], focusedWindow); + } }); - - if (filename && filename.length > 0) { - loadFile(filename[0], focusedWindow); - } } /** @@ -45,14 +46,14 @@ function showOpenDialog(focusedWindow) { * @returns {void} */ function showSaveDialog(focusedWindow) { - const filename = dialog.showSaveDialog(focusedWindow, { + dialog.showSaveDialog(focusedWindow, { ...dialogOptions, title: 'Create a New Buttercup Archive' + }, filename => { + if (typeof filename === 'string' && filename.length > 0) { + loadFile(filename, focusedWindow, true); + } }); - - if (typeof filename === 'string' && filename.length > 0) { - loadFile(filename, focusedWindow, true); - } } /** @@ -71,17 +72,11 @@ export function loadFile(filePath, win, isNew = false) { return; } if (!win) { - win = BrowserWindow.getFocusedWindow(); + win = getMainWindow(); } - // If there's a window and it's in intro state - if (win && win.isIntro()) { - win.rpc.emit('load-archive', payload); - return; + if (win) { + win.webContents.send('load-archive', payload); } - // Otherwise just create a new window - windowManager.buildWindowOfType('main', (win, rpc) => { - rpc.emit('load-archive', payload); - }); } /** @@ -92,16 +87,28 @@ export function loadFile(filePath, win, isNew = false) { * @returns {void} */ export function openFile(focusedWindow) { + focusedWindow = getMainWindow(focusedWindow); if (!focusedWindow) { - focusedWindow = BrowserWindow.getFocusedWindow(); + windowManager.buildWindowOfType('main', win => showOpenDialog(win)); + return; } + showOpenDialog(focusedWindow); +} + +/** + * Create a new file and open it in Buttercup + * then ask the user for a password + * + * @param {BrowserWindow} focusedWindow + * @returns {void} + */ +export function newFile(focusedWindow) { + focusedWindow = getMainWindow(focusedWindow); if (!focusedWindow) { - windowManager.buildWindowOfType('main', win => { - showOpenDialog(win); - }); + windowManager.buildWindowOfType('main', win => showSaveDialog(win)); return; } - showOpenDialog(focusedWindow); + showSaveDialog(focusedWindow); } /** @@ -139,7 +146,7 @@ const showImportDialog = function(focusedWindow, type) { }; const handleSuccess = history => { - focusedWindow.rpc.emit('import-history', { history }); + focusedWindow.webContents.send('import-history', { history }); }; const [ filename ] = dialog.showOpenDialog(focusedWindow, { @@ -155,8 +162,8 @@ const showImportDialog = function(focusedWindow, type) { } if (typeInfo.password) { - focusedWindow.rpc.emit('import-history-prompt'); - focusedWindow.rpc.once('import-history-prompt-resp', password => { + focusedWindow.webContents.send('import-history-prompt'); + ipc.once('import-history-prompt-resp', password => { importArchive(type, filename, password) .then(handleSuccess) .catch(handleError); @@ -173,13 +180,13 @@ const showImportDialog = function(focusedWindow, type) { * @param {string} type */ export function openFileForImporting(focusedWindow, type) { - if (focusedWindow && focusedWindow.isIntro()) { - dialog.showMessageBox(focusedWindow, { - title: 'Importing is not available', - message: 'To import an archive file, you must unlock a Buttercup archive first.' - }); - return; - } + // if (focusedWindow && focusedWindow.isIntro()) { + // dialog.showMessageBox(focusedWindow, { + // title: 'Importing is not available', + // message: 'To import an archive file, you must unlock a Buttercup archive first.' + // }); + // return; + // } if (!focusedWindow) { focusedWindow = BrowserWindow.getFocusedWindow(); @@ -193,21 +200,3 @@ export function openFileForImporting(focusedWindow, type) { } showImportDialog(focusedWindow, type); } - -/** - * Create a new file and open it in Buttercup - * then ask the user for a password - * - * @param {BrowserWindow} focusedWindow - * @returns {void} - */ -export function newFile(focusedWindow) { - if (!focusedWindow) { - focusedWindow = BrowserWindow.getFocusedWindow(); - } - if (!focusedWindow) { - windowManager.buildWindowOfType('main', win => showSaveDialog(win)); - return; - } - showSaveDialog(focusedWindow); -} diff --git a/src/main/lib/rpc.js b/src/main/lib/rpc.js deleted file mode 100644 index 7cdc27f9..00000000 --- a/src/main/lib/rpc.js +++ /dev/null @@ -1,54 +0,0 @@ -import { EventEmitter } from 'events'; -import { ipcMain } from 'electron'; -import uuid from 'uuid'; - -class Server extends EventEmitter { - constructor(win) { - super(); - this.win = win; - this.ipcListener = this.ipcListener.bind(this); - - if (this.destroyed) { - return; - } - - const uid = uuid.v4(); - this.id = uid; - - ipcMain.on(uid, this.ipcListener); - - // we intentionally subscribe to `on` instead of `once` - // to support reloading the window and re-initializing - // the channel - this.wc.on('did-finish-load', () => { - this.wc.send('init', uid); - }); - } - - get wc() { - return this.win.webContents; - } - - ipcListener(event, {ev, data}) { - super.emit(ev, data); - } - - emit(ch, data) { - this.wc.send(this.id, {ch, data}); - } - - destroy() { - this.removeAllListeners(); - this.wc.removeAllListeners(); - if (this.id) { - ipcMain.removeListener(this.id, this.ipcListener); - } else { - // mark for `genUid` in constructor - this.destroyed = true; - } - } -} - -export function createRPC(win) { - return new Server(win); -} diff --git a/src/main/utils/window.js b/src/main/utils/window.js new file mode 100644 index 00000000..06bbbce5 --- /dev/null +++ b/src/main/utils/window.js @@ -0,0 +1,17 @@ +import { BrowserWindow } from 'electron'; +import { getWindowManager } from '../lib/window-manager'; + +export function getMainWindow(focusedWindow = BrowserWindow.getFocusedWindow()) { + if (focusedWindow) { + return focusedWindow; + } + const wins = getWindowManager().getWindowsOfType('main'); + if (wins.length > 0) { + const win = wins[0]; + if (win.isMinimized()) { + win.restore(); + } + return win; + } + return null; +} diff --git a/src/main/windows.js b/src/main/windows.js index bcaa805f..73bfac44 100644 --- a/src/main/windows.js +++ b/src/main/windows.js @@ -1,9 +1,8 @@ -import { app, BrowserWindow } from 'electron'; +import { app, BrowserWindow, ipcMain as ipc } from 'electron'; import debounce from 'lodash/debounce'; import { getWindowManager } from './lib/window-manager'; import { getPathToFile } from './lib/utils'; -import { createRPC } from './lib/rpc'; -import { loadFile, openFile, newFile } from './lib/files'; +import { loadFile } from './lib/files'; const windowManager = getWindowManager(); @@ -24,39 +23,24 @@ export function setupWindows() { win.loadURL(getPathToFile('views/index.html')); - const rpc = createRPC(win); - win.rpc = rpc; - - win.isIntro = () => { - return win.getTitle().toLowerCase().match(/welcome/i) !== null; - }; - // When user drops a file on the window win.webContents.on('will-navigate', (e, url) => { e.preventDefault(); loadFile(url, win); }); - rpc.on('open-file-dialog', () => { - openFile(); - }); - - rpc.on('new-file-dialog', () => { - newFile(); - }); - win.once('ready-to-show', () => { win.show(); }); - rpc.once('init', () => { + ipc.once('init', () => { if (callback) { - callback(win, rpc); + callback(win); } }); win.on('resize', debounce(() => { - rpc.emit('size-change', win.getSize()); + win.webContents.send('size-change', win.getSize()); }, 2000)); win.once('closed', () => { diff --git a/src/renderer/index.js b/src/renderer/index.js index 7f2922d4..e03a2960 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -1,5 +1,6 @@ import Buttercup from 'buttercup-web'; import React from 'react'; +import { ipcRenderer as ipc } from 'electron'; import { render } from 'react-dom'; import { AppContainer } from 'react-hot-loader'; import configureStore from '../shared/store/configure-store'; @@ -8,7 +9,6 @@ import { linkArchiveManagerToStore } from '../shared/buttercup/store'; import { addArchiveFromSource } from '../shared/actions/archives'; import * as groupActions from '../shared/actions/groups'; import { setWindowSize } from '../shared/actions/settings'; -import rpc from './system/rpc'; import { importHistoryFromRequest, showHistoryPasswordPrompt } from '../shared/buttercup/import'; import { setupShortcuts } from './system/shortcuts'; import Root from './containers/root'; @@ -19,8 +19,6 @@ import Root from './containers/root'; // Make crypto faster! Buttercup.Web.HashingTools.patchCorePBKDF(); - -window.__defineGetter__('rpc', () => rpc); const store = configureStore({}, 'renderer'); // temp @@ -29,11 +27,9 @@ global.archiveManager = getSharedArchiveManager(); linkArchiveManagerToStore(store); setupShortcuts(store); -rpc.on('ready', () => { - rpc.emit('init'); -}); +ipc.send('init'); -rpc.on('load-archive', payload => { +ipc.on('load-archive', (e, payload) => { store.dispatch(addArchiveFromSource(payload)); }); @@ -45,21 +41,21 @@ window.test = () => { })); }; -rpc.on('size-change', size => { +ipc.on('size-change', size => { store.dispatch(setWindowSize(size)); }); -rpc.on('import-history', request => { +ipc.on('import-history', (e, request) => { importHistoryFromRequest(request); store.dispatch(groupActions.reloadGroups()); }); -rpc.on('import-history-prompt', () => { +ipc.on('import-history-prompt', () => { showHistoryPasswordPrompt() .then(result => { - rpc.emit('import-history-prompt-resp', result); + ipc.send('import-history-prompt-resp', result); }).catch(() => { - rpc.emit('import-history-prompt-resp', null); + ipc.send('import-history-prompt-resp', null); }); }); diff --git a/src/renderer/system/rpc.js b/src/renderer/system/rpc.js deleted file mode 100644 index 3cfe5fa5..00000000 --- a/src/renderer/system/rpc.js +++ /dev/null @@ -1,60 +0,0 @@ -class Client { - constructor() { - const electron = window.require('electron'); - const EventEmitter = window.require('events'); - this.emitter = new EventEmitter(); - this.ipc = electron.ipcRenderer; - this.ipcListener = this.ipcListener.bind(this); - if (window.__rpcId) { - setTimeout(() => { - this.id = window.__rpcId; - this.ipc.on(this.id, this.ipcListener); - this.emitter.emit('ready'); - }, 0); - } else { - this.ipc.on('init', (ev, uid) => { - // we cache so that if the object - // gets re-instantiated we don't - // wait for a `init` event - window.__rpcId = uid; - this.id = uid; - this.ipc.on(uid, this.ipcListener); - this.emitter.emit('ready'); - }); - } - } - - ipcListener(event, {ch, data}) { - this.emitter.emit(ch, data); - } - - on(ev, fn) { - this.emitter.on(ev, fn); - } - - once(ev, fn) { - this.emitter.once(ev, fn); - } - - emit(ev, data) { - if (!this.id) { - throw new Error('Not ready'); - } - this.ipc.send(this.id, {ev, data}); - } - - removeListener(ev, fn) { - this.emitter.removeListener(ev, fn); - } - - removeAllListeners() { - this.emitter.removeAllListeners(); - } - - destroy() { - this.removeAllListeners(); - this.ipc.removeAllListeners(); - } -} - -export default new Client(); diff --git a/src/renderer/system/utils.js b/src/renderer/system/utils.js index ad8d60e2..62379fd9 100644 --- a/src/renderer/system/utils.js +++ b/src/renderer/system/utils.js @@ -49,8 +49,8 @@ export function isButtercupFile(filePath) { export function emitActionToParentAndClose(name, payload) { const win = remote.getCurrentWindow(); - const rpc = win.getParentWindow().rpc; - rpc.emit(name, payload); + const ipc = win.getParentWindow().webContents; + ipc.send(name, payload); win.close(); } diff --git a/src/shared/actions/files.js b/src/shared/actions/files.js index 138898ac..57e66dd2 100644 --- a/src/shared/actions/files.js +++ b/src/shared/actions/files.js @@ -1,11 +1,11 @@ import { ipcRenderer } from 'electron'; export const newArchive = () => () => { - window.rpc.emit('new-file-dialog'); + ipcRenderer.send('new-file-dialog'); }; export const openArchive = () => () => { - window.rpc.emit('open-file-dialog'); + ipcRenderer.send('open-file-dialog'); }; export const openFileManager = () => () => { From f81e49cfc67bfe499d294ca8ea7a171c5540cc93 Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Sun, 2 Jul 2017 16:56:44 +0300 Subject: [PATCH 15/39] Improve menu and config --- config/webpack.config.base.js | 2 +- package-lock.json | 32 +++++++ package.json | 1 + src/main/app.js | 2 +- src/main/config/menu.js | 37 -------- src/main/config/menu/app.js | 67 --------------- src/main/config/menu/edit.js | 28 ------ src/main/config/menu/file.js | 42 --------- src/main/config/menu/help.js | 23 ----- src/main/config/menu/view.js | 7 -- src/main/config/menu/window.js | 20 ----- src/main/menu.js | 146 ++++++++++++++++++++++++++++++++ src/main/windows.js | 9 +- src/shared/buttercup/storage.js | 34 ++------ src/shared/config.js | 3 + 15 files changed, 199 insertions(+), 254 deletions(-) delete mode 100644 src/main/config/menu.js delete mode 100644 src/main/config/menu/app.js delete mode 100644 src/main/config/menu/edit.js delete mode 100644 src/main/config/menu/file.js delete mode 100644 src/main/config/menu/help.js delete mode 100644 src/main/config/menu/view.js delete mode 100644 src/main/config/menu/window.js create mode 100644 src/main/menu.js create mode 100644 src/shared/config.js diff --git a/config/webpack.config.base.js b/config/webpack.config.base.js index ce5ba3c9..031fecb2 100644 --- a/config/webpack.config.base.js +++ b/config/webpack.config.base.js @@ -33,6 +33,6 @@ module.exports = { plugins: [ ], externals: [ - 'buttercup-importer', 'zxcvbn', 'dropbox', 'webdav' + 'buttercup-importer', 'zxcvbn', 'dropbox', 'webdav', 'electron-config', 'conf' ] }; diff --git a/package-lock.json b/package-lock.json index fd5ae94b..381be686 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2343,6 +2343,32 @@ } } }, + "conf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/conf/-/conf-1.1.2.tgz", + "integrity": "sha512-0ZvmcIhd7IGdB2Kx4Uz9/dRibqLb2c9q2uaMQJmq54m1qSZfULL0RzU+APThtAxiXM/iNbZ346EeX7BtukJZOg==", + "dev": true, + "dependencies": { + "dot-prop": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.1.1.tgz", + "integrity": "sha1-qEk/C3te7sglJbXHWH+n3nyoWcE=", + "dev": true + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true + }, + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "dev": true + } + } + }, "configstore": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/configstore/-/configstore-2.1.0.tgz", @@ -3433,6 +3459,12 @@ "integrity": "sha1-BJXx3PMllzIPhmEZDP8jBKB73cQ=", "dev": true }, + "electron-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/electron-store/-/electron-store-1.2.0.tgz", + "integrity": "sha1-lvcI8BiMdwiQfp+bfLp5C+1rmJ8=", + "dev": true + }, "electron-to-chromium": { "version": "1.3.14", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.14.tgz", diff --git a/package.json b/package.json index d0de1b9f..a9a11c97 100644 --- a/package.json +++ b/package.json @@ -143,6 +143,7 @@ "electron-json-storage": "^3.0.6", "electron-log": "^2.2.6", "electron-rpc": "^2.0.1", + "electron-store": "^1.2.0", "electron-unhandled": "^0.2.0", "electron-updater": "^2.3.0", "eslint": "^3.19.0", diff --git a/src/main/app.js b/src/main/app.js index 0c94ce2d..07686be6 100644 --- a/src/main/app.js +++ b/src/main/app.js @@ -4,7 +4,7 @@ import log from 'electron-log'; import { throttle } from 'lodash'; import jsonStorage from 'electron-json-storage'; import configureStore from '../shared/store/configure-store'; -import menuTemplate from './config/menu'; +import menuTemplate from './menu'; import { getWindowManager } from './lib/window-manager'; import { loadFile } from './lib/files'; import { isWindows } from './lib/platform'; diff --git a/src/main/config/menu.js b/src/main/config/menu.js deleted file mode 100644 index 5016e49e..00000000 --- a/src/main/config/menu.js +++ /dev/null @@ -1,37 +0,0 @@ -import { app } from 'electron'; -import { isOSX } from '../lib/platform'; -import appMenu from './menu/app'; -import fileMenu from './menu/file'; -import editMenu from './menu/edit'; -import viewMenu from './menu/view'; -import windowMenu from './menu/window'; -import helpMenu from './menu/help'; - -export default [ - isOSX() ? { - label: app.getName(), - submenu: appMenu - } : [], - { - label: isOSX() ? 'Archive' : 'File', - submenu: fileMenu - }, - { - label: 'Edit', - submenu: editMenu - }, - { - label: 'View', - submenu: viewMenu - }, - { - label: 'Window', - role: 'window', - submenu: windowMenu - }, - { - label: 'Help', - role: 'help', - submenu: helpMenu - } -]; diff --git a/src/main/config/menu/app.js b/src/main/config/menu/app.js deleted file mode 100644 index b87ad223..00000000 --- a/src/main/config/menu/app.js +++ /dev/null @@ -1,67 +0,0 @@ -import { app } from 'electron'; -import { isOSX } from '../../lib/platform'; - -let menuItems = []; // eslint-disable-line import/no-mutable-exports - -if (isOSX()) { - menuItems = [ - { - label: 'About Buttercup', - role: 'about' - }, - { - type: 'separator' - }, - { - label: 'Services', - role: 'services', - submenu: [] - }, - { - type: 'separator' - }, - { - label: 'Hide Buttercup', - accelerator: 'Command+H', - role: 'hide' - }, - { - label: 'Hide Others', - accelerator: 'Command+Alt+H', - role: 'hideothers' - }, - { - label: 'Show All', - role: 'unhide' - }, - { - type: 'separator' - }, - { - label: 'Quit', - accelerator: 'Command+Q', - click: () => { - app.quit(); - } - } - ]; -} else { - menuItems = [ - { - label: 'About Buttercup', - role: 'about' - }, - { - type: 'separator' - }, - { - label: 'Quit', - accelerator: 'CmdOrCtrl+Q', - click: () => { - app.quit(); - } - } - ]; -} - -export default menuItems; diff --git a/src/main/config/menu/edit.js b/src/main/config/menu/edit.js deleted file mode 100644 index 78efca1c..00000000 --- a/src/main/config/menu/edit.js +++ /dev/null @@ -1,28 +0,0 @@ -import { isOSX } from '../../lib/platform'; - -const menu = [ - { role: 'undo' }, - { role: 'redo' }, - { type: 'separator' }, - { role: 'cut' }, - { role: 'copy' }, - { role: 'paste' }, - { role: 'pasteandmatchstyle' }, - { role: 'delete' }, - { role: 'selectall' } -]; - -if (isOSX()) { - menu.push( - { type: 'separator' }, - { - label: 'Speech', - submenu: [ - { role: 'startspeaking' }, - { role: 'stopspeaking' } - ] - } - ); -} - -export default menu; diff --git a/src/main/config/menu/file.js b/src/main/config/menu/file.js deleted file mode 100644 index 7673b069..00000000 --- a/src/main/config/menu/file.js +++ /dev/null @@ -1,42 +0,0 @@ -import { openFile, openFileForImporting, newFile } from '../../lib/files'; - -export default [ - { - label: 'New Archive', - accelerator: 'CmdOrCtrl+N', - click: (item, focusedWindow) => newFile(focusedWindow) - }, - { - label: 'Open Archive', - accelerator: 'CmdOrCtrl+O', - click: (item, focusedWindow) => openFile(focusedWindow) - }, - { - type: 'separator' - }, - // @TODO: Gray out this option dynamically - // when target is not available - { - label: 'Import', - submenu: [ - { - label: 'From KeePass archive (.kdbx)', - click: (item, focusedWindow) => openFileForImporting(focusedWindow, 'kdbx') - }, - { - label: 'From 1Password archive (.1pif)', - click: (item, focusedWindow) => openFileForImporting(focusedWindow, '1pif') - }, - { - label: 'From LastPass archive (.csv)', - click: (item, focusedWindow) => openFileForImporting(focusedWindow, 'csv') - } - ] - }, - { - type: 'separator' - }, - { - role: 'close' - } -]; diff --git a/src/main/config/menu/help.js b/src/main/config/menu/help.js deleted file mode 100644 index 10cf5cae..00000000 --- a/src/main/config/menu/help.js +++ /dev/null @@ -1,23 +0,0 @@ -import { shell } from 'electron'; -import pkg from '../../../../package.json'; - -export default [ - { - label: 'Visit Our Website', - click: () => { - shell.openExternal('https://buttercup.pw'); - } - }, - { - label: 'Privacy Policy', - click: () => { - shell.openExternal('https://buttercup.pw/privacy'); - } - }, - { - label: `View Changelog For v${pkg.version}`, - click: () => { - shell.openExternal(`https://github.com/buttercup/buttercup/releases/tag/v${pkg.version}`); - } - } -]; diff --git a/src/main/config/menu/view.js b/src/main/config/menu/view.js deleted file mode 100644 index 146c9a5a..00000000 --- a/src/main/config/menu/view.js +++ /dev/null @@ -1,7 +0,0 @@ -export default [ - { role: 'reload' }, - { role: 'forcereload' }, - { role: 'toggledevtools' }, - { type: 'separator' }, - { role: 'togglefullscreen' } -]; diff --git a/src/main/config/menu/window.js b/src/main/config/menu/window.js deleted file mode 100644 index 71f3197c..00000000 --- a/src/main/config/menu/window.js +++ /dev/null @@ -1,20 +0,0 @@ -import { isOSX } from '../../lib/platform'; - -const menu = [ - { role: 'minimize' }, - { role: 'close' }, - { type: 'separator' }, - { role: 'front' } -]; - -if (isOSX()) { - menu.push( - { role: 'close' }, - { role: 'minimize' }, - { role: 'zoom' }, - { type: 'separator' }, - { role: 'front' } - ); -} - -export default menu; diff --git a/src/main/menu.js b/src/main/menu.js new file mode 100644 index 00000000..3841332d --- /dev/null +++ b/src/main/menu.js @@ -0,0 +1,146 @@ +import { app, shell } from 'electron'; +import { isOSX } from './lib/platform'; +import { openFile, openFileForImporting, newFile } from './lib/files'; +import pkg from '../../package.json'; + +const template = [ + { + label: isOSX() ? 'Archive' : 'File', + submenu: [ + { + label: 'New Archive', + accelerator: 'CmdOrCtrl+N', + click: (item, focusedWindow) => newFile(focusedWindow) + }, + { + label: 'Open Archive', + accelerator: 'CmdOrCtrl+O', + click: (item, focusedWindow) => openFile(focusedWindow) + }, + { + type: 'separator' + }, + // @TODO: Gray out this option dynamically + // when target is not available + { + label: 'Import', + submenu: [ + { + label: 'From KeePass archive (.kdbx)', + click: (item, focusedWindow) => openFileForImporting(focusedWindow, 'kdbx') + }, + { + label: 'From 1Password archive (.1pif)', + click: (item, focusedWindow) => openFileForImporting(focusedWindow, '1pif') + }, + { + label: 'From LastPass archive (.csv)', + click: (item, focusedWindow) => openFileForImporting(focusedWindow, 'csv') + } + ] + }, + { + type: 'separator' + }, + { + role: 'close' + } + ] + }, + { + label: 'Edit', + submenu: [ + { role: 'undo' }, + { role: 'redo' }, + { type: 'separator' }, + { role: 'cut' }, + { role: 'copy' }, + { role: 'paste' }, + { role: 'pasteandmatchstyle' }, + { role: 'delete' }, + { role: 'selectall' } + ] + }, + { + label: 'View', + submenu: [ + { role: 'reload' }, + { role: 'forcereload' }, + { role: 'toggledevtools' }, + { type: 'separator' }, + { role: 'togglefullscreen' } + ] + }, + { + label: 'Window', + role: 'window', + submenu: [ + { role: 'minimize' }, + { role: 'close' } + ] + }, + { + label: 'Help', + role: 'help', + submenu: [ + { + label: 'Visit Our Website', + click: () => { + shell.openExternal('https://buttercup.pw'); + } + }, + { + label: 'Privacy Policy', + click: () => { + shell.openExternal('https://buttercup.pw/privacy'); + } + }, + { + label: `View Changelog For v${pkg.version}`, + click: () => { + shell.openExternal(`https://github.com/buttercup/buttercup/releases/tag/v${pkg.version}`); + } + } + ] + } +]; + +if (isOSX()) { + template.unshift({ + label: app.getName(), + submenu: [ + { role: 'about' }, + { type: 'separator' }, + { role: 'services', submenu: [] }, + { type: 'separator' }, + { role: 'hide' }, + { role: 'hideothers' }, + { role: 'unhide' }, + { type: 'separator' }, + { role: 'quit' } + ] + }); + + // Edit + template[2].submenu.push( + { type: 'separator' }, + { + label: 'Speech', + submenu: [ + { role: 'startspeaking' }, + { role: 'stopspeaking' } + ] + } + ); + + // Window + template[4].submenu.push( + { role: 'close' }, + { role: 'minimize' }, + { role: 'zoom' }, + { type: 'separator' }, + { role: 'front' } + ); +} + +export default template; diff --git a/src/main/windows.js b/src/main/windows.js index 73bfac44..71fc8787 100644 --- a/src/main/windows.js +++ b/src/main/windows.js @@ -3,21 +3,24 @@ import debounce from 'lodash/debounce'; import { getWindowManager } from './lib/window-manager'; import { getPathToFile } from './lib/utils'; import { loadFile } from './lib/files'; +import { config } from '../shared/config'; const windowManager = getWindowManager(); export function setupWindows() { // Intro Screen windowManager.setBuildProcedure('main', callback => { + const [width, height] = config.get('window.size', [950, 700]); // Create the browser window. const win = new BrowserWindow({ - width: 950, - height: 700, + width, + height, minWidth: 680, minHeight: 500, title: app.getName(), titleBarStyle: 'hidden-inset', show: process.env.NODE_ENV === 'development', + darkTheme: true, vibrancy: 'dark' }); @@ -40,7 +43,7 @@ export function setupWindows() { }); win.on('resize', debounce(() => { - win.webContents.send('size-change', win.getSize()); + config.set('window.size', win.getSize()); }, 2000)); win.once('closed', () => { diff --git a/src/shared/buttercup/storage.js b/src/shared/buttercup/storage.js index e8ca36e1..186add36 100644 --- a/src/shared/buttercup/storage.js +++ b/src/shared/buttercup/storage.js @@ -1,7 +1,10 @@ import Buttercup from 'buttercup-web'; -import storage from 'electron-json-storage'; +import Store from 'electron-store'; const { StorageInterface } = Buttercup.storage; +const storage = new Store({ + name: 'archives' +}); /** * Interface for localStorage @@ -14,12 +17,8 @@ export default class ElectronStorageInterface extends StorageInterface { */ getAllKeys() { return new Promise((resolve, reject) => { - storage.keys((err, keys) => { - if (err) { - return reject(err); - } - return resolve(keys.filter(key => key.startsWith('buttercup-')).map(key => key.substr(10))); - }); + const values = [...storage]; + resolve(values.map(val => val[0])); }); } @@ -30,12 +29,7 @@ export default class ElectronStorageInterface extends StorageInterface { */ getValue(name) { return new Promise((resolve, reject) => { - storage.get(`buttercup-${name}`, (err, result) => { - if (err) { - return reject(err); - } - return resolve(result.value); - }); + resolve(storage.get(name)); }); } @@ -46,12 +40,7 @@ export default class ElectronStorageInterface extends StorageInterface { */ removeKey(key) { return new Promise((resolve, reject) => { - storage.remove(`buttercup-${key}`, err => { - if (err) { - return reject(err); - } - return resolve(); - }); + resolve(storage.delete(key)); }); } @@ -63,12 +52,7 @@ export default class ElectronStorageInterface extends StorageInterface { */ setValue(name, value) { return new Promise((resolve, reject) => { - storage.set(`buttercup-${name}`, { value }, err => { - if (err) { - return reject(err); - } - return resolve(); - }); + resolve(storage.set(name, value)); }); } } diff --git a/src/shared/config.js b/src/shared/config.js new file mode 100644 index 00000000..ec7ecc7a --- /dev/null +++ b/src/shared/config.js @@ -0,0 +1,3 @@ +import Store from 'electron-store'; + +export const config = new Store(); From 232ebee50c3064176d83a8202d6e13123fe9b34f Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Sun, 2 Jul 2017 20:24:43 +0300 Subject: [PATCH 16/39] Archive list styling and actions --- src/main/actions.js | 5 + src/main/app.js | 6 +- src/main/menu.js | 58 +++++++++- src/renderer/components/archive/entries.js | 2 +- src/renderer/components/sidebar-backup.js | 27 ----- src/renderer/components/sidebar.js | 125 +++++++++++++++------ src/renderer/containers/sidebar.js | 10 +- src/renderer/index.js | 6 +- src/renderer/styles/recent-files.scss | 76 ------------- src/renderer/styles/workspace.global.scss | 1 + src/shared/actions/archives.js | 18 ++- src/shared/buttercup/store.js | 12 ++ src/shared/selectors.js | 10 +- 13 files changed, 192 insertions(+), 164 deletions(-) delete mode 100644 src/renderer/components/sidebar-backup.js delete mode 100644 src/renderer/styles/recent-files.scss diff --git a/src/main/actions.js b/src/main/actions.js index a4d739d2..f56bac6d 100644 --- a/src/main/actions.js +++ b/src/main/actions.js @@ -3,6 +3,7 @@ import { pushUpdate, updateInstalled } from '../shared/actions/update'; import { getWindowManager } from './lib/window-manager'; import { startAutoUpdate, installUpdates } from './lib/updater'; import { openFile, newFile } from './lib/files'; +import { addArchivesToMenu } from './menu'; const windowManager = getWindowManager(); @@ -36,4 +37,8 @@ export function setupActions(store) { ipc.on('new-file-dialog', () => { newFile(); }); + + ipc.on('archive-list-updated', (e, payload) => { + addArchivesToMenu(payload); + }); } diff --git a/src/main/app.js b/src/main/app.js index 07686be6..f699fbbf 100644 --- a/src/main/app.js +++ b/src/main/app.js @@ -4,7 +4,7 @@ import log from 'electron-log'; import { throttle } from 'lodash'; import jsonStorage from 'electron-json-storage'; import configureStore from '../shared/store/configure-store'; -import menuTemplate from './menu'; +import { setApplicationMenu } from './menu'; import { getWindowManager } from './lib/window-manager'; import { loadFile } from './lib/files'; import { isWindows } from './lib/platform'; @@ -106,9 +106,7 @@ app.on('ready', async () => { }); // Show standard menu - Menu.setApplicationMenu( - Menu.buildFromTemplate(menuTemplate) - ); + setApplicationMenu(); }); // When user closes all windows diff --git a/src/main/menu.js b/src/main/menu.js index 3841332d..544d9f3b 100644 --- a/src/main/menu.js +++ b/src/main/menu.js @@ -1,9 +1,11 @@ -import { app, shell } from 'electron'; +import { app, shell, Menu } from 'electron'; import { isOSX } from './lib/platform'; import { openFile, openFileForImporting, newFile } from './lib/files'; +import { getWindowManager } from './lib/window-manager'; +import { getMainWindow } from './utils/window'; import pkg from '../../package.json'; -const template = [ +const defaultTemplate = [ { label: isOSX() ? 'Archive' : 'File', submenu: [ @@ -17,6 +19,15 @@ const template = [ accelerator: 'CmdOrCtrl+O', click: (item, focusedWindow) => openFile(focusedWindow) }, + { + label: 'Connect Cloud Sources', + accelerator: 'CmdOrCtrl+Shift+C', + click: (item, focusedWindow) => { + getWindowManager().buildWindowOfType('file-manager', null, { + parent: getMainWindow(focusedWindow) + }); + } + }, { type: 'separator' }, @@ -106,7 +117,7 @@ const template = [ ]; if (isOSX()) { - template.unshift({ + defaultTemplate.unshift({ label: app.getName(), submenu: [ { role: 'about' }, @@ -122,7 +133,7 @@ if (isOSX()) { }); // Edit - template[2].submenu.push( + defaultTemplate[2].submenu.push( { type: 'separator' }, { label: 'Speech', @@ -134,7 +145,7 @@ if (isOSX()) { ); // Window - template[4].submenu.push( + defaultTemplate[4].submenu.push( { role: 'close' }, { role: 'minimize' }, { role: 'zoom' }, @@ -143,4 +154,39 @@ if (isOSX()) { ); } -export default template; +export function setApplicationMenu(template = defaultTemplate) { + Menu.setApplicationMenu(Menu.buildFromTemplate(template)); +} + +export function addArchivesToMenu({ archives, currentArchiveId }) { + if (!archives) { + return; + } + + const indexToUpdate = isOSX() ? 4 : 3; + const template = defaultTemplate.map((item, i) => { + if (i === indexToUpdate) { + return { + ...item, + submenu: [ + ...item.submenu, + { type: 'separator' }, + ...archives.map((archive, index) => ({ + label: archive.name, + accelerator: `CmdOrCtrl+${index + 1}`, + type: 'checkbox', + click: () => { + const win = getMainWindow(); + if (win) { + win.webContents.send('set-current-archive', archive.id); + } + }, + checked: (archive.id === currentArchiveId) + })) + ] + }; + } + return item; + }); + setApplicationMenu(template); +} diff --git a/src/renderer/components/archive/entries.js b/src/renderer/components/archive/entries.js index 1b52f2a1..d80c7210 100644 --- a/src/renderer/components/archive/entries.js +++ b/src/renderer/components/archive/entries.js @@ -45,7 +45,7 @@ class Entries extends Component { const addButton = (
    } - footer={} - > - -
    -
    - ); - } -} diff --git a/src/renderer/components/sidebar.js b/src/renderer/components/sidebar.js index a3f4cef3..8ee6d69d 100644 --- a/src/renderer/components/sidebar.js +++ b/src/renderer/components/sidebar.js @@ -4,7 +4,6 @@ import HistoryIcon from 'react-icons/lib/go/history'; import { Button } from '@buttercup/ui'; import styled from 'styled-components'; import { brands } from '../../shared/buttercup/brands'; -import styles from '../styles/recent-files'; import { showContextMenu } from '../system/menu'; import EmptyView from './empty-view'; import Column from './column'; @@ -16,47 +15,105 @@ const Wrapper = styled.div` display: flex; `; -const File = ({ archive, onUnlockClick, onClick, onRemoveClick }) => { +const ArchiveList = styled.ul` + margin: calc(var(--spacing-one) * 3) 0 0 0; + padding: 0; +`; + +const FileItem = styled.li` + display: flex; + align-items: center; + color: #fff; + background-color: ${props => props.active ? 'rgba(255, 255, 255, .1)' : 'transparent'}; + padding: var(--spacing-half) var(--spacing-one); + cursor: ${props => props.locked ? 'pointer' : 'default'} !important; + + figure { + margin: 0; + padding: 0; + flex: 0 0 2rem; + width: 2rem; + height: 2rem; + display: flex; + justify-content: center; + align-items: center; + + img { + width: 100%; + display: block; + } + } + + .status { + font-weight: 300; + font-size: .75em; + color: ${props => props.locked ? 'var(--red)' : 'var(--gray-dark)'}; + text-transform: uppercase; + display: block; + } + + section { + font-size: .9em; + flex: 1; + min-width: 0; + padding-left: var(--spacing-one); + + div { + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + } +`; + +const File = ({ archive, onClick, onRemoveClick, active, index }) => { // const { base, dir } = parsePath(archive.path); const { name } = archive; return ( -
  • { e.stopPropagation(); showContextMenu([{ - label: `Unlock ${name}`, - click: onUnlockClick + label: `${archive.status === 'locked' ? 'Unlock' : 'Open'} ${name}`, + accelerator: `CmdOrCtrl+${index + 1}`, + click: onClick }, { - label: `Remove ${name} from Buttercup`, + label: `Remove ${name}`, click: onRemoveClick }]); }} > -
    -
    - -
    -
    -
    {name}
    - {/*
    {dir}
    */} -
    -
    -
  • +
    + +
    +
    +
    {name}
    + {archive.status} +
    + ); }; File.propTypes = { archive: PropTypes.object, + active: PropTypes.bool, onClick: PropTypes.func, - onRemoveClick: PropTypes.func, - onUnlockClick: PropTypes.func + onRemoveClick: PropTypes.func }; class RecentFiles extends Component { static propTypes = { archives: PropTypes.array, + currentArchiveId: PropTypes.string, onRemoveClick: PropTypes.func, - onUnlockClick: PropTypes.func, onOpenClick: PropTypes.func, onNewClick: PropTypes.func, onCloudClick: PropTypes.func, @@ -85,14 +142,14 @@ class RecentFiles extends Component { renderEmptyState() { return ( -
    +
    ); } render() { - const { archives } = this.props; + const { archives, currentArchiveId } = this.props; // if (archives.length === 0) { // return this.renderEmptyState(); @@ -112,20 +169,18 @@ class RecentFiles extends Component { return ( -
    -
    History:
    -
      - {archives.map(archive => - this.props.onClick(archive.id)} - onUnlockClick={() => this.props.onUnlockClick(archive.id)} - onRemoveClick={() => this.props.onRemoveClick(archive.id)} - /> - )} -
    -
    + + {archives.map((archive, i) => + this.props.onClick(archive.id)} + onRemoveClick={() => this.props.onRemoveClick(archive.id)} + /> + )} +
    ); diff --git a/src/renderer/containers/sidebar.js b/src/renderer/containers/sidebar.js index b47c1830..db8e9bc6 100644 --- a/src/renderer/containers/sidebar.js +++ b/src/renderer/containers/sidebar.js @@ -1,17 +1,17 @@ import { connect } from 'react-redux'; -import { removeArchive, unlockArchive, loadArchive } from '../../shared/actions/archives'; +import { removeArchive, loadOrUnlockArchive } from '../../shared/actions/archives'; import { openArchive, newArchive, openFileManager } from '../../shared/actions/files'; -import { getSortedArchives } from '../../shared/selectors'; +import { getAllArchives, getCurrentArchiveId } from '../../shared/selectors'; import ArchiveList from '../components/sidebar'; export default connect( state => ({ - archives: getSortedArchives(state) + archives: getAllArchives(state), + currentArchiveId: getCurrentArchiveId(state) }), { onRemoveClick: removeArchive, - onUnlockClick: unlockArchive, - onClick: loadArchive, + onClick: loadOrUnlockArchive, onOpenClick: openArchive, onNewClick: newArchive, onCloudClick: openFileManager diff --git a/src/renderer/index.js b/src/renderer/index.js index e03a2960..67cb1dbd 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -6,7 +6,7 @@ import { AppContainer } from 'react-hot-loader'; import configureStore from '../shared/store/configure-store'; import { getSharedArchiveManager } from '../shared/buttercup/archive'; import { linkArchiveManagerToStore } from '../shared/buttercup/store'; -import { addArchiveFromSource } from '../shared/actions/archives'; +import { addArchiveFromSource, loadOrUnlockArchive } from '../shared/actions/archives'; import * as groupActions from '../shared/actions/groups'; import { setWindowSize } from '../shared/actions/settings'; import { importHistoryFromRequest, showHistoryPasswordPrompt } from '../shared/buttercup/import'; @@ -33,6 +33,10 @@ ipc.on('load-archive', (e, payload) => { store.dispatch(addArchiveFromSource(payload)); }); +ipc.on('set-current-archive', (e, payload) => { + store.dispatch(loadOrUnlockArchive(payload)); +}); + window.test = () => { store.dispatch(addArchiveFromSource({ type: 'ipc', diff --git a/src/renderer/styles/recent-files.scss b/src/renderer/styles/recent-files.scss deleted file mode 100644 index ffcfe9ad..00000000 --- a/src/renderer/styles/recent-files.scss +++ /dev/null @@ -1,76 +0,0 @@ -@import './variables'; -@import './common'; - -.container { - background-color: $white-60; - border-left: 1px solid $black-10; -} - -.emptyContainer { - @extend .container; - flex: 1; - display: flex; -} - -.content { - padding: $spacing-one; -} - -.heading { - @extend .heading; - margin-top: 1rem; -} - -.list { - list-style: none; - padding: 0; - margin: 0 0 $spacing-one; - - > li { - padding: $spacing-half 0; - position: relative; - border-bottom: 1px dotted $gray; - cursor: pointer !important; - } -} - -.fileInfo { - display: flex; - align-items: center; - - figure { - margin: 0; - padding: 0; - flex: 0 0 2rem; - width: 2rem; - height: 2rem; - display: flex; - justify-content: center; - align-items: center; - - img { - width: 100%; - display: block; - } - } - - section { - font-size: .9em; - flex: 1; - min-width: 0; - padding-left: $spacing-one; - - div { - width: 100%; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - - div:last-child { - font-weight: 300; - font-size: .8em; - color: $gray-dark; - } - } -} diff --git a/src/renderer/styles/workspace.global.scss b/src/renderer/styles/workspace.global.scss index 00cab003..bf336863 100644 --- a/src/renderer/styles/workspace.global.scss +++ b/src/renderer/styles/workspace.global.scss @@ -78,6 +78,7 @@ input, button, textarea, :focus { --spacing-two: 20px; --sidebar-width: 250px; --sidebar-bg: RGBA(33, 37, 43, .9); + --red: #EB5767; --gray-light: #F5F7FA; --gray: #E4E9F2; --gray-dark: #777; diff --git a/src/shared/actions/archives.js b/src/shared/actions/archives.js index 54e13e1c..23f84139 100644 --- a/src/shared/actions/archives.js +++ b/src/shared/actions/archives.js @@ -1,6 +1,7 @@ import isError from 'is-error'; import { createAction } from 'redux-actions'; import { ArchiveTypes } from '../buttercup/types'; +import { updateApplicationMenu } from '../buttercup/store'; import { showPasswordDialog } from '../../renderer/system/dialog'; import { reloadGroups } from './groups'; import { @@ -9,7 +10,7 @@ import { ARCHIVES_UNLOCK, ARCHIVES_SET_CURRENT } from './types'; - +import { getArchive } from '../selectors'; import { addArchiveToArchiveManager, removeArchiveFromArchiveManager, @@ -23,9 +24,10 @@ export const unlockArchiveInStore = createAction(ARCHIVES_UNLOCK); export const setCurrentArchive = createAction(ARCHIVES_SET_CURRENT); // Impure Buttercup actions -export const loadArchive = payload => dispatch => { +export const loadArchive = payload => (dispatch, getState) => { dispatch(setCurrentArchive(payload)); dispatch(reloadGroups()); + updateApplicationMenu(getState()); }; export const removeArchive = payload => () => { @@ -40,6 +42,18 @@ export const unlockArchive = payload => dispatch => { ); }; +export const loadOrUnlockArchive = payload => (dispatch, getState) => { + const archive = getArchive(getState(), payload); + if (!archive) { + return; + } + if (archive.status === 'locked') { + dispatch(unlockArchive(payload)); + } else { + dispatch(loadArchive(payload)); + } +}; + export const addArchive = payload => async (dispatch, getState) => { try { // try to load archive by showing a password dialog diff --git a/src/shared/buttercup/store.js b/src/shared/buttercup/store.js index 97176cba..d91abea9 100644 --- a/src/shared/buttercup/store.js +++ b/src/shared/buttercup/store.js @@ -1,9 +1,18 @@ +import { ipcRenderer as ipc } from 'electron'; import { getSharedArchiveManager } from './archive'; import { addArchiveToStore, removeArchiveFromStore, unlockArchiveInStore, } from '../actions/archives.js'; +import { getAllArchives, getCurrentArchiveId } from '../selectors'; + +export function updateApplicationMenu(state) { + ipc.send('archive-list-updated', { + archives: getAllArchives(state), + currentArchiveId: getCurrentArchiveId(state) + }); +}; export function linkArchiveManagerToStore(store) { const archiveManager = getSharedArchiveManager(); @@ -11,15 +20,18 @@ export function linkArchiveManagerToStore(store) { // attach listeners archiveManager.on('sourceAdded', function __handleNewSource(sourceInfo) { store.dispatch(addArchiveToStore(sourceInfo)); + updateApplicationMenu(store.getState()); }); archiveManager.on('sourceRehydrated', function __handleRehydratedSource(sourceInfo) { store.dispatch(addArchiveToStore(sourceInfo)); + updateApplicationMenu(store.getState()); }); archiveManager.on('sourceUnlocked', function __handleUnlockedSource(sourceInfo) { store.dispatch(unlockArchiveInStore(sourceInfo.id)); }); archiveManager.on('sourceRemoved', function __handleRemovedSource(sourceInfo) { store.dispatch(removeArchiveFromStore(sourceInfo.id)); + updateApplicationMenu(store.getState()); }); // rehydrate diff --git a/src/shared/selectors.js b/src/shared/selectors.js index c4ef9fa0..d0f18b0a 100644 --- a/src/shared/selectors.js +++ b/src/shared/selectors.js @@ -2,18 +2,14 @@ import { createSelector } from 'reselect'; import { filterByText, sortByKey, - sortDeepByKey, - sortByLastAccessed + sortDeepByKey } from './utils/collection'; import { denormalizeGroups } from './buttercup/groups'; // Archive -> -export const getAllArchives = state => Object.values(state.archives); -export const getSortedArchives = createSelector( - getAllArchives, - archives => sortByLastAccessed(archives) -); +export const getAllArchives = state => sortByKey(Object.values(state.archives), 'name-asc'); +export const getArchive = (state, archiveId) => state.archives.find(archive => archive.id === archiveId); export const getCurrentArchiveId = state => state.currentArchive; export const getCurrentArchive = createSelector( From 82440a2edbfd0c8d74f2ac5c21e24ca63e75badd Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Tue, 4 Jul 2017 19:45:09 +0300 Subject: [PATCH 17/39] Sidebar colors upgrade --- package.json | 4 ++-- src/main/app.js | 4 ++-- src/main/lib/files.js | 2 +- src/main/menu.js | 2 +- src/main/windows.js | 2 +- src/renderer/components/archive/entries.js | 27 ++++++++++++++++------ src/renderer/components/sidebar.js | 21 +++++++++++++++-- src/renderer/components/tree-view/index.js | 13 +++++++---- src/renderer/styles/entries.scss | 20 ---------------- src/renderer/styles/tree-view.scss | 10 -------- src/renderer/styles/workspace.global.scss | 5 ++++ src/renderer/system/utils.js | 12 ---------- src/shared/selectors.js | 5 +--- src/{main/lib => shared/utils}/platform.js | 0 14 files changed, 61 insertions(+), 66 deletions(-) delete mode 100644 src/renderer/styles/entries.scss delete mode 100644 src/renderer/styles/tree-view.scss rename src/{main/lib => shared/utils}/platform.js (100%) diff --git a/package.json b/package.json index a9a11c97..54fffa07 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "prestart:renderer": "npm run clean", "start:renderer": "webpack-dev-server --config ./config/webpack.config.development --progress", "prestart:main": "npm run clean", - "start:main": "cross-env HOT=1 BABEL_ENV=node NODE_ENV=development electron --disable-gpu -r babel-register ./src/main/app", + "start:main": "cross-env HOT=1 BABEL_ENV=node NODE_ENV=development electron -r babel-register ./src/main/app", "prerelease": "npm run clean", "release": "npm run build && npm run package", "package:linux": "build --linux --x64", @@ -189,7 +189,7 @@ "react-dimensions": "^1.3.0", "react-dom": "^15.5.4", "react-hot-loader": "3.0.0-beta.6", - "react-icons": "^2.2.1", + "react-icons": "^2.2.5", "react-redux": "^5.0.5", "react-router-dom": "^4.0.0", "react-split-pane": "^0.1.63", diff --git a/src/main/app.js b/src/main/app.js index f699fbbf..31ff0132 100644 --- a/src/main/app.js +++ b/src/main/app.js @@ -1,4 +1,4 @@ -import { app, Menu } from 'electron'; +import { app } from 'electron'; import pify from 'pify'; import log from 'electron-log'; import { throttle } from 'lodash'; @@ -7,7 +7,7 @@ import configureStore from '../shared/store/configure-store'; import { setApplicationMenu } from './menu'; import { getWindowManager } from './lib/window-manager'; import { loadFile } from './lib/files'; -import { isWindows } from './lib/platform'; +import { isWindows } from '../shared/utils/platform'; import { setupActions } from './actions'; import { setupWindows } from './windows'; diff --git a/src/main/lib/files.js b/src/main/lib/files.js index 1bd0048f..bcf269de 100644 --- a/src/main/lib/files.js +++ b/src/main/lib/files.js @@ -1,7 +1,7 @@ import path from 'path'; import { BrowserWindow, dialog, ipcMain as ipc } from 'electron'; import { ArchiveTypes } from '../../shared/buttercup/types'; -import { isWindows } from './platform'; +import { isWindows } from '../../shared/utils/platform'; import { getWindowManager } from './window-manager'; import { importArchive } from './buttercup'; import { getMainWindow } from '../utils/window'; diff --git a/src/main/menu.js b/src/main/menu.js index 544d9f3b..eef2285d 100644 --- a/src/main/menu.js +++ b/src/main/menu.js @@ -1,5 +1,5 @@ import { app, shell, Menu } from 'electron'; -import { isOSX } from './lib/platform'; +import { isOSX } from '../shared/utils/platform'; import { openFile, openFileForImporting, newFile } from './lib/files'; import { getWindowManager } from './lib/window-manager'; import { getMainWindow } from './utils/window'; diff --git a/src/main/windows.js b/src/main/windows.js index 71fc8787..a7379a2d 100644 --- a/src/main/windows.js +++ b/src/main/windows.js @@ -21,7 +21,7 @@ export function setupWindows() { titleBarStyle: 'hidden-inset', show: process.env.NODE_ENV === 'development', darkTheme: true, - vibrancy: 'dark' + vibrancy: 'ultra-dark' }); win.loadURL(getPathToFile('views/index.html')); diff --git a/src/renderer/components/archive/entries.js b/src/renderer/components/archive/entries.js index d80c7210..85645783 100644 --- a/src/renderer/components/archive/entries.js +++ b/src/renderer/components/archive/entries.js @@ -1,16 +1,30 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; import PlusIcon from 'react-icons/lib/md/add'; -import cx from 'classnames'; +import styled from 'styled-components'; import { Button } from '@buttercup/ui'; -import { isOSX } from '../../system/utils'; +import { isOSX } from '../../../shared/utils/platform'; import { showContextMenu, createMenuFromGroups, createCopyMenu } from '../../system/menu'; -import Column from '../column'; -import styles from '../../styles/entries'; +import BaseColumn from '../column'; import List from './entries-list'; import SearchField from './search-field'; import SortButton from './sort-button'; +const Column = styled(BaseColumn)` + background-color: ${isOSX() ? 'var(--entries-bg-mac)' : 'var(--entries-bg)'}; + color: #fff; +`; + +const SearchWrapper = styled.div` + display: flex; + flex-direction: row; + margin-right: calc(-1 * var(--spacing-half)); + + button { + color: #fff; + } +`; + class Entries extends Component { handleFilterChange = value => { this.props.onFilterChange(value); @@ -52,15 +66,14 @@ class Entries extends Component { >Add Entry ); const filterNode = ( -
    + -
    + ); return ( diff --git a/src/renderer/components/sidebar.js b/src/renderer/components/sidebar.js index 8ee6d69d..e01c8022 100644 --- a/src/renderer/components/sidebar.js +++ b/src/renderer/components/sidebar.js @@ -1,9 +1,12 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; import HistoryIcon from 'react-icons/lib/go/history'; +import LockOpen from 'react-icons/lib/md/lock-open'; +import LockClosed from 'react-icons/lib/md/lock-outline'; import { Button } from '@buttercup/ui'; import styled from 'styled-components'; import { brands } from '../../shared/buttercup/brands'; +import { isOSX } from '../../shared/utils/platform'; import { showContextMenu } from '../system/menu'; import EmptyView from './empty-view'; import Column from './column'; @@ -11,7 +14,7 @@ import Column from './column'; const Wrapper = styled.div` width: var(--sidebar-width); height: 100%; - background-color: var(--sidebar-bg); + background-color: ${isOSX() ? 'transparent' : 'var(--sidebar-bg)'}; display: flex; `; @@ -28,6 +31,10 @@ const FileItem = styled.li` padding: var(--spacing-half) var(--spacing-one); cursor: ${props => props.locked ? 'pointer' : 'default'} !important; + &:active { + background-color: rgba(255, 255, 255, .2); + } + figure { margin: 0; padding: 0; @@ -50,6 +57,13 @@ const FileItem = styled.li` color: ${props => props.locked ? 'var(--red)' : 'var(--gray-dark)'}; text-transform: uppercase; display: block; + + svg { + vertical-align: -2px !important; + margin-right: 3px; + height: 12px; + width: 12px; + } } section { @@ -96,7 +110,10 @@ const File = ({ archive, onClick, onRemoveClick, active, index }) => {
    {name}
    - {archive.status} + + {archive.status === 'locked' ? : } + {archive.status} +
    ); diff --git a/src/renderer/components/tree-view/index.js b/src/renderer/components/tree-view/index.js index b57e1d00..4628ba8b 100644 --- a/src/renderer/components/tree-view/index.js +++ b/src/renderer/components/tree-view/index.js @@ -3,15 +3,21 @@ import { isString } from 'lodash'; import cx from 'classnames'; import PropTypes from 'prop-types'; import Tree, { TreeNode } from 'rc-tree'; +import styled from 'styled-components'; import PlusIcon from 'react-icons/lib/md/add'; import { Button } from '@buttercup/ui'; import { showContextMenu, createMenuFromGroups, createSortMenu } from '../../system/menu'; -import { isOSX } from '../../system/utils'; +import { isOSX } from '../../../shared/utils/platform'; import '../../styles/tree-view.global'; -import styles from '../../styles/tree-view'; -import Column from '../column'; +import BaseColumn from '../column'; import TreeLabel from './tree-label'; +const Column = styled(BaseColumn)` + background-color: ${isOSX() ? 'var(--groups-bg-mac)' : 'var(--groups-bg)'}; + color: #fff; + padding-top: var(--spacing-one); +`; + class TreeView extends Component { handleColumnRightClick() { const { sortMode, onSortModeChange } = this.props; @@ -163,7 +169,6 @@ class TreeView extends Component { icon={} >New Group } - className={cx(styles.column, isOSX() && styles.mac)} onContextMenu={() => this.handleColumnRightClick()} > archive ? archive.ui.treeExpandedKeys : [] ); -export const getColumnSizes = createSelector( - getCurrentArchiveSettings, - archive => archive ? archive.ui.columnSizes : null -); +export const getColumnSizes = state => state.settings.columnSizes; export const getWindowSize = createSelector( getCurrentArchiveSettings, diff --git a/src/main/lib/platform.js b/src/shared/utils/platform.js similarity index 100% rename from src/main/lib/platform.js rename to src/shared/utils/platform.js From c29cc5a1d706b1c2266806ea283ef4a180068255 Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Tue, 4 Jul 2017 21:21:19 +0300 Subject: [PATCH 18/39] Archive avatar (WIP) --- package-lock.json | 30 +++++++ package.json | 2 + src/renderer/components/avatar.js | 97 +++++++++++++++++++++++ src/renderer/components/sidebar.js | 73 +++++++++-------- src/renderer/components/workspace.js | 2 +- src/renderer/containers/sidebar.js | 3 +- src/renderer/styles/workspace.global.scss | 1 + src/shared/actions/archives.js | 4 +- src/shared/actions/types.js | 1 + src/shared/reducers/archives.js | 11 +++ 10 files changed, 189 insertions(+), 35 deletions(-) create mode 100644 src/renderer/components/avatar.js diff --git a/package-lock.json b/package-lock.json index 381be686..7f41395f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8617,6 +8617,12 @@ "integrity": "sha1-7yDL3mTCTFDMYa9bg+4LG4/wAQE=", "dev": true }, + "material-colors": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.5.tgz", + "integrity": "sha1-UpJZPmdUyxvMK5gDDk4Najr8nqE=", + "dev": true + }, "math-expression-evaluator": { "version": "1.2.17", "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", @@ -11076,6 +11082,12 @@ "integrity": "sha1-4NJYzaKhIq0N/2n4OCYNDDlY9fc=", "dev": true }, + "react-color": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.13.0.tgz", + "integrity": "sha512-A1kk4YTFLgchAj3bX7pigFtNhiAAXpEmA5lhAE2gOfgxSmHfBDZi6j+NZKnf/oSgKCrpbaQQm283hVYCQ0vj+Q==", + "dev": true + }, "react-custom-scrollbars": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/react-custom-scrollbars/-/react-custom-scrollbars-4.1.2.tgz", @@ -11140,6 +11152,12 @@ "integrity": "sha1-QjGwVjkqzUPyFPrPemr32tYjgKw=", "dev": true }, + "react-portal": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/react-portal/-/react-portal-3.1.0.tgz", + "integrity": "sha1-hlxE+3Kh2hBsZJIGk2VZzoke6Jk=", + "dev": true + }, "react-proxy": { "version": "3.0.0-alpha.1", "resolved": "https://registry.npmjs.org/react-proxy/-/react-proxy-3.0.0-alpha.1.tgz", @@ -11184,6 +11202,12 @@ "integrity": "sha1-ieC2RvJmxlarsPDdggLb1QNsMeY=", "dev": true }, + "reactcss": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.2.tgz", + "integrity": "sha1-QbDvQ+AdVIgDV8NLEawVMSCTUO8=", + "dev": true + }, "read-all-stream": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", @@ -12619,6 +12643,12 @@ } } }, + "tinycolor2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz", + "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=", + "dev": true + }, "tmatch": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/tmatch/-/tmatch-2.0.1.tgz", diff --git a/package.json b/package.json index 54fffa07..a8e4d55a 100644 --- a/package.json +++ b/package.json @@ -185,11 +185,13 @@ "rc-tree": "^1.3.9", "react": "^15.5.4", "react-addons-test-utils": "^15.4.0", + "react-color": "^2.13.0", "react-custom-scrollbars": "^4.1.1", "react-dimensions": "^1.3.0", "react-dom": "^15.5.4", "react-hot-loader": "3.0.0-beta.6", "react-icons": "^2.2.5", + "react-portal": "^3.1.0", "react-redux": "^5.0.5", "react-router-dom": "^4.0.0", "react-split-pane": "^0.1.63", diff --git a/src/renderer/components/avatar.js b/src/renderer/components/avatar.js new file mode 100644 index 00000000..ae49272c --- /dev/null +++ b/src/renderer/components/avatar.js @@ -0,0 +1,97 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import styled from 'styled-components'; +import capitalize from 'lodash/capitalize'; +import { GithubPicker } from 'react-color'; +import Portal from 'react-portal'; +import CogIcon from 'react-icons/lib/md/brush'; + +const Picker = styled.div` + position: fixed; + top: ${props => props.top + 20}px; + left: ${props => props.left + 5}px; +`; + +const CogButton = styled.div` + color: #fff; + position: absolute; + left: -5px; + top: calc(100% - 5px); + display: none; + + svg { + width: 12px; + height: 12px; + display: block; + } +`; + +class Avatar extends Component { + state = { + isPickerOpen: false, + top: 0, + left: 0 + }; + + static propTypes = { + archive: PropTypes.object, + className: PropTypes.string, + onUpdate: PropTypes.func + }; + + handleClick = e => { + e.stopPropagation(); + const bodyRect = document.body.getBoundingClientRect(); + const targetRect = e.target.getBoundingClientRect(); + this.setState({ + isPickerOpen: true, + top: targetRect.top - bodyRect.top, + left: targetRect.left - bodyRect.left + }); + } + + handleColorChange = color => { + this.props.onUpdate({ + ...this.props.archive, + color: color.hex + }); + } + + render() { + const { archive, className } = this.props; + return ( +
    + + {capitalize(archive.name.substring(0, 2))} + + + + + + + + + +
    + ); + } +} + +export default styled(Avatar)` + width: 3rem; + height: 3rem; + border-radius: 50px; + border: 2px solid rgba(255, 255, 255, .2); + font-weight: 700; + font-size: 1rem; + display: flex; + align-items: center; + justify-content: center; + position: relative; + + &:hover { + .cog { + display: block; + } + } +`; diff --git a/src/renderer/components/sidebar.js b/src/renderer/components/sidebar.js index e01c8022..7f3c5601 100644 --- a/src/renderer/components/sidebar.js +++ b/src/renderer/components/sidebar.js @@ -1,6 +1,6 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; -import HistoryIcon from 'react-icons/lib/go/history'; +import ArchiveIcon from 'react-icons/lib/md/add'; import LockOpen from 'react-icons/lib/md/lock-open'; import LockClosed from 'react-icons/lib/md/lock-outline'; import { Button } from '@buttercup/ui'; @@ -9,10 +9,11 @@ import { brands } from '../../shared/buttercup/brands'; import { isOSX } from '../../shared/utils/platform'; import { showContextMenu } from '../system/menu'; import EmptyView from './empty-view'; -import Column from './column'; +import Avatar from './avatar'; +import BaseColumn from './column'; -const Wrapper = styled.div` - width: var(--sidebar-width); +const Column = styled(BaseColumn)` + width: ${props => props.condenced ? 'var(--sidebar-width-condenced)' : 'var(--sidebar-width)'}; height: 100%; background-color: ${isOSX() ? 'transparent' : 'var(--sidebar-bg)'}; display: flex; @@ -38,9 +39,9 @@ const FileItem = styled.li` figure { margin: 0; padding: 0; - flex: 0 0 2rem; - width: 2rem; - height: 2rem; + flex: 0 0 3rem; + width: 3rem; + height: 3rem; display: flex; justify-content: center; align-items: center; @@ -48,6 +49,8 @@ const FileItem = styled.li` img { width: 100%; display: block; + border-radius: 50%; + border: 3px solid rgba(255, 255, 255, .2); } } @@ -81,7 +84,7 @@ const FileItem = styled.li` } `; -const File = ({ archive, onClick, onRemoveClick, active, index }) => { +const File = ({ archive, onClick, onRemoveClick, onArchiveUpdate, active, index, condenced }) => { // const { base, dir } = parsePath(archive.path); const { name } = archive; return ( @@ -105,16 +108,17 @@ const File = ({ archive, onClick, onRemoveClick, active, index }) => { }]); }} > -
    + {/*
    -
    -
    +
    */} + + {!condenced &&
    {name}
    {archive.status === 'locked' ? : } {archive.status} -
    + } ); }; @@ -122,18 +126,23 @@ const File = ({ archive, onClick, onRemoveClick, active, index }) => { File.propTypes = { archive: PropTypes.object, active: PropTypes.bool, + condenced: PropTypes.bool, + index: PropTypes.number, onClick: PropTypes.func, - onRemoveClick: PropTypes.func + onRemoveClick: PropTypes.func, + onArchiveUpdate: PropTypes.func }; class RecentFiles extends Component { static propTypes = { + condenced: PropTypes.bool, archives: PropTypes.array, currentArchiveId: PropTypes.string, onRemoveClick: PropTypes.func, onOpenClick: PropTypes.func, onNewClick: PropTypes.func, onCloudClick: PropTypes.func, + onArchiveUpdate: PropTypes.func, onClick: PropTypes.func }; @@ -166,7 +175,7 @@ class RecentFiles extends Component { } render() { - const { archives, currentArchiveId } = this.props; + const { archives, currentArchiveId, condenced } = this.props; // if (archives.length === 0) { // return this.renderEmptyState(); @@ -177,29 +186,29 @@ class RecentFiles extends Component { dark full onClick={this.showCreateMenu} - icon={} + icon={} > - Add Archive + {condenced ? ' ' : 'Add Archive'} ); return ( - - - - {archives.map((archive, i) => - this.props.onClick(archive.id)} - onRemoveClick={() => this.props.onRemoveClick(archive.id)} - /> - )} - - - + + + {archives.map((archive, i) => + this.props.onClick(archive.id)} + onRemoveClick={() => this.props.onRemoveClick(archive.id)} + /> + )} + + ); } } diff --git a/src/renderer/components/workspace.js b/src/renderer/components/workspace.js index bc91b2dc..e5798b51 100644 --- a/src/renderer/components/workspace.js +++ b/src/renderer/components/workspace.js @@ -14,7 +14,7 @@ const Primary = styled(Box)` const Workspace = ({ currentArchive, update, installUpdate, setColumnSize, columnSizes }) => { return ( - + (dispatch, getState) => { diff --git a/src/shared/actions/types.js b/src/shared/actions/types.js index 0b5289fd..238553a6 100644 --- a/src/shared/actions/types.js +++ b/src/shared/actions/types.js @@ -39,3 +39,4 @@ export const ARCHIVES_UNLOCK = 'buttercup/archives/UNLOCK'; export const ARCHIVES_CLEAR = 'buttercup/archives/CLEAR'; export const ARCHIVES_SET = 'buttercup/archives/SET'; export const ARCHIVES_SET_CURRENT = 'buttercup/archives/SET_CURRENT'; +export const ARCHIVES_UPDATE = 'buttercup/archives/UPDATE'; diff --git a/src/shared/reducers/archives.js b/src/shared/reducers/archives.js index 33e8ddd8..899796a9 100644 --- a/src/shared/reducers/archives.js +++ b/src/shared/reducers/archives.js @@ -4,6 +4,7 @@ import { ARCHIVES_REMOVE, ARCHIVES_UNLOCK, ARCHIVES_SET_CURRENT, + ARCHIVES_UPDATE, } from '../actions/types'; export default function archivesReducer(state = [], action) { @@ -26,6 +27,16 @@ export default function archivesReducer(state = [], action) { } return archive; }); + case ARCHIVES_UPDATE: + return state.map(archive => { + if (archive.id === action.payload.id) { + return { + ...archive, + ...action.payload + }; + } + return archive; + }); default: return state; } From 03384be5a8d1f79928fdc9a4d136444c93b97f00 Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Tue, 4 Jul 2017 21:25:45 +0300 Subject: [PATCH 19/39] Portal close improvement --- src/renderer/components/avatar.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/renderer/components/avatar.js b/src/renderer/components/avatar.js index ae49272c..d4126004 100644 --- a/src/renderer/components/avatar.js +++ b/src/renderer/components/avatar.js @@ -50,6 +50,10 @@ class Avatar extends Component { }); } + handlePickerClose = () => { + this.setState({ isPickerOpen: false }); + } + handleColorChange = color => { this.props.onUpdate({ ...this.props.archive, @@ -67,7 +71,11 @@ class Avatar extends Component { - + From d902b4f40dafc5b92fad7cc84601d2ecd2cd6dce Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Wed, 5 Jul 2017 22:18:50 +0300 Subject: [PATCH 20/39] Store settings and archives in main process --- src/shared/actions/archives.js | 36 ++++++++++++++------------------- src/shared/actions/types.js | 1 + src/shared/buttercup/store.js | 3 ++- src/shared/reducers/archives.js | 8 +++++++- src/shared/reducers/index.js | 5 ++--- 5 files changed, 27 insertions(+), 26 deletions(-) diff --git a/src/shared/actions/archives.js b/src/shared/actions/archives.js index 1704465f..0debfcd3 100644 --- a/src/shared/actions/archives.js +++ b/src/shared/actions/archives.js @@ -7,6 +7,7 @@ import { reloadGroups } from './groups'; import { ARCHIVES_ADD, ARCHIVES_REMOVE, + ARCHIVES_LOCK, ARCHIVES_UNLOCK, ARCHIVES_SET_CURRENT, ARCHIVES_UPDATE @@ -22,6 +23,7 @@ import { export const addArchiveToStore = createAction(ARCHIVES_ADD); export const removeArchiveFromStore = createAction(ARCHIVES_REMOVE); export const unlockArchiveInStore = createAction(ARCHIVES_UNLOCK); +export const lockArchiveInStore = createAction(ARCHIVES_LOCK); export const setCurrentArchive = createAction(ARCHIVES_SET_CURRENT); export const updateArchive = createAction(ARCHIVES_UPDATE); @@ -33,6 +35,7 @@ export const loadArchive = payload => (dispatch, getState) => { }; export const removeArchive = payload => () => { + // @todo: unload archive return removeArchiveFromArchiveManager(payload); }; @@ -57,27 +60,18 @@ export const loadOrUnlockArchive = payload => (dispatch, getState) => { }; export const addArchive = payload => async (dispatch, getState) => { - try { - // try to load archive by showing a password dialog - const archiveId = await showPasswordDialog( - password => addArchiveToArchiveManager(payload, password).catch(err => { - const unknownMessage = 'An unknown error has occurred'; - return Promise.reject( - isError(err) - ? err.message || unknownMessage - : unknownMessage - ); - }) - ); - - // Load the newly added archive - dispatch(loadArchive(archiveId)); - - // Changes to interface: - // const [width, height] = getWindowSize(getState()); - // setWindowSize(width, height, 'dark'); - // window.document.title = `${path.basename(archive.path)} - Buttercup`; - } catch (err) { } + return showPasswordDialog( + password => addArchiveToArchiveManager(payload, password).catch(err => { + const unknownMessage = 'An unknown error has occurred'; + return Promise.reject( + isError(err) + ? err.message || unknownMessage + : unknownMessage + ); + }) + ).then( + archiveId => dispatch(loadArchive(archiveId)) + ); }; export const addArchiveFromFile = ({ path, isNew = false }) => dispatch => { diff --git a/src/shared/actions/types.js b/src/shared/actions/types.js index 238553a6..a621a688 100644 --- a/src/shared/actions/types.js +++ b/src/shared/actions/types.js @@ -35,6 +35,7 @@ export const UPDATE_INSTALL = 'buttercup/ui/UPDATE_INSTALL'; export const ARCHIVES_ADD = 'buttercup/archives/ADD'; export const ARCHIVES_REMOVE = 'buttercup/archives/REMOVE'; +export const ARCHIVES_LOCK = 'buttercup/archives/LOCK'; export const ARCHIVES_UNLOCK = 'buttercup/archives/UNLOCK'; export const ARCHIVES_CLEAR = 'buttercup/archives/CLEAR'; export const ARCHIVES_SET = 'buttercup/archives/SET'; diff --git a/src/shared/buttercup/store.js b/src/shared/buttercup/store.js index d91abea9..b467fb2f 100644 --- a/src/shared/buttercup/store.js +++ b/src/shared/buttercup/store.js @@ -3,6 +3,7 @@ import { getSharedArchiveManager } from './archive'; import { addArchiveToStore, removeArchiveFromStore, + lockArchiveInStore, unlockArchiveInStore, } from '../actions/archives.js'; import { getAllArchives, getCurrentArchiveId } from '../selectors'; @@ -23,7 +24,7 @@ export function linkArchiveManagerToStore(store) { updateApplicationMenu(store.getState()); }); archiveManager.on('sourceRehydrated', function __handleRehydratedSource(sourceInfo) { - store.dispatch(addArchiveToStore(sourceInfo)); + store.dispatch(lockArchiveInStore(sourceInfo.id)); updateApplicationMenu(store.getState()); }); archiveManager.on('sourceUnlocked', function __handleUnlockedSource(sourceInfo) { diff --git a/src/shared/reducers/archives.js b/src/shared/reducers/archives.js index 899796a9..82192836 100644 --- a/src/shared/reducers/archives.js +++ b/src/shared/reducers/archives.js @@ -2,6 +2,7 @@ import { createIdentityReducer } from '../utils/redux'; import { ARCHIVES_ADD, ARCHIVES_REMOVE, + ARCHIVES_LOCK, ARCHIVES_UNLOCK, ARCHIVES_SET_CURRENT, ARCHIVES_UPDATE, @@ -10,6 +11,9 @@ import { export default function archivesReducer(state = [], action) { switch (action.type) { case ARCHIVES_ADD: + if (state.find(archive => archive.id === action.payload.id)) { + return state; + } return [ ...state, action.payload @@ -17,12 +21,14 @@ export default function archivesReducer(state = [], action) { case ARCHIVES_REMOVE: { return state.filter(archive => archive.id !== action.payload); } + case ARCHIVES_LOCK: case ARCHIVES_UNLOCK: + console.log(action.type); return state.map(archive => { if (archive.id === action.payload) { return { ...archive, - status: 'unlocked' + status: action.type === ARCHIVES_LOCK ? 'locked' : 'unlocked' }; } return archive; diff --git a/src/shared/reducers/index.js b/src/shared/reducers/index.js index c74e62d6..fadb6063 100644 --- a/src/shared/reducers/index.js +++ b/src/shared/reducers/index.js @@ -9,19 +9,18 @@ import update from './update'; export default function getRootReducer(scope = 'main') { let reducers = { settingsByArchiveId, - // archives, + archives, update, + settings, }; if (scope === 'renderer') { reducers = { ...reducers, - archives, currentArchive, groups, entries, form, - settings, }; } From 5713c087c67f12c43f93bffa85899374e8823b09 Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Wed, 5 Jul 2017 22:51:09 +0300 Subject: [PATCH 21/39] Update app menu based on store state --- src/main/actions.js | 4 ++-- src/main/app.js | 6 ++---- src/main/menu.js | 17 +++++++---------- src/renderer/index.js | 5 ++++- src/shared/actions/archives.js | 9 ++++++--- src/shared/buttercup/store.js | 14 +++----------- src/shared/reducers/archives.js | 1 - src/shared/reducers/index.js | 2 +- 8 files changed, 25 insertions(+), 33 deletions(-) diff --git a/src/main/actions.js b/src/main/actions.js index f56bac6d..050cbe50 100644 --- a/src/main/actions.js +++ b/src/main/actions.js @@ -3,7 +3,7 @@ import { pushUpdate, updateInstalled } from '../shared/actions/update'; import { getWindowManager } from './lib/window-manager'; import { startAutoUpdate, installUpdates } from './lib/updater'; import { openFile, newFile } from './lib/files'; -import { addArchivesToMenu } from './menu'; +import { setupMenu } from './menu'; const windowManager = getWindowManager(); @@ -39,6 +39,6 @@ export function setupActions(store) { }); ipc.on('archive-list-updated', (e, payload) => { - addArchivesToMenu(payload); + setupMenu(store); }); } diff --git a/src/main/app.js b/src/main/app.js index 31ff0132..4e4ee8e8 100644 --- a/src/main/app.js +++ b/src/main/app.js @@ -4,7 +4,7 @@ import log from 'electron-log'; import { throttle } from 'lodash'; import jsonStorage from 'electron-json-storage'; import configureStore from '../shared/store/configure-store'; -import { setApplicationMenu } from './menu'; +import { setupMenu } from './menu'; import { getWindowManager } from './lib/window-manager'; import { loadFile } from './lib/files'; import { isWindows } from '../shared/utils/platform'; @@ -92,6 +92,7 @@ app.on('ready', async () => { // Setup Windows & IPC Actions setupWindows(store); setupActions(store); + setupMenu(store); appIsReady = true; @@ -104,9 +105,6 @@ app.on('ready', async () => { initialFile = null; } }); - - // Show standard menu - setApplicationMenu(); }); // When user closes all windows diff --git a/src/main/menu.js b/src/main/menu.js index eef2285d..e5caa0ea 100644 --- a/src/main/menu.js +++ b/src/main/menu.js @@ -1,5 +1,6 @@ import { app, shell, Menu } from 'electron'; import { isOSX } from '../shared/utils/platform'; +import { getCurrentArchiveId, getAllArchives } from '../shared/selectors'; import { openFile, openFileForImporting, newFile } from './lib/files'; import { getWindowManager } from './lib/window-manager'; import { getMainWindow } from './utils/window'; @@ -152,16 +153,12 @@ if (isOSX()) { { type: 'separator' }, { role: 'front' } ); -} - -export function setApplicationMenu(template = defaultTemplate) { - Menu.setApplicationMenu(Menu.buildFromTemplate(template)); -} +}; -export function addArchivesToMenu({ archives, currentArchiveId }) { - if (!archives) { - return; - } +export function setupMenu(store) { + const state = store.getState(); + const archives = getAllArchives(state); + const currentArchiveId = getCurrentArchiveId(state); const indexToUpdate = isOSX() ? 4 : 3; const template = defaultTemplate.map((item, i) => { @@ -188,5 +185,5 @@ export function addArchivesToMenu({ archives, currentArchiveId }) { } return item; }); - setApplicationMenu(template); + Menu.setApplicationMenu(Menu.buildFromTemplate(template)); } diff --git a/src/renderer/index.js b/src/renderer/index.js index 67cb1dbd..1fc48fd7 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -6,7 +6,7 @@ import { AppContainer } from 'react-hot-loader'; import configureStore from '../shared/store/configure-store'; import { getSharedArchiveManager } from '../shared/buttercup/archive'; import { linkArchiveManagerToStore } from '../shared/buttercup/store'; -import { addArchiveFromSource, loadOrUnlockArchive } from '../shared/actions/archives'; +import { addArchiveFromSource, loadOrUnlockArchive, setCurrentArchive } from '../shared/actions/archives'; import * as groupActions from '../shared/actions/groups'; import { setWindowSize } from '../shared/actions/settings'; import { importHistoryFromRequest, showHistoryPasswordPrompt } from '../shared/buttercup/import'; @@ -27,6 +27,9 @@ global.archiveManager = getSharedArchiveManager(); linkArchiveManagerToStore(store); setupShortcuts(store); +// Reset current archive +store.dispatch(setCurrentArchive(null)); + ipc.send('init'); ipc.on('load-archive', (e, payload) => { diff --git a/src/shared/actions/archives.js b/src/shared/actions/archives.js index 0debfcd3..bdde4433 100644 --- a/src/shared/actions/archives.js +++ b/src/shared/actions/archives.js @@ -1,7 +1,7 @@ import isError from 'is-error'; +import { ipcRenderer as ipc } from 'electron'; import { createAction } from 'redux-actions'; import { ArchiveTypes } from '../buttercup/types'; -import { updateApplicationMenu } from '../buttercup/store'; import { showPasswordDialog } from '../../renderer/system/dialog'; import { reloadGroups } from './groups'; import { @@ -12,7 +12,7 @@ import { ARCHIVES_SET_CURRENT, ARCHIVES_UPDATE } from './types'; -import { getArchive } from '../selectors'; +import { getArchive, getCurrentArchiveId } from '../selectors'; import { addArchiveToArchiveManager, removeArchiveFromArchiveManager, @@ -29,9 +29,12 @@ export const updateArchive = createAction(ARCHIVES_UPDATE); // Impure Buttercup actions export const loadArchive = payload => (dispatch, getState) => { + if (payload === getCurrentArchiveId(getState())) { + return; + } dispatch(setCurrentArchive(payload)); dispatch(reloadGroups()); - updateApplicationMenu(getState()); + ipc.send('archive-list-updated'); }; export const removeArchive = payload => () => { diff --git a/src/shared/buttercup/store.js b/src/shared/buttercup/store.js index b467fb2f..cecbee2a 100644 --- a/src/shared/buttercup/store.js +++ b/src/shared/buttercup/store.js @@ -6,14 +6,6 @@ import { lockArchiveInStore, unlockArchiveInStore, } from '../actions/archives.js'; -import { getAllArchives, getCurrentArchiveId } from '../selectors'; - -export function updateApplicationMenu(state) { - ipc.send('archive-list-updated', { - archives: getAllArchives(state), - currentArchiveId: getCurrentArchiveId(state) - }); -}; export function linkArchiveManagerToStore(store) { const archiveManager = getSharedArchiveManager(); @@ -21,18 +13,18 @@ export function linkArchiveManagerToStore(store) { // attach listeners archiveManager.on('sourceAdded', function __handleNewSource(sourceInfo) { store.dispatch(addArchiveToStore(sourceInfo)); - updateApplicationMenu(store.getState()); + ipc.send('archive-list-updated'); }); archiveManager.on('sourceRehydrated', function __handleRehydratedSource(sourceInfo) { store.dispatch(lockArchiveInStore(sourceInfo.id)); - updateApplicationMenu(store.getState()); + ipc.send('archive-list-updated'); }); archiveManager.on('sourceUnlocked', function __handleUnlockedSource(sourceInfo) { store.dispatch(unlockArchiveInStore(sourceInfo.id)); }); archiveManager.on('sourceRemoved', function __handleRemovedSource(sourceInfo) { store.dispatch(removeArchiveFromStore(sourceInfo.id)); - updateApplicationMenu(store.getState()); + ipc.send('archive-list-updated'); }); // rehydrate diff --git a/src/shared/reducers/archives.js b/src/shared/reducers/archives.js index 82192836..12e67675 100644 --- a/src/shared/reducers/archives.js +++ b/src/shared/reducers/archives.js @@ -23,7 +23,6 @@ export default function archivesReducer(state = [], action) { } case ARCHIVES_LOCK: case ARCHIVES_UNLOCK: - console.log(action.type); return state.map(archive => { if (archive.id === action.payload) { return { diff --git a/src/shared/reducers/index.js b/src/shared/reducers/index.js index fadb6063..05064140 100644 --- a/src/shared/reducers/index.js +++ b/src/shared/reducers/index.js @@ -9,6 +9,7 @@ import update from './update'; export default function getRootReducer(scope = 'main') { let reducers = { settingsByArchiveId, + currentArchive, archives, update, settings, @@ -17,7 +18,6 @@ export default function getRootReducer(scope = 'main') { if (scope === 'renderer') { reducers = { ...reducers, - currentArchive, groups, entries, form, From 9875d5d5488c8b52c1de5a187ca9a141fe6e4906 Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Thu, 6 Jul 2017 20:46:54 +0300 Subject: [PATCH 22/39] Keyboard shutcut for condenced sidebar --- src/main/menu.js | 26 ++++++++++++++++++++--- src/renderer/components/workspace.js | 5 +++-- src/renderer/containers/workspace.js | 5 +++-- src/renderer/index.js | 13 ------------ src/shared/actions/settings.js | 10 +++++++-- src/shared/actions/types.js | 3 ++- src/shared/reducers/settings.js | 31 ++++++++++++++-------------- src/shared/selectors.js | 9 +------- src/shared/store/configure-store.js | 1 + 9 files changed, 57 insertions(+), 46 deletions(-) diff --git a/src/main/menu.js b/src/main/menu.js index e5caa0ea..c07b34b5 100644 --- a/src/main/menu.js +++ b/src/main/menu.js @@ -1,6 +1,7 @@ import { app, shell, Menu } from 'electron'; import { isOSX } from '../shared/utils/platform'; -import { getCurrentArchiveId, getAllArchives } from '../shared/selectors'; +import { getCurrentArchiveId, getAllArchives, getSetting } from '../shared/selectors'; +import { setSetting } from '../shared/actions/settings'; import { openFile, openFileForImporting, newFile } from './lib/files'; import { getWindowManager } from './lib/window-manager'; import { getMainWindow } from './utils/window'; @@ -76,6 +77,7 @@ const defaultTemplate = [ { label: 'View', submenu: [ + { type: 'separator' }, { role: 'reload' }, { role: 'forcereload' }, { role: 'toggledevtools' }, @@ -159,10 +161,27 @@ export function setupMenu(store) { const state = store.getState(); const archives = getAllArchives(state); const currentArchiveId = getCurrentArchiveId(state); + let condenced = Boolean(getSetting(state, 'condencedSidebar')); - const indexToUpdate = isOSX() ? 4 : 3; const template = defaultTemplate.map((item, i) => { - if (i === indexToUpdate) { + if (i === (isOSX() ? 3 : 2)) { + return { + ...item, + submenu: [ + { + label: 'Condenced Sidebar', + type: 'checkbox', + checked: condenced, + accelerator: 'CmdOrCtrl+B', + click: () => { + condenced = !condenced; + store.dispatch(setSetting('condencedSidebar', condenced)); + } + }, + ...item.submenu + ] + }; + } else if (i === (isOSX() ? 4 : 3)) { return { ...item, submenu: [ @@ -185,5 +204,6 @@ export function setupMenu(store) { } return item; }); + Menu.setApplicationMenu(Menu.buildFromTemplate(template)); } diff --git a/src/renderer/components/workspace.js b/src/renderer/components/workspace.js index e5798b51..62f489cc 100644 --- a/src/renderer/components/workspace.js +++ b/src/renderer/components/workspace.js @@ -11,10 +11,10 @@ const Primary = styled(Box)` position: relative; `; -const Workspace = ({ currentArchive, update, installUpdate, setColumnSize, columnSizes }) => { +const Workspace = ({ currentArchive, update, installUpdate, setColumnSize, columnSizes, condencedSidebar }) => { return ( - + ({ - columnSizes: getColumnSizes(state), + columnSizes: getSetting(state, 'columnSizes'), + condencedSidebar: getSetting(state, 'condencedSidebar'), currentArchive: getCurrentArchive(state), update: state.update, }), diff --git a/src/renderer/index.js b/src/renderer/index.js index 1fc48fd7..645d53c5 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -8,7 +8,6 @@ import { getSharedArchiveManager } from '../shared/buttercup/archive'; import { linkArchiveManagerToStore } from '../shared/buttercup/store'; import { addArchiveFromSource, loadOrUnlockArchive, setCurrentArchive } from '../shared/actions/archives'; import * as groupActions from '../shared/actions/groups'; -import { setWindowSize } from '../shared/actions/settings'; import { importHistoryFromRequest, showHistoryPasswordPrompt } from '../shared/buttercup/import'; import { setupShortcuts } from './system/shortcuts'; import Root from './containers/root'; @@ -40,18 +39,6 @@ ipc.on('set-current-archive', (e, payload) => { store.dispatch(loadOrUnlockArchive(payload)); }); -window.test = () => { - store.dispatch(addArchiveFromSource({ - type: 'ipc', - path: '/Users/sallar/Desktop/sallar.bcup', - isNew: false - })); -}; - -ipc.on('size-change', size => { - store.dispatch(setWindowSize(size)); -}); - ipc.on('import-history', (e, request) => { importHistoryFromRequest(request); store.dispatch(groupActions.reloadGroups()); diff --git a/src/shared/actions/settings.js b/src/shared/actions/settings.js index 6e16e0af..5076f984 100644 --- a/src/shared/actions/settings.js +++ b/src/shared/actions/settings.js @@ -1,8 +1,14 @@ import { createAction } from 'redux-actions'; import { - WINDOW_SIZE_SET, COLUMN_SIZE_SET, + SETTING_SET, } from './types'; export const setColumnSize = createAction(COLUMN_SIZE_SET); -export const setWindowSize = createAction(WINDOW_SIZE_SET); +export const setSetting = (key, value) => ({ + type: SETTING_SET, + payload: { + key, + value + } +}); diff --git a/src/shared/actions/types.js b/src/shared/actions/types.js index a621a688..4bb09968 100644 --- a/src/shared/actions/types.js +++ b/src/shared/actions/types.js @@ -26,7 +26,8 @@ export const GROUPS_UPDATE = 'buttercup/groups/UPDATE'; export const TREE_ADD_EXPANDED_KEY = 'buttercup/ui/TREE_ADD_EXPANDED_KEY'; export const TREE_SET_EXPANDED_KEYS = 'buttercup/ui/TREE_SET_EXPANDED_KEYS'; export const COLUMN_SIZE_SET = 'buttercup/ui/COLUMN_SIZE_SET'; -export const WINDOW_SIZE_SET = 'buttercup/ui/WINDOW_SIZE_SET'; + +export const SETTING_SET = 'buttercup/settings/SET'; export const SET_WORKSPACE = 'buttercup/workspace/SET'; diff --git a/src/shared/reducers/settings.js b/src/shared/reducers/settings.js index 8e073566..5a57def6 100644 --- a/src/shared/reducers/settings.js +++ b/src/shared/reducers/settings.js @@ -1,7 +1,5 @@ -import { combineReducers } from 'redux'; import uiReducer from './ui'; -import { createIdentityReducer } from '../utils/redux'; -import { ARCHIVES_REMOVE, COLUMN_SIZE_SET, WINDOW_SIZE_SET } from '../actions/types'; +import { ARCHIVES_REMOVE, COLUMN_SIZE_SET, SETTING_SET } from '../actions/types'; function itemReducer(state = {}, action) { return { @@ -25,24 +23,27 @@ export function settingsByArchiveId(state = {}, action) { return state; } -function columnSizes(state = { tree: 230, entries: 230 }, action) { +const DEFAULT_SETTINGS = { + columnSizes: { tree: 230, entries: 230 }, + condencedSidebar: false +}; + +export function settings(state = DEFAULT_SETTINGS, action) { switch (action.type) { case COLUMN_SIZE_SET: return { ...state, - [action.payload.name]: action.payload.size + columnSizes: { + ...state.columnSizes, + [action.payload.name]: action.payload.size + } + }; + case SETTING_SET: + return { + ...state, + [action.payload.key]: action.payload.value }; default: return state; } } - -const windowSize = createIdentityReducer( - WINDOW_SIZE_SET, - [950, 700] -); - -export const settings = combineReducers({ - columnSizes, - windowSize -}); diff --git a/src/shared/selectors.js b/src/shared/selectors.js index 6701277c..d957c620 100644 --- a/src/shared/selectors.js +++ b/src/shared/selectors.js @@ -27,20 +27,13 @@ export const getCurrentArchiveSettings = createSelector( (settings, archiveId) => settings[archiveId] ); -// UI -> +export const getSetting = (state, key) => state.settings[key]; export const getExpandedKeys = createSelector( getCurrentArchiveSettings, archive => archive ? archive.ui.treeExpandedKeys : [] ); -export const getColumnSizes = state => state.settings.columnSizes; - -export const getWindowSize = createSelector( - getCurrentArchiveSettings, - archive => archive ? archive.ui.windowSize : [950, 700] -); - // Entries -> export const getAllEntries = state => state.entries.byId; diff --git a/src/shared/store/configure-store.js b/src/shared/store/configure-store.js index b2c7fb97..7b219a22 100644 --- a/src/shared/store/configure-store.js +++ b/src/shared/store/configure-store.js @@ -33,6 +33,7 @@ export default function configureStore(initialState, scope = 'main') { settingsByArchiveId: true, archives: true, update: true, + settings: true }; if (scope === 'renderer') { From 92c9ca4b18e7919e29e20929d2ef20aba17ce77d Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Sat, 8 Jul 2017 21:13:00 +0300 Subject: [PATCH 23/39] Refactor sidebar item --- src/renderer/components/avatar.js | 105 ------------- src/renderer/components/sidebar-item.js | 193 ++++++++++++++++++++++++ src/renderer/components/sidebar.js | 116 +------------- src/renderer/system/menu.js | 4 +- 4 files changed, 197 insertions(+), 221 deletions(-) delete mode 100644 src/renderer/components/avatar.js create mode 100644 src/renderer/components/sidebar-item.js diff --git a/src/renderer/components/avatar.js b/src/renderer/components/avatar.js deleted file mode 100644 index d4126004..00000000 --- a/src/renderer/components/avatar.js +++ /dev/null @@ -1,105 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; -import styled from 'styled-components'; -import capitalize from 'lodash/capitalize'; -import { GithubPicker } from 'react-color'; -import Portal from 'react-portal'; -import CogIcon from 'react-icons/lib/md/brush'; - -const Picker = styled.div` - position: fixed; - top: ${props => props.top + 20}px; - left: ${props => props.left + 5}px; -`; - -const CogButton = styled.div` - color: #fff; - position: absolute; - left: -5px; - top: calc(100% - 5px); - display: none; - - svg { - width: 12px; - height: 12px; - display: block; - } -`; - -class Avatar extends Component { - state = { - isPickerOpen: false, - top: 0, - left: 0 - }; - - static propTypes = { - archive: PropTypes.object, - className: PropTypes.string, - onUpdate: PropTypes.func - }; - - handleClick = e => { - e.stopPropagation(); - const bodyRect = document.body.getBoundingClientRect(); - const targetRect = e.target.getBoundingClientRect(); - this.setState({ - isPickerOpen: true, - top: targetRect.top - bodyRect.top, - left: targetRect.left - bodyRect.left - }); - } - - handlePickerClose = () => { - this.setState({ isPickerOpen: false }); - } - - handleColorChange = color => { - this.props.onUpdate({ - ...this.props.archive, - color: color.hex - }); - } - - render() { - const { archive, className } = this.props; - return ( -
    - - {capitalize(archive.name.substring(0, 2))} - - - - - - - - - -
    - ); - } -} - -export default styled(Avatar)` - width: 3rem; - height: 3rem; - border-radius: 50px; - border: 2px solid rgba(255, 255, 255, .2); - font-weight: 700; - font-size: 1rem; - display: flex; - align-items: center; - justify-content: center; - position: relative; - - &:hover { - .cog { - display: block; - } - } -`; diff --git a/src/renderer/components/sidebar-item.js b/src/renderer/components/sidebar-item.js new file mode 100644 index 00000000..a2a5da33 --- /dev/null +++ b/src/renderer/components/sidebar-item.js @@ -0,0 +1,193 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import styled from 'styled-components'; +import capitalize from 'lodash/capitalize'; +import LockOpen from 'react-icons/lib/md/lock-open'; +import LockClosed from 'react-icons/lib/md/lock-outline'; +import { GithubPicker } from 'react-color'; +import Portal from 'react-portal'; +import { brands } from '../../shared/buttercup/brands'; +import { showContextMenu } from '../system/menu'; + +const Wrapper = styled.li` + display: flex; + align-items: center; + color: #fff; + background-color: ${props => props.active ? 'rgba(255, 255, 255, .1)' : 'transparent'}; + padding: var(--spacing-half) var(--spacing-one); + cursor: ${props => props.locked ? 'pointer' : 'default'} !important; + + figure { + margin: 0; + padding: 0; + flex: 0 0 3rem; + width: 3rem; + height: 3rem; + display: flex; + justify-content: center; + align-items: center; + + img { + width: 100%; + display: block; + border-radius: 50%; + border: 3px solid rgba(255, 255, 255, .2); + } + } + + .status { + font-weight: 300; + font-size: .75em; + color: ${props => props.locked ? 'var(--red)' : 'var(--gray-dark)'}; + text-transform: uppercase; + display: block; + + svg { + vertical-align: -2px !important; + margin-right: 3px; + height: 12px; + width: 12px; + } + } + + section { + font-size: .9em; + flex: 1; + min-width: 0; + padding-left: var(--spacing-one); + + div { + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + } +`; + +const Avatar = styled.div` + width: 3rem; + height: 3rem; + border-radius: 50px; + border: 2px solid rgba(255, 255, 255, .2); + background-color: ${props => props.color}; + font-weight: 400; + font-size: 1rem; + display: flex; + align-items: center; + justify-content: center; + position: relative; + + &:hover { + .cog { + display: block; + } + } +`; + +const PickerWrapper = styled.div` + position: fixed; + top: ${props => props.top + 20}px; + left: ${props => props.left + 5}px; +`; + +class SidebarItem extends Component { + static propTypes = { + archive: PropTypes.object, + active: PropTypes.bool, + condenced: PropTypes.bool, + index: PropTypes.number, + onClick: PropTypes.func, + onRemoveClick: PropTypes.func, + onArchiveUpdate: PropTypes.func + }; + + state = { + isPickerOpen: false, + top: 0, + left: 0 + }; + + handleContextMenu = () => { + const { status, name } = this.props.archive; + showContextMenu([{ + label: `${status === 'locked' ? 'Unlock' : 'Open'} ${name}`, + accelerator: `CmdOrCtrl+${this.props.index + 1}`, + click: this.props.onClick + }, { + label: `Remove ${name}`, + click: this.props.onRemoveClick + }, { + type: 'separator' + }, { + label: 'Change Color', + click: this.showColorPopup + }]); + } + + showColorPopup = () => { + const el = this.avatarRef; + const bodyRect = document.body.getBoundingClientRect(); + const targetRect = el.getBoundingClientRect(); + this.setState({ + isPickerOpen: true, + top: (targetRect.top - bodyRect.top) + el.clientHeight - 10, + left: targetRect.left - bodyRect.left + }); + } + + handlePickerClose = () => { + this.setState({ isPickerOpen: false }); + } + + handleColorChange = color => { + this.props.onArchiveUpdate({ + ...this.props.archive, + color: color.hex + }); + } + + render() { + const { archive, onClick, active, condenced } = this.props; + const { name, color, status, type } = archive; + const locked = status === 'locked'; + + const formattedName = capitalize(name.replace('.bcup', '')); + const briefName = capitalize(name.substring(0, 2)); + + return ( + + { + this.avatarRef = ref; + }}> + {briefName} + + + + + + + {!condenced &&
    +
    {formattedName}
    + + {locked ? : } + {status} + +
    } +
    + ); + } +} + +export default SidebarItem; diff --git a/src/renderer/components/sidebar.js b/src/renderer/components/sidebar.js index 7f3c5601..52e0f248 100644 --- a/src/renderer/components/sidebar.js +++ b/src/renderer/components/sidebar.js @@ -1,16 +1,13 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; import ArchiveIcon from 'react-icons/lib/md/add'; -import LockOpen from 'react-icons/lib/md/lock-open'; -import LockClosed from 'react-icons/lib/md/lock-outline'; import { Button } from '@buttercup/ui'; import styled from 'styled-components'; -import { brands } from '../../shared/buttercup/brands'; import { isOSX } from '../../shared/utils/platform'; import { showContextMenu } from '../system/menu'; import EmptyView from './empty-view'; -import Avatar from './avatar'; import BaseColumn from './column'; +import SidebarItem from './sidebar-item'; const Column = styled(BaseColumn)` width: ${props => props.condenced ? 'var(--sidebar-width-condenced)' : 'var(--sidebar-width)'}; @@ -24,115 +21,6 @@ const ArchiveList = styled.ul` padding: 0; `; -const FileItem = styled.li` - display: flex; - align-items: center; - color: #fff; - background-color: ${props => props.active ? 'rgba(255, 255, 255, .1)' : 'transparent'}; - padding: var(--spacing-half) var(--spacing-one); - cursor: ${props => props.locked ? 'pointer' : 'default'} !important; - - &:active { - background-color: rgba(255, 255, 255, .2); - } - - figure { - margin: 0; - padding: 0; - flex: 0 0 3rem; - width: 3rem; - height: 3rem; - display: flex; - justify-content: center; - align-items: center; - - img { - width: 100%; - display: block; - border-radius: 50%; - border: 3px solid rgba(255, 255, 255, .2); - } - } - - .status { - font-weight: 300; - font-size: .75em; - color: ${props => props.locked ? 'var(--red)' : 'var(--gray-dark)'}; - text-transform: uppercase; - display: block; - - svg { - vertical-align: -2px !important; - margin-right: 3px; - height: 12px; - width: 12px; - } - } - - section { - font-size: .9em; - flex: 1; - min-width: 0; - padding-left: var(--spacing-one); - - div { - width: 100%; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - } -`; - -const File = ({ archive, onClick, onRemoveClick, onArchiveUpdate, active, index, condenced }) => { - // const { base, dir } = parsePath(archive.path); - const { name } = archive; - return ( - { - e.stopPropagation(); - showContextMenu([{ - label: `${archive.status === 'locked' ? 'Unlock' : 'Open'} ${name}`, - accelerator: `CmdOrCtrl+${index + 1}`, - click: onClick - }, { - label: `Remove ${name}`, - click: onRemoveClick - }]); - }} - > - {/*
    - -
    */} - - {!condenced &&
    -
    {name}
    - - {archive.status === 'locked' ? : } - {archive.status} - -
    } -
    - ); -}; - -File.propTypes = { - archive: PropTypes.object, - active: PropTypes.bool, - condenced: PropTypes.bool, - index: PropTypes.number, - onClick: PropTypes.func, - onRemoveClick: PropTypes.func, - onArchiveUpdate: PropTypes.func -}; - class RecentFiles extends Component { static propTypes = { condenced: PropTypes.bool, @@ -196,7 +84,7 @@ class RecentFiles extends Component { {archives.map((archive, i) => - Date: Mon, 10 Jul 2017 21:39:20 +0300 Subject: [PATCH 24/39] Brand badges on avatars --- src/renderer/components/sidebar-item.js | 53 ++++++++++-------- .../styles/img/logos/floppy-square.png | Bin 0 -> 290 bytes src/renderer/styles/img/logos/floppy.svg | 12 ++++ .../styles/img/logos/owncloud-square.svg | 4 +- src/shared/buttercup/brands.js | 6 +- 5 files changed, 46 insertions(+), 29 deletions(-) create mode 100644 src/renderer/styles/img/logos/floppy-square.png create mode 100644 src/renderer/styles/img/logos/floppy.svg diff --git a/src/renderer/components/sidebar-item.js b/src/renderer/components/sidebar-item.js index a2a5da33..fcc82733 100644 --- a/src/renderer/components/sidebar-item.js +++ b/src/renderer/components/sidebar-item.js @@ -17,30 +17,13 @@ const Wrapper = styled.li` padding: var(--spacing-half) var(--spacing-one); cursor: ${props => props.locked ? 'pointer' : 'default'} !important; - figure { - margin: 0; - padding: 0; - flex: 0 0 3rem; - width: 3rem; - height: 3rem; - display: flex; - justify-content: center; - align-items: center; - - img { - width: 100%; - display: block; - border-radius: 50%; - border: 3px solid rgba(255, 255, 255, .2); - } - } - .status { font-weight: 300; font-size: .75em; color: ${props => props.locked ? 'var(--red)' : 'var(--gray-dark)'}; text-transform: uppercase; display: block; + margin-top: .3em; svg { vertical-align: -2px !important; @@ -85,6 +68,27 @@ const Avatar = styled.div` } `; +const Icon = styled.figure` + margin: 0; + padding: 0; + position: absolute; + right: 0; + bottom: 0; + display: flex; + align-items: center; + justify-content: center; + border-radius: 50%; + background-color: #fff; + width: 18px; + height: 18px; + transform: translate(20%, 20%); + + img { + width: 14px; + display: block; + } +`; + const PickerWrapper = styled.div` position: fixed; top: ${props => props.top + 20}px; @@ -115,13 +119,13 @@ class SidebarItem extends Component { accelerator: `CmdOrCtrl+${this.props.index + 1}`, click: this.props.onClick }, { - label: `Remove ${name}`, - click: this.props.onRemoveClick + label: 'Change Color', + click: this.showColorPopup }, { type: 'separator' }, { - label: 'Change Color', - click: this.showColorPopup + label: `Remove ${name}`, + click: this.props.onRemoveClick }]); } @@ -168,6 +172,9 @@ class SidebarItem extends Component { this.avatarRef = ref; }}> {briefName} + {condenced && brands[type].remote && + {brands[type].name} + } {formattedName}
    {locked ? : } - {status} + {brands[type].name} } diff --git a/src/renderer/styles/img/logos/floppy-square.png b/src/renderer/styles/img/logos/floppy-square.png new file mode 100644 index 0000000000000000000000000000000000000000..82bc3967fe45d05a137ef34a028831f1ce5dac66 GIT binary patch literal 290 zcmV+-0p0$IP) + + + + + + + + + + + \ No newline at end of file diff --git a/src/renderer/styles/img/logos/owncloud-square.svg b/src/renderer/styles/img/logos/owncloud-square.svg index be2fc8bf..3fe3a905 100644 --- a/src/renderer/styles/img/logos/owncloud-square.svg +++ b/src/renderer/styles/img/logos/owncloud-square.svg @@ -1,11 +1,11 @@ - + Slice Created with Sketch. - + diff --git a/src/shared/buttercup/brands.js b/src/shared/buttercup/brands.js index 34a2bafa..9622145d 100644 --- a/src/shared/buttercup/brands.js +++ b/src/shared/buttercup/brands.js @@ -1,10 +1,8 @@ import dropboxLogo from '../../renderer/styles/img/logos/dropbox.svg'; -import dropboxLogoSquare from '../../renderer/styles/img/logos/dropbox-square.svg'; import ownCloud from '../../renderer/styles/img/logos/owncloud.png'; import ownCloudSquare from '../../renderer/styles/img/logos/owncloud-square.svg'; import nextCloud from '../../renderer/styles/img/logos/nextcloud.svg'; import nextCloudSquare from '../../renderer/styles/img/logos/nextcloud-square.svg'; -import fileSystemLogo from '../../renderer/styles/img/icons/disk-player.svg'; import webDAV from '../../renderer/styles/img/logos/webdav.png'; import { ArchiveTypes } from './types'; @@ -13,7 +11,7 @@ export const brands = { remote: true, name: 'Dropbox', logo: dropboxLogo, - icon: dropboxLogoSquare + icon: dropboxLogo }, [ArchiveTypes.OWNCLOUD]: { remote: true, @@ -37,6 +35,6 @@ export const brands = { remote: false, name: 'File System', logo: '', - icon: fileSystemLogo + icon: '' } }; From 86234389c64c8720956640dcdc37ce52f751f912 Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Sun, 16 Jul 2017 15:44:40 +0300 Subject: [PATCH 25/39] Fix Import --- src/main/lib/buttercup.js | 7 +- src/main/lib/files.js | 80 ++++++++--------------- src/main/menu.js | 115 ++++++++++++++++++--------------- src/renderer/index.js | 19 +++--- src/shared/actions/archives.js | 9 +++ src/shared/buttercup/import.js | 15 +++-- src/shared/buttercup/types.js | 24 +++++++ 7 files changed, 146 insertions(+), 123 deletions(-) diff --git a/src/main/lib/buttercup.js b/src/main/lib/buttercup.js index 2512ceba..6e41f060 100644 --- a/src/main/lib/buttercup.js +++ b/src/main/lib/buttercup.js @@ -1,4 +1,5 @@ import { importFromKDBX, importFrom1PIF, importFromLastPass } from 'buttercup-importer'; +import { ImportTypes } from '../../shared/buttercup/types'; /** * Import archive from file @@ -10,11 +11,11 @@ import { importFromKDBX, importFrom1PIF, importFromLastPass } from 'buttercup-im */ export function importArchive(type, filename, password) { switch (type) { - case 'kdbx': + case ImportTypes.KEEPASS: return importFromKDBX(filename, password).then(archive => archive.getHistory()); - case '1pif': + case ImportTypes.ONE_PASSWORD: return importFrom1PIF(filename).then(archive => archive.getHistory()); - case 'csv': + case ImportTypes.LASTPASS: return importFromLastPass(filename).then(archive => archive.getHistory()); default: throw new Error('Wrong import type provided'); diff --git a/src/main/lib/files.js b/src/main/lib/files.js index bcf269de..c58db47f 100644 --- a/src/main/lib/files.js +++ b/src/main/lib/files.js @@ -1,6 +1,6 @@ import path from 'path'; -import { BrowserWindow, dialog, ipcMain as ipc } from 'electron'; -import { ArchiveTypes } from '../../shared/buttercup/types'; +import { dialog, ipcMain as ipc } from 'electron'; +import { ArchiveTypes, ImportTypeInfo } from '../../shared/buttercup/types'; import { isWindows } from '../../shared/utils/platform'; import { getWindowManager } from './window-manager'; import { importArchive } from './buttercup'; @@ -114,25 +114,12 @@ export function newFile(focusedWindow) { /** * @param {BrowserWindow} focusedWindow * @param {string} type + * @param {string} archiveId */ -const showImportDialog = function(focusedWindow, type) { - const types = { - '1pif': { - password: false, - name: '1Password' - }, - 'kdbx': { - password: true, - name: 'KeePass' - }, - 'csv': { - password: false, - name: 'LastPass' - } - }; - const typeInfo = types[type]; +const showImportDialog = function(focusedWindow, type, archiveId) { + const typeInfo = ImportTypeInfo[type]; - if (!Object.keys(types).includes(type)) { + if (!typeInfo) { throw new Error('Invalid import type requested'); } @@ -146,57 +133,42 @@ const showImportDialog = function(focusedWindow, type) { }; const handleSuccess = history => { - focusedWindow.webContents.send('import-history', { history }); + focusedWindow.webContents.send('import-history', { history, archiveId }); }; - const [ filename ] = dialog.showOpenDialog(focusedWindow, { + dialog.showOpenDialog(focusedWindow, { filters: [{ name: `${typeInfo.name} Archives`, - extensions: [type] + extensions: [typeInfo.extension] }], title: `Load a ${typeInfo.name} archive` - }); - - if (!filename) { - return; - } - - if (typeInfo.password) { - focusedWindow.webContents.send('import-history-prompt'); - ipc.once('import-history-prompt-resp', password => { - importArchive(type, filename, password) + }, ([ filename ]) => { + if (typeInfo.password) { + focusedWindow.webContents.send('import-history-prompt', type); + ipc.once('import-history-prompt-resp', (e, password) => { + importArchive(type, filename, password) + .then(handleSuccess) + .catch(handleError); + }); + } else { + importArchive(type, filename) .then(handleSuccess) .catch(handleError); - }); - } else { - importArchive(type, filename) - .then(handleSuccess) - .catch(handleError); - } + } + }); }; /** * @param {BrowserWindow} focusedWindow * @param {string} type + * @param {string} archiveId */ -export function openFileForImporting(focusedWindow, type) { - // if (focusedWindow && focusedWindow.isIntro()) { - // dialog.showMessageBox(focusedWindow, { - // title: 'Importing is not available', - // message: 'To import an archive file, you must unlock a Buttercup archive first.' - // }); - // return; - // } +export function openFileForImporting(focusedWindow, type, archiveId) { + focusedWindow = getMainWindow(focusedWindow); if (!focusedWindow) { - focusedWindow = BrowserWindow.getFocusedWindow(); + throw new Error('Import function should not be running without the main window running.'); } - if (!focusedWindow) { - windowManager.buildWindowOfType('main', win => { - showImportDialog(win, type); - }); - return; - } - showImportDialog(focusedWindow, type); + showImportDialog(focusedWindow, type, archiveId); } diff --git a/src/main/menu.js b/src/main/menu.js index c07b34b5..245fa602 100644 --- a/src/main/menu.js +++ b/src/main/menu.js @@ -2,6 +2,7 @@ import { app, shell, Menu } from 'electron'; import { isOSX } from '../shared/utils/platform'; import { getCurrentArchiveId, getAllArchives, getSetting } from '../shared/selectors'; import { setSetting } from '../shared/actions/settings'; +import { ImportTypeInfo } from '../shared/buttercup/types'; import { openFile, openFileForImporting, newFile } from './lib/files'; import { getWindowManager } from './lib/window-manager'; import { getMainWindow } from './utils/window'; @@ -35,23 +36,7 @@ const defaultTemplate = [ }, // @TODO: Gray out this option dynamically // when target is not available - { - label: 'Import', - submenu: [ - { - label: 'From KeePass archive (.kdbx)', - click: (item, focusedWindow) => openFileForImporting(focusedWindow, 'kdbx') - }, - { - label: 'From 1Password archive (.1pif)', - click: (item, focusedWindow) => openFileForImporting(focusedWindow, '1pif') - }, - { - label: 'From LastPass archive (.csv)', - click: (item, focusedWindow) => openFileForImporting(focusedWindow, 'csv') - } - ] - }, + {}, { type: 'separator' }, @@ -164,44 +149,72 @@ export function setupMenu(store) { let condenced = Boolean(getSetting(state, 'condencedSidebar')); const template = defaultTemplate.map((item, i) => { - if (i === (isOSX() ? 3 : 2)) { - return { - ...item, - submenu: [ - { - label: 'Condenced Sidebar', - type: 'checkbox', - checked: condenced, - accelerator: 'CmdOrCtrl+B', - click: () => { - condenced = !condenced; - store.dispatch(setSetting('condencedSidebar', condenced)); + // OSX has one more menu item + const index = isOSX() ? i : i + 1; + + switch (index) { + // Archive / File Menu: + case 1: + return { + ...item, + submenu: item.submenu.map((sub, i) => { + if (i === 4) { + return { + label: 'Import', + submenu: Object.entries(ImportTypeInfo).map(([typeKey, type]) => ({ + label: `From ${type.name} archive (.${type.extension})`, + submenu: archives.map(archive => ({ + label: `To ${archive.name}`, + enabled: archive.status === 'unlocked', + click: (item, focusedWindow) => openFileForImporting(focusedWindow, typeKey, archive.id) + })) + })) + }; } - }, - ...item.submenu - ] - }; - } else if (i === (isOSX() ? 4 : 3)) { - return { - ...item, - submenu: [ - ...item.submenu, - { type: 'separator' }, - ...archives.map((archive, index) => ({ - label: archive.name, - accelerator: `CmdOrCtrl+${index + 1}`, - type: 'checkbox', - click: () => { - const win = getMainWindow(); - if (win) { - win.webContents.send('set-current-archive', archive.id); + return sub; + }) + }; + // View Menu: + case 3: + return { + ...item, + submenu: [ + { + label: 'Condenced Sidebar', + type: 'checkbox', + checked: condenced, + accelerator: 'CmdOrCtrl+B', + click: () => { + condenced = !condenced; + store.dispatch(setSetting('condencedSidebar', condenced)); } }, - checked: (archive.id === currentArchiveId) - })) - ] - }; + ...item.submenu + ] + }; + // Window Menu: + case 4: + return { + ...item, + submenu: [ + ...item.submenu, + { type: 'separator' }, + ...archives.map((archive, index) => ({ + label: archive.name, + accelerator: `CmdOrCtrl+${index + 1}`, + type: 'checkbox', + click: () => { + const win = getMainWindow(); + if (win) { + win.webContents.send('set-current-archive', archive.id); + } + }, + checked: (archive.id === currentArchiveId) + })) + ] + }; } + return item; }); diff --git a/src/renderer/index.js b/src/renderer/index.js index 645d53c5..fa8e94a7 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -6,9 +6,13 @@ import { AppContainer } from 'react-hot-loader'; import configureStore from '../shared/store/configure-store'; import { getSharedArchiveManager } from '../shared/buttercup/archive'; import { linkArchiveManagerToStore } from '../shared/buttercup/store'; -import { addArchiveFromSource, loadOrUnlockArchive, setCurrentArchive } from '../shared/actions/archives'; -import * as groupActions from '../shared/actions/groups'; -import { importHistoryFromRequest, showHistoryPasswordPrompt } from '../shared/buttercup/import'; +import { + addArchiveFromSource, + loadOrUnlockArchive, + setCurrentArchive, + importHistoryIntoArchive +} from '../shared/actions/archives'; +import { showHistoryPasswordPrompt } from '../shared/buttercup/import'; import { setupShortcuts } from './system/shortcuts'; import Root from './containers/root'; @@ -39,13 +43,12 @@ ipc.on('set-current-archive', (e, payload) => { store.dispatch(loadOrUnlockArchive(payload)); }); -ipc.on('import-history', (e, request) => { - importHistoryFromRequest(request); - store.dispatch(groupActions.reloadGroups()); +ipc.on('import-history', (e, payload) => { + store.dispatch(importHistoryIntoArchive(payload)); }); -ipc.on('import-history-prompt', () => { - showHistoryPasswordPrompt() +ipc.on('import-history-prompt', (e, payload) => { + showHistoryPasswordPrompt(payload) .then(result => { ipc.send('import-history-prompt-resp', result); }).catch(() => { diff --git a/src/shared/actions/archives.js b/src/shared/actions/archives.js index bdde4433..f6d4ca03 100644 --- a/src/shared/actions/archives.js +++ b/src/shared/actions/archives.js @@ -1,7 +1,10 @@ +// @ts-check + import isError from 'is-error'; import { ipcRenderer as ipc } from 'electron'; import { createAction } from 'redux-actions'; import { ArchiveTypes } from '../buttercup/types'; +import { importHistory } from '../buttercup/import'; import { showPasswordDialog } from '../../renderer/system/dialog'; import { reloadGroups } from './groups'; import { @@ -131,3 +134,9 @@ export const addArchiveFromSource = payload => dispatch => { break; } }; + +export const importHistoryIntoArchive = payload => (dispatch, getState) => { + const { archiveId, history } = payload; + importHistory(archiveId, history); + dispatch(reloadGroups()); +}; diff --git a/src/shared/buttercup/import.js b/src/shared/buttercup/import.js index 11bc51b7..8ff20a10 100644 --- a/src/shared/buttercup/import.js +++ b/src/shared/buttercup/import.js @@ -1,23 +1,24 @@ import { Archive } from 'buttercup-web'; import { showPasswordDialog } from '../../renderer/system/dialog'; import { getArchive, saveWorkspace } from './archive'; +import { ImportTypeInfo } from './types'; -export function importHistoryFromRequest(request) { - const { history } = request; +export function importHistory(archiveId, history) { const tempArchive = Archive.createFromHistory(history); - const mainArchive = getArchive(); + const mainArchive = getArchive(archiveId); tempArchive.getGroups().forEach(group => { group.moveTo(mainArchive); }); - saveWorkspace(); + saveWorkspace(archiveId); } -export function showHistoryPasswordPrompt() { +export function showHistoryPasswordPrompt(type) { + const typeInfo = ImportTypeInfo[type]; return showPasswordDialog(null, { - title: 'KeePass Password', - confirmButtonText: 'Import KeePass Archive', + title: `${typeInfo.name} Archive Password`, + confirmButtonText: `Import ${typeInfo.name} Archive`, cancelButtonText: 'Cancel Import' }); } diff --git a/src/shared/buttercup/types.js b/src/shared/buttercup/types.js index e455a1fc..c421494f 100644 --- a/src/shared/buttercup/types.js +++ b/src/shared/buttercup/types.js @@ -5,3 +5,27 @@ export const ArchiveTypes = { NEXTCLOUD: 'nextcloud', WEBDAV: 'webdav' }; + +export const ImportTypes = { + ONE_PASSWORD: '1password', + KEEPASS: 'keepass', + LASTPASS: 'lastpass' +}; + +export const ImportTypeInfo = { + [ImportTypes.ONE_PASSWORD]: { + password: false, + name: '1Password', + extension: '1pif' + }, + [ImportTypes.KEEPASS]: { + password: true, + name: 'KeePass', + extension: 'kdbx' + }, + [ImportTypes.LASTPASS]: { + password: false, + name: 'LastPass', + extension: 'csv' + } +}; From 0e3989fe1929fd44b3af92c259cd22ea7d58f34e Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Sun, 16 Jul 2017 15:56:43 +0300 Subject: [PATCH 26/39] Add import menu to sidebar actions --- src/main/actions.js | 7 ++++++- src/main/lib/files.js | 6 +++++- src/renderer/components/sidebar-item.js | 18 ++++++++++++++++-- src/renderer/components/sidebar.js | 4 +++- src/renderer/containers/sidebar.js | 5 +++-- src/shared/actions/archives.js | 4 ++++ 6 files changed, 37 insertions(+), 7 deletions(-) diff --git a/src/main/actions.js b/src/main/actions.js index 050cbe50..11601f1b 100644 --- a/src/main/actions.js +++ b/src/main/actions.js @@ -2,7 +2,7 @@ import { ipcMain as ipc, BrowserWindow } from 'electron'; import { pushUpdate, updateInstalled } from '../shared/actions/update'; import { getWindowManager } from './lib/window-manager'; import { startAutoUpdate, installUpdates } from './lib/updater'; -import { openFile, newFile } from './lib/files'; +import { openFile, newFile, openFileForImporting } from './lib/files'; import { setupMenu } from './menu'; const windowManager = getWindowManager(); @@ -41,4 +41,9 @@ export function setupActions(store) { ipc.on('archive-list-updated', (e, payload) => { setupMenu(store); }); + + ipc.on('show-import-dialog', (e, payload) => { + const { type, archiveId } = payload; + openFileForImporting(undefined, type, archiveId); + }); } diff --git a/src/main/lib/files.js b/src/main/lib/files.js index c58db47f..5dd850e4 100644 --- a/src/main/lib/files.js +++ b/src/main/lib/files.js @@ -142,7 +142,11 @@ const showImportDialog = function(focusedWindow, type, archiveId) { extensions: [typeInfo.extension] }], title: `Load a ${typeInfo.name} archive` - }, ([ filename ]) => { + }, (files) => { + if (!files) { + return; + } + const [ filename ] = files; if (typeInfo.password) { focusedWindow.webContents.send('import-history-prompt', type); ipc.once('import-history-prompt-resp', (e, password) => { diff --git a/src/renderer/components/sidebar-item.js b/src/renderer/components/sidebar-item.js index fcc82733..0cc19ff0 100644 --- a/src/renderer/components/sidebar-item.js +++ b/src/renderer/components/sidebar-item.js @@ -7,6 +7,7 @@ import LockClosed from 'react-icons/lib/md/lock-outline'; import { GithubPicker } from 'react-color'; import Portal from 'react-portal'; import { brands } from '../../shared/buttercup/brands'; +import { ImportTypeInfo } from '../../shared/buttercup/types'; import { showContextMenu } from '../system/menu'; const Wrapper = styled.li` @@ -103,7 +104,8 @@ class SidebarItem extends Component { index: PropTypes.number, onClick: PropTypes.func, onRemoveClick: PropTypes.func, - onArchiveUpdate: PropTypes.func + onArchiveUpdate: PropTypes.func, + showImportDialog: PropTypes.func }; state = { @@ -113,7 +115,7 @@ class SidebarItem extends Component { }; handleContextMenu = () => { - const { status, name } = this.props.archive; + const { status, name, id } = this.props.archive; showContextMenu([{ label: `${status === 'locked' ? 'Unlock' : 'Open'} ${name}`, accelerator: `CmdOrCtrl+${this.props.index + 1}`, @@ -123,6 +125,18 @@ class SidebarItem extends Component { click: this.showColorPopup }, { type: 'separator' + }, { + label: 'Import', + submenu: Object.entries(ImportTypeInfo).map(([type, typeInfo]) => ({ + label: `From ${typeInfo.name} archive (.${typeInfo.extension})`, + enabled: (status === 'unlocked'), + click: () => this.props.showImportDialog({ + type, + archiveId: id + }) + })) + }, { + type: 'separator' }, { label: `Remove ${name}`, click: this.props.onRemoveClick diff --git a/src/renderer/components/sidebar.js b/src/renderer/components/sidebar.js index 52e0f248..a5f49f86 100644 --- a/src/renderer/components/sidebar.js +++ b/src/renderer/components/sidebar.js @@ -31,7 +31,8 @@ class RecentFiles extends Component { onNewClick: PropTypes.func, onCloudClick: PropTypes.func, onArchiveUpdate: PropTypes.func, - onClick: PropTypes.func + onClick: PropTypes.func, + showImportDialog: PropTypes.func }; showCreateMenu = () => { @@ -93,6 +94,7 @@ class RecentFiles extends Component { onArchiveUpdate={this.props.onArchiveUpdate} onClick={() => this.props.onClick(archive.id)} onRemoveClick={() => this.props.onRemoveClick(archive.id)} + showImportDialog={this.props.showImportDialog} /> )} diff --git a/src/renderer/containers/sidebar.js b/src/renderer/containers/sidebar.js index 85beae06..4e2dbd5f 100644 --- a/src/renderer/containers/sidebar.js +++ b/src/renderer/containers/sidebar.js @@ -1,5 +1,5 @@ import { connect } from 'react-redux'; -import { removeArchive, loadOrUnlockArchive, updateArchive } from '../../shared/actions/archives'; +import { removeArchive, loadOrUnlockArchive, updateArchive, showImportDialog } from '../../shared/actions/archives'; import { openArchive, newArchive, openFileManager } from '../../shared/actions/files'; import { getAllArchives, getCurrentArchiveId } from '../../shared/selectors'; import ArchiveList from '../components/sidebar'; @@ -15,6 +15,7 @@ export default connect( onOpenClick: openArchive, onNewClick: newArchive, onArchiveUpdate: updateArchive, - onCloudClick: openFileManager + onCloudClick: openFileManager, + showImportDialog } )(ArchiveList); diff --git a/src/shared/actions/archives.js b/src/shared/actions/archives.js index f6d4ca03..55903558 100644 --- a/src/shared/actions/archives.js +++ b/src/shared/actions/archives.js @@ -140,3 +140,7 @@ export const importHistoryIntoArchive = payload => (dispatch, getState) => { importHistory(archiveId, history); dispatch(reloadGroups()); }; + +export const showImportDialog = payload => () => { + ipc.send('show-import-dialog', payload); +}; From 0dc7c4fbb8e97d35bf3e0420a69a1dc5b1a8d923 Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Sat, 19 Aug 2017 20:46:19 +0300 Subject: [PATCH 27/39] Welcome back empty view --- .babelrc | 3 +- .eslintrc | 6 +- package-lock.json | 9885 +++++++++++++++++++++---- package.json | 2 + src/renderer/components/empty-view.js | 21 + src/renderer/components/workspace.js | 15 +- src/renderer/styles/img/solo-logo.svg | 14 + src/shared/selectors.js | 2 +- 8 files changed, 8458 insertions(+), 1490 deletions(-) create mode 100644 src/renderer/styles/img/solo-logo.svg diff --git a/.babelrc b/.babelrc index 097880cd..d328724d 100644 --- a/.babelrc +++ b/.babelrc @@ -16,7 +16,8 @@ "polished", "transform-object-rest-spread", "transform-strict-mode", - "transform-class-properties" + "transform-class-properties", + "jsx-control-statements" ], "env": { "production": { diff --git a/.eslintrc b/.eslintrc index 734aa19d..99b30ab2 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,8 +1,12 @@ { "parser": "babel-eslint", + "plugins": [ + "jsx-control-statements" + ], "extends": [ "standard", - "standard-react" + "standard-react", + "plugin:jsx-control-statements/recommended" ], "env": { "node": true, diff --git a/package-lock.json b/package-lock.json index 7f41395f..81a5e534 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2,6 +2,7 @@ "name": "buttercup", "version": "0.18.0", "lockfileVersion": 1, + "requires": true, "dependencies": { "7zip": { "version": "0.0.6", @@ -13,7 +14,12 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-2.1.0.tgz", "integrity": "sha512-jgBTCcJ0gQedE9o8Jw+H/Gyq//EnQxmVpha7CdprIwzRSC81Uj37inHvPzv6jaZgZwkCcfho52rAaIFBrdbO7w==", - "dev": true + "dev": true, + "requires": { + "7zip-bin-linux": "1.1.0", + "7zip-bin-mac": "1.0.1", + "7zip-bin-win": "2.1.0" + } }, "7zip-bin-linux": { "version": "1.1.0", @@ -40,7 +46,20 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/@buttercup/ui/-/ui-0.6.1.tgz", "integrity": "sha512-GklWML3INU4jVfm2a5uOOVc+ihqSWcR1FeTms9asI706EKTIUxPJv1IXJcQBSFFTrXlZqeAaYEMEsMNdTI8M0w==", - "dev": true + "dev": true, + "requires": { + "buttercup-generator": "0.0.2", + "classnames": "2.2.5", + "filter-react-dom-props": "0.0.2", + "polished": "1.1.3", + "prop-types": "15.5.10", + "react": "15.5.4", + "react-dom": "15.5.4", + "react-icons": "2.2.5", + "react-popover": "0.4.14", + "styled-components": "1.4.6", + "zxcvbn": "4.4.2" + } }, "@types/node": { "version": "6.0.78", @@ -76,7 +95,11 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", - "dev": true + "dev": true, + "requires": { + "mime-types": "2.1.15", + "negotiator": "0.6.1" + } }, "accessibility-developer-tools": { "version": "2.12.0", @@ -95,6 +118,9 @@ "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", "dev": true, + "requires": { + "acorn": "4.0.13" + }, "dependencies": { "acorn": { "version": "4.0.13", @@ -109,6 +135,9 @@ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz", "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=", "dev": true, + "requires": { + "acorn": "2.7.0" + }, "dependencies": { "acorn": { "version": "2.7.0", @@ -123,6 +152,9 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", "dev": true, + "requires": { + "acorn": "3.3.0" + }, "dependencies": { "acorn": { "version": "3.3.0", @@ -136,7 +168,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/add-dom-event-listener/-/add-dom-event-listener-1.0.2.tgz", "integrity": "sha1-j67SxBAIchzxEdodMNmVuFvkK+0=", - "dev": true + "dev": true, + "requires": { + "object-assign": "4.1.1" + } }, "add-px-to-style": { "version": "1.0.0", @@ -148,7 +183,11 @@ "version": "4.11.8", "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true + "dev": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } }, "ajv-keywords": { "version": "2.1.0", @@ -160,7 +199,12 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } }, "alphanum-sort": { "version": "1.0.2", @@ -178,7 +222,10 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-1.1.0.tgz", "integrity": "sha1-LwwWWIKXOa3V67FeawxuNCPwFro=", - "dev": true + "dev": true, + "requires": { + "string-width": "1.0.2" + } }, "ansi-escapes": { "version": "1.4.0", @@ -202,20 +249,38 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/any-fs/-/any-fs-0.4.0.tgz", "integrity": "sha1-tcDtVrrTOb91ICQaeqlFk9MnStg=", - "dev": true + "dev": true, + "requires": { + "pify": "2.3.0" + } }, "anymatch": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz", "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=", - "dev": true + "dev": true, + "requires": { + "arrify": "1.0.1", + "micromatch": "2.3.11" + } }, "appdmg": { "version": "0.3.10", "resolved": "https://registry.npmjs.org/appdmg/-/appdmg-0.3.10.tgz", "integrity": "sha1-1joS/r6Sty2xVcjmNTdxKGoEsmM=", "dev": true, - "optional": true + "optional": true, + "requires": { + "async": "1.5.2", + "cp-file": "3.2.0", + "ds-store": "0.1.6", + "fs-temp": "1.1.2", + "fs-xattr": "0.1.15", + "image-size": "0.5.4", + "is-my-json-valid": "2.16.0", + "minimist": "1.2.0", + "repeat-string": "1.6.1" + } }, "aproba": { "version": "1.1.2", @@ -228,12 +293,26 @@ "resolved": "https://registry.npmjs.org/archiver/-/archiver-1.3.0.tgz", "integrity": "sha1-TyGU1tj5nfP1MeaIHxTxXVX6ryI=", "dev": true, + "requires": { + "archiver-utils": "1.3.0", + "async": "2.4.1", + "buffer-crc32": "0.2.13", + "glob": "7.1.2", + "lodash": "4.17.4", + "readable-stream": "2.2.11", + "tar-stream": "1.5.4", + "walkdir": "0.0.11", + "zip-stream": "1.1.1" + }, "dependencies": { "async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/async/-/async-2.4.1.tgz", "integrity": "sha1-YqVrJ5yYoR0JhwlqAcw+6463u9c=", - "dev": true + "dev": true, + "requires": { + "lodash": "4.17.4" + } }, "isarray": { "version": "1.0.0", @@ -245,7 +324,16 @@ "version": "2.2.11", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.0.1", + "string_decoder": "1.0.2", + "util-deprecate": "1.0.2" + } }, "safe-buffer": { "version": "5.0.1", @@ -257,7 +345,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } } } }, @@ -266,6 +357,14 @@ "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=", "dev": true, + "requires": { + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "lazystream": "1.0.0", + "lodash": "4.17.4", + "normalize-path": "2.1.1", + "readable-stream": "2.2.11" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -277,7 +376,16 @@ "version": "2.2.11", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.0.1", + "string_decoder": "1.0.2", + "util-deprecate": "1.0.2" + } }, "safe-buffer": { "version": "5.0.1", @@ -289,7 +397,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } } } }, @@ -298,6 +409,10 @@ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", "dev": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.11" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -309,7 +424,16 @@ "version": "2.2.11", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.0.1", + "string_decoder": "1.0.2", + "util-deprecate": "1.0.2" + } }, "safe-buffer": { "version": "5.0.1", @@ -321,7 +445,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } } } }, @@ -329,13 +456,19 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dev": true + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } }, "arr-diff": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true + "dev": true, + "requires": { + "arr-flatten": "1.0.3" + } }, "arr-exclude": { "version": "1.0.0", @@ -390,7 +523,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true + "dev": true, + "requires": { + "array-uniq": "1.0.3" + } }, "array-uniq": { "version": "1.0.3", @@ -408,7 +544,11 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.0.4.tgz", "integrity": "sha1-VWpcU2LAhkgyPdrrnenRS8GGTJA=", - "dev": true + "dev": true, + "requires": { + "define-properties": "1.1.2", + "es-abstract": "1.7.0" + } }, "arrify": { "version": "1.0.1", @@ -426,7 +566,11 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/asar-integrity/-/asar-integrity-0.1.1.tgz", "integrity": "sha512-Nt9p2sWWNFkgqaioFCjsjTQTBAu0YFy2UyW0cWqNr1UBs9vV0j1kG0GI3r1lEJ6XxV4jiz1/AwCJnCDj5DLJUg==", - "dev": true + "dev": true, + "requires": { + "bluebird-lst": "1.0.2", + "fs-extra-p": "4.3.0" + } }, "asn1": { "version": "0.2.3", @@ -438,13 +582,21 @@ "version": "4.9.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.1.tgz", "integrity": "sha1-SLokC0WpKA6UdImQull9IWYX/UA=", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.6", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } }, "assert": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "dev": true + "dev": true, + "requires": { + "util": "0.10.3" + } }, "assert-plus": { "version": "0.2.0", @@ -493,12 +645,24 @@ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-db": "1.0.30000683", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + }, "dependencies": { "browserslist": { "version": "1.7.7", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true + "dev": true, + "requires": { + "caniuse-db": "1.0.30000683", + "electron-to-chromium": "1.3.14" + } } } }, @@ -507,6 +671,83 @@ "resolved": "https://registry.npmjs.org/ava/-/ava-0.17.0.tgz", "integrity": "sha1-NZ4qiWFoAe8Dkpw88QqdT45FHQI=", "dev": true, + "requires": { + "arr-flatten": "1.0.3", + "array-union": "1.0.2", + "array-uniq": "1.0.3", + "arrify": "1.0.1", + "auto-bind": "0.1.0", + "ava-files": "0.2.0", + "ava-init": "0.1.6", + "babel-code-frame": "6.22.0", + "babel-core": "6.25.0", + "babel-plugin-ava-throws-helper": "0.1.0", + "babel-plugin-detective": "2.0.0", + "babel-plugin-espower": "2.3.2", + "babel-plugin-transform-runtime": "6.23.0", + "babel-preset-es2015": "6.24.1", + "babel-preset-es2015-node4": "2.1.1", + "babel-preset-stage-2": "6.24.1", + "babel-runtime": "6.23.0", + "bluebird": "3.5.0", + "caching-transform": "1.0.1", + "chalk": "1.1.3", + "chokidar": "1.7.0", + "clean-yaml-object": "0.1.0", + "cli-cursor": "1.0.2", + "cli-spinners": "0.1.2", + "cli-truncate": "0.2.1", + "co-with-promise": "4.6.0", + "common-path-prefix": "1.0.0", + "convert-source-map": "1.5.0", + "core-assert": "0.2.1", + "currently-unhandled": "0.4.1", + "debug": "2.6.8", + "empower-core": "0.6.2", + "figures": "1.7.0", + "find-cache-dir": "0.1.1", + "fn-name": "2.0.1", + "get-port": "2.1.0", + "has-flag": "2.0.0", + "ignore-by-default": "1.0.1", + "is-ci": "1.0.10", + "is-generator-fn": "1.0.0", + "is-obj": "1.0.1", + "is-observable": "0.2.0", + "is-promise": "2.1.0", + "last-line-stream": "1.0.0", + "lodash.debounce": "4.0.8", + "lodash.difference": "4.5.0", + "lodash.isequal": "4.5.0", + "loud-rejection": "1.6.0", + "matcher": "0.1.2", + "max-timeout": "1.0.0", + "md5-hex": "1.3.0", + "meow": "3.7.0", + "ms": "0.7.3", + "object-assign": "4.1.1", + "observable-to-promise": "0.4.0", + "option-chain": "0.1.1", + "package-hash": "1.2.0", + "pkg-conf": "1.1.3", + "plur": "2.1.2", + "power-assert-context-formatter": "1.1.1", + "power-assert-renderer-assertion": "1.1.1", + "power-assert-renderer-succinct": "1.1.1", + "pretty-ms": "2.1.0", + "repeating": "2.0.1", + "require-precompiled": "0.1.0", + "resolve-cwd": "1.0.0", + "semver": "5.3.0", + "set-immediate-shim": "1.0.1", + "source-map-support": "0.4.15", + "stack-utils": "0.4.0", + "strip-ansi": "3.0.1", + "strip-bom": "2.0.0", + "time-require": "0.1.2", + "unique-temp-dir": "1.0.0", + "update-notifier": "1.0.3" + }, "dependencies": { "has-flag": { "version": "2.0.0", @@ -526,13 +767,30 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/ava-files/-/ava-files-0.2.0.tgz", "integrity": "sha1-x7i24uDOpjtXpuJ+DbFFx8Gc/iA=", - "dev": true + "dev": true, + "requires": { + "auto-bind": "0.1.0", + "bluebird": "3.5.0", + "globby": "6.1.0", + "ignore-by-default": "1.0.1", + "lodash.flatten": "4.4.0", + "multimatch": "2.1.0", + "slash": "1.0.0" + } }, "ava-init": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/ava-init/-/ava-init-0.1.6.tgz", "integrity": "sha1-7xntCyS2vzWdrW+63xoF2DY5XJE=", - "dev": true + "dev": true, + "requires": { + "arr-exclude": "1.0.0", + "cross-spawn": "4.0.2", + "pinkie-promise": "2.0.1", + "read-pkg-up": "1.0.1", + "the-argv": "1.0.0", + "write-pkg": "1.0.0" + } }, "aws-sign2": { "version": "0.6.0", @@ -550,85 +808,180 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.1" + } }, "babel-core": { "version": "6.25.0", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.25.0.tgz", "integrity": "sha1-fdQrBGPHQunVKW3rPsZ6kyLa1yk=", - "dev": true + "dev": true, + "requires": { + "babel-code-frame": "6.22.0", + "babel-generator": "6.25.0", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0", + "babylon": "6.17.3", + "convert-source-map": "1.5.0", + "debug": "2.6.8", + "json5": "0.5.1", + "lodash": "4.17.4", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.7", + "slash": "1.0.0", + "source-map": "0.5.6" + } }, "babel-eslint": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-7.2.3.tgz", "integrity": "sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc=", - "dev": true + "dev": true, + "requires": { + "babel-code-frame": "6.22.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0", + "babylon": "6.17.3" + } }, "babel-generator": { "version": "6.25.0", "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.25.0.tgz", "integrity": "sha1-M6GvcNXyiQrrRlpKd5PB32qeqfw=", - "dev": true + "dev": true, + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.23.0", + "babel-types": "6.25.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.4", + "source-map": "0.5.6", + "trim-right": "1.0.1" + } }, "babel-helper-bindify-decorators": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } }, "babel-helper-builder-binary-assignment-operator-visitor": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", - "dev": true + "dev": true, + "requires": { + "babel-helper-explode-assignable-expression": "6.24.1", + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } }, "babel-helper-builder-react-jsx": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.24.1.tgz", "integrity": "sha1-CteRfjPI11HmRtrKTnfMGTd9LLw=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0", + "esutils": "2.0.2" + } }, "babel-helper-call-delegate": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", - "dev": true + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.23.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } }, "babel-helper-define-map": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.24.1.tgz", "integrity": "sha1-epdH8ljYlH0y1RX2qhx70CIEoIA=", - "dev": true + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.23.0", + "babel-types": "6.25.0", + "lodash": "4.17.4" + } }, "babel-helper-explode-assignable-expression": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } }, "babel-helper-explode-class": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", - "dev": true + "dev": true, + "requires": { + "babel-helper-bindify-decorators": "6.24.1", + "babel-runtime": "6.23.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } }, "babel-helper-function-name": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true + "dev": true, + "requires": { + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } }, "babel-helper-get-function-arity": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } }, "babel-helper-hoist-variables": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } }, "babel-helper-is-nodes-equiv": { "version": "0.0.1", @@ -652,19 +1005,35 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } }, "babel-helper-regex": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.24.1.tgz", "integrity": "sha1-024i+rEAjXnYhkjjIRaGgShFbOg=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0", + "lodash": "4.17.4" + } }, "babel-helper-remap-async-to-generator": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", - "dev": true + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } }, "babel-helper-remove-or-void": { "version": "0.1.1", @@ -676,19 +1045,37 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "dev": true + "dev": true, + "requires": { + "babel-helper-optimise-call-expression": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } }, "babel-helpers": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-template": "6.25.0" + } }, "babel-loader": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-6.4.1.tgz", "integrity": "sha1-CzQRLVsHSKjc2/Uaz2+b1C1QuMo=", "dev": true, + "requires": { + "find-cache-dir": "0.1.1", + "loader-utils": "0.2.17", + "mkdirp": "0.5.1", + "object-assign": "4.1.1" + }, "dependencies": { "minimist": { "version": "0.0.8", @@ -700,7 +1087,10 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true + "dev": true, + "requires": { + "minimist": "0.0.8" + } } } }, @@ -708,7 +1098,10 @@ "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } }, "babel-plugin-add-module-exports": { "version": "0.2.1", @@ -720,13 +1113,20 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-ava-throws-helper/-/babel-plugin-ava-throws-helper-0.1.0.tgz", "integrity": "sha1-lREHcIoSIIAmv4ykzvGKh7ybDP4=", - "dev": true + "dev": true, + "requires": { + "babel-template": "6.25.0", + "babel-types": "6.25.0" + } }, "babel-plugin-check-es2015-constants": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } }, "babel-plugin-detective": { "version": "2.0.0", @@ -745,6 +1145,15 @@ "resolved": "https://registry.npmjs.org/babel-plugin-espower/-/babel-plugin-espower-2.3.2.tgz", "integrity": "sha1-VRa4/NsmyfDh2BYHSfbkxl5xJx4=", "dev": true, + "requires": { + "babel-generator": "6.25.0", + "babylon": "6.17.3", + "call-matcher": "1.0.1", + "core-js": "2.4.1", + "espower-location-detector": "1.0.0", + "espurify": "1.7.0", + "estraverse": "4.2.0" + }, "dependencies": { "core-js": { "version": "2.4.1", @@ -758,13 +1167,20 @@ "version": "3.2.11", "resolved": "https://registry.npmjs.org/babel-plugin-lodash/-/babel-plugin-lodash-3.2.11.tgz", "integrity": "sha1-Icj97J/hg176pzeHPjkCvdZtVwE=", - "dev": true + "dev": true, + "requires": { + "glob": "7.1.2", + "lodash": "4.17.4" + } }, "babel-plugin-minify-builtins": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.1.3.tgz", "integrity": "sha1-TyGn3LUfkaBOpx1H/w6OOwX+wCE=", "dev": true, + "requires": { + "babel-helper-evaluate-path": "0.1.0" + }, "dependencies": { "babel-helper-evaluate-path": { "version": "0.1.0", @@ -778,7 +1194,10 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-polished/-/babel-plugin-polished-1.1.0.tgz", "integrity": "sha1-f2kCq46cIPwUy1PVlt2FiIDjV9M=", - "dev": true + "dev": true, + "requires": { + "polished": "1.1.3" + } }, "babel-plugin-syntax-async-functions": { "version": "6.13.0", @@ -868,193 +1287,344 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", - "dev": true + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-generators": "6.13.0", + "babel-runtime": "6.23.0" + } }, "babel-plugin-transform-async-to-generator": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", - "dev": true + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-functions": "6.13.0", + "babel-runtime": "6.23.0" + } }, "babel-plugin-transform-class-constructor-call": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz", "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-syntax-class-constructor-call": "6.18.0", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0" + } }, "babel-plugin-transform-class-properties": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", - "dev": true + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-plugin-syntax-class-properties": "6.13.0", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0" + } }, "babel-plugin-transform-decorators": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", - "dev": true + "dev": true, + "requires": { + "babel-helper-explode-class": "6.24.1", + "babel-plugin-syntax-decorators": "6.13.0", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-types": "6.25.0" + } }, "babel-plugin-transform-do-expressions": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz", "integrity": "sha1-KMyvkoEtlJws0SgfaQyP3EaK6bs=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-syntax-do-expressions": "6.13.0", + "babel-runtime": "6.23.0" + } }, "babel-plugin-transform-es2015-arrow-functions": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } }, "babel-plugin-transform-es2015-block-scoped-functions": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } }, "babel-plugin-transform-es2015-block-scoping": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.24.1.tgz", "integrity": "sha1-dsKV3DpHQbFmWt/TFnIV3P8ypXY=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0", + "lodash": "4.17.4" + } }, "babel-plugin-transform-es2015-classes": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "dev": true + "dev": true, + "requires": { + "babel-helper-define-map": "6.24.1", + "babel-helper-function-name": "6.24.1", + "babel-helper-optimise-call-expression": "6.24.1", + "babel-helper-replace-supers": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } }, "babel-plugin-transform-es2015-computed-properties": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-template": "6.25.0" + } }, "babel-plugin-transform-es2015-destructuring": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } }, "babel-plugin-transform-es2015-duplicate-keys": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } }, "babel-plugin-transform-es2015-for-of": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } }, "babel-plugin-transform-es2015-function-name": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "dev": true + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } }, "babel-plugin-transform-es2015-literals": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } }, "babel-plugin-transform-es2015-modules-amd": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0" + } }, "babel-plugin-transform-es2015-modules-commonjs": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.1.tgz", "integrity": "sha1-0+MQtA72ZKNmIiAAl8bUQCmPK/4=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-types": "6.25.0" + } }, "babel-plugin-transform-es2015-modules-systemjs": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "dev": true + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0" + } }, "babel-plugin-transform-es2015-modules-umd": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0" + } }, "babel-plugin-transform-es2015-object-super": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "dev": true + "dev": true, + "requires": { + "babel-helper-replace-supers": "6.24.1", + "babel-runtime": "6.23.0" + } }, "babel-plugin-transform-es2015-parameters": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "dev": true + "dev": true, + "requires": { + "babel-helper-call-delegate": "6.24.1", + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } }, "babel-plugin-transform-es2015-shorthand-properties": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } }, "babel-plugin-transform-es2015-spread": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } }, "babel-plugin-transform-es2015-sticky-regex": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "dev": true + "dev": true, + "requires": { + "babel-helper-regex": "6.24.1", + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } }, "babel-plugin-transform-es2015-template-literals": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } }, "babel-plugin-transform-es2015-typeof-symbol": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } }, "babel-plugin-transform-es2015-unicode-regex": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "dev": true + "dev": true, + "requires": { + "babel-helper-regex": "6.24.1", + "babel-runtime": "6.23.0", + "regexpu-core": "2.0.0" + } }, "babel-plugin-transform-exponentiation-operator": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", - "dev": true + "dev": true, + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", + "babel-plugin-syntax-exponentiation-operator": "6.13.0", + "babel-runtime": "6.23.0" + } }, "babel-plugin-transform-export-extensions": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz", "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-syntax-export-extensions": "6.13.0", + "babel-runtime": "6.23.0" + } }, "babel-plugin-transform-flow-strip-types": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-syntax-flow": "6.18.0", + "babel-runtime": "6.23.0" + } }, "babel-plugin-transform-function-bind": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz", "integrity": "sha1-xvuOlqwpajELjPjqQBRiQH3fapc=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-syntax-function-bind": "6.13.0", + "babel-runtime": "6.23.0" + } }, "babel-plugin-transform-minify-booleans": { "version": "6.8.2", @@ -1066,49 +1636,78 @@ "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.23.0.tgz", "integrity": "sha1-h11ryb52HFiirj/u5dxIldjH+SE=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-syntax-object-rest-spread": "6.13.0", + "babel-runtime": "6.23.0" + } }, "babel-plugin-transform-react-constant-elements": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-constant-elements/-/babel-plugin-transform-react-constant-elements-6.23.0.tgz", "integrity": "sha1-LxGb9NLN1F65uqrldAU8YE9hR90=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } }, "babel-plugin-transform-react-display-name": { "version": "6.25.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz", "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } }, "babel-plugin-transform-react-inline-elements": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-inline-elements/-/babel-plugin-transform-react-inline-elements-6.22.0.tgz", "integrity": "sha1-ZochGjK0mlLyLFc6K1UEol7xfFM=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } }, "babel-plugin-transform-react-jsx": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz", "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", - "dev": true + "dev": true, + "requires": { + "babel-helper-builder-react-jsx": "6.24.1", + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.23.0" + } }, "babel-plugin-transform-react-jsx-self": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz", "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.23.0" + } }, "babel-plugin-transform-react-jsx-source": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz", "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.23.0" + } }, "babel-plugin-transform-react-pure-class-to-function": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-pure-class-to-function/-/babel-plugin-transform-react-pure-class-to-function-1.0.1.tgz", "integrity": "sha1-MqZJyX1lMlC0Gc/RSJMxsCkNnuQ=", - "dev": true + "dev": true, + "requires": { + "babel-helper-is-react-class": "1.0.0" + } }, "babel-plugin-transform-react-remove-prop-types": { "version": "0.2.12", @@ -1120,7 +1719,10 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.24.1.tgz", "integrity": "sha1-uNowWtQ8PJm0hI5P5AN7dw0jxBg=", - "dev": true + "dev": true, + "requires": { + "regenerator-transform": "0.9.11" + } }, "babel-plugin-transform-remove-console": { "version": "6.8.3", @@ -1138,13 +1740,20 @@ "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz", "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } }, "babel-plugin-transform-strict-mode": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } }, "babel-plugin-transform-undefined-to-void": { "version": "6.8.2", @@ -1157,6 +1766,18 @@ "resolved": "https://registry.npmjs.org/babel-plugin-webpack-loaders/-/babel-plugin-webpack-loaders-0.8.0.tgz", "integrity": "sha1-HsUlXiyd6NUibFigmYkNk1qHYGU=", "dev": true, + "requires": { + "babel-preset-es2015": "6.24.1", + "babel-preset-stage-0": "6.24.1", + "babel-register": "6.24.1", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0", + "babylon": "6.17.3", + "colors": "1.1.2", + "enhanced-resolve": "2.3.0", + "lodash": "4.17.4", + "rimraf": "2.6.1" + }, "dependencies": { "colors": { "version": "1.1.2", @@ -1170,67 +1791,184 @@ "version": "1.5.2", "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.5.2.tgz", "integrity": "sha1-zUrpCm6Utwn5c3SzPl+LmDVWre8=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.24.1", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.24.1", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-regenerator": "6.24.1", + "browserslist": "2.1.4", + "invariant": "2.2.2", + "semver": "5.3.0" + } }, "babel-preset-es2015": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.24.1", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.24.1", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-regenerator": "6.24.1" + } }, "babel-preset-es2015-node4": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/babel-preset-es2015-node4/-/babel-preset-es2015-node4-2.1.1.tgz", "integrity": "sha1-4x8pCFm1hhnIz6JB0bC8kA+UHNs=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1" + } }, "babel-preset-flow": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz", "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-transform-flow-strip-types": "6.22.0" + } }, "babel-preset-react": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz", "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-syntax-jsx": "6.18.0", + "babel-plugin-transform-react-display-name": "6.25.0", + "babel-plugin-transform-react-jsx": "6.24.1", + "babel-plugin-transform-react-jsx-self": "6.22.0", + "babel-plugin-transform-react-jsx-source": "6.22.0", + "babel-preset-flow": "6.23.0" + } }, "babel-preset-react-optimize": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-react-optimize/-/babel-preset-react-optimize-1.0.1.tgz", "integrity": "sha1-wjUJ+6fLx2195wUOfSa80ivDBOg=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-transform-react-constant-elements": "6.23.0", + "babel-plugin-transform-react-inline-elements": "6.22.0", + "babel-plugin-transform-react-pure-class-to-function": "1.0.1", + "babel-plugin-transform-react-remove-prop-types": "0.2.12" + } }, "babel-preset-stage-0": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz", "integrity": "sha1-VkLRUEL5E4TX5a+LyIsduVsDnmo=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-transform-do-expressions": "6.22.0", + "babel-plugin-transform-function-bind": "6.22.0", + "babel-preset-stage-1": "6.24.1" + } }, "babel-preset-stage-1": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz", "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-transform-class-constructor-call": "6.24.1", + "babel-plugin-transform-export-extensions": "6.22.0", + "babel-preset-stage-2": "6.24.1" + } }, "babel-preset-stage-2": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-syntax-dynamic-import": "6.18.0", + "babel-plugin-transform-class-properties": "6.24.1", + "babel-plugin-transform-decorators": "6.24.1", + "babel-preset-stage-3": "6.24.1" + } }, "babel-preset-stage-3": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-generator-functions": "6.24.1", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-object-rest-spread": "6.23.0" + } }, "babel-register": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.24.1.tgz", "integrity": "sha1-fhDhOi9xBlvfrVoXh7pFvKbe118=", "dev": true, + "requires": { + "babel-core": "6.25.0", + "babel-runtime": "6.23.0", + "core-js": "2.4.1", + "home-or-tmp": "2.0.0", + "lodash": "4.17.4", + "mkdirp": "0.5.1", + "source-map-support": "0.4.15" + }, "dependencies": { "core-js": { "version": "2.4.1", @@ -1248,7 +1986,10 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true + "dev": true, + "requires": { + "minimist": "0.0.8" + } } } }, @@ -1257,6 +1998,10 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz", "integrity": "sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs=", "dev": true, + "requires": { + "core-js": "2.4.1", + "regenerator-runtime": "0.10.5" + }, "dependencies": { "core-js": { "version": "2.4.1", @@ -1270,25 +2015,54 @@ "version": "6.25.0", "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.25.0.tgz", "integrity": "sha1-ZlJBFmt8KqTGGdceGSlpVSsQwHE=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0", + "babylon": "6.17.3", + "lodash": "4.17.4" + } }, "babel-traverse": { "version": "6.25.0", "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.25.0.tgz", "integrity": "sha1-IldJfi/NGbie3BPEyROB+VEklvE=", - "dev": true + "dev": true, + "requires": { + "babel-code-frame": "6.22.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.23.0", + "babel-types": "6.25.0", + "babylon": "6.17.3", + "debug": "2.6.8", + "globals": "9.18.0", + "invariant": "2.2.2", + "lodash": "4.17.4" + } }, "babel-types": { "version": "6.25.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.25.0.tgz", "integrity": "sha1-cK+ySNVmDl0Y+BHZHIMDtUE0oY4=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "esutils": "2.0.2", + "lodash": "4.17.4", + "to-fast-properties": "1.0.3" + } }, "babili-webpack-plugin": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/babili-webpack-plugin/-/babili-webpack-plugin-0.1.1.tgz", "integrity": "sha1-Jerpx5wDuS8rwSyCzvfguGbYO/s=", "dev": true, + "requires": { + "babel-core": "6.25.0", + "babel-preset-babili": "0.1.4", + "webpack-sources": "0.2.3" + }, "dependencies": { "babel-helper-evaluate-path": { "version": "0.1.0", @@ -1318,25 +2092,39 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.1.3.tgz", "integrity": "sha1-V70XKt+LjXStfJlhLrlQQU6+o8o=", - "dev": true + "dev": true, + "requires": { + "babel-helper-evaluate-path": "0.1.0" + } }, "babel-plugin-minify-dead-code-elimination": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.1.7.tgz", "integrity": "sha1-d09TbzR7mDk6J7qnF4cpaIE8NCw=", - "dev": true + "dev": true, + "requires": { + "babel-helper-mark-eval-scopes": "0.1.1", + "babel-helper-remove-or-void": "0.1.1", + "lodash.some": "4.6.0" + } }, "babel-plugin-minify-flip-comparisons": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.1.2.tgz", "integrity": "sha1-4oa0C3WZsY3+oZUHHkJ5Rlz8GIQ=", - "dev": true + "dev": true, + "requires": { + "babel-helper-is-void-0": "0.1.1" + } }, "babel-plugin-minify-guarded-expressions": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.1.2.tgz", "integrity": "sha1-38PUc7A2LZYF084KweIjKMYNEAc=", - "dev": true + "dev": true, + "requires": { + "babel-helper-flip-expressions": "0.1.2" + } }, "babel-plugin-minify-infinity": { "version": "0.1.2", @@ -1348,7 +2136,10 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.1.3.tgz", "integrity": "sha1-v6JGYaZ5T7A4M1h+VYKLZUSeBv4=", - "dev": true + "dev": true, + "requires": { + "babel-helper-mark-eval-scopes": "0.1.1" + } }, "babel-plugin-minify-numeric-literals": { "version": "0.1.1", @@ -1366,13 +2157,21 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.1.2.tgz", "integrity": "sha1-qWjxZY/esvx1noH+Mx2Jgp3w9rk=", - "dev": true + "dev": true, + "requires": { + "babel-helper-flip-expressions": "0.1.2", + "babel-helper-is-nodes-equiv": "0.0.1", + "babel-helper-to-multiple-sequence-expressions": "0.1.1" + } }, "babel-plugin-minify-type-constructors": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.1.2.tgz", "integrity": "sha1-21PFt2y44vzUXYYvFxBMeHYTN+4=", - "dev": true + "dev": true, + "requires": { + "babel-helper-is-void-0": "0.1.1" + } }, "babel-plugin-transform-inline-consecutive-adds": { "version": "0.1.2", @@ -1396,7 +2195,10 @@ "version": "6.8.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.8.4.tgz", "integrity": "sha1-atMREQuAoZKlbvtd30/jym96Ydo=", - "dev": true + "dev": true, + "requires": { + "esutils": "2.0.2" + } }, "babel-plugin-transform-regexp-constructors": { "version": "0.1.1", @@ -1432,7 +2234,32 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/babel-preset-babili/-/babel-preset-babili-0.1.4.tgz", "integrity": "sha1-rZ1mUQAvW8PwfKswB4EWf1RyS/I=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-minify-builtins": "0.1.3", + "babel-plugin-minify-constant-folding": "0.1.3", + "babel-plugin-minify-dead-code-elimination": "0.1.7", + "babel-plugin-minify-flip-comparisons": "0.1.2", + "babel-plugin-minify-guarded-expressions": "0.1.2", + "babel-plugin-minify-infinity": "0.1.2", + "babel-plugin-minify-mangle-names": "0.1.3", + "babel-plugin-minify-numeric-literals": "0.1.1", + "babel-plugin-minify-replace": "0.1.2", + "babel-plugin-minify-simplify": "0.1.2", + "babel-plugin-minify-type-constructors": "0.1.2", + "babel-plugin-transform-inline-consecutive-adds": "0.1.2", + "babel-plugin-transform-member-expression-literals": "6.8.4", + "babel-plugin-transform-merge-sibling-variables": "6.8.5", + "babel-plugin-transform-minify-booleans": "6.8.2", + "babel-plugin-transform-property-literals": "6.8.4", + "babel-plugin-transform-regexp-constructors": "0.1.1", + "babel-plugin-transform-remove-console": "6.8.4", + "babel-plugin-transform-remove-debugger": "6.8.4", + "babel-plugin-transform-remove-undefined": "0.1.2", + "babel-plugin-transform-simplify-comparison-operators": "6.8.4", + "babel-plugin-transform-undefined-to-void": "6.8.2", + "lodash.isplainobject": "4.0.6" + } }, "source-list-map": { "version": "1.1.2", @@ -1444,7 +2271,11 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-0.2.3.tgz", "integrity": "sha1-F8Yr+vE8cH+dAsR54Nzd6DgGl/s=", - "dev": true + "dev": true, + "requires": { + "source-list-map": "1.1.2", + "source-map": "0.5.6" + } } } }, @@ -1484,7 +2315,10 @@ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", "dev": true, - "optional": true + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } }, "big.js": { "version": "3.1.3", @@ -1503,6 +2337,9 @@ "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", "dev": true, + "requires": { + "readable-stream": "2.2.11" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -1514,7 +2351,16 @@ "version": "2.2.11", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.0.1", + "string_decoder": "1.0.2", + "util-deprecate": "1.0.2" + } }, "safe-buffer": { "version": "5.0.1", @@ -1526,7 +2372,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } } } }, @@ -1534,7 +2383,10 @@ "version": "0.0.9", "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3" + } }, "bluebird": { "version": "3.5.0", @@ -1546,7 +2398,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.2.tgz", "integrity": "sha1-x7JhdrbI+kWL5wPesGRKKPZKR1s=", - "dev": true + "dev": true, + "requires": { + "bluebird": "3.5.0" + } }, "bn.js": { "version": "4.11.6", @@ -1558,7 +2413,10 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true + "dev": true, + "requires": { + "hoek": "2.16.3" + } }, "bowser": { "version": "1.7.0", @@ -1570,26 +2428,49 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-0.6.0.tgz", "integrity": "sha1-g2TUJIrDT/DvGy8r9JpsYM4NgbY=", - "dev": true + "dev": true, + "requires": { + "ansi-align": "1.1.0", + "camelcase": "2.1.1", + "chalk": "1.1.3", + "cli-boxes": "1.0.0", + "filled-array": "1.1.0", + "object-assign": "4.1.1", + "repeating": "2.0.1", + "string-width": "1.0.2", + "widest-line": "1.0.0" + } }, "bplist-creator": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.7.tgz", "integrity": "sha1-N98VNgkoJLh8QvlXsBNEEXNyrkU=", "dev": true, - "optional": true + "optional": true, + "requires": { + "stream-buffers": "2.2.0" + } }, "brace-expansion": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=", - "dev": true + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } }, "braces": { "version": "1.8.5", "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } }, "brorand": { "version": "1.1.0", @@ -1607,43 +2488,80 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.6.tgz", "integrity": "sha1-Xncl297x/Vkw1OurSFZ85FHEigo=", - "dev": true + "dev": true, + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.3", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.0", + "inherits": "2.0.3" + } }, "browserify-cipher": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", - "dev": true + "dev": true, + "requires": { + "browserify-aes": "1.0.6", + "browserify-des": "1.0.0", + "evp_bytestokey": "1.0.0" + } }, "browserify-des": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", - "dev": true + "dev": true, + "requires": { + "cipher-base": "1.0.3", + "des.js": "1.0.0", + "inherits": "2.0.3" + } }, "browserify-rsa": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.6", + "randombytes": "2.0.5" + } }, "browserify-sign": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.6", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "elliptic": "6.4.0", + "inherits": "2.0.3", + "parse-asn1": "5.1.0" + } }, "browserify-zlib": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", - "dev": true + "dev": true, + "requires": { + "pako": "0.2.9" + } }, "browserslist": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.1.4.tgz", "integrity": "sha1-zFJq9KExK30uBWU+VtDIq3DA4FM=", - "dev": true + "dev": true, + "requires": { + "caniuse-lite": "1.0.30000683", + "electron-to-chromium": "1.3.14" + } }, "buf-compare": { "version": "1.0.1", @@ -1655,7 +2573,11 @@ "version": "5.0.6", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.0.6.tgz", "integrity": "sha1-LqZp9+7Atu2gWwj4tf9mGyhXNYg=", - "dev": true + "dev": true, + "requires": { + "base64-js": "1.2.0", + "ieee754": "1.1.8" + } }, "buffer-crc32": { "version": "0.2.13", @@ -1686,6 +2608,17 @@ "resolved": "https://registry.npmjs.org/buttercup/-/buttercup-0.38.1.tgz", "integrity": "sha1-9CIk3XWsSGgpoCDWzjxMVWZ7o2Q=", "dev": true, + "requires": { + "clone": "1.0.2", + "debug": "2.3.3", + "gzip-js": "0.3.2", + "iocane": "0.7.0", + "node-fetch": "1.6.3", + "string-hash": "1.1.3", + "uuid": "2.0.3", + "verror": "1.9.0", + "webdav-fs": "0.4.1" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -1697,7 +2630,10 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.2" + } }, "extsprintf": { "version": "1.3.0", @@ -1715,19 +2651,34 @@ "version": "1.6.3", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.6.3.tgz", "integrity": "sha1-3CNO3WSJmC1Y6PDbT2lQKavNjAQ=", - "dev": true + "dev": true, + "requires": { + "encoding": "0.1.12", + "is-stream": "1.1.0" + } }, "verror": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.9.0.tgz", "integrity": "sha1-EHqKLRTDNYb8S7gwBXzS0Zripu4=", - "dev": true + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + } }, "webdav-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/webdav-fs/-/webdav-fs-0.4.1.tgz", "integrity": "sha1-IYzaOXj7itbR7YR09bQDa/EBnmw=", - "dev": true + "dev": true, + "requires": { + "brototype": "0.0.5", + "node-fetch": "1.6.3", + "streamifier": "0.1.1", + "xml2js": "0.4.17" + } } } }, @@ -1735,19 +2686,34 @@ "version": "0.0.2", "resolved": "https://registry.npmjs.org/buttercup-generator/-/buttercup-generator-0.0.2.tgz", "integrity": "sha1-FOicYsZkyZKjJru6Iv4GnUDDPXs=", - "dev": true + "dev": true, + "requires": { + "mngen": "1.0.0", + "password-generator": "2.1.0" + } }, "buttercup-importer": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/buttercup-importer/-/buttercup-importer-0.9.1.tgz", "integrity": "sha1-OOu95fdJO1yEfKCxpoLlpDCqVsk=", - "dev": true + "dev": true, + "requires": { + "buttercup": "0.38.1", + "csvjson": "4.3.3", + "is-dir": "1.0.0", + "kdbxweb": "1.0.1", + "pify": "2.3.0", + "xml2js": "0.4.17" + } }, "buttercup-web": { "version": "0.32.1", "resolved": "https://registry.npmjs.org/buttercup-web/-/buttercup-web-0.32.1.tgz", "integrity": "sha1-YQuiogVs8zkNDxxD07ykcpie42w=", "dev": true, + "requires": { + "buttercup": "0.41.1" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -1759,13 +2725,28 @@ "version": "0.41.1", "resolved": "https://registry.npmjs.org/buttercup/-/buttercup-0.41.1.tgz", "integrity": "sha1-OuNB3mEV8MmeG81W2s/o/X0jNAc=", - "dev": true + "dev": true, + "requires": { + "clone": "1.0.2", + "debug": "2.3.3", + "eventemitter3": "2.0.3", + "gzip-js": "0.3.2", + "iocane": "0.7.0", + "node-fetch": "1.6.3", + "string-hash": "1.1.3", + "uuid": "2.0.3", + "verror": "1.9.0", + "webdav-fs": "1.3.0" + } }, "debug": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.2" + } }, "extsprintf": { "version": "1.3.0", @@ -1783,13 +2764,22 @@ "version": "1.6.3", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.6.3.tgz", "integrity": "sha1-3CNO3WSJmC1Y6PDbT2lQKavNjAQ=", - "dev": true + "dev": true, + "requires": { + "encoding": "0.1.12", + "is-stream": "1.1.0" + } }, "verror": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.9.0.tgz", "integrity": "sha1-EHqKLRTDNYb8S7gwBXzS0Zripu4=", - "dev": true + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + } } } }, @@ -1804,6 +2794,11 @@ "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-1.0.1.tgz", "integrity": "sha1-bb2y8g+Nj7znnz6U6dF0Lc31wKE=", "dev": true, + "requires": { + "md5-hex": "1.3.0", + "mkdirp": "0.5.1", + "write-file-atomic": "1.3.4" + }, "dependencies": { "minimist": { "version": "0.0.8", @@ -1815,7 +2810,10 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true + "dev": true, + "requires": { + "minimist": "0.0.8" + } } } }, @@ -1824,6 +2822,12 @@ "resolved": "https://registry.npmjs.org/call-matcher/-/call-matcher-1.0.1.tgz", "integrity": "sha1-UTTQd5hPcSpU2tPL9i3ijc5BbKg=", "dev": true, + "requires": { + "core-js": "2.4.1", + "deep-equal": "1.0.1", + "espurify": "1.7.0", + "estraverse": "4.2.0" + }, "dependencies": { "core-js": { "version": "2.4.1", @@ -1843,7 +2847,10 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true + "dev": true, + "requires": { + "callsites": "0.2.0" + } }, "callsites": { "version": "0.2.0", @@ -1861,19 +2868,33 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true + "dev": true, + "requires": { + "camelcase": "2.1.1", + "map-obj": "1.0.1" + } }, "caniuse-api": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-db": "1.0.30000683", + "lodash.memoize": "4.1.2", + "lodash.uniq": "4.5.0" + }, "dependencies": { "browserslist": { "version": "1.7.7", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true + "dev": true, + "requires": { + "caniuse-db": "1.0.30000683", + "electron-to-chromium": "1.3.14" + } } } }, @@ -1905,13 +2926,24 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true + "dev": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, "dependencies": { "supports-color": { "version": "2.0.0", @@ -1931,7 +2963,18 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "dev": true + "dev": true, + "requires": { + "anymatch": "1.3.0", + "async-each": "1.0.1", + "fsevents": "1.1.1", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + } }, "chromium-pickle-js": { "version": "0.2.0", @@ -1949,7 +2992,10 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.3.tgz", "integrity": "sha1-7qvxlEGc6QDaMBjCB9IS8qbfCgc=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3" + } }, "circular-json": { "version": "0.3.1", @@ -1961,7 +3007,10 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/clap/-/clap-1.1.3.tgz", "integrity": "sha1-s7026T3Uy/s5WjwmiWNSRFJlwFs=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3" + } }, "classnames": { "version": "2.2.5", @@ -1974,18 +3023,28 @@ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.27.tgz", "integrity": "sha1-re91sxwWD/pdcvTeZ5ZuJmDBolU=", "dev": true, + "requires": { + "commander": "2.8.1", + "source-map": "0.4.4" + }, "dependencies": { "commander": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "dev": true + "dev": true, + "requires": { + "graceful-readlink": "1.0.1" + } }, "source-map": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true + "dev": true, + "requires": { + "amdefine": "1.0.1" + } } } }, @@ -2011,7 +3070,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true + "dev": true, + "requires": { + "restore-cursor": "1.0.1" + } }, "cli-spinners": { "version": "0.1.2", @@ -2023,7 +3085,11 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", - "dev": true + "dev": true, + "requires": { + "slice-ansi": "0.0.4", + "string-width": "1.0.2" + } }, "cli-width": { "version": "2.1.0", @@ -2035,7 +3101,12 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } }, "clone": { "version": "1.0.2", @@ -2054,6 +3125,9 @@ "resolved": "https://registry.npmjs.org/co-with-promise/-/co-with-promise-4.6.0.tgz", "integrity": "sha1-QT59tvWJOmC5Qs9JLEvsk9tBWrc=", "dev": true, + "requires": { + "pinkie-promise": "1.0.0" + }, "dependencies": { "pinkie": { "version": "1.0.0", @@ -2065,7 +3139,10 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-1.0.0.tgz", "integrity": "sha1-0dpn9UglY7t89X8oauKCLs+/NnA=", - "dev": true + "dev": true, + "requires": { + "pinkie": "1.0.0" + } } } }, @@ -2073,7 +3150,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.2.tgz", "integrity": "sha1-K6n+w7SqQ9eknX5sNWHpIGG2vOw=", - "dev": true + "dev": true, + "requires": { + "q": "1.5.0" + } }, "code-point-at": { "version": "1.1.0", @@ -2091,13 +3171,21 @@ "version": "0.11.4", "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", - "dev": true + "dev": true, + "requires": { + "clone": "1.0.2", + "color-convert": "1.9.0", + "color-string": "0.3.0" + } }, "color-convert": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", - "dev": true + "dev": true, + "requires": { + "color-name": "1.1.2" + } }, "color-name": { "version": "1.1.2", @@ -2109,7 +3197,10 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", - "dev": true + "dev": true, + "requires": { + "color-name": "1.1.2" + } }, "color-support": { "version": "1.1.3", @@ -2122,6 +3213,11 @@ "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", "dev": true, + "requires": { + "color": "0.11.4", + "css-color-names": "0.0.4", + "has": "1.0.1" + }, "dependencies": { "css-color-names": { "version": "0.0.4", @@ -2141,7 +3237,10 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "dev": true + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } }, "commander": { "version": "2.6.0", @@ -2171,7 +3270,10 @@ "version": "1.2.6", "resolved": "https://registry.npmjs.org/component-classes/-/component-classes-1.2.6.tgz", "integrity": "sha1-xkI5TDYYpNiwuJGe/Mu9kw5c1pE=", - "dev": true + "dev": true, + "requires": { + "component-indexof": "0.0.3" + } }, "component-emitter": { "version": "1.2.1", @@ -2190,6 +3292,12 @@ "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.0.tgz", "integrity": "sha1-WFhwku8g03y1i68AARLJJ4/3O58=", "dev": true, + "requires": { + "buffer-crc32": "0.2.13", + "crc32-stream": "2.0.0", + "normalize-path": "2.1.1", + "readable-stream": "2.2.11" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -2201,7 +3309,16 @@ "version": "2.2.11", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.0.1", + "string_decoder": "1.0.2", + "util-deprecate": "1.0.2" + } }, "safe-buffer": { "version": "5.0.1", @@ -2213,7 +3330,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } } } }, @@ -2221,20 +3341,34 @@ "version": "2.0.10", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.10.tgz", "integrity": "sha1-/tocf3YXkScyspv4zyYlKiC57s0=", - "dev": true + "dev": true, + "requires": { + "mime-db": "1.27.0" + } }, "compression": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/compression/-/compression-1.6.2.tgz", "integrity": "sha1-zOsSHsydCcUtetDDNQ6pPd1AK8M=", "dev": true, + "requires": { + "accepts": "1.3.3", + "bytes": "2.3.0", + "compressible": "2.0.10", + "debug": "2.2.0", + "on-headers": "1.0.1", + "vary": "1.1.1" + }, "dependencies": { "debug": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true - }, + "dev": true, + "requires": { + "ms": "0.7.1" + } + }, "ms": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", @@ -2254,6 +3388,11 @@ "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.11", + "typedarray": "0.0.6" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -2265,7 +3404,16 @@ "version": "2.2.11", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.0.1", + "string_decoder": "1.0.2", + "util-deprecate": "1.0.2" + } }, "safe-buffer": { "version": "5.0.1", @@ -2277,7 +3425,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } } } }, @@ -2286,6 +3437,15 @@ "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-2.2.0.tgz", "integrity": "sha1-utJI4LsSn7FiF2iQOmMR1F1WiVo=", "dev": true, + "requires": { + "bluebird": "2.9.6", + "chalk": "0.5.1", + "commander": "2.6.0", + "cross-spawn": "0.2.9", + "lodash": "4.17.4", + "moment": "2.18.1", + "rx": "2.3.24" + }, "dependencies": { "ansi-regex": { "version": "0.2.1", @@ -2309,19 +3469,32 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", - "dev": true + "dev": true, + "requires": { + "ansi-styles": "1.1.0", + "escape-string-regexp": "1.0.5", + "has-ansi": "0.1.0", + "strip-ansi": "0.3.0", + "supports-color": "0.2.0" + } }, "cross-spawn": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-0.2.9.tgz", "integrity": "sha1-vWf5bAfvtjA7f+lMHpefiEeOCjk=", - "dev": true + "dev": true, + "requires": { + "lru-cache": "2.7.3" + } }, "has-ansi": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", - "dev": true + "dev": true, + "requires": { + "ansi-regex": "0.2.1" + } }, "lru-cache": { "version": "2.7.3", @@ -2333,7 +3506,10 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", - "dev": true + "dev": true, + "requires": { + "ansi-regex": "0.2.1" + } }, "supports-color": { "version": "0.2.0", @@ -2348,24 +3524,39 @@ "resolved": "https://registry.npmjs.org/conf/-/conf-1.1.2.tgz", "integrity": "sha512-0ZvmcIhd7IGdB2Kx4Uz9/dRibqLb2c9q2uaMQJmq54m1qSZfULL0RzU+APThtAxiXM/iNbZ346EeX7BtukJZOg==", "dev": true, + "requires": { + "dot-prop": "4.1.1", + "env-paths": "1.0.0", + "make-dir": "1.0.0", + "pkg-up": "2.0.0" + }, "dependencies": { "dot-prop": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.1.1.tgz", "integrity": "sha1-qEk/C3te7sglJbXHWH+n3nyoWcE=", - "dev": true + "dev": true, + "requires": { + "is-obj": "1.0.1" + } }, "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true + "dev": true, + "requires": { + "locate-path": "2.0.0" + } }, "pkg-up": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", - "dev": true + "dev": true, + "requires": { + "find-up": "2.1.0" + } } } }, @@ -2373,7 +3564,18 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/configstore/-/configstore-2.1.0.tgz", "integrity": "sha1-c3o6cDbpiGECqmCZ5HuzOrGroaE=", - "dev": true + "dev": true, + "requires": { + "dot-prop": "3.0.0", + "graceful-fs": "4.1.11", + "mkdirp": "0.5.0", + "object-assign": "4.1.1", + "os-tmpdir": "1.0.2", + "osenv": "0.1.4", + "uuid": "2.0.3", + "write-file-atomic": "1.3.4", + "xdg-basedir": "2.0.0" + } }, "connect-history-api-fallback": { "version": "1.3.0", @@ -2385,7 +3587,10 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true + "dev": true, + "requires": { + "date-now": "0.1.4" + } }, "console-control-strings": { "version": "1.1.0", @@ -2398,6 +3603,9 @@ "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.0.2.tgz", "integrity": "sha1-S5RdmTeQe82Y7ldRIsOBdRZUQUE=", "dev": true, + "requires": { + "acorn": "2.7.0" + }, "dependencies": { "acorn": { "version": "2.7.0", @@ -2465,7 +3673,11 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/core-assert/-/core-assert-0.2.1.tgz", "integrity": "sha1-+F4s+b/tKPdzzIs/pcW2m9wC/j8=", - "dev": true + "dev": true, + "requires": { + "buf-compare": "1.0.1", + "is-error": "2.2.1" + } }, "core-js": { "version": "1.2.7", @@ -2484,6 +3696,13 @@ "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-2.13.1.tgz", "integrity": "sha1-1wu5rMGDXsTwY/+drFQjwXsR8Xg=", "dev": true, + "requires": { + "js-yaml": "3.6.1", + "lcov-parse": "0.0.10", + "log-driver": "1.2.5", + "minimist": "1.2.0", + "request": "2.79.0" + }, "dependencies": { "caseless": { "version": "0.11.0", @@ -2495,19 +3714,32 @@ "version": "2.9.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true + "dev": true, + "requires": { + "graceful-readlink": "1.0.1" + } }, "har-validator": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3", + "commander": "2.9.0", + "is-my-json-valid": "2.16.0", + "pinkie-promise": "2.0.1" + } }, "js-yaml": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=", - "dev": true + "dev": true, + "requires": { + "argparse": "1.0.9", + "esprima": "2.7.3" + } }, "qs": { "version": "6.3.2", @@ -2519,7 +3751,29 @@ "version": "2.79.0", "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", - "dev": true + "dev": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.11.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "2.0.6", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "qs": "6.3.2", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.4.3", + "uuid": "3.0.1" + } }, "tunnel-agent": { "version": "0.4.3", @@ -2541,6 +3795,15 @@ "integrity": "sha1-b4NhYlRiTwrViqSqjQdvAmvn4Yg=", "dev": true, "optional": true, + "requires": { + "graceful-fs": "4.1.11", + "mkdirp": "0.5.0", + "nested-error-stacks": "1.0.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "readable-stream": "2.2.11" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -2554,7 +3817,16 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", "dev": true, - "optional": true + "optional": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.0.1", + "string_decoder": "1.0.2", + "util-deprecate": "1.0.2" + } }, "safe-buffer": { "version": "5.0.1", @@ -2567,7 +3839,10 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", "dev": true, - "optional": true + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } } } }, @@ -2588,6 +3863,10 @@ "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=", "dev": true, + "requires": { + "crc": "3.4.4", + "readable-stream": "2.2.11" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -2599,7 +3878,16 @@ "version": "2.2.11", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.0.1", + "string_decoder": "1.0.2", + "util-deprecate": "1.0.2" + } }, "safe-buffer": { "version": "5.0.1", @@ -2611,7 +3899,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } } } }, @@ -2619,43 +3910,77 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.6", + "elliptic": "6.4.0" + } }, "create-error-class": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "dev": true + "dev": true, + "requires": { + "capture-stack-trace": "1.0.0" + } }, "create-hash": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", - "dev": true + "dev": true, + "requires": { + "cipher-base": "1.0.3", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "sha.js": "2.4.8" + } }, "create-hmac": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", - "dev": true + "dev": true, + "requires": { + "cipher-base": "1.0.3", + "create-hash": "1.1.3", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.0", + "sha.js": "2.4.8" + } }, "create-react-class": { "version": "15.5.3", "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.5.3.tgz", "integrity": "sha1-+w98rnkznpoXnhlO9Gbvo5I4IP4=", - "dev": true + "dev": true, + "requires": { + "fbjs": "0.8.12", + "loose-envify": "1.3.1", + "object-assign": "4.1.1" + } }, "cross-env": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-1.0.8.tgz", "integrity": "sha1-K950jvx4D1bd8H6mn8rYdTV3dM4=", "dev": true, + "requires": { + "cross-spawn": "3.0.1", + "lodash.assign": "3.2.0" + }, "dependencies": { "cross-spawn": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", - "dev": true + "dev": true, + "requires": { + "lru-cache": "4.1.0", + "which": "1.2.14" + } } } }, @@ -2663,13 +3988,21 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", - "dev": true + "dev": true, + "requires": { + "lru-cache": "4.1.0", + "which": "1.2.14" + } }, "cross-spawn-async": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz", "integrity": "sha1-hF/wwINKPe2dFg2sptOQkGuyiMw=", - "dev": true + "dev": true, + "requires": { + "lru-cache": "4.1.0", + "which": "1.2.14" + } }, "cross-unzip": { "version": "0.0.2", @@ -2681,13 +4014,28 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true + "dev": true, + "requires": { + "boom": "2.10.1" + } }, "crypto-browserify": { "version": "3.11.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.0.tgz", "integrity": "sha1-NlKgkGq5sqfgw85mpAjpV6JIVSI=", - "dev": true + "dev": true, + "requires": { + "browserify-cipher": "1.0.0", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.0", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "diffie-hellman": "5.0.2", + "inherits": "2.0.3", + "pbkdf2": "3.0.12", + "public-encrypt": "4.0.0", + "randombytes": "2.0.5" + } }, "crypto-random-string": { "version": "1.0.0", @@ -2699,19 +4047,29 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/css/-/css-1.0.8.tgz", "integrity": "sha1-k4aBHKgrzMnuf7WnMrHioxfIo+c=", - "dev": true + "dev": true, + "requires": { + "css-parse": "1.0.4", + "css-stringify": "1.0.5" + } }, "css-animation": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/css-animation/-/css-animation-1.3.2.tgz", "integrity": "sha1-31FYIO9ZA3M60tsJmUA7MDe4uIA=", - "dev": true + "dev": true, + "requires": { + "component-classes": "1.2.6" + } }, "css-color-list": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/css-color-list/-/css-color-list-0.0.1.tgz", "integrity": "sha1-hxjoaVrnosyHh76HFfHACKfyixU=", - "dev": true + "dev": true, + "requires": { + "css-color-names": "0.0.1" + } }, "css-color-names": { "version": "0.0.1", @@ -2723,13 +4081,30 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-1.0.3.tgz", "integrity": "sha1-msfgL3Y8+F2UAXZmVl7WiltfMhU=", - "dev": true + "dev": true, + "requires": { + "hyphenate-style-name": "1.0.2" + } }, "css-loader": { "version": "0.25.0", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.25.0.tgz", "integrity": "sha1-w/68jOKPTINXa2sTcH9H+Qw5AiM=", - "dev": true + "dev": true, + "requires": { + "babel-code-frame": "6.22.0", + "css-selector-tokenizer": "0.6.0", + "cssnano": "3.10.0", + "loader-utils": "0.2.17", + "lodash.camelcase": "3.0.1", + "object-assign": "4.1.1", + "postcss": "5.2.17", + "postcss-modules-extract-imports": "1.1.0", + "postcss-modules-local-by-default": "1.2.0", + "postcss-modules-scope": "1.1.0", + "postcss-modules-values": "1.3.0", + "source-list-map": "0.1.8" + } }, "css-parse": { "version": "1.0.4", @@ -2742,12 +4117,22 @@ "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.6.0.tgz", "integrity": "sha1-ZEX1gseTDSQdzFAHpD1vy48HMVI=", "dev": true, + "requires": { + "cssesc": "0.1.0", + "fastparse": "1.1.1", + "regexpu-core": "1.0.0" + }, "dependencies": { "regexpu-core": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", - "dev": true + "dev": true, + "requires": { + "regenerate": "1.3.2", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } } } }, @@ -2761,7 +4146,12 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-1.0.6.tgz", "integrity": "sha1-cox+d05WU2VYoOyqmQ2VB8Q6SsQ=", - "dev": true + "dev": true, + "requires": { + "css-color-list": "0.0.1", + "fbjs": "0.8.12", + "nearley": "2.10.0" + } }, "css-value": { "version": "0.0.1", @@ -2773,7 +4163,10 @@ "version": "0.3.8", "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-0.3.8.tgz", "integrity": "sha1-ZCHP0wNM5mT+dnOXL9ARn8KJQfo=", - "dev": true + "dev": true, + "requires": { + "is-in-browser": "1.1.3" + } }, "cssesc": { "version": "0.1.0", @@ -2785,13 +4178,51 @@ "version": "3.10.0", "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", - "dev": true + "dev": true, + "requires": { + "autoprefixer": "6.7.7", + "decamelize": "1.2.0", + "defined": "1.0.0", + "has": "1.0.1", + "object-assign": "4.1.1", + "postcss": "5.2.17", + "postcss-calc": "5.3.1", + "postcss-colormin": "2.2.2", + "postcss-convert-values": "2.6.1", + "postcss-discard-comments": "2.0.4", + "postcss-discard-duplicates": "2.1.0", + "postcss-discard-empty": "2.1.0", + "postcss-discard-overridden": "0.1.1", + "postcss-discard-unused": "2.2.3", + "postcss-filter-plugins": "2.0.2", + "postcss-merge-idents": "2.1.7", + "postcss-merge-longhand": "2.0.2", + "postcss-merge-rules": "2.1.2", + "postcss-minify-font-values": "1.0.5", + "postcss-minify-gradients": "1.0.5", + "postcss-minify-params": "1.2.2", + "postcss-minify-selectors": "2.1.1", + "postcss-normalize-charset": "1.1.1", + "postcss-normalize-url": "3.0.8", + "postcss-ordered-values": "2.2.3", + "postcss-reduce-idents": "2.4.0", + "postcss-reduce-initial": "1.0.1", + "postcss-reduce-transforms": "1.0.4", + "postcss-svgo": "2.1.6", + "postcss-unique-selectors": "2.0.2", + "postcss-value-parser": "3.3.0", + "postcss-zindex": "2.2.0" + } }, "csso": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", - "dev": true + "dev": true, + "requires": { + "clap": "1.1.3", + "source-map": "0.5.6" + } }, "cssom": { "version": "0.3.2", @@ -2803,7 +4234,10 @@ "version": "0.2.37", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", - "dev": true + "dev": true, + "requires": { + "cssom": "0.3.2" + } }, "csvjson": { "version": "4.3.3", @@ -2821,19 +4255,28 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true + "dev": true, + "requires": { + "array-find-index": "1.0.2" + } }, "d": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true + "dev": true, + "requires": { + "es5-ext": "0.10.23" + } }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -2866,6 +4309,9 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", "dev": true, + "requires": { + "ms": "2.0.0" + }, "dependencies": { "ms": { "version": "2.0.0", @@ -2885,7 +4331,10 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-2.0.0.tgz", "integrity": "sha1-6+BrHwfwja5ZdiDj3RYi83GhxXI=", - "dev": true + "dev": true, + "requires": { + "is-obj": "1.0.1" + } }, "deep-diff": { "version": "0.3.8", @@ -2928,6 +4377,10 @@ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", "dev": true, + "requires": { + "foreach": "2.0.5", + "object-keys": "1.0.11" + }, "dependencies": { "object-keys": { "version": "1.0.11", @@ -2954,12 +4407,29 @@ "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", "dev": true, + "requires": { + "globby": "5.0.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.0", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "rimraf": "2.6.1" + }, "dependencies": { "globby": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true + "dev": true, + "requires": { + "array-union": "1.0.2", + "arrify": "1.0.1", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } } } }, @@ -2985,7 +4455,11 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } }, "destroy": { "version": "1.0.4", @@ -2997,7 +4471,10 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true + "dev": true, + "requires": { + "repeating": "2.0.1" + } }, "detect-node": { "version": "2.0.3", @@ -3015,7 +4492,12 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/devtron/-/devtron-1.4.0.tgz", "integrity": "sha1-tedIvW6Vu+cL/MaKrm/mlhGUQeE=", - "dev": true + "dev": true, + "requires": { + "accessibility-developer-tools": "2.12.0", + "highlight.js": "9.12.0", + "humanize-plus": "1.8.2" + } }, "diff": { "version": "1.4.0", @@ -3027,7 +4509,12 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.6", + "miller-rabin": "4.0.0", + "randombytes": "2.0.5" + } }, "discontinuous-range": { "version": "1.0.0", @@ -3040,6 +4527,10 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", "dev": true, + "requires": { + "esutils": "2.0.2", + "isarray": "1.0.0" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -3053,7 +4544,12 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/dom-css/-/dom-css-2.1.0.tgz", "integrity": "sha1-/bwtWgFdCj4YcuEUcrvQ57nmogI=", - "dev": true + "dev": true, + "requires": { + "add-px-to-style": "1.0.0", + "prefix-style": "2.0.1", + "to-camel-case": "1.0.0" + } }, "dom-walk": { "version": "0.1.1", @@ -3071,13 +4567,20 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", - "dev": true + "dev": true, + "requires": { + "is-obj": "1.0.1" + } }, "dropbox": { "version": "2.5.4", "resolved": "https://registry.npmjs.org/dropbox/-/dropbox-2.5.4.tgz", "integrity": "sha1-UtRDOSvWG7ym6/QTpcHge5+Rq38=", "dev": true, + "requires": { + "es6-promise": "3.3.1", + "superagent": "1.8.5" + }, "dependencies": { "es6-promise": { "version": "3.3.1", @@ -3091,20 +4594,31 @@ "version": "0.0.5", "resolved": "https://registry.npmjs.org/dropbox-fs/-/dropbox-fs-0.0.5.tgz", "integrity": "sha1-uYKDbcru1+PChNEOJ0KsBLahG5I=", - "dev": true + "dev": true, + "requires": { + "dropbox": "2.5.4" + } }, "ds-store": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/ds-store/-/ds-store-0.1.6.tgz", "integrity": "sha1-0QJO90btDBPw9/7IXH6FjoxLfKc=", "dev": true, - "optional": true + "optional": true, + "requires": { + "bplist-creator": "0.0.7", + "macos-alias": "0.2.11", + "tn1150": "0.1.0" + } }, "duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", "dev": true, + "requires": { + "readable-stream": "2.2.11" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -3116,7 +4630,16 @@ "version": "2.2.11", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.0.1", + "string_decoder": "1.0.2", + "util-deprecate": "1.0.2" + } }, "safe-buffer": { "version": "5.0.1", @@ -3128,16 +4651,13 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } } } }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, "eastasianwidth": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.1.1.tgz", @@ -3149,7 +4669,10 @@ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", "dev": true, - "optional": true + "optional": true, + "requires": { + "jsbn": "0.1.1" + } }, "ee-first": { "version": "1.1.1", @@ -3168,6 +4691,11 @@ "resolved": "https://registry.npmjs.org/electron/-/electron-1.6.11.tgz", "integrity": "sha1-vnnA69zv7bW/KBF0CYAPpTus7/o=", "dev": true, + "requires": { + "@types/node": "7.0.33", + "electron-download": "3.3.0", + "extract-zip": "1.6.5" + }, "dependencies": { "@types/node": { "version": "7.0.33", @@ -3182,18 +4710,72 @@ "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-19.11.1.tgz", "integrity": "sha512-OTlGhjJml0R8aK1CeiWpWpfePYh0uDFKsycmRGdaix8rY/1vKLPy9sl5KTXOHU6tGP6GdKqNJMEgB/EuqaYnWw==", "dev": true, + "requires": { + "7zip-bin": "2.1.0", + "ajv": "5.2.0", + "ajv-keywords": "2.1.0", + "asar-integrity": "0.1.1", + "bluebird-lst": "1.0.2", + "chalk": "1.1.3", + "chromium-pickle-js": "0.2.0", + "cuint": "0.2.2", + "debug": "2.6.8", + "electron-builder-http": "19.7.2", + "electron-builder-util": "19.11.0", + "electron-download-tf": "4.3.1", + "electron-osx-sign": "0.4.6", + "electron-publish": "19.11.0", + "fs-extra-p": "4.3.0", + "hosted-git-info": "2.5.0", + "is-ci": "1.0.10", + "isbinaryfile": "3.0.2", + "js-yaml": "3.8.4", + "json5": "0.5.1", + "minimatch": "3.0.4", + "normalize-package-data": "2.4.0", + "parse-color": "1.0.0", + "plist": "2.1.0", + "sanitize-filename": "1.6.1", + "semver": "5.3.0", + "update-notifier": "2.2.0", + "uuid-1345": "0.99.6", + "yargs": "8.0.2" + }, "dependencies": { "ajv": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.0.tgz", "integrity": "sha1-wXNQJMXaLvdcwZBxMHPUTwmL9IY=", - "dev": true + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "0.1.0", + "json-schema-traverse": "0.3.1", + "json-stable-stringify": "1.0.1" + }, + "dependencies": { + "fast-deep-equal": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-0.1.0.tgz", + "integrity": "sha1-XG9FmaumszPuM0Li7ZeGcvEAH40=", + "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 + } + } }, "ansi-align": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "dev": true + "dev": true, + "requires": { + "string-width": "2.1.0" + } }, "ansi-regex": { "version": "3.0.0", @@ -3205,7 +4787,27 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.1.0.tgz", "integrity": "sha1-sbad1SIwXoB6md7ud329blFnsQI=", - "dev": true + "dev": true, + "requires": { + "ansi-align": "2.0.0", + "camelcase": "4.1.0", + "chalk": "1.1.3", + "cli-boxes": "1.0.0", + "string-width": "2.1.0", + "term-size": "0.1.1", + "widest-line": "1.0.0" + }, + "dependencies": { + "term-size": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-0.1.1.tgz", + "integrity": "sha1-hzYLljlsq1dgljcUzaDQy+7K2co=", + "dev": true, + "requires": { + "execa": "0.4.0" + } + } + } }, "camelcase": { "version": "4.1.0", @@ -3217,19 +4819,52 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.0.tgz", "integrity": "sha1-Rd+QcHPibfoc9LLVL1tgVF6qEdE=", - "dev": true + "dev": true, + "requires": { + "dot-prop": "4.1.1", + "graceful-fs": "4.1.11", + "make-dir": "1.0.0", + "unique-string": "1.0.0", + "write-file-atomic": "2.1.0", + "xdg-basedir": "3.0.0" + }, + "dependencies": { + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dev": true, + "requires": { + "crypto-random-string": "1.0.0" + } + } + } }, "dot-prop": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.1.1.tgz", "integrity": "sha1-qEk/C3te7sglJbXHWH+n3nyoWcE=", - "dev": true + "dev": true, + "requires": { + "is-obj": "1.0.1" + } }, "electron-download-tf": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/electron-download-tf/-/electron-download-tf-4.3.1.tgz", "integrity": "sha1-eTDySgjjZp6q04pffyiKEEYcr3I=", - "dev": true + "dev": true, + "requires": { + "debug": "2.6.8", + "env-paths": "1.0.0", + "fs-extra": "3.0.1", + "minimist": "1.2.0", + "nugget": "2.0.1", + "path-exists": "3.0.0", + "rc": "1.2.1", + "semver": "5.3.0", + "sumchecker": "2.0.2" + } }, "esprima": { "version": "3.1.3", @@ -3241,13 +4876,45 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "3.0.0", + "universalify": "0.1.0" + } }, "got": { "version": "6.7.1", "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "dev": true + "dev": true, + "requires": { + "create-error-class": "3.0.2", + "duplexer3": "0.1.4", + "get-stream": "3.0.0", + "is-redirect": "1.0.0", + "is-retry-allowed": "1.1.0", + "is-stream": "1.1.0", + "lowercase-keys": "1.0.0", + "safe-buffer": "5.1.0", + "timed-out": "4.0.1", + "unzip-response": "2.0.1", + "url-parse-lax": "1.0.0" + }, + "dependencies": { + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + } + } }, "hosted-git-info": { "version": "2.5.0", @@ -3265,31 +4932,53 @@ "version": "3.8.4", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.8.4.tgz", "integrity": "sha1-UgtFZPhlc7qWZir4Woyvp7S1pvY=", - "dev": true + "dev": true, + "requires": { + "argparse": "1.0.9", + "esprima": "3.1.3" + } }, "jsonfile": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.0.tgz", "integrity": "sha1-kufHRE5f/V+jLmqa6LhQNN+DR9A=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } }, "latest-version": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "dev": true + "dev": true, + "requires": { + "package-json": "4.0.1" + } }, "normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true + "dev": true, + "requires": { + "hosted-git-info": "2.5.0", + "is-builtin-module": "1.0.0", + "semver": "5.3.0", + "validate-npm-package-license": "3.0.1" + } }, "package-json": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "dev": true + "dev": true, + "requires": { + "got": "6.7.1", + "registry-auth-token": "3.3.1", + "registry-url": "3.1.0", + "semver": "5.3.0" + } }, "path-exists": { "version": "3.0.0", @@ -3301,19 +4990,29 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.0.tgz", "integrity": "sha1-AwZkVh/BRslCPsfZeP4kV0N/5tA=", - "dev": true + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } }, "sumchecker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-2.0.2.tgz", "integrity": "sha1-D0LBDl0F2l1C7qPlbDOZo31sWz4=", - "dev": true + "dev": true, + "requires": { + "debug": "2.6.8" + } }, "timed-out": { "version": "4.0.1", @@ -3331,13 +5030,36 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.2.0.tgz", "integrity": "sha1-G1g3z5DAc22IYncytmHBOPht5y8=", - "dev": true + "dev": true, + "requires": { + "boxen": "1.1.0", + "chalk": "1.1.3", + "configstore": "3.1.0", + "import-lazy": "2.1.0", + "is-npm": "1.0.0", + "latest-version": "3.1.0", + "semver-diff": "2.1.0", + "xdg-basedir": "3.0.0" + }, + "dependencies": { + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + } + } }, "write-file-atomic": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.1.0.tgz", "integrity": "sha512-0TZ20a+xcIl4u0+Mj5xDH2yOWdmQiXlKf9Hm+TgDXjTMsEYb+gDrmb8e8UNAzMCitX8NBqG4Z/FUQIyzv/R1JQ==", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "slide": "1.1.6" + } }, "xdg-basedir": { "version": "3.0.0", @@ -3351,43 +5073,92 @@ "version": "19.7.2", "resolved": "https://registry.npmjs.org/electron-builder-http/-/electron-builder-http-19.7.2.tgz", "integrity": "sha512-zapTJKvK4eACcTgBVlyeFaJ63cXujpWjOLKKRHL8uYOHLp5CYHYgXlM6kN8L7zjz5uVjA51hy9NsSyIQZ8S3Mw==", - "dev": true + "dev": true, + "requires": { + "debug": "2.6.8", + "fs-extra-p": "4.3.0" + } }, "electron-builder-util": { "version": "19.11.0", "resolved": "https://registry.npmjs.org/electron-builder-util/-/electron-builder-util-19.11.0.tgz", "integrity": "sha512-hs1FMwCKQeE2FltfQgOahXj/z2RsGpcGQ2zQZ1Y5wkhHbk+ylIA73u4Y80MkG7C7v7RhB20jrm5Z3ENSPUdz8g==", - "dev": true - }, + "dev": true, + "requires": { + "7zip-bin": "2.1.0", + "bluebird-lst": "1.0.2", + "chalk": "1.1.3", + "debug": "2.6.8", + "electron-builder-http": "19.7.2", + "fcopy-pre-bundled": "0.3.4", + "fs-extra-p": "4.3.0", + "ini": "1.3.4", + "is-ci": "1.0.10", + "node-emoji": "1.5.1", + "source-map-support": "0.4.15", + "stat-mode": "0.2.2", + "tunnel-agent": "0.6.0" + } + }, "electron-chromedriver": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/electron-chromedriver/-/electron-chromedriver-1.6.0.tgz", "integrity": "sha1-bqvapc+cdeQ1AeJZO1KOjP2X18c=", - "dev": true + "dev": true, + "requires": { + "electron-download": "3.3.0", + "extract-zip": "1.6.5" + } }, "electron-debug": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/electron-debug/-/electron-debug-1.1.0.tgz", "integrity": "sha1-BQqcP5Bv/8JJJRDPisMdDzKleeE=", - "dev": true + "dev": true, + "requires": { + "electron-is-dev": "0.1.2", + "electron-localshortcut": "0.6.1" + } }, "electron-devtools-installer": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/electron-devtools-installer/-/electron-devtools-installer-2.2.0.tgz", "integrity": "sha1-mBPmgRr81p3co8rlQW23Lqfs+2o=", - "dev": true + "dev": true, + "requires": { + "7zip": "0.0.6", + "cross-unzip": "0.0.2", + "rimraf": "2.6.1", + "semver": "5.3.0" + } }, "electron-download": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-3.3.0.tgz", "integrity": "sha1-LP1U1pZsAZxNSa1l++Zcyc3vaMg=", - "dev": true + "dev": true, + "requires": { + "debug": "2.6.8", + "fs-extra": "0.30.0", + "home-path": "1.0.5", + "minimist": "1.2.0", + "nugget": "2.0.1", + "path-exists": "2.1.0", + "rc": "1.2.1", + "semver": "5.3.0", + "sumchecker": "1.3.1" + } }, "electron-installer-dmg": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/electron-installer-dmg/-/electron-installer-dmg-0.1.2.tgz", "integrity": "sha1-mrWwZr7DnrtHrWubpYc7Y1sCWAA=", - "dev": true + "dev": true, + "requires": { + "appdmg": "0.3.10", + "debug": "2.6.8", + "minimist": "1.2.0" + } }, "electron-is-dev": { "version": "0.1.2", @@ -3400,12 +5171,22 @@ "resolved": "https://registry.npmjs.org/electron-json-storage/-/electron-json-storage-3.0.6.tgz", "integrity": "sha1-6huaCLaPiU0XrgtNuKSS/CwrGSw=", "dev": true, + "requires": { + "async": "2.5.0", + "lodash": "4.17.4", + "mkdirp": "0.5.1", + "rimraf": "2.6.1", + "rwlock": "5.0.0" + }, "dependencies": { "async": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", - "dev": true + "dev": true, + "requires": { + "lodash": "4.17.4" + } }, "minimist": { "version": "0.0.8", @@ -3417,7 +5198,10 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true + "dev": true, + "requires": { + "minimist": "0.0.8" + } } } }, @@ -3437,13 +5221,30 @@ "version": "0.4.6", "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.4.6.tgz", "integrity": "sha1-I5ji18q1wdjD7quxzUkDdlKOw5o=", - "dev": true + "dev": true, + "requires": { + "bluebird": "3.5.0", + "compare-version": "0.1.2", + "debug": "2.6.8", + "isbinaryfile": "3.0.2", + "minimist": "1.2.0", + "plist": "2.1.0", + "tempfile": "1.1.1" + } }, "electron-publish": { "version": "19.11.0", "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-19.11.0.tgz", "integrity": "sha512-jR3Q3MyL9bs+FRMjdgVoskUlP4fO94K+aZFclQmlhcjLvrTF5JdzRY8c4J9Nf0WPGUa9X8LZjZI9+z4PkPg9gA==", "dev": true, + "requires": { + "bluebird-lst": "1.0.2", + "chalk": "1.1.3", + "electron-builder-http": "19.7.2", + "electron-builder-util": "19.11.0", + "fs-extra-p": "4.3.0", + "mime": "1.3.6" + }, "dependencies": { "mime": { "version": "1.3.6", @@ -3463,7 +5264,10 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/electron-store/-/electron-store-1.2.0.tgz", "integrity": "sha1-lvcI8BiMdwiQfp+bfLp5C+1rmJ8=", - "dev": true + "dev": true, + "requires": { + "conf": "1.1.2" + } }, "electron-to-chromium": { "version": "1.3.14", @@ -3475,19 +5279,39 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/electron-unhandled/-/electron-unhandled-0.2.0.tgz", "integrity": "sha1-5mvaW5PIQ5Knt9e34mfZDC0MGuM=", - "dev": true + "dev": true, + "requires": { + "clean-stack": "1.3.0", + "ensure-error": "0.1.0" + } }, "electron-updater": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-2.3.0.tgz", "integrity": "sha512-k5Eg7x1vQshwEVTQh66ErYbVbV504ms+TSThGY+e4uH86PaIUg6kcZEplrwcCwO/RZC6TZmV6+o9Kg/h3VfNDQ==", "dev": true, + "requires": { + "bluebird-lst": "1.0.2", + "debug": "2.6.8", + "electron-builder-http": "19.4.2", + "electron-is-dev": "0.1.2", + "fs-extra-p": "4.3.0", + "js-yaml": "3.8.4", + "semver": "5.3.0", + "source-map-support": "0.4.15", + "uuid-1345": "0.99.6", + "xelement": "1.0.16" + }, "dependencies": { "electron-builder-http": { "version": "19.4.2", "resolved": "https://registry.npmjs.org/electron-builder-http/-/electron-builder-http-19.4.2.tgz", "integrity": "sha512-9t0W0ynQT3Aul+XAzwg16bfBzJ8GS6aQ9oPVMR4IiBu0Z7DTpWeorrtlrhr6XJzs0c0mkK8/YL18Pjn9696iNg==", - "dev": true + "dev": true, + "requires": { + "debug": "2.6.8", + "fs-extra-p": "4.3.0" + } }, "esprima": { "version": "3.1.3", @@ -3499,7 +5323,11 @@ "version": "3.8.4", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.8.4.tgz", "integrity": "sha1-UgtFZPhlc7qWZir4Woyvp7S1pvY=", - "dev": true + "dev": true, + "requires": { + "argparse": "1.0.9", + "esprima": "3.1.3" + } } } }, @@ -3513,7 +5341,16 @@ "version": "6.4.0", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.6", + "brorand": "1.1.0", + "hash.js": "1.0.3", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } }, "emojis-list": { "version": "2.1.0", @@ -3526,6 +5363,10 @@ "resolved": "https://registry.npmjs.org/empower-core/-/empower-core-0.6.2.tgz", "integrity": "sha1-Wt71ZgiOMfuoC6CjbfR9cJQWkUQ=", "dev": true, + "requires": { + "call-signature": "0.0.2", + "core-js": "2.4.1" + }, "dependencies": { "core-js": { "version": "2.4.1", @@ -3545,19 +5386,31 @@ "version": "0.1.12", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "dev": true + "dev": true, + "requires": { + "iconv-lite": "0.4.17" + } }, "end-of-stream": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", - "dev": true + "dev": true, + "requires": { + "once": "1.4.0" + } }, "enhanced-resolve": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-2.3.0.tgz", "integrity": "sha1-oRXDJQS2MC6Fp2Jp16V8zdli41k=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "memory-fs": "0.3.0", + "object-assign": "4.1.1", + "tapable": "0.2.6" + } }, "ensure-error": { "version": "0.1.0", @@ -3575,37 +5428,61 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", - "dev": true + "dev": true, + "requires": { + "prr": "0.0.0" + } }, "error-ex": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "dev": true + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } }, "error-stack-parser": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-1.3.6.tgz", "integrity": "sha1-4Oc7k+QXE40c18C3RrGkoUhUwpI=", - "dev": true + "dev": true, + "requires": { + "stackframe": "0.3.1" + } }, "es-abstract": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.7.0.tgz", "integrity": "sha1-363ndOAb/Nl/lhgCmMRJyGI/uUw=", - "dev": true + "dev": true, + "requires": { + "es-to-primitive": "1.1.1", + "function-bind": "1.1.0", + "is-callable": "1.1.3", + "is-regex": "1.0.4" + } }, "es-to-primitive": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", - "dev": true + "dev": true, + "requires": { + "is-callable": "1.1.3", + "is-date-object": "1.0.1", + "is-symbol": "1.0.1" + } }, "es5-ext": { "version": "0.10.23", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.23.tgz", "integrity": "sha1-dXi1G+l0IHpUh4IbVlOMIk5Oezg=", - "dev": true + "dev": true, + "requires": { + "es6-iterator": "2.0.1", + "es6-symbol": "3.1.1" + } }, "es6-error": { "version": "4.0.2", @@ -3617,13 +5494,26 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", "integrity": "sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=", - "dev": true + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.23", + "es6-symbol": "3.1.1" + } }, "es6-map": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "dev": true + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.23", + "es6-iterator": "2.0.1", + "es6-set": "0.1.5", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + } }, "es6-promise": { "version": "4.1.0", @@ -3635,19 +5525,36 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dev": true + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.23", + "es6-iterator": "2.0.1", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + } }, "es6-symbol": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.23" + } }, "es6-weak-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "dev": true + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.23", + "es6-iterator": "2.0.1", + "es6-symbol": "3.1.1" + } }, "escape-html": { "version": "1.0.3", @@ -3666,6 +5573,13 @@ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", "dev": true, + "requires": { + "esprima": "2.7.3", + "estraverse": "1.9.3", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.2.0" + }, "dependencies": { "estraverse": { "version": "1.9.3", @@ -3678,7 +5592,10 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", "dev": true, - "optional": true + "optional": true, + "requires": { + "amdefine": "1.0.1" + } } } }, @@ -3686,13 +5603,56 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", - "dev": true + "dev": true, + "requires": { + "es6-map": "0.1.5", + "es6-weak-map": "2.0.2", + "esrecurse": "4.1.0", + "estraverse": "4.2.0" + } }, "eslint": { "version": "3.19.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", "dev": true, + "requires": { + "babel-code-frame": "6.22.0", + "chalk": "1.1.3", + "concat-stream": "1.6.0", + "debug": "2.6.8", + "doctrine": "2.0.0", + "escope": "3.6.0", + "espree": "3.4.3", + "esquery": "1.0.0", + "estraverse": "4.2.0", + "esutils": "2.0.2", + "file-entry-cache": "2.0.0", + "glob": "7.1.2", + "globals": "9.18.0", + "ignore": "3.3.3", + "imurmurhash": "0.1.4", + "inquirer": "0.12.0", + "is-my-json-valid": "2.16.0", + "is-resolvable": "1.0.0", + "js-yaml": "3.7.0", + "json-stable-stringify": "1.0.1", + "levn": "0.3.0", + "lodash": "4.17.4", + "mkdirp": "0.5.0", + "natural-compare": "1.4.0", + "optionator": "0.8.2", + "path-is-inside": "1.0.2", + "pluralize": "1.2.1", + "progress": "1.1.8", + "require-uncached": "1.0.3", + "shelljs": "0.7.8", + "strip-bom": "3.0.0", + "strip-json-comments": "2.0.1", + "table": "3.8.3", + "text-table": "0.2.0", + "user-home": "2.0.0" + }, "dependencies": { "strip-bom": { "version": "3.0.0", @@ -3718,25 +5678,51 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/eslint-config-standard-react/-/eslint-config-standard-react-4.3.0.tgz", "integrity": "sha1-fg01dfFaPAtmOcy2OUnftbo6Coo=", - "dev": true + "dev": true, + "requires": { + "eslint-config-standard-jsx": "3.3.0" + } }, "eslint-import-resolver-node": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz", "integrity": "sha1-Wt2BBujJKNssuiMrzZ76hG49oWw=", - "dev": true + "dev": true, + "requires": { + "debug": "2.6.8", + "object-assign": "4.1.1", + "resolve": "1.3.3" + } }, "eslint-import-resolver-webpack": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.8.1.tgz", "integrity": "sha1-x/i01b08W0iUV+VyjF2xxP+6yao=", "dev": true, + "requires": { + "array-find": "1.0.0", + "debug": "2.6.8", + "enhanced-resolve": "0.9.1", + "find-root": "0.1.2", + "has": "1.0.1", + "interpret": "1.0.3", + "is-absolute": "0.2.6", + "lodash.get": "3.7.0", + "node-libs-browser": "1.1.1", + "resolve": "1.3.3", + "semver": "5.3.0" + }, "dependencies": { "enhanced-resolve": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz", "integrity": "sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "memory-fs": "0.2.0", + "tapable": "0.1.10" + } }, "memory-fs": { "version": "0.2.0", @@ -3757,12 +5743,19 @@ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.0.0.tgz", "integrity": "sha1-pvjCHZATWHWc3DXbrBmCrh7li84=", "dev": true, + "requires": { + "debug": "2.2.0", + "pkg-dir": "1.0.0" + }, "dependencies": { "debug": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.1" + } }, "ms": { "version": "0.7.1", @@ -3777,18 +5770,37 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.3.0.tgz", "integrity": "sha1-N8gB4K2g4pbL3yDD85OstbUq82s=", "dev": true, + "requires": { + "builtin-modules": "1.1.1", + "contains-path": "0.1.0", + "debug": "2.6.8", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "0.2.3", + "eslint-module-utils": "2.0.0", + "has": "1.0.1", + "lodash.cond": "4.5.2", + "minimatch": "3.0.4", + "read-pkg-up": "2.0.0" + }, "dependencies": { "doctrine": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true + "dev": true, + "requires": { + "esutils": "2.0.2", + "isarray": "1.0.0" + } }, "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true + "dev": true, + "requires": { + "locate-path": "2.0.0" + } }, "isarray": { "version": "1.0.0", @@ -3800,25 +5812,43 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + } }, "path-type": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true + "dev": true, + "requires": { + "pify": "2.3.0" + } }, "read-pkg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true + "dev": true, + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.3.8", + "path-type": "2.0.0" + } }, "read-pkg-up": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true + "dev": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + } }, "strip-bom": { "version": "3.0.0", @@ -3828,11 +5858,24 @@ } } }, + "eslint-plugin-jsx-control-statements": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-control-statements/-/eslint-plugin-jsx-control-statements-2.2.0.tgz", + "integrity": "sha512-c1a9pwrx93KBX2GJmkpMaGZW+yR2O4wRCpndnnXIb+mesH3DOrmDejIA+81kVvaMijheSDUAs74gdTZxJJh9tA==", + "dev": true + }, "eslint-plugin-node": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-4.2.2.tgz", "integrity": "sha1-gpWcqa7Xn8vSi7GxiNBcrAT7M2M=", - "dev": true + "dev": true, + "requires": { + "ignore": "3.3.3", + "minimatch": "3.0.4", + "object-assign": "4.1.1", + "resolve": "1.3.3", + "semver": "5.3.0" + } }, "eslint-plugin-promise": { "version": "3.5.0", @@ -3845,12 +5888,23 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz", "integrity": "sha1-xUNb6wZ3ThLH2y9qut3L+QDNP3g=", "dev": true, + "requires": { + "array.prototype.find": "2.0.4", + "doctrine": "1.5.0", + "has": "1.0.1", + "jsx-ast-utils": "1.4.1", + "object.assign": "4.0.4" + }, "dependencies": { "doctrine": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true + "dev": true, + "requires": { + "esutils": "2.0.2", + "isarray": "1.0.0" + } }, "isarray": { "version": "1.0.0", @@ -3871,6 +5925,12 @@ "resolved": "https://registry.npmjs.org/espower-location-detector/-/espower-location-detector-1.0.0.tgz", "integrity": "sha1-oXt+zFnTDheeK+9z+0E3cEyzMbU=", "dev": true, + "requires": { + "is-url": "1.2.2", + "path-is-absolute": "1.0.1", + "source-map": "0.5.6", + "xtend": "4.0.1" + }, "dependencies": { "xtend": { "version": "4.0.1", @@ -3884,7 +5944,11 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/espree/-/espree-3.4.3.tgz", "integrity": "sha1-KRC1zNSc6JPC//+qtP2LOjG4I3Q=", - "dev": true + "dev": true, + "requires": { + "acorn": "5.0.3", + "acorn-jsx": "3.0.1" + } }, "esprima": { "version": "2.7.3", @@ -3897,6 +5961,9 @@ "resolved": "https://registry.npmjs.org/espurify/-/espurify-1.7.0.tgz", "integrity": "sha1-HFz2y8zDLm9jk4C9T5kfq5up0iY=", "dev": true, + "requires": { + "core-js": "2.4.1" + }, "dependencies": { "core-js": { "version": "2.4.1", @@ -3910,13 +5977,20 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", - "dev": true + "dev": true, + "requires": { + "estraverse": "4.2.0" + } }, "esrecurse": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.1.0.tgz", "integrity": "sha1-RxO2U2rffyrE8yfVWed1a/9kgiA=", "dev": true, + "requires": { + "estraverse": "4.1.1", + "object-assign": "4.1.1" + }, "dependencies": { "estraverse": { "version": "4.1.1", @@ -3948,7 +6022,11 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.23" + } }, "eventemitter2": { "version": "0.4.14", @@ -3978,19 +6056,33 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", - "dev": true + "dev": true, + "requires": { + "original": "1.0.0" + } }, "evp_bytestokey": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz", "integrity": "sha1-SXtmrZ/vZc18CKYYCCS6FHa2blM=", - "dev": true + "dev": true, + "requires": { + "create-hash": "1.1.3" + } }, "execa": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/execa/-/execa-0.4.0.tgz", "integrity": "sha1-TrZGejaglfq7KXD/nV4/t7zm68M=", - "dev": true + "dev": true, + "requires": { + "cross-spawn-async": "2.2.5", + "is-stream": "1.1.0", + "npm-run-path": "1.0.0", + "object-assign": "4.1.1", + "path-key": "1.0.0", + "strip-eof": "1.0.0" + } }, "exit": { "version": "0.1.2", @@ -4008,25 +6100,64 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } }, "expand-range": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true + "dev": true, + "requires": { + "fill-range": "2.2.3" + } }, "express": { "version": "4.15.3", "resolved": "https://registry.npmjs.org/express/-/express-4.15.3.tgz", "integrity": "sha1-urZdDwOqgMNYQIly/HAPkWlEtmI=", "dev": true, + "requires": { + "accepts": "1.3.3", + "array-flatten": "1.1.1", + "content-disposition": "0.5.2", + "content-type": "1.0.2", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.7", + "depd": "1.1.0", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "etag": "1.8.0", + "finalhandler": "1.0.3", + "fresh": "0.5.0", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.1", + "path-to-regexp": "0.1.7", + "proxy-addr": "1.1.4", + "qs": "6.4.0", + "range-parser": "1.2.0", + "send": "0.15.3", + "serve-static": "1.12.3", + "setprototypeof": "1.0.3", + "statuses": "1.3.1", + "type-is": "1.6.15", + "utils-merge": "1.0.0", + "vary": "1.1.1" + }, "dependencies": { "debug": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", - "dev": true + "dev": true, + "requires": { + "ms": "2.0.0" + } }, "ms": { "version": "2.0.0", @@ -4052,25 +6183,41 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.0.4.tgz", "integrity": "sha1-HtkZnanL/i7y96MbL96LDRI2iXI=", - "dev": true + "dev": true, + "requires": { + "iconv-lite": "0.4.17", + "jschardet": "1.4.2", + "tmp": "0.0.31" + } }, "extglob": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } }, "extract-text-webpack-plugin": { "version": "2.0.0-rc.0", "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-2.0.0-rc.0.tgz", "integrity": "sha1-UCx6Zi77IoXP4P+q1kDj1bJIpps=", "dev": true, + "requires": { + "async": "2.4.1", + "loader-utils": "0.2.17", + "webpack-sources": "0.1.5" + }, "dependencies": { "async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/async/-/async-2.4.1.tgz", "integrity": "sha1-YqVrJ5yYoR0JhwlqAcw+6463u9c=", - "dev": true + "dev": true, + "requires": { + "lodash": "4.17.4" + } } } }, @@ -4079,12 +6226,21 @@ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.5.tgz", "integrity": "sha1-maBnNbbqIOqbcF13ms/8yHz/BEA=", "dev": true, + "requires": { + "concat-stream": "1.6.0", + "debug": "2.2.0", + "mkdirp": "0.5.0", + "yauzl": "2.4.1" + }, "dependencies": { "debug": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.1" + } }, "ms": { "version": "0.7.1", @@ -4100,12 +6256,6 @@ "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", "dev": true }, - "fast-deep-equal": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-0.1.0.tgz", - "integrity": "sha1-XG9FmaumszPuM0Li7ZeGcvEAH40=", - "dev": true - }, "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", @@ -4128,7 +6278,16 @@ "version": "0.8.12", "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.12.tgz", "integrity": "sha1-ELXZL3bUVXX9Y6IX1OoCvqL47QQ=", - "dev": true + "dev": true, + "requires": { + "core-js": "1.2.7", + "isomorphic-fetch": "2.2.1", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "promise": "7.1.1", + "setimmediate": "1.0.5", + "ua-parser-js": "0.7.12" + } }, "fcopy-pre-bundled": { "version": "0.3.4", @@ -4140,31 +6299,50 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", - "dev": true + "dev": true, + "requires": { + "pend": "1.2.0" + } }, "figures": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" + } }, "file-entry-cache": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true + "dev": true, + "requires": { + "flat-cache": "1.2.2", + "object-assign": "4.1.1" + } }, "file-loader": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-0.10.1.tgz", "integrity": "sha1-gVA0EZiR/GRB+1pkwRvJPCLd2EI=", "dev": true, + "requires": { + "loader-utils": "1.1.0" + }, "dependencies": { "loader-utils": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true + "dev": true, + "requires": { + "big.js": "3.1.3", + "emojis-list": "2.1.0", + "json5": "0.5.1" + } } } }, @@ -4179,6 +6357,13 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -4190,7 +6375,10 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true + "dev": true, + "requires": { + "isarray": "1.0.0" + } } } }, @@ -4211,12 +6399,24 @@ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.3.tgz", "integrity": "sha1-70fneVDpmXgOhgIqVg4yF+DQzIk=", "dev": true, + "requires": { + "debug": "2.6.7", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.1", + "statuses": "1.3.1", + "unpipe": "1.0.0" + }, "dependencies": { "debug": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", - "dev": true + "dev": true, + "requires": { + "ms": "2.0.0" + } }, "ms": { "version": "2.0.0", @@ -4231,6 +6431,11 @@ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", "dev": true, + "requires": { + "commondir": "1.0.1", + "mkdirp": "0.5.1", + "pkg-dir": "1.0.0" + }, "dependencies": { "minimist": { "version": "0.0.8", @@ -4242,7 +6447,10 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true + "dev": true, + "requires": { + "minimist": "0.0.8" + } } } }, @@ -4256,19 +6464,31 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } }, "findup-sync": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", "integrity": "sha1-fz56l7gjksZTvwZYm9hRkOk8NoM=", "dev": true, + "requires": { + "glob": "3.2.11", + "lodash": "2.4.2" + }, "dependencies": { "glob": { "version": "3.2.11", "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimatch": "0.3.0" + } }, "lodash": { "version": "2.4.2", @@ -4286,7 +6506,11 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", - "dev": true + "dev": true, + "requires": { + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + } } } }, @@ -4294,13 +6518,23 @@ "version": "0.7.17", "resolved": "https://registry.npmjs.org/fixed-data-table-2/-/fixed-data-table-2-0.7.17.tgz", "integrity": "sha1-Mn0XL4ZfcXFchtSXn9vzx37PfZo=", - "dev": true + "dev": true, + "requires": { + "create-react-class": "15.5.3", + "prop-types": "15.5.10" + } }, "flat-cache": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz", "integrity": "sha1-+oZxTnLCHbiGAXYezy9VXRq8a5Y=", - "dev": true + "dev": true, + "requires": { + "circular-json": "0.3.1", + "del": "2.2.2", + "graceful-fs": "4.1.11", + "write": "0.2.1" + } }, "flatten": { "version": "1.0.2", @@ -4313,7 +6547,10 @@ "resolved": "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz", "integrity": "sha1-x7vxJN7ELJ0ZHPuUfQqXeN2YbAw=", "dev": true, - "optional": true + "optional": true, + "requires": { + "imul": "1.0.1" + } }, "fn-name": { "version": "2.0.1", @@ -4331,7 +6568,10 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true + "dev": true, + "requires": { + "for-in": "1.0.2" + } }, "foreach": { "version": "2.0.5", @@ -4343,7 +6583,11 @@ "version": "1.5.6", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", - "dev": true + "dev": true, + "requires": { + "cross-spawn": "4.0.2", + "signal-exit": "3.0.2" + } }, "forever-agent": { "version": "0.6.1", @@ -4355,7 +6599,12 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } }, "formidable": { "version": "1.0.17", @@ -4379,25 +6628,44 @@ "version": "0.30.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "klaw": "1.3.1", + "path-is-absolute": "1.0.1", + "rimraf": "2.6.1" + } }, "fs-extra-p": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/fs-extra-p/-/fs-extra-p-4.3.0.tgz", "integrity": "sha1-LhSKVEKH3wJYkxyrxYMGO07tIwM=", "dev": true, + "requires": { + "bluebird-lst": "1.0.2", + "fs-extra": "3.0.1" + }, "dependencies": { "fs-extra": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "3.0.0", + "universalify": "0.1.0" + } }, "jsonfile": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.0.tgz", "integrity": "sha1-kufHRE5f/V+jLmqa6LhQNN+DR9A=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } } } }, @@ -4406,14 +6674,20 @@ "resolved": "https://registry.npmjs.org/fs-temp/-/fs-temp-1.1.2.tgz", "integrity": "sha1-zFLwOLvv5RD2vNCexZK3nQ9pJT8=", "dev": true, - "optional": true + "optional": true, + "requires": { + "random-path": "0.1.1" + } }, "fs-xattr": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/fs-xattr/-/fs-xattr-0.1.15.tgz", "integrity": "sha1-huFirCcn5msi/LtF69IMV5Pnq/Q=", "dev": true, - "optional": true + "optional": true, + "requires": { + "nan": "2.6.2" + } }, "fs.realpath": { "version": "1.0.0", @@ -4425,130 +6699,198 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.1.tgz", "integrity": "sha1-8Z/Sj0Pur3YWgOUZogPE0LPTGv8=", + "dev": true, "optional": true, + "requires": { + "nan": "2.6.2", + "node-pre-gyp": "0.6.33" + }, "dependencies": { "abbrev": { "version": "1.1.0", "bundled": true, + "dev": true, "optional": true }, "ansi-regex": { "version": "2.1.1", - "bundled": true + "bundled": true, + "dev": true }, "ansi-styles": { "version": "2.2.1", "bundled": true, + "dev": true, "optional": true }, "aproba": { "version": "1.1.1", "bundled": true, + "dev": true, "optional": true }, "are-we-there-yet": { "version": "1.1.2", "bundled": true, - "optional": true + "dev": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.2" + } }, "asn1": { "version": "0.2.3", "bundled": true, + "dev": true, "optional": true }, "assert-plus": { "version": "0.2.0", "bundled": true, + "dev": true, "optional": true }, "asynckit": { "version": "0.4.0", "bundled": true, + "dev": true, "optional": true }, "aws-sign2": { "version": "0.6.0", "bundled": true, + "dev": true, "optional": true }, "aws4": { "version": "1.6.0", "bundled": true, + "dev": true, "optional": true }, "balanced-match": { "version": "0.4.2", - "bundled": true + "bundled": true, + "dev": true }, "bcrypt-pbkdf": { "version": "1.0.1", "bundled": true, - "optional": true - }, + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, "block-stream": { "version": "0.0.9", - "bundled": true + "bundled": true, + "dev": true, + "requires": { + "inherits": "2.0.3" + } }, "boom": { "version": "2.10.1", - "bundled": true + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } }, "brace-expansion": { "version": "1.1.6", - "bundled": true + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } }, "buffer-shims": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "caseless": { "version": "0.11.0", "bundled": true, + "dev": true, "optional": true }, "chalk": { "version": "1.1.3", "bundled": true, - "optional": true + "dev": true, + "optional": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } }, "code-point-at": { "version": "1.1.0", - "bundled": true + "bundled": true, + "dev": true }, "combined-stream": { "version": "1.0.5", - "bundled": true + "bundled": true, + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } }, "commander": { "version": "2.9.0", "bundled": true, - "optional": true + "dev": true, + "optional": true, + "requires": { + "graceful-readlink": "1.0.1" + } }, "concat-map": { "version": "0.0.1", - "bundled": true + "bundled": true, + "dev": true }, "console-control-strings": { "version": "1.1.0", - "bundled": true + "bundled": true, + "dev": true }, "core-util-is": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "cryptiles": { "version": "2.0.5", "bundled": true, - "optional": true + "dev": true, + "optional": true, + "requires": { + "boom": "2.10.1" + } }, "dashdash": { "version": "1.14.1", "bundled": true, + "dev": true, "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", "bundled": true, + "dev": true, "optional": true } } @@ -4556,298 +6898,489 @@ "debug": { "version": "2.2.0", "bundled": true, - "optional": true + "dev": true, + "optional": true, + "requires": { + "ms": "0.7.1" + } }, "deep-extend": { "version": "0.4.1", "bundled": true, + "dev": true, "optional": true }, "delayed-stream": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "delegates": { "version": "1.0.0", "bundled": true, + "dev": true, "optional": true }, "ecc-jsbn": { "version": "0.1.1", "bundled": true, - "optional": true + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } }, "escape-string-regexp": { "version": "1.0.5", "bundled": true, + "dev": true, "optional": true }, "extend": { "version": "3.0.0", "bundled": true, + "dev": true, "optional": true }, "extsprintf": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "forever-agent": { "version": "0.6.1", "bundled": true, + "dev": true, "optional": true }, "form-data": { "version": "2.1.2", "bundled": true, - "optional": true + "dev": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.14" + } }, "fs.realpath": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "fstream": { "version": "1.0.10", - "bundled": true + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.5.4" + } }, "fstream-ignore": { "version": "1.0.5", "bundled": true, - "optional": true + "dev": true, + "optional": true, + "requires": { + "fstream": "1.0.10", + "inherits": "2.0.3", + "minimatch": "3.0.3" + } }, "gauge": { "version": "2.7.3", "bundled": true, - "optional": true + "dev": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.0" + } }, "generate-function": { "version": "2.0.0", "bundled": true, + "dev": true, "optional": true }, "generate-object-property": { "version": "1.2.0", "bundled": true, - "optional": true + "dev": true, + "optional": true, + "requires": { + "is-property": "1.0.2" + } }, "getpass": { "version": "0.1.6", "bundled": true, + "dev": true, "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", "bundled": true, + "dev": true, "optional": true } } }, "glob": { "version": "7.1.1", - "bundled": true + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.3", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } }, "graceful-fs": { "version": "4.1.11", - "bundled": true + "bundled": true, + "dev": true }, "graceful-readlink": { "version": "1.0.1", "bundled": true, + "dev": true, "optional": true }, "har-validator": { "version": "2.0.6", "bundled": true, - "optional": true + "dev": true, + "optional": true, + "requires": { + "chalk": "1.1.3", + "commander": "2.9.0", + "is-my-json-valid": "2.15.0", + "pinkie-promise": "2.0.1" + } }, "has-ansi": { "version": "2.0.0", "bundled": true, - "optional": true + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "2.1.1" + } }, "has-unicode": { "version": "2.0.1", "bundled": true, + "dev": true, "optional": true }, "hawk": { "version": "3.1.3", "bundled": true, - "optional": true + "dev": true, + "optional": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } }, "hoek": { "version": "2.16.3", - "bundled": true + "bundled": true, + "dev": true }, "http-signature": { "version": "1.1.1", "bundled": true, - "optional": true + "dev": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.3.1", + "sshpk": "1.10.2" + } }, "inflight": { "version": "1.0.6", - "bundled": true + "bundled": true, + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } }, "inherits": { "version": "2.0.3", - "bundled": true + "bundled": true, + "dev": true }, "ini": { "version": "1.3.4", "bundled": true, + "dev": true, "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } }, "is-my-json-valid": { "version": "2.15.0", "bundled": true, - "optional": true + "dev": true, + "optional": true, + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.1" + } }, "is-property": { "version": "1.0.2", "bundled": true, + "dev": true, "optional": true }, "is-typedarray": { "version": "1.0.0", "bundled": true, + "dev": true, "optional": true }, "isarray": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "isstream": { "version": "0.1.2", "bundled": true, + "dev": true, "optional": true }, "jodid25519": { "version": "1.0.2", "bundled": true, - "optional": true + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } }, "jsbn": { "version": "0.1.1", "bundled": true, + "dev": true, "optional": true }, "json-schema": { "version": "0.2.3", "bundled": true, + "dev": true, "optional": true }, "json-stringify-safe": { "version": "5.0.1", "bundled": true, + "dev": true, "optional": true }, "jsonpointer": { "version": "4.0.1", "bundled": true, + "dev": true, "optional": true }, "jsprim": { "version": "1.3.1", "bundled": true, - "optional": true + "dev": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + } }, "mime-db": { "version": "1.26.0", - "bundled": true + "bundled": true, + "dev": true }, "mime-types": { "version": "2.1.14", - "bundled": true + "bundled": true, + "dev": true, + "requires": { + "mime-db": "1.26.0" + } }, "minimatch": { "version": "3.0.3", - "bundled": true + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "1.1.6" + } }, "minimist": { "version": "0.0.8", - "bundled": true + "bundled": true, + "dev": true }, "mkdirp": { "version": "0.5.1", - "bundled": true + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } }, "ms": { "version": "0.7.1", "bundled": true, + "dev": true, "optional": true }, "node-pre-gyp": { "version": "0.6.33", "bundled": true, - "optional": true + "dev": true, + "optional": true, + "requires": { + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "npmlog": "4.0.2", + "rc": "1.1.7", + "request": "2.79.0", + "rimraf": "2.5.4", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.3.0" + } }, "nopt": { "version": "3.0.6", "bundled": true, - "optional": true + "dev": true, + "optional": true, + "requires": { + "abbrev": "1.1.0" + } }, "npmlog": { "version": "4.0.2", "bundled": true, - "optional": true + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.2", + "console-control-strings": "1.1.0", + "gauge": "2.7.3", + "set-blocking": "2.0.0" + } }, "number-is-nan": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "oauth-sign": { "version": "0.8.2", "bundled": true, + "dev": true, "optional": true }, "object-assign": { "version": "4.1.1", "bundled": true, + "dev": true, "optional": true }, "once": { "version": "1.4.0", - "bundled": true + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1.0.2" + } }, "path-is-absolute": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "pinkie": { "version": "2.0.4", "bundled": true, + "dev": true, "optional": true }, "pinkie-promise": { "version": "2.0.1", "bundled": true, - "optional": true + "dev": true, + "optional": true, + "requires": { + "pinkie": "2.0.4" + } }, "process-nextick-args": { "version": "1.0.7", - "bundled": true + "bundled": true, + "dev": true }, "punycode": { "version": "1.4.1", "bundled": true, + "dev": true, "optional": true }, "qs": { "version": "6.3.1", "bundled": true, + "dev": true, "optional": true }, "rc": { "version": "1.1.7", "bundled": true, + "dev": true, "optional": true, + "requires": { + "deep-extend": "0.4.1", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, "dependencies": { "minimist": { "version": "1.2.0", "bundled": true, + "dev": true, "optional": true } } @@ -4855,143 +7388,264 @@ "readable-stream": { "version": "2.2.2", "bundled": true, - "optional": true + "dev": true, + "optional": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } }, "request": { "version": "2.79.0", "bundled": true, - "optional": true + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.11.0", + "combined-stream": "1.0.5", + "extend": "3.0.0", + "forever-agent": "0.6.1", + "form-data": "2.1.2", + "har-validator": "2.0.6", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.14", + "oauth-sign": "0.8.2", + "qs": "6.3.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.4.3", + "uuid": "3.0.1" + } }, "rimraf": { "version": "2.5.4", - "bundled": true + "bundled": true, + "dev": true, + "requires": { + "glob": "7.1.1" + } }, "semver": { "version": "5.3.0", "bundled": true, + "dev": true, "optional": true }, "set-blocking": { "version": "2.0.0", "bundled": true, + "dev": true, "optional": true }, "signal-exit": { "version": "3.0.2", "bundled": true, + "dev": true, "optional": true }, "sntp": { "version": "1.0.9", "bundled": true, - "optional": true + "dev": true, + "optional": true, + "requires": { + "hoek": "2.16.3" + } }, "sshpk": { "version": "1.10.2", "bundled": true, + "dev": true, "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.6", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, "dependencies": { "assert-plus": { "version": "1.0.0", "bundled": true, + "dev": true, "optional": true } } }, "string-width": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } }, "string_decoder": { "version": "0.10.31", - "bundled": true + "bundled": true, + "dev": true }, "stringstream": { "version": "0.0.5", "bundled": true, + "dev": true, "optional": true }, "strip-ansi": { "version": "3.0.1", - "bundled": true + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } }, "strip-json-comments": { "version": "2.0.1", "bundled": true, + "dev": true, "optional": true }, "supports-color": { "version": "2.0.0", "bundled": true, + "dev": true, "optional": true }, "tar": { "version": "2.2.1", - "bundled": true + "bundled": true, + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.10", + "inherits": "2.0.3" + } }, "tar-pack": { "version": "3.3.0", "bundled": true, + "dev": true, "optional": true, + "requires": { + "debug": "2.2.0", + "fstream": "1.0.10", + "fstream-ignore": "1.0.5", + "once": "1.3.3", + "readable-stream": "2.1.5", + "rimraf": "2.5.4", + "tar": "2.2.1", + "uid-number": "0.0.6" + }, "dependencies": { "once": { "version": "1.3.3", "bundled": true, - "optional": true + "dev": true, + "optional": true, + "requires": { + "wrappy": "1.0.2" + } }, "readable-stream": { "version": "2.1.5", "bundled": true, - "optional": true + "dev": true, + "optional": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } } } }, "tough-cookie": { "version": "2.3.2", "bundled": true, - "optional": true + "dev": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } }, "tunnel-agent": { "version": "0.4.3", "bundled": true, + "dev": true, "optional": true }, "tweetnacl": { "version": "0.14.5", "bundled": true, + "dev": true, "optional": true }, "uid-number": { "version": "0.0.6", "bundled": true, + "dev": true, "optional": true }, "util-deprecate": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "uuid": { "version": "3.0.1", "bundled": true, + "dev": true, "optional": true }, "verror": { "version": "1.3.6", "bundled": true, - "optional": true + "dev": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } }, "wide-align": { "version": "1.1.0", "bundled": true, - "optional": true + "dev": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } }, "wrappy": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "xtend": { "version": "4.0.1", "bundled": true, + "dev": true, "optional": true } } @@ -5000,7 +7654,13 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.0", + "rimraf": "2.6.1" + } }, "function-bind": { "version": "1.1.0", @@ -5018,13 +7678,26 @@ "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true + "dev": true, + "requires": { + "aproba": "1.1.2", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } }, "gaze": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", - "dev": true + "dev": true, + "requires": { + "globule": "0.1.0" + } }, "generate-function": { "version": "2.0.0", @@ -5036,7 +7709,10 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true + "dev": true, + "requires": { + "is-property": "1.0.2" + } }, "get-caller-file": { "version": "1.0.2", @@ -5048,7 +7724,10 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/get-port/-/get-port-2.1.0.tgz", "integrity": "sha1-h4P53OvR7qSVozThpqJR54iHqxo=", - "dev": true + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } }, "get-stdin": { "version": "4.0.1", @@ -5056,12 +7735,6 @@ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", "dev": true }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, "getobject": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", @@ -5073,6 +7746,9 @@ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -5086,25 +7762,44 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } }, "glob-base": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } }, "glob-parent": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true + "dev": true, + "requires": { + "is-glob": "2.0.1" + } }, "global": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", "dev": true, + "requires": { + "min-document": "2.19.0", + "process": "0.5.2" + }, "dependencies": { "process": { "version": "0.5.2", @@ -5124,19 +7819,36 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true + "dev": true, + "requires": { + "array-union": "1.0.2", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } }, "globule": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", "dev": true, + "requires": { + "glob": "3.1.21", + "lodash": "1.0.2", + "minimatch": "0.2.14" + }, "dependencies": { "glob": { "version": "3.1.21", "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "1.2.3", + "inherits": "1.0.2", + "minimatch": "0.2.14" + } }, "graceful-fs": { "version": "1.2.3", @@ -5166,7 +7878,11 @@ "version": "0.2.14", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", - "dev": true + "dev": true, + "requires": { + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + } } } }, @@ -5175,6 +7891,23 @@ "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", "dev": true, + "requires": { + "create-error-class": "3.0.2", + "duplexer2": "0.1.4", + "is-redirect": "1.0.0", + "is-retry-allowed": "1.1.0", + "is-stream": "1.1.0", + "lowercase-keys": "1.0.0", + "node-status-codes": "1.0.0", + "object-assign": "4.1.1", + "parse-json": "2.2.0", + "pinkie-promise": "2.0.1", + "read-all-stream": "3.1.0", + "readable-stream": "2.2.11", + "timed-out": "3.1.3", + "unzip-response": "1.0.2", + "url-parse-lax": "1.0.0" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -5186,7 +7919,16 @@ "version": "2.2.11", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.0.1", + "string_decoder": "1.0.2", + "util-deprecate": "1.0.2" + } }, "safe-buffer": { "version": "5.0.1", @@ -5198,7 +7940,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } } } }, @@ -5219,12 +7964,38 @@ "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz", "integrity": "sha1-VpN81RlDJK3/bSB2MYMqnWuk5/A=", "dev": true, + "requires": { + "async": "0.1.22", + "coffee-script": "1.3.3", + "colors": "0.6.2", + "dateformat": "1.0.2-1.2.3", + "eventemitter2": "0.4.14", + "exit": "0.1.2", + "findup-sync": "0.1.3", + "getobject": "0.1.0", + "glob": "3.1.21", + "grunt-legacy-log": "0.1.3", + "grunt-legacy-util": "0.2.0", + "hooker": "0.2.3", + "iconv-lite": "0.2.11", + "js-yaml": "2.0.5", + "lodash": "0.9.2", + "minimatch": "0.2.14", + "nopt": "1.0.10", + "rimraf": "2.2.8", + "underscore.string": "2.2.1", + "which": "1.0.9" + }, "dependencies": { "argparse": { "version": "0.1.16", "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", "integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=", "dev": true, + "requires": { + "underscore": "1.7.0", + "underscore.string": "2.4.0" + }, "dependencies": { "underscore.string": { "version": "2.4.0", @@ -5256,7 +8027,12 @@ "version": "3.1.21", "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "1.2.3", + "inherits": "1.0.2", + "minimatch": "0.2.14" + } }, "graceful-fs": { "version": "1.2.3", @@ -5280,7 +8056,11 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz", "integrity": "sha1-olrmUJmZ6X3yeMZxnaEb0Gh3Q6g=", - "dev": true + "dev": true, + "requires": { + "argparse": "0.1.16", + "esprima": "1.0.4" + } }, "lodash": { "version": "0.9.2", @@ -5298,7 +8078,11 @@ "version": "0.2.14", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", - "dev": true + "dev": true, + "requires": { + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + } }, "rimraf": { "version": "2.2.8", @@ -5325,6 +8109,9 @@ "resolved": "https://registry.npmjs.org/grunt-bump/-/grunt-bump-0.7.3.tgz", "integrity": "sha1-7+S792LcwTOWFAwsaL5ae6jD/z4=", "dev": true, + "requires": { + "semver": "4.3.6" + }, "dependencies": { "semver": { "version": "4.3.6", @@ -5339,6 +8126,9 @@ "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-0.6.0.tgz", "integrity": "sha1-9TLbpLghJnTHwBPhRr2mY4uQSPY=", "dev": true, + "requires": { + "rimraf": "2.2.8" + }, "dependencies": { "rimraf": { "version": "2.2.8", @@ -5352,19 +8142,33 @@ "version": "0.15.0", "resolved": "https://registry.npmjs.org/grunt-contrib-jade/-/grunt-contrib-jade-0.15.0.tgz", "integrity": "sha1-OdTU8lPYaV612+/KDt59MQacABo=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3", + "jade": "1.11.0" + } }, "grunt-contrib-nodeunit": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/grunt-contrib-nodeunit/-/grunt-contrib-nodeunit-0.4.1.tgz", "integrity": "sha1-lDOT7l1msc2ttJqbI6ruREVQlbI=", - "dev": true + "dev": true, + "requires": { + "hooker": "0.2.3", + "nodeunit": "0.9.5" + } }, "grunt-contrib-watch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.6.1.tgz", "integrity": "sha1-ZP3LolpjX1tNobbOb5DaCutuPxU=", "dev": true, + "requires": { + "async": "0.2.10", + "gaze": "0.5.2", + "lodash": "2.4.2", + "tiny-lr-fork": "0.0.5" + }, "dependencies": { "async": { "version": "0.2.10", @@ -5385,6 +8189,13 @@ "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz", "integrity": "sha1-7ClCboAwIa9ZAp+H0vnNczWgVTE=", "dev": true, + "requires": { + "colors": "0.6.2", + "grunt-legacy-log-utils": "0.1.1", + "hooker": "0.2.3", + "lodash": "2.4.2", + "underscore.string": "2.3.3" + }, "dependencies": { "colors": { "version": "0.6.2", @@ -5411,6 +8222,11 @@ "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz", "integrity": "sha1-wHBrndkGThFvNvI/5OawSGcsD34=", "dev": true, + "requires": { + "colors": "0.6.2", + "lodash": "2.4.2", + "underscore.string": "2.3.3" + }, "dependencies": { "colors": { "version": "0.6.2", @@ -5437,6 +8253,15 @@ "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz", "integrity": "sha1-kzJIhNv343qf98Am3/RR2UqeVUs=", "dev": true, + "requires": { + "async": "0.1.22", + "exit": "0.1.2", + "getobject": "0.1.0", + "hooker": "0.2.3", + "lodash": "0.9.2", + "underscore.string": "2.2.1", + "which": "1.0.9" + }, "dependencies": { "async": { "version": "0.1.22", @@ -5462,7 +8287,11 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/gzip-js/-/gzip-js-0.3.2.tgz", "integrity": "sha1-IxF+/usozzhSSN7/Df+tiUg22Ws=", - "dev": true + "dev": true, + "requires": { + "crc32": "0.2.2", + "deflate-js": "0.2.3" + } }, "handle-thing": { "version": "1.2.5", @@ -5480,19 +8309,29 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "dev": true + "dev": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } }, "has": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", - "dev": true + "dev": true, + "requires": { + "function-bind": "1.1.0" + } }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } }, "has-color": { "version": "0.1.7", @@ -5516,13 +8355,19 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3" + } }, "hash.js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.0.3.tgz", "integrity": "sha1-EzL/ABVsCg/92CNgE9B7d6BFFXM=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3" + } }, "hash_file": { "version": "0.1.1", @@ -5534,7 +8379,13 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } }, "highlight.js": { "version": "9.12.0", @@ -5546,13 +8397,25 @@ "version": "4.6.1", "resolved": "https://registry.npmjs.org/history/-/history-4.6.1.tgz", "integrity": "sha1-kRz462VyhVWpTysSeAoMUxoU0v0=", - "dev": true + "dev": true, + "requires": { + "invariant": "2.2.2", + "loose-envify": "1.3.1", + "resolve-pathname": "2.1.0", + "value-equal": "0.2.1", + "warning": "3.0.0" + } }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true + "dev": true, + "requires": { + "hash.js": "1.0.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } }, "hoek": { "version": "2.16.3", @@ -5570,7 +8433,11 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } }, "home-path": { "version": "1.0.5", @@ -5595,6 +8462,12 @@ "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "dev": true, + "requires": { + "inherits": "2.0.3", + "obuf": "1.1.1", + "readable-stream": "2.2.11", + "wbuf": "1.7.2" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -5606,7 +8479,16 @@ "version": "2.2.11", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.0.1", + "string_decoder": "1.0.2", + "util-deprecate": "1.0.2" + } }, "safe-buffer": { "version": "5.0.1", @@ -5618,7 +8500,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } } } }, @@ -5632,7 +8517,10 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz", "integrity": "sha1-eb96eF6klf5mFl5zQVPzY/9UN9o=", - "dev": true + "dev": true, + "requires": { + "whatwg-encoding": "1.0.1" + } }, "http-deceiver": { "version": "1.2.7", @@ -5644,13 +8532,23 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.1.tgz", "integrity": "sha1-X4uO2YrKVFZWv1cplzh/kEpyIlc=", - "dev": true + "dev": true, + "requires": { + "depd": "1.1.0", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.3.1" + } }, "http-proxy": { "version": "1.16.2", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", "dev": true, + "requires": { + "eventemitter3": "1.2.0", + "requires-port": "1.0.0" + }, "dependencies": { "eventemitter3": { "version": "1.2.0", @@ -5665,6 +8563,12 @@ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", "dev": true, + "requires": { + "http-proxy": "1.16.2", + "is-glob": "3.1.0", + "lodash": "4.17.4", + "micromatch": "2.3.11" + }, "dependencies": { "is-extglob": { "version": "2.1.1", @@ -5676,7 +8580,10 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } } } }, @@ -5684,7 +8591,12 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true + "dev": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.1" + } }, "https-browserify": { "version": "0.0.1", @@ -5747,12 +8659,6 @@ "dev": true, "optional": true }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, "imul": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz", @@ -5775,7 +8681,10 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true + "dev": true, + "requires": { + "repeating": "2.0.1" + } }, "indexes-of": { "version": "1.0.1", @@ -5793,7 +8702,11 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } }, "inherits": { "version": "2.0.3", @@ -5811,13 +8724,32 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-2.0.5.tgz", "integrity": "sha1-wVPH6I/YT+9cYC6VqBaLJ3BnH+c=", - "dev": true + "dev": true, + "requires": { + "bowser": "1.7.0", + "hyphenate-style-name": "1.0.2" + } }, "inquirer": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", - "dev": true + "dev": true, + "requires": { + "ansi-escapes": "1.4.0", + "ansi-regex": "2.1.1", + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "cli-width": "2.1.0", + "figures": "1.7.0", + "lodash": "4.17.4", + "readline2": "1.0.1", + "run-async": "0.1.0", + "rx-lite": "3.1.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "through": "2.3.8" + } }, "interpret": { "version": "1.0.3", @@ -5829,7 +8761,10 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", - "dev": true + "dev": true, + "requires": { + "loose-envify": "1.3.1" + } }, "invert-kv": { "version": "1.0.0", @@ -5841,7 +8776,12 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/iocane/-/iocane-0.7.0.tgz", "integrity": "sha1-+DLmGw85ddFO96edt5E0sLAsTKc=", - "dev": true + "dev": true, + "requires": { + "debug": "2.6.8", + "hash_file": "0.1.1", + "pbkdf2": "3.0.12" + } }, "ipaddr.js": { "version": "1.3.0", @@ -5859,7 +8799,11 @@ "version": "0.2.6", "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", - "dev": true + "dev": true, + "requires": { + "is-relative": "0.2.1", + "is-windows": "0.2.0" + } }, "is-absolute-url": { "version": "2.1.0", @@ -5877,7 +8821,10 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true + "dev": true, + "requires": { + "binary-extensions": "1.8.0" + } }, "is-buffer": { "version": "1.1.5", @@ -5889,7 +8836,10 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } }, "is-callable": { "version": "1.1.3", @@ -5901,7 +8851,10 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.0.10.tgz", "integrity": "sha1-9zkzayYyNlBhqdSCcM1WrjNpMY4=", - "dev": true + "dev": true, + "requires": { + "ci-info": "1.0.0" + } }, "is-date-object": { "version": "1.0.1", @@ -5925,7 +8878,10 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } }, "is-error": { "version": "2.2.1", @@ -5949,13 +8905,19 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } }, "is-function": { "version": "1.0.1", @@ -5973,7 +8935,10 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } }, "is-in-browser": { "version": "1.1.3", @@ -5986,6 +8951,12 @@ "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz", "integrity": "sha1-8Hndm/2uZe4gOKrorLyGqxCeNpM=", "dev": true, + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.1" + }, "dependencies": { "xtend": { "version": "4.0.1", @@ -6005,7 +8976,10 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true + "dev": true, + "requires": { + "kind-of": "3.2.2" + } }, "is-obj": { "version": "1.0.1", @@ -6017,7 +8991,10 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-0.2.0.tgz", "integrity": "sha1-s2ExHYPG5dcmyr9eJQsCNxBvWuI=", - "dev": true + "dev": true, + "requires": { + "symbol-observable": "0.2.4" + } }, "is-path-cwd": { "version": "1.0.0", @@ -6029,13 +9006,19 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", - "dev": true + "dev": true, + "requires": { + "is-path-inside": "1.0.0" + } }, "is-path-inside": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", - "dev": true + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } }, "is-plain-obj": { "version": "1.1.0", @@ -6047,7 +9030,10 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.3.tgz", "integrity": "sha1-wVvz5LZrYtcu+vKSWEhmPsvGGbY=", - "dev": true + "dev": true, + "requires": { + "isobject": "3.0.0" + } }, "is-posix-bracket": { "version": "0.1.1", @@ -6083,19 +9069,28 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true + "dev": true, + "requires": { + "has": "1.0.1" + } }, "is-relative": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", - "dev": true + "dev": true, + "requires": { + "is-unc-path": "0.1.2" + } }, "is-resolvable": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", - "dev": true + "dev": true, + "requires": { + "tryit": "1.0.3" + } }, "is-retry-allowed": { "version": "1.1.0", @@ -6113,7 +9108,10 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", - "dev": true + "dev": true, + "requires": { + "html-comment-regex": "1.1.1" + } }, "is-symbol": { "version": "1.0.1", @@ -6131,7 +9129,10 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", - "dev": true + "dev": true, + "requires": { + "unc-path-regex": "0.1.2" + } }, "is-url": { "version": "1.2.2", @@ -6179,7 +9180,11 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "dev": true + "dev": true, + "requires": { + "node-fetch": "1.7.1", + "whatwg-fetch": "2.0.3" + } }, "isstream": { "version": "0.1.2", @@ -6191,7 +9196,19 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/jade/-/jade-1.11.0.tgz", "integrity": "sha1-nIDlOMEtP7lcjZu5VZ+gzAQEBf0=", - "dev": true + "dev": true, + "requires": { + "character-parser": "1.2.1", + "clean-css": "3.4.27", + "commander": "2.6.0", + "constantinople": "3.0.2", + "jstransformer": "0.0.2", + "mkdirp": "0.5.0", + "transformers": "2.1.0", + "uglify-js": "2.8.28", + "void-elements": "2.0.1", + "with": "4.0.3" + } }, "js-base64": { "version": "2.1.9", @@ -6209,7 +9226,11 @@ "version": "3.7.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", - "dev": true + "dev": true, + "requires": { + "argparse": "1.0.9", + "esprima": "2.7.3" + } }, "jsbn": { "version": "0.1.1", @@ -6229,6 +9250,27 @@ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-9.12.0.tgz", "integrity": "sha1-6MVG//ywbADUgzyoRBD+1/igl9Q=", "dev": true, + "requires": { + "abab": "1.0.3", + "acorn": "4.0.13", + "acorn-globals": "3.1.0", + "array-equal": "1.0.0", + "content-type-parser": "1.0.1", + "cssom": "0.3.2", + "cssstyle": "0.2.37", + "escodegen": "1.8.1", + "html-encoding-sniffer": "1.0.1", + "nwmatcher": "1.4.0", + "parse5": "1.5.1", + "request": "2.81.0", + "sax": "1.2.2", + "symbol-tree": "3.2.2", + "tough-cookie": "2.3.2", + "webidl-conversions": "4.0.1", + "whatwg-encoding": "1.0.1", + "whatwg-url": "4.8.0", + "xml-name-validator": "2.0.1" + }, "dependencies": { "acorn": { "version": "4.0.13", @@ -6240,7 +9282,10 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", - "dev": true + "dev": true, + "requires": { + "acorn": "4.0.13" + } } } }, @@ -6262,17 +9307,14 @@ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", "dev": true }, - "json-schema-traverse": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.0.tgz", - "integrity": "sha1-ABbAscoe/kbUTTdUG838Gdz64Ns=", - "dev": true - }, "json-stable-stringify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true + "dev": true, + "requires": { + "jsonify": "0.0.0" + } }, "json-stringify-safe": { "version": "5.0.1", @@ -6296,7 +9338,10 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } }, "jsonify": { "version": "0.0.0", @@ -6315,6 +9360,12 @@ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -6329,6 +9380,10 @@ "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-0.0.2.tgz", "integrity": "sha1-eq4pqQPRls+glz2IXT5HlH7Ndqs=", "dev": true, + "requires": { + "is-promise": "2.1.0", + "promise": "6.1.0" + }, "dependencies": { "asap": { "version": "1.0.0", @@ -6340,7 +9395,10 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz", "integrity": "sha1-LOcp9rlLRcJoka0GAsXJDgTG7vY=", - "dev": true + "dev": true, + "requires": { + "asap": "1.0.0" + } } } }, @@ -6350,1457 +9408,2504 @@ "integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=", "dev": true }, + "jsx-control-statements": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/jsx-control-statements/-/jsx-control-statements-3.2.5.tgz", + "integrity": "sha1-0aBtKWxDEZAlfxU1F7Gk57sUGBQ=", + "dev": true, + "requires": { + "babel-core": "6.25.0", + "babel-plugin-syntax-jsx": "6.18.0" + } + }, "kdbxweb": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/kdbxweb/-/kdbxweb-1.0.1.tgz", "integrity": "sha1-/i19fXoP4hQ90yainKG/bGLuT0I=", "dev": true, + "requires": { + "jssha": "git://github.com/keeweb/jssha.git#1ffad73a7e5ab7158596c090a524f29ca2aee13d", + "pako": "git://github.com/keeweb/pako.git#653c0b00d8941c89d09ed4546d2179001ec44efc", + "promise-polyfill": "git://github.com/keeweb/promise-polyfill.git#1a787918fe1a118b53ccf93fcb1e47da51f4950b", + "text-encoding": "git://github.com/keeweb/text-encoding.git#4dfb7cb0954c222852092f8b06ae4f6b4f60bfbb", + "xmldom": "git://github.com/keeweb/xmldom.git#ec8f61f723e2f403adaf7a1bbf55ced4ff1ea0c6" + }, "dependencies": { "abbrev": { - "version": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=" }, "acorn": { - "version": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" }, "align-text": { - "version": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=" + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "requires": { + "kind-of": "3.1.0", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } }, "amdefine": { - "version": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" }, "ansi-regex": { - "version": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "ansi-styles": { - "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" }, "anymatch": { - "version": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz", - "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz", + "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=", + "requires": { + "arrify": "1.0.1", + "micromatch": "2.3.11" + } }, "argparse": { - "version": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=" + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "requires": { + "sprintf-js": "1.0.3" + } }, "arr-diff": { - "version": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "requires": { + "arr-flatten": "1.0.1" + } }, "arr-flatten": { - "version": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.1.tgz", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.1.tgz", "integrity": "sha1-5f/lTUXhnzLyFukeuZyM6JK7YEs=" }, "array-unique": { - "version": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" }, "arrify": { - "version": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" }, "asn1": { - "version": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" }, "assert": { - "version": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "requires": { + "util": "0.10.3" + } }, "assert-plus": { - "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" }, "async": { - "version": "https://registry.npmjs.org/async/-/async-2.1.4.tgz", - "integrity": "sha1-LSFgx3iAMuTdbL4lAvH5osj2zeQ=" + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.1.4.tgz", + "integrity": "sha1-LSFgx3iAMuTdbL4lAvH5osj2zeQ=", + "requires": { + "lodash": "4.17.4" + } }, "async-each": { - "version": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=" }, "asynckit": { - "version": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "aws-sign2": { - "version": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" }, "aws4": { - "version": "https://registry.npmjs.org/aws4/-/aws4-1.5.0.tgz", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.5.0.tgz", "integrity": "sha1-Cin/t5wxyecS7rCH6OemS0pW11U=" }, "balanced-match": { - "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" }, "base64-js": { - "version": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.0.tgz", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.0.tgz", "integrity": "sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE=" }, "base64-loader": { - "version": "https://registry.npmjs.org/base64-loader/-/base64-loader-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64-loader/-/base64-loader-1.0.0.tgz", "integrity": "sha1-5TC62I6QbdKh+tCvLZ5oP6i9kqg=" }, "bcrypt-pbkdf": { - "version": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz", "integrity": "sha1-PKdrhSQccXC/fZcD57mqdGMAQNQ=", - "optional": true + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } }, "big.js": { - "version": "https://registry.npmjs.org/big.js/-/big.js-3.1.3.tgz", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.1.3.tgz", "integrity": "sha1-TK2iGTZS6zyp7I5VyQFWacmAaXg=" }, "binary-extensions": { - "version": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.8.0.tgz", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.8.0.tgz", "integrity": "sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=" }, "bl": { - "version": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", - "integrity": "sha1-/cqHGplxOqANGeO7ukHER4emU5g=" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", + "integrity": "sha1-/cqHGplxOqANGeO7ukHER4emU5g=", + "requires": { + "readable-stream": "2.0.6" + } }, "boom": { - "version": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=" + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "requires": { + "hoek": "2.16.3" + } }, "brace-expansion": { - "version": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz", - "integrity": "sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=" + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz", + "integrity": "sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=", + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } }, "braces": { - "version": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=" + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } }, "browser-stdout": { - "version": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=" }, "browserify-aes": { - "version": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-0.4.0.tgz", - "integrity": "sha1-BnFJtmjfMcS1hTPgLQHoBthgjiw=" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-0.4.0.tgz", + "integrity": "sha1-BnFJtmjfMcS1hTPgLQHoBthgjiw=", + "requires": { + "inherits": "2.0.3" + } }, "browserify-zlib": { - "version": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "requires": { + "pako": "0.2.9" + }, "dependencies": { "pako": { - "version": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=" } } }, "buffer": { - "version": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=" + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "requires": { + "base64-js": "1.2.0", + "ieee754": "1.1.8", + "isarray": "1.0.0" + } }, "buffer-shims": { - "version": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=" }, "builtin-status-codes": { - "version": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" }, "camelcase": { - "version": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" }, "caseless": { - "version": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=" }, "center-align": { - "version": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=" + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } }, "chalk": { - "version": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } }, "chokidar": { - "version": "https://registry.npmjs.org/chokidar/-/chokidar-1.6.1.tgz", - "integrity": "sha1-L0RHq16W5Q+z14n9kNTHLg5McMI=" + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.6.1.tgz", + "integrity": "sha1-L0RHq16W5Q+z14n9kNTHLg5McMI=", + "requires": { + "anymatch": "1.3.0", + "async-each": "1.0.1", + "fsevents": "1.0.17", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + } }, "cli": { - "version": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", + "requires": { + "exit": "0.1.2", + "glob": "7.1.1" + }, "dependencies": { "glob": { - "version": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=" + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", + "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.3", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } } } }, "cliui": { - "version": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, "dependencies": { "wordwrap": { - "version": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" } } }, "clone": { - "version": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=" }, "combined-stream": { - "version": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "requires": { + "delayed-stream": "1.0.0" + } }, "commander": { - "version": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=" + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "requires": { + "graceful-readlink": "1.0.1" + } }, "concat-map": { - "version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "console-browserify": { - "version": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "requires": { + "date-now": "0.1.4" + } }, "constants-browserify": { - "version": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" }, "core-util-is": { - "version": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "coveralls": { - "version": "https://registry.npmjs.org/coveralls/-/coveralls-2.11.15.tgz", - "integrity": "sha1-N9NHQ2nWbBTzP6c6nSXO5uCZ/KA=" + "version": "2.11.15", + "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-2.11.15.tgz", + "integrity": "sha1-N9NHQ2nWbBTzP6c6nSXO5uCZ/KA=", + "requires": { + "js-yaml": "3.6.1", + "lcov-parse": "0.0.10", + "log-driver": "1.2.5", + "minimist": "1.2.0", + "request": "2.75.0" + } }, "cryptiles": { - "version": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "requires": { + "boom": "2.10.1" + } }, "crypto-browserify": { - "version": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.3.0.tgz", - "integrity": "sha1-ufx1u0oO1h3PHNXa6W6zDJw+UGw=" + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.3.0.tgz", + "integrity": "sha1-ufx1u0oO1h3PHNXa6W6zDJw+UGw=", + "requires": { + "browserify-aes": "0.4.0", + "pbkdf2-compat": "2.0.1", + "ripemd160": "0.2.0", + "sha.js": "2.2.6" + } }, "dashdash": { - "version": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "1.0.0" + }, "dependencies": { "assert-plus": { - "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" } } }, "date-now": { - "version": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" }, "debug": { - "version": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "requires": { + "ms": "0.7.1" + } }, "decamelize": { - "version": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, "deep-is": { - "version": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" }, "delayed-stream": { - "version": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, "diff": { - "version": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=" }, "dom-serializer": { - "version": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "requires": { + "domelementtype": "1.1.3", + "entities": "1.1.1" + }, "dependencies": { "domelementtype": { - "version": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=" }, "entities": { - "version": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=" } } }, "domain-browser": { - "version": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=" }, "domelementtype": { - "version": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=" }, "domhandler": { - "version": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", + "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", + "requires": { + "domelementtype": "1.3.0" + } }, "domutils": { - "version": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } }, "ecc-jsbn": { - "version": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "optional": true + "optional": true, + "requires": { + "jsbn": "0.1.0" + } }, "emojis-list": { - "version": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" }, "enhanced-resolve": { - "version": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz", "integrity": "sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=", + "requires": { + "graceful-fs": "4.1.11", + "memory-fs": "0.2.0", + "tapable": "0.1.10" + }, "dependencies": { "memory-fs": { - "version": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.2.0.tgz", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.2.0.tgz", "integrity": "sha1-8rslNovBIeORwlIN6Slpyu4KApA=" } } }, "entities": { - "version": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=" }, "errno": { - "version": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", - "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=" + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", + "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", + "requires": { + "prr": "0.0.0" + } }, "escape-string-regexp": { - "version": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { - "version": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "requires": { + "esprima": "2.7.3", + "estraverse": "1.9.3", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.2.0" + }, "dependencies": { "source-map": { - "version": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", - "optional": true + "optional": true, + "requires": { + "amdefine": "1.0.1" + } } } }, "esprima": { - "version": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=" }, "estraverse": { - "version": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=" }, "esutils": { - "version": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" }, "events": { - "version": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" }, "exit": { - "version": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" }, "expand-brackets": { - "version": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=" + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "requires": { + "is-posix-bracket": "0.1.1" + } }, "expand-range": { - "version": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=" + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "requires": { + "fill-range": "2.2.3" + } }, "expect.js": { - "version": "https://registry.npmjs.org/expect.js/-/expect.js-0.3.1.tgz", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/expect.js/-/expect.js-0.3.1.tgz", "integrity": "sha1-sKWaDS7/VDdUTr8M6qYBWEHQm1s=" }, "exports-loader": { - "version": "https://registry.npmjs.org/exports-loader/-/exports-loader-0.6.3.tgz", - "integrity": "sha1-V9x4kX9wm5byR/qR5ptVTIVQE8g=" + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/exports-loader/-/exports-loader-0.6.3.tgz", + "integrity": "sha1-V9x4kX9wm5byR/qR5ptVTIVQE8g=", + "requires": { + "loader-utils": "0.2.16", + "source-map": "0.1.43" + } }, "extend": { - "version": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", "integrity": "sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=" }, "extglob": { - "version": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=" + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "requires": { + "is-extglob": "1.0.0" + } }, "extsprintf": { - "version": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=" }, "fast-levenshtein": { - "version": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "filename-regex": { - "version": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.0.tgz", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.0.tgz", "integrity": "sha1-mW4+gEebmLmJfxWopYs9CE6SZ3U=" }, "fill-range": { - "version": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=" + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.6", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } }, "for-in": { - "version": "https://registry.npmjs.org/for-in/-/for-in-0.1.6.tgz", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.6.tgz", "integrity": "sha1-yfluib+tGKVFr17D7TUqHZ5bTcg=" }, "for-own": { - "version": "https://registry.npmjs.org/for-own/-/for-own-0.1.4.tgz", - "integrity": "sha1-AUm0GjkIjHUV9R6+HBOG1F+TUHI=" + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.4.tgz", + "integrity": "sha1-AUm0GjkIjHUV9R6+HBOG1F+TUHI=", + "requires": { + "for-in": "0.1.6" + } }, "forever-agent": { - "version": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { - "version": "https://registry.npmjs.org/form-data/-/form-data-2.0.0.tgz", - "integrity": "sha1-bwrrrcxdoWwT4ezBETfYX5uIOyU=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.0.0.tgz", + "integrity": "sha1-bwrrrcxdoWwT4ezBETfYX5uIOyU=", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.14" + } }, "fs-walk": { - "version": "https://registry.npmjs.org/fs-walk/-/fs-walk-0.0.1.tgz", - "integrity": "sha1-9/yRw64e6tB8mYvF0N1B8tvr0zU=" + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/fs-walk/-/fs-walk-0.0.1.tgz", + "integrity": "sha1-9/yRw64e6tB8mYvF0N1B8tvr0zU=", + "requires": { + "async": "2.1.4" + } }, "fs.realpath": { - "version": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "https://registry.npmjs.org/fsevents/-/fsevents-1.0.17.tgz", + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.0.17.tgz", "integrity": "sha1-hTfz8SJyZ4dltP1lKMDx9m+PRVg=", "optional": true, + "requires": { + "nan": "2.5.1", + "node-pre-gyp": "0.6.32" + }, "dependencies": { "abbrev": { - "version": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", "optional": true }, "ansi-regex": { - "version": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz", "integrity": "sha1-xQYbbg74qBd15Q9dZhUb9r83EQc=" }, "ansi-styles": { - "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "optional": true }, "aproba": { - "version": "https://registry.npmjs.org/aproba/-/aproba-1.0.4.tgz", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.0.4.tgz", "integrity": "sha1-JxNoB3XnYUyLoYbAZdTi5S0QcsA=", "optional": true }, "are-we-there-yet": { - "version": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz", "integrity": "sha1-gORw6VoIR5T+GJkmLFZnxuiN4bM=", - "optional": true + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.2" + } }, "asn1": { - "version": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", "optional": true }, "assert-plus": { - "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", "optional": true }, "asynckit": { - "version": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "optional": true }, "aws-sign2": { - "version": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", "optional": true }, "aws4": { - "version": "https://registry.npmjs.org/aws4/-/aws4-1.5.0.tgz", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.5.0.tgz", "integrity": "sha1-Cin/t5wxyecS7rCH6OemS0pW11U=", "optional": true }, "balanced-match": { - "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" }, "bcrypt-pbkdf": { - "version": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz", "integrity": "sha1-PKdrhSQccXC/fZcD57mqdGMAQNQ=", - "optional": true + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } }, "block-stream": { - "version": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=" + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "requires": { + "inherits": "2.0.3" + } }, "boom": { - "version": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=" + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "requires": { + "hoek": "2.16.3" + } }, "brace-expansion": { - "version": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz", - "integrity": "sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=" + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz", + "integrity": "sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=", + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } }, "buffer-shims": { - "version": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=" }, "caseless": { - "version": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", "optional": true }, "chalk": { - "version": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "optional": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, "dependencies": { "supports-color": { - "version": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "optional": true } } }, "code-point-at": { - "version": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, "combined-stream": { - "version": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "requires": { + "delayed-stream": "1.0.0" + } }, "commander": { - "version": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "optional": true + "optional": true, + "requires": { + "graceful-readlink": "1.0.1" + } }, "concat-map": { - "version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "console-control-strings": { - "version": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, "core-util-is": { - "version": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cryptiles": { - "version": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "optional": true + "optional": true, + "requires": { + "boom": "2.10.1" + } }, "dashdash": { - "version": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, "dependencies": { "assert-plus": { - "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "optional": true } } }, "debug": { - "version": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "optional": true + "optional": true, + "requires": { + "ms": "0.7.1" + } }, "deep-extend": { - "version": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.1.tgz", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.1.tgz", "integrity": "sha1-7+QRPQgIX05vlod1mBD4B0aeIlM=", "optional": true }, "delayed-stream": { - "version": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, "delegates": { - "version": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "optional": true }, "ecc-jsbn": { - "version": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "optional": true + "optional": true, + "requires": { + "jsbn": "0.1.0" + } }, "escape-string-regexp": { - "version": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "optional": true }, "extend": { - "version": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", "integrity": "sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=", "optional": true }, "extsprintf": { - "version": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=" }, "forever-agent": { - "version": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "optional": true }, "form-data": { - "version": "https://registry.npmjs.org/form-data/-/form-data-2.1.2.tgz", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.2.tgz", "integrity": "sha1-icNTQAi5fq2ky7FX1Y9vXfAl6uQ=", - "optional": true + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.13" + } }, "fs.realpath": { - "version": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fstream": { - "version": "https://registry.npmjs.org/fstream/-/fstream-1.0.10.tgz", - "integrity": "sha1-YE6Kkv4m/9n2+uMDmdSYThqyKCI=" + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.10.tgz", + "integrity": "sha1-YE6Kkv4m/9n2+uMDmdSYThqyKCI=", + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.5.4" + } }, "fstream-ignore": { - "version": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", - "optional": true + "optional": true, + "requires": { + "fstream": "1.0.10", + "inherits": "2.0.3", + "minimatch": "3.0.3" + } }, "gauge": { - "version": "https://registry.npmjs.org/gauge/-/gauge-2.7.2.tgz", + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.2.tgz", "integrity": "sha1-Fc7MMbAtBTRaXWsOFxzbOtIwd3Q=", - "optional": true + "optional": true, + "requires": { + "aproba": "1.0.4", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.0", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "supports-color": "0.2.0", + "wide-align": "1.1.0" + } }, "generate-function": { - "version": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", "optional": true }, "generate-object-property": { - "version": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "optional": true + "optional": true, + "requires": { + "is-property": "1.0.2" + } }, "getpass": { - "version": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz", "integrity": "sha1-KD/9n8ElaECHUxHBtg6MQBhxEOY=", "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, "dependencies": { "assert-plus": { - "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "optional": true } } }, "glob": { - "version": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=" + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", + "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.3", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } }, "graceful-fs": { - "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" }, "graceful-readlink": { - "version": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", "optional": true }, "har-validator": { - "version": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", - "optional": true + "optional": true, + "requires": { + "chalk": "1.1.3", + "commander": "2.9.0", + "is-my-json-valid": "2.15.0", + "pinkie-promise": "2.0.1" + } }, "has-ansi": { - "version": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "optional": true + "optional": true, + "requires": { + "ansi-regex": "2.0.0" + } }, "has-unicode": { - "version": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "optional": true }, "hawk": { - "version": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "optional": true + "optional": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } }, "hoek": { - "version": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" }, "http-signature": { - "version": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "optional": true + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.3.1", + "sshpk": "1.10.1" + } }, "inflight": { - "version": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } }, "inherits": { - "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "ini": { - "version": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", "optional": true }, "is-fullwidth-code-point": { - "version": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "1.0.1" + } }, "is-my-json-valid": { - "version": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz", "integrity": "sha1-k27do8o8IR/ZjzstPgjaQ/eykVs=", - "optional": true + "optional": true, + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.1" + } }, "is-property": { - "version": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", "optional": true }, "is-typedarray": { - "version": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "optional": true }, "isarray": { - "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isstream": { - "version": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "optional": true }, "jodid25519": { - "version": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=", - "optional": true + "optional": true, + "requires": { + "jsbn": "0.1.0" + } }, "jsbn": { - "version": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz", "integrity": "sha1-ZQmH2g3XT06/WhE3eiqi0nPpff0=", "optional": true }, "json-schema": { - "version": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", "optional": true }, "json-stringify-safe": { - "version": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "optional": true }, "jsonpointer": { - "version": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", "optional": true }, "jsprim": { - "version": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.1.tgz", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.1.tgz", "integrity": "sha1-KnJW9wQSop7jZwqspiWZTE3P8lI=", - "optional": true + "optional": true, + "requires": { + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + } }, "mime-db": { - "version": "https://registry.npmjs.org/mime-db/-/mime-db-1.25.0.tgz", + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.25.0.tgz", "integrity": "sha1-wY29fHOl2/b0SgJNwNFloeexw5I=" }, "mime-types": { - "version": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.13.tgz", - "integrity": "sha1-4HqqnGxrmnyjASxpADrSWjnpKog=" + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.13.tgz", + "integrity": "sha1-4HqqnGxrmnyjASxpADrSWjnpKog=", + "requires": { + "mime-db": "1.25.0" + } }, "minimatch": { - "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", + "requires": { + "brace-expansion": "1.1.6" + } }, "minimist": { - "version": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, "mkdirp": { - "version": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=" + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } }, "ms": { - "version": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", "optional": true }, "node-pre-gyp": { - "version": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.32.tgz", + "version": "0.6.32", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.32.tgz", "integrity": "sha1-/EUrN25zGbPSVfXzSFPvb9j+H9U=", - "optional": true + "optional": true, + "requires": { + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "npmlog": "4.0.2", + "rc": "1.1.6", + "request": "2.79.0", + "rimraf": "2.5.4", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.3.0" + } }, "nopt": { - "version": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "optional": true + "optional": true, + "requires": { + "abbrev": "1.0.9" + } }, "npmlog": { - "version": "https://registry.npmjs.org/npmlog/-/npmlog-4.0.2.tgz", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.0.2.tgz", "integrity": "sha1-0DlQ4OeM4VJ7om0qdZLpNIrD518=", - "optional": true + "optional": true, + "requires": { + "are-we-there-yet": "1.1.2", + "console-control-strings": "1.1.0", + "gauge": "2.7.2", + "set-blocking": "2.0.0" + } }, "number-is-nan": { - "version": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "oauth-sign": { - "version": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", "optional": true }, "object-assign": { - "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", "optional": true }, "once": { - "version": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1.0.2" + } }, "path-is-absolute": { - "version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "pinkie": { - "version": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", "optional": true }, "pinkie-promise": { - "version": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "optional": true + "optional": true, + "requires": { + "pinkie": "2.0.4" + } }, "process-nextick-args": { - "version": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" }, "punycode": { - "version": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "optional": true }, "qs": { - "version": "https://registry.npmjs.org/qs/-/qs-6.3.0.tgz", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.0.tgz", "integrity": "sha1-9AOyZPI7wBIox0ExtAfxjV6l1EI=", "optional": true }, "rc": { - "version": "https://registry.npmjs.org/rc/-/rc-1.1.6.tgz", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.1.6.tgz", "integrity": "sha1-Q2UbdrauU7XIAvEVH6P8OwWZack=", "optional": true, + "requires": { + "deep-extend": "0.4.1", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "1.0.4" + }, "dependencies": { "minimist": { - "version": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "optional": true } } }, "readable-stream": { - "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", "integrity": "sha1-qeb+w8fdqF+LsbO6cChgRVb8gl4=", - "optional": true + "optional": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } }, "request": { - "version": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", + "version": "2.79.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", - "optional": true + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.5.0", + "caseless": "0.11.0", + "combined-stream": "1.0.5", + "extend": "3.0.0", + "forever-agent": "0.6.1", + "form-data": "2.1.2", + "har-validator": "2.0.6", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.13", + "oauth-sign": "0.8.2", + "qs": "6.3.0", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.4.3", + "uuid": "3.0.1" + } }, "rimraf": { - "version": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz", - "integrity": "sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=" + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz", + "integrity": "sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=", + "requires": { + "glob": "7.1.1" + } }, "semver": { - "version": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", "optional": true }, "set-blocking": { - "version": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "optional": true }, "signal-exit": { - "version": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "optional": true }, "sntp": { - "version": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "optional": true + "optional": true, + "requires": { + "hoek": "2.16.3" + } }, "sshpk": { - "version": "https://registry.npmjs.org/sshpk/-/sshpk-1.10.1.tgz", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.10.1.tgz", "integrity": "sha1-MOGl0ykkSXShr2FREznVla9mOLA=", "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.0", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.6", + "jodid25519": "1.0.2", + "jsbn": "0.1.0", + "tweetnacl": "0.14.5" + }, "dependencies": { "assert-plus": { - "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "optional": true } } }, "string-width": { - "version": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } }, "string_decoder": { - "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, "stringstream": { - "version": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", "optional": true }, "strip-ansi": { - "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.0.0" + } }, "strip-json-comments": { - "version": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", "optional": true }, "supports-color": { - "version": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=", "optional": true }, "tar": { - "version": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.10", + "inherits": "2.0.3" + } }, "tar-pack": { - "version": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.3.0.tgz", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.3.0.tgz", "integrity": "sha1-MJMYFkGPVa/E0hd1r91nIM7kXa4=", "optional": true, + "requires": { + "debug": "2.2.0", + "fstream": "1.0.10", + "fstream-ignore": "1.0.5", + "once": "1.3.3", + "readable-stream": "2.1.5", + "rimraf": "2.5.4", + "tar": "2.2.1", + "uid-number": "0.0.6" + }, "dependencies": { "once": { - "version": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", - "optional": true + "optional": true, + "requires": { + "wrappy": "1.0.2" + } }, "readable-stream": { - "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz", "integrity": "sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA=", - "optional": true + "optional": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } } } }, "tough-cookie": { - "version": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", - "optional": true + "optional": true, + "requires": { + "punycode": "1.4.1" + } }, "tunnel-agent": { - "version": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", "optional": true }, "tweetnacl": { - "version": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "optional": true }, "uid-number": { - "version": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", "optional": true }, "util-deprecate": { - "version": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "uuid": { - "version": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=", "optional": true }, "verror": { - "version": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", - "optional": true + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } }, "wide-align": { - "version": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.0.tgz", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.0.tgz", "integrity": "sha1-QO3egCpx/qHwcNo+YtzaLnrdlq0=", - "optional": true + "optional": true, + "requires": { + "string-width": "1.0.2" + } }, "wrappy": { - "version": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "xtend": { - "version": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "optional": true } } }, "generate-function": { - "version": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=" }, "generate-object-property": { - "version": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "requires": { + "is-property": "1.0.2" + } }, "getpass": { - "version": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz", "integrity": "sha1-KD/9n8ElaECHUxHBtg6MQBhxEOY=", + "requires": { + "assert-plus": "1.0.0" + }, "dependencies": { "assert-plus": { - "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" } } }, "glob": { - "version": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=" + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.3", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } }, "glob-base": { - "version": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=" + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } }, "glob-parent": { - "version": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "requires": { + "is-glob": "2.0.1" + } }, "graceful-fs": { - "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" }, "graceful-readlink": { - "version": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" }, "growl": { - "version": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=" }, "handlebars": { - "version": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.6.tgz", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.6.tgz", "integrity": "sha1-LORISFBTf5yXqAJtU5m5NcTtTtc=", + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.7.5" + }, "dependencies": { "async": { - "version": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" }, "source-map": { - "version": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=" + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "requires": { + "amdefine": "1.0.1" + } } } }, "har-validator": { - "version": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", + "requires": { + "chalk": "1.1.3", + "commander": "2.9.0", + "is-my-json-valid": "2.15.0", + "pinkie-promise": "2.0.1" + } }, "has-ansi": { - "version": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "2.1.1" + } }, "has-flag": { - "version": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" }, "hawk": { - "version": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } }, "hoek": { - "version": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" }, "htmlparser2": { - "version": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.3.0", + "domutils": "1.5.1", + "entities": "1.0.0", + "readable-stream": "1.1.14" + }, "dependencies": { "isarray": { - "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" }, "readable-stream": { - "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=" + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } } } }, "http-signature": { - "version": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.3.1", + "sshpk": "1.10.2" + } }, "https-browserify": { - "version": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=" }, "ieee754": { - "version": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=" }, "indexof": { - "version": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" }, "inflight": { - "version": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } }, "inherits": { - "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "interpret": { - "version": "https://registry.npmjs.org/interpret/-/interpret-0.6.6.tgz", + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-0.6.6.tgz", "integrity": "sha1-/s16GOfOXKar+5U+H4YhOknxYls=" }, "is-binary-path": { - "version": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "requires": { + "binary-extensions": "1.8.0" + } }, "is-buffer": { - "version": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.4.tgz", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.4.tgz", "integrity": "sha1-z8hszV3FpS+oBIkRHGkgxFfi2Ys=" }, "is-dotfile": { - "version": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.2.tgz", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.2.tgz", "integrity": "sha1-LBMjg/ORmfjtwmjKAbmwB9IFzE0=" }, "is-equal-shallow": { - "version": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=" + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "requires": { + "is-primitive": "2.0.0" + } }, "is-extendable": { - "version": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, "is-extglob": { - "version": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" }, "is-glob": { - "version": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "1.0.0" + } }, "is-my-json-valid": { - "version": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz", - "integrity": "sha1-k27do8o8IR/ZjzstPgjaQ/eykVs=" + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz", + "integrity": "sha1-k27do8o8IR/ZjzstPgjaQ/eykVs=", + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.1" + } }, "is-number": { - "version": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "requires": { + "kind-of": "3.1.0" + } }, "is-posix-bracket": { - "version": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" }, "is-primitive": { - "version": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" }, "is-property": { - "version": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" }, "is-typedarray": { - "version": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, "isarray": { - "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { - "version": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz", "integrity": "sha1-NvPiLmB1CSD15yQaR2qMakInWtA=" }, "isobject": { - "version": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } }, "isstream": { - "version": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "istanbul": { - "version": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", + "requires": { + "abbrev": "1.0.9", + "async": "1.5.2", + "escodegen": "1.8.1", + "esprima": "2.7.3", + "glob": "5.0.15", + "handlebars": "4.0.6", + "js-yaml": "3.6.1", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "once": "1.4.0", + "resolve": "1.1.7", + "supports-color": "3.2.3", + "which": "1.2.12", + "wordwrap": "1.0.0" + }, "dependencies": { "async": { - "version": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" }, "supports-color": { - "version": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=" + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } } } }, "jodid25519": { - "version": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=", - "optional": true + "optional": true, + "requires": { + "jsbn": "0.1.0" + } }, "js-yaml": { - "version": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", - "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=" + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", + "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=", + "requires": { + "argparse": "1.0.9", + "esprima": "2.7.3" + } }, "jsbn": { - "version": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz", "integrity": "sha1-ZQmH2g3XT06/WhE3eiqi0nPpff0=", "optional": true }, "jshint": { - "version": "https://registry.npmjs.org/jshint/-/jshint-2.9.4.tgz", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.9.4.tgz", "integrity": "sha1-XjupeEjVKQJz21FK7kf+JM9ZKTQ=", + "requires": { + "cli": "1.0.1", + "console-browserify": "1.1.0", + "exit": "0.1.2", + "htmlparser2": "3.8.3", + "lodash": "3.7.0", + "minimatch": "3.0.3", + "shelljs": "0.3.0", + "strip-json-comments": "1.0.4" + }, "dependencies": { "lodash": { - "version": "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz", "integrity": "sha1-Nni9irmVBXwHreg27S7wh9qBHUU=" } } }, "jshint-loader": { - "version": "https://registry.npmjs.org/jshint-loader/-/jshint-loader-0.8.3.tgz", + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/jshint-loader/-/jshint-loader-0.8.3.tgz", "integrity": "sha1-ahbOiH5NLxuvveBXXjwQ970uaUs=", + "requires": { + "loader-utils": "0.2.16", + "rcloader": "0.1.2", + "strip-json-comments": "0.1.3" + }, "dependencies": { "strip-json-comments": { - "version": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-0.1.3.tgz", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-0.1.3.tgz", "integrity": "sha1-Fkxk43Coo8wAyeAbU55WmCPw7lQ=" } } }, "json-schema": { - "version": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" }, "json-stringify-safe": { - "version": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "json3": { - "version": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=" }, "json5": { - "version": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" }, "jsonpointer": { - "version": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=" }, "jsprim": { - "version": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.1.tgz", - "integrity": "sha1-KnJW9wQSop7jZwqspiWZTE3P8lI=" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.1.tgz", + "integrity": "sha1-KnJW9wQSop7jZwqspiWZTE3P8lI=", + "requires": { + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + } }, "jssha": { "version": "git://github.com/keeweb/jssha.git#1ffad73a7e5ab7158596c090a524f29ca2aee13d", "dev": true }, "kind-of": { - "version": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz", - "integrity": "sha1-R11pil5J/15T0U4+cyQp3Iv0z0c=" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz", + "integrity": "sha1-R11pil5J/15T0U4+cyQp3Iv0z0c=", + "requires": { + "is-buffer": "1.1.4" + } }, "lazy-cache": { - "version": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" }, "lcov-parse": { - "version": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=" }, "levn": { - "version": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=" + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } }, "loader-utils": { - "version": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.16.tgz", - "integrity": "sha1-8IYyBm7YKCg13/iN+1JwR2Wt7m0=" + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.16.tgz", + "integrity": "sha1-8IYyBm7YKCg13/iN+1JwR2Wt7m0=", + "requires": { + "big.js": "3.1.3", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" + } }, "lodash": { - "version": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" }, "lodash._baseassign": { - "version": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "requires": { + "lodash._basecopy": "3.0.1", + "lodash.keys": "3.1.2" + } }, "lodash._basecopy": { - "version": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=" }, "lodash._basecreate": { - "version": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=" }, "lodash._getnative": { - "version": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" }, "lodash._isiterateecall": { - "version": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=" }, "lodash.clonedeep": { - "version": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" }, "lodash.create": { - "version": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", - "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", + "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", + "requires": { + "lodash._baseassign": "3.2.0", + "lodash._basecreate": "3.0.3", + "lodash._isiterateecall": "3.0.9" + } }, "lodash.isarguments": { - "version": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=" }, "lodash.isarray": { - "version": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=" }, "lodash.keys": { - "version": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "requires": { + "lodash._getnative": "3.9.1", + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" + } }, "log-driver": { - "version": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.5.tgz", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.5.tgz", "integrity": "sha1-euTsJXMC/XkNVXyxDJcQDYV7AFY=" }, "longest": { - "version": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" }, "memory-fs": { - "version": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.3.0.tgz", - "integrity": "sha1-e8xrYp46Q+hx1+Kaymrop/FcuyA=" + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.3.0.tgz", + "integrity": "sha1-e8xrYp46Q+hx1+Kaymrop/FcuyA=", + "requires": { + "errno": "0.1.4", + "readable-stream": "2.0.6" + } }, "micromatch": { - "version": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=" + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.0", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.1.0", + "normalize-path": "2.0.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.3" + } }, "mime-db": { - "version": "https://registry.npmjs.org/mime-db/-/mime-db-1.26.0.tgz", + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.26.0.tgz", "integrity": "sha1-6v/NDk/Gk1z4E02iRuLmw1MFrf8=" }, "mime-types": { - "version": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.14.tgz", - "integrity": "sha1-9+99l1g/yvO30oK2+LVnnaselO4=" + "version": "2.1.14", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.14.tgz", + "integrity": "sha1-9+99l1g/yvO30oK2+LVnnaselO4=", + "requires": { + "mime-db": "1.26.0" + } }, "minimatch": { - "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", + "requires": { + "brace-expansion": "1.1.6" + } }, "minimist": { - "version": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "mkdirp": { - "version": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, "dependencies": { "minimist": { - "version": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" } } }, "mocha": { - "version": "https://registry.npmjs.org/mocha/-/mocha-3.2.0.tgz", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.2.0.tgz", "integrity": "sha1-fcT0XlCIB1FxpoiWgU5q6et6heM=", + "requires": { + "browser-stdout": "1.3.0", + "commander": "2.9.0", + "debug": "2.2.0", + "diff": "1.4.0", + "escape-string-regexp": "1.0.5", + "glob": "7.0.5", + "growl": "1.9.2", + "json3": "3.3.2", + "lodash.create": "3.1.1", + "mkdirp": "0.5.1", + "supports-color": "3.1.2" + }, "dependencies": { "glob": { - "version": "https://registry.npmjs.org/glob/-/glob-7.0.5.tgz", - "integrity": "sha1-tCAqaQmbu00pKnwblbZoK2fr3JU=" + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.5.tgz", + "integrity": "sha1-tCAqaQmbu00pKnwblbZoK2fr3JU=", + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.3", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } }, "supports-color": { - "version": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", - "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", + "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", + "requires": { + "has-flag": "1.0.0" + } } } }, "ms": { - "version": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" }, "nan": { - "version": "https://registry.npmjs.org/nan/-/nan-2.5.1.tgz", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.5.1.tgz", "integrity": "sha1-1bAWkSUzJql6K77p5hxV2NYDUeI=", "optional": true }, "node-libs-browser": { - "version": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-0.7.0.tgz", - "integrity": "sha1-PicsCBnjCJNeJmdECNevDhSRuDs=" + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-0.7.0.tgz", + "integrity": "sha1-PicsCBnjCJNeJmdECNevDhSRuDs=", + "requires": { + "assert": "1.4.1", + "browserify-zlib": "0.1.4", + "buffer": "4.9.1", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.3.0", + "domain-browser": "1.1.7", + "events": "1.1.1", + "https-browserify": "0.0.1", + "os-browserify": "0.2.1", + "path-browserify": "0.0.0", + "process": "0.11.9", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.0.6", + "stream-browserify": "2.0.1", + "stream-http": "2.6.3", + "string_decoder": "0.10.31", + "timers-browserify": "2.0.2", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.3", + "vm-browserify": "0.0.4" + } }, "node-uuid": { - "version": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz", + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz", "integrity": "sha1-baWhdmjEs91ZYjvaEc9/pMH2Cm8=" }, "nopt": { - "version": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=" + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "requires": { + "abbrev": "1.0.9" + } }, "normalize-path": { - "version": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", "integrity": "sha1-R4hqwWYnYNQmG32XnSQXCdPOP3o=" }, "oauth-sign": { - "version": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" }, "object-assign": { - "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "object.omit": { - "version": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "requires": { + "for-own": "0.1.4", + "is-extendable": "0.1.1" + } }, "once": { - "version": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1.0.2" + } }, "optimist": { - "version": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "requires": { + "minimist": "0.0.10", + "wordwrap": "0.0.3" + }, "dependencies": { "minimist": { - "version": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" }, "wordwrap": { - "version": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" } } }, "optionator": { - "version": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=" + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + } }, "os-browserify": { - "version": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz", "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=" }, "pako": { @@ -7808,43 +11913,62 @@ "dev": true }, "parse-glob": { - "version": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=" + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.2", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } }, "path-browserify": { - "version": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=" }, "path-is-absolute": { - "version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "pbkdf2-compat": { - "version": "https://registry.npmjs.org/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz", "integrity": "sha1-tuDI+plJTZTgURV1gCpZpcFC8og=" }, "pinkie": { - "version": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" }, "pinkie-promise": { - "version": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "2.0.4" + } }, "prelude-ls": { - "version": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "preserve": { - "version": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" }, "process": { - "version": "https://registry.npmjs.org/process/-/process-0.11.9.tgz", + "version": "0.11.9", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.9.tgz", "integrity": "sha1-e9WtIapiU+fahoImTx4R0RwDGME=" }, "process-nextick-args": { - "version": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" }, "promise-polyfill": { @@ -7852,171 +11976,317 @@ "dev": true }, "prr": { - "version": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=" }, "punycode": { - "version": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, "qs": { - "version": "https://registry.npmjs.org/qs/-/qs-6.2.1.tgz", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.1.tgz", "integrity": "sha1-zgPF/wk1vB2daanxTL0Y5WjWdiU=" }, "querystring": { - "version": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" }, "querystring-es3": { - "version": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" }, "randomatic": { - "version": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.6.tgz", - "integrity": "sha1-EQ3Kv/OX6dz/fAeJzMCkmt8exbs=" + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.6.tgz", + "integrity": "sha1-EQ3Kv/OX6dz/fAeJzMCkmt8exbs=", + "requires": { + "is-number": "2.1.0", + "kind-of": "3.1.0" + } }, "rcfinder": { - "version": "https://registry.npmjs.org/rcfinder/-/rcfinder-0.1.9.tgz", - "integrity": "sha1-8+gPOH3fmugK4wpBADKWQuroERU=" + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/rcfinder/-/rcfinder-0.1.9.tgz", + "integrity": "sha1-8+gPOH3fmugK4wpBADKWQuroERU=", + "requires": { + "lodash.clonedeep": "4.5.0" + } }, "rcloader": { - "version": "https://registry.npmjs.org/rcloader/-/rcloader-0.1.2.tgz", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/rcloader/-/rcloader-0.1.2.tgz", "integrity": "sha1-oJY6ZDfQnvjLktky0trUl7DRc2w=", + "requires": { + "lodash": "2.4.2", + "rcfinder": "0.1.9" + }, "dependencies": { "lodash": { - "version": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=" } } }, "readable-stream": { - "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } }, "readdirp": { - "version": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.3", + "readable-stream": "2.0.6", + "set-immediate-shim": "1.0.1" + } }, "regex-cache": { - "version": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", - "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=" + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", + "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", + "requires": { + "is-equal-shallow": "0.1.3", + "is-primitive": "2.0.0" + } }, "repeat-element": { - "version": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" }, "repeat-string": { - "version": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, "request": { - "version": "https://registry.npmjs.org/request/-/request-2.75.0.tgz", - "integrity": "sha1-0rgmiihtoT6qXQGt9dGMyQ9lfZM=" + "version": "2.75.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.75.0.tgz", + "integrity": "sha1-0rgmiihtoT6qXQGt9dGMyQ9lfZM=", + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.5.0", + "bl": "1.1.2", + "caseless": "0.11.0", + "combined-stream": "1.0.5", + "extend": "3.0.0", + "forever-agent": "0.6.1", + "form-data": "2.0.0", + "har-validator": "2.0.6", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.14", + "node-uuid": "1.4.7", + "oauth-sign": "0.8.2", + "qs": "6.2.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.4.3" + } }, "resolve": { - "version": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=" }, "right-align": { - "version": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=" + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "requires": { + "align-text": "0.1.4" + } }, "rimraf": { - "version": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz", + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz", "integrity": "sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=", + "requires": { + "glob": "7.1.1" + }, "dependencies": { "glob": { - "version": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=" + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", + "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.3", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } } } }, "ripemd160": { - "version": "https://registry.npmjs.org/ripemd160/-/ripemd160-0.2.0.tgz", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-0.2.0.tgz", "integrity": "sha1-K/GYveFnys+lHAqSjoS2i74XH84=" }, "set-immediate-shim": { - "version": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" }, "setimmediate": { - "version": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" }, "sha.js": { - "version": "https://registry.npmjs.org/sha.js/-/sha.js-2.2.6.tgz", + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.2.6.tgz", "integrity": "sha1-F93t3F9yL7ZlAWWIlUYZd4ZzFbo=" }, "shelljs": { - "version": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=" }, "sntp": { - "version": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=" + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "requires": { + "hoek": "2.16.3" + } }, "source-list-map": { - "version": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz", "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=" }, "source-map": { - "version": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=" + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "requires": { + "amdefine": "1.0.1" + } }, "sprintf-js": { - "version": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "sshpk": { - "version": "https://registry.npmjs.org/sshpk/-/sshpk-1.10.2.tgz", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.10.2.tgz", "integrity": "sha1-1agEziJpVRVjjnmNviMnPeBwpfo=", + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.0", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.6", + "jodid25519": "1.0.2", + "jsbn": "0.1.0", + "tweetnacl": "0.14.5" + }, "dependencies": { "assert-plus": { - "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" } } }, "stats-webpack-plugin": { - "version": "https://registry.npmjs.org/stats-webpack-plugin/-/stats-webpack-plugin-0.4.3.tgz", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/stats-webpack-plugin/-/stats-webpack-plugin-0.4.3.tgz", "integrity": "sha1-svYYIC8o3QSrR9fs9Uq4RhN7euo=" }, "stream-browserify": { - "version": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.0.6" + } }, "stream-http": { - "version": "https://registry.npmjs.org/stream-http/-/stream-http-2.6.3.tgz", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.6.3.tgz", "integrity": "sha1-TD3b+WNZaOos/U5I1D3l3vJiWsM=", + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.2.2", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" + }, "dependencies": { "readable-stream": { - "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", - "integrity": "sha1-qeb+w8fdqF+LsbO6cChgRVb8gl4=" + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", + "integrity": "sha1-qeb+w8fdqF+LsbO6cChgRVb8gl4=", + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } } } }, "string_decoder": { - "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, "stringstream": { - "version": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" }, "strip-ansi": { - "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } }, "strip-json-comments": { - "version": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=" }, "supports-color": { - "version": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" }, "tapable": { - "version": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz", + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz", "integrity": "sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q=" }, "text-encoding": { @@ -8024,142 +12294,241 @@ "dev": true }, "timers-browserify": { - "version": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.2.tgz", - "integrity": "sha1-q0iDz1l9zVCvIRNJoA+8pWrIa4Y=" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.2.tgz", + "integrity": "sha1-q0iDz1l9zVCvIRNJoA+8pWrIa4Y=", + "requires": { + "setimmediate": "1.0.5" + } }, "to-arraybuffer": { - "version": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" }, "tough-cookie": { - "version": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=" + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "requires": { + "punycode": "1.4.1" + } }, "tty-browserify": { - "version": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" }, "tunnel-agent": { - "version": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=" }, "tweetnacl": { - "version": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "optional": true }, "type-check": { - "version": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=" + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "1.1.2" + } }, "uglify-js": { - "version": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.7.5.tgz", + "version": "2.7.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.7.5.tgz", "integrity": "sha1-RhLAx7qu4rp8SH3kkErhIgefLKg=", + "requires": { + "async": "0.2.10", + "source-map": "0.5.6", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, "dependencies": { "async": { - "version": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" }, "source-map": { - "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" } } }, "uglify-loader": { - "version": "https://registry.npmjs.org/uglify-loader/-/uglify-loader-1.4.0.tgz", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/uglify-loader/-/uglify-loader-1.4.0.tgz", "integrity": "sha1-wmlbk0xO2npKzc1LpCWFtjmTA2A=", + "requires": { + "loader-utils": "0.2.16", + "source-map": "0.5.6", + "uglify-js": "2.7.5" + }, "dependencies": { "source-map": { - "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" } } }, "uglify-to-browserify": { - "version": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=" }, "url": { - "version": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, "dependencies": { "punycode": { - "version": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" } } }, "util": { - "version": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + }, "dependencies": { "inherits": { - "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" } } }, "util-deprecate": { - "version": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "verror": { - "version": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", - "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=" + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", + "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", + "requires": { + "extsprintf": "1.0.2" + } }, "vm-browserify": { - "version": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=" + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "requires": { + "indexof": "0.0.1" + } }, "watchpack": { - "version": "https://registry.npmjs.org/watchpack/-/watchpack-0.2.9.tgz", + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-0.2.9.tgz", "integrity": "sha1-Yuqkq15bo1/fwBgnVibjwPXj+ws=", + "requires": { + "async": "0.9.2", + "chokidar": "1.6.1", + "graceful-fs": "4.1.11" + }, "dependencies": { "async": { - "version": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" } } }, "webpack": { - "version": "https://registry.npmjs.org/webpack/-/webpack-1.14.0.tgz", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-1.14.0.tgz", "integrity": "sha1-VPH/uSBRoyilsgV9auM8KJRiyCM=", + "requires": { + "acorn": "3.3.0", + "async": "1.5.2", + "clone": "1.0.2", + "enhanced-resolve": "0.9.1", + "interpret": "0.6.6", + "loader-utils": "0.2.16", + "memory-fs": "0.3.0", + "mkdirp": "0.5.1", + "node-libs-browser": "0.7.0", + "optimist": "0.6.1", + "supports-color": "3.2.3", + "tapable": "0.1.10", + "uglify-js": "2.7.5", + "watchpack": "0.2.9", + "webpack-core": "0.6.9" + }, "dependencies": { "async": { - "version": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" }, "supports-color": { - "version": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=" + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } } } }, "webpack-core": { - "version": "https://registry.npmjs.org/webpack-core/-/webpack-core-0.6.9.tgz", + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/webpack-core/-/webpack-core-0.6.9.tgz", "integrity": "sha1-/FcViMhVjad76e+23r3Fo7FyvcI=", + "requires": { + "source-list-map": "0.1.8", + "source-map": "0.4.4" + }, "dependencies": { "source-map": { - "version": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=" + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "requires": { + "amdefine": "1.0.1" + } } } }, "which": { - "version": "https://registry.npmjs.org/which/-/which-1.2.12.tgz", - "integrity": "sha1-3me15FAmnxlJCe8j7OTr5Bb6EZI=" + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/which/-/which-1.2.12.tgz", + "integrity": "sha1-3me15FAmnxlJCe8j7OTr5Bb6EZI=", + "requires": { + "isexe": "1.1.2" + } }, "window-size": { - "version": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" }, "wordwrap": { - "version": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" }, "wrappy": { - "version": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "xmldom": { @@ -8167,12 +12536,20 @@ "dev": true }, "xtend": { - "version": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" }, "yargs": { - "version": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=" + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } } } }, @@ -8180,19 +12557,28 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } }, "klaw": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } }, "last-line-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/last-line-stream/-/last-line-stream-1.0.0.tgz", "integrity": "sha1-0bZNafhv8kry0EiDos7uFFIKVgA=", "dev": true, + "requires": { + "through2": "2.0.3" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -8204,7 +12590,16 @@ "version": "2.2.11", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.0.1", + "string_decoder": "1.0.2", + "util-deprecate": "1.0.2" + } }, "safe-buffer": { "version": "5.0.1", @@ -8216,13 +12611,20 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } }, "through2": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true + "dev": true, + "requires": { + "readable-stream": "2.2.11", + "xtend": "4.0.1" + } }, "xtend": { "version": "4.0.1", @@ -8236,7 +12638,10 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-2.0.0.tgz", "integrity": "sha1-VvjWE5YghHuAF/jx9NeOIRMkFos=", - "dev": true + "dev": true, + "requires": { + "package-json": "2.4.0" + } }, "lazy-cache": { "version": "1.0.4", @@ -8255,6 +12660,9 @@ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", "dev": true, + "requires": { + "readable-stream": "2.2.11" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -8266,7 +12674,16 @@ "version": "2.2.11", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.0.1", + "string_decoder": "1.0.2", + "util-deprecate": "1.0.2" + } }, "safe-buffer": { "version": "5.0.1", @@ -8278,7 +12695,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } } } }, @@ -8286,7 +12706,10 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } }, "lcov-parse": { "version": "0.0.10", @@ -8298,19 +12721,36 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true + "dev": true, + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } }, "load-grunt-tasks": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/load-grunt-tasks/-/load-grunt-tasks-3.5.2.tgz", "integrity": "sha1-ByhWEYD9IP+KaSdQWFL8WKrqDIg=", - "dev": true + "dev": true, + "requires": { + "arrify": "1.0.1", + "multimatch": "2.1.0", + "pkg-up": "1.0.0", + "resolve-pkg": "0.1.0" + } }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } }, "loader-runner": { "version": "2.3.0", @@ -8322,13 +12762,23 @@ "version": "0.2.17", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true + "dev": true, + "requires": { + "big.js": "3.1.3", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" + } }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + }, "dependencies": { "path-exists": { "version": "3.0.0", @@ -8354,7 +12804,11 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", - "dev": true + "dev": true, + "requires": { + "lodash._basecopy": "3.0.1", + "lodash.keys": "3.1.2" + } }, "lodash._basecopy": { "version": "3.0.1", @@ -8378,13 +12832,22 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", - "dev": true + "dev": true, + "requires": { + "lodash._bindcallback": "3.0.1", + "lodash._isiterateecall": "3.0.9", + "lodash.restparam": "3.6.1" + } }, "lodash._createcompounder": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._createcompounder/-/lodash._createcompounder-3.0.0.tgz", "integrity": "sha1-XdLLVTctbnDg4jkvsjBNZjEJEHU=", - "dev": true + "dev": true, + "requires": { + "lodash.deburr": "3.2.0", + "lodash.words": "3.2.0" + } }, "lodash._getnative": { "version": "3.9.1", @@ -8408,19 +12871,30 @@ "version": "3.8.1", "resolved": "https://registry.npmjs.org/lodash._topath/-/lodash._topath-3.8.1.tgz", "integrity": "sha1-PsXiYGAU9MuX91X+aRTt2L/ADqw=", - "dev": true + "dev": true, + "requires": { + "lodash.isarray": "3.0.4" + } }, "lodash.assign": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz", "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", - "dev": true + "dev": true, + "requires": { + "lodash._baseassign": "3.2.0", + "lodash._createassigner": "3.1.1", + "lodash.keys": "3.1.2" + } }, "lodash.camelcase": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-3.0.1.tgz", "integrity": "sha1-kyyLh/ikN3iXxnGXUzKC+Xrqwpg=", - "dev": true + "dev": true, + "requires": { + "lodash._createcompounder": "3.0.0" + } }, "lodash.clonedeep": { "version": "4.5.0", @@ -8438,13 +12912,19 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-3.1.1.tgz", "integrity": "sha1-gSIRw3ipTMKdWqTjNGzwv846ffU=", - "dev": true + "dev": true, + "requires": { + "lodash._getnative": "3.9.1" + } }, "lodash.deburr": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-3.2.0.tgz", "integrity": "sha1-baj1QzSjZqfPTEx2742Aqhs2XtU=", - "dev": true + "dev": true, + "requires": { + "lodash._root": "3.0.1" + } }, "lodash.difference": { "version": "4.5.0", @@ -8462,7 +12942,11 @@ "version": "3.7.0", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-3.7.0.tgz", "integrity": "sha1-POaK4skWg7KBzFOUEoMDy/deaR8=", - "dev": true + "dev": true, + "requires": { + "lodash._baseget": "3.7.2", + "lodash._topath": "3.8.1" + } }, "lodash.isarguments": { "version": "3.1.0", @@ -8492,7 +12976,12 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true + "dev": true, + "requires": { + "lodash._getnative": "3.9.1", + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" + } }, "lodash.memoize": { "version": "4.1.2", @@ -8516,7 +13005,10 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-3.0.4.tgz", "integrity": "sha1-vE9HH7Mo5Nb9xt8rPTyvET8Pick=", - "dev": true + "dev": true, + "requires": { + "lodash.debounce": "3.1.1" + } }, "lodash.uniq": { "version": "4.5.0", @@ -8528,7 +13020,10 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/lodash.words/-/lodash.words-3.2.0.tgz", "integrity": "sha1-TiqGSbwIdFsXxpWxo86P7llmI7M=", - "dev": true + "dev": true, + "requires": { + "lodash._root": "3.0.1" + } }, "log-driver": { "version": "1.2.5", @@ -8546,13 +13041,20 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", - "dev": true + "dev": true, + "requires": { + "js-tokens": "3.0.1" + } }, "loud-rejection": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true + "dev": true, + "requires": { + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" + } }, "lowercase-keys": { "version": "1.0.0", @@ -8564,7 +13066,11 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.0.tgz", "integrity": "sha512-aHGs865JXz6bkB4AHL+3AhyvTFKL3iZamKVWjIUKnXOXyasJvqPK8WAjOnAQKQZVpeXDVz19u1DD0r/12bWAdQ==", - "dev": true + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } }, "macaddress": { "version": "0.2.8", @@ -8577,25 +13083,44 @@ "resolved": "https://registry.npmjs.org/macos-alias/-/macos-alias-0.2.11.tgz", "integrity": "sha1-/u6mwTuhGYFKQ/xDxHCzHlnvcYo=", "dev": true, - "optional": true + "optional": true, + "requires": { + "nan": "2.6.2" + } }, "make-dir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.0.0.tgz", "integrity": "sha1-l6ARdR6R3YfPre9Ygy67BJNt6Xg=", - "dev": true + "dev": true, + "requires": { + "pify": "2.3.0" + } }, "makedeb": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/makedeb/-/makedeb-0.0.4.tgz", "integrity": "sha1-0O+7Hki9TkN+cKUWJuyZcDgPcWQ=", "dev": true, + "requires": { + "bluebird": "3.5.0", + "fs-extra": "0.26.7", + "temp": "0.8.3", + "underscore": "1.8.3" + }, "dependencies": { "fs-extra": { "version": "0.26.7", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz", "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "klaw": "1.3.1", + "path-is-absolute": "1.0.1", + "rimraf": "2.6.1" + } }, "underscore": { "version": "1.8.3", @@ -8615,7 +13140,10 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/matcher/-/matcher-0.1.2.tgz", "integrity": "sha1-7yDL3mTCTFDMYa9bg+4LG4/wAQE=", - "dev": true + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5" + } }, "material-colors": { "version": "1.2.5", @@ -8639,7 +13167,10 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-1.3.0.tgz", "integrity": "sha1-0sSv6YPENwZiF5uMrRRSGRNQRsQ=", - "dev": true + "dev": true, + "requires": { + "md5-o-matic": "0.1.1" + } }, "md5-o-matic": { "version": "0.1.1", @@ -8657,13 +13188,20 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", - "dev": true + "dev": true, + "requires": { + "mimic-fn": "1.1.0" + } }, "memory-fs": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.3.0.tgz", "integrity": "sha1-e8xrYp46Q+hx1+Kaymrop/FcuyA=", "dev": true, + "requires": { + "errno": "0.1.4", + "readable-stream": "2.2.11" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -8675,7 +13213,16 @@ "version": "2.2.11", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.0.1", + "string_decoder": "1.0.2", + "util-deprecate": "1.0.2" + } }, "safe-buffer": { "version": "5.0.1", @@ -8687,7 +13234,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } } } }, @@ -8695,7 +13245,19 @@ "version": "3.7.0", "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true + "dev": true, + "requires": { + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.3.8", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" + } }, "merge-descriptors": { "version": "1.0.1", @@ -8713,13 +13275,32 @@ "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.3" + } }, "miller-rabin": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.0.tgz", "integrity": "sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.6", + "brorand": "1.1.0" + } }, "mime": { "version": "1.3.4", @@ -8737,7 +13318,10 @@ "version": "2.1.15", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", - "dev": true + "dev": true, + "requires": { + "mime-db": "1.27.0" + } }, "mimic-fn": { "version": "1.1.0", @@ -8749,7 +13333,10 @@ "version": "2.19.0", "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "dev": true + "dev": true, + "requires": { + "dom-walk": "0.1.1" + } }, "minimalistic-assert": { "version": "1.0.0", @@ -8767,7 +13354,10 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true + "dev": true, + "requires": { + "brace-expansion": "1.1.7" + } }, "minimist": { "version": "1.2.0", @@ -8780,6 +13370,9 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", "dev": true, + "requires": { + "minimist": "0.0.8" + }, "dependencies": { "minimist": { "version": "0.0.8", @@ -8793,7 +13386,10 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/mngen/-/mngen-1.0.0.tgz", "integrity": "sha1-8VitF/gXC0gcXI1UEyMCZB0o5qU=", - "dev": true + "dev": true, + "requires": { + "meow": "3.7.0" + } }, "moment": { "version": "2.18.1", @@ -8817,14 +13413,25 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", - "dev": true + "dev": true, + "requires": { + "array-differ": "1.0.0", + "array-union": "1.0.2", + "arrify": "1.0.1", + "minimatch": "3.0.4" + } }, "murmur-32": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/murmur-32/-/murmur-32-0.1.0.tgz", "integrity": "sha1-waedT8X6vwQFdJ0K/3fEFAIFWGE=", "dev": true, - "optional": true + "optional": true, + "requires": { + "array-buffer-from-string": "0.1.0", + "fmix": "0.1.0", + "imul": "1.0.1" + } }, "mute-stream": { "version": "0.0.5", @@ -8835,7 +13442,8 @@ "nan": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz", - "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=" + "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=", + "dev": true }, "natural-compare": { "version": "1.4.0", @@ -8847,7 +13455,12 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.10.0.tgz", "integrity": "sha1-PKLwhuqeBHdzTngBsBXFESffI8w=", - "dev": true + "dev": true, + "requires": { + "nomnom": "1.6.2", + "railroad-diagrams": "1.0.0", + "randexp": "0.4.5" + } }, "negotiator": { "version": "0.6.1", @@ -8860,31 +13473,59 @@ "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-1.0.2.tgz", "integrity": "sha1-GfYZWRUZ8JZ2mlupqG5u7sgjw88=", "dev": true, - "optional": true + "optional": true, + "requires": { + "inherits": "2.0.3" + } }, "node-emoji": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.5.1.tgz", "integrity": "sha1-/ZGOQSdpv4xEgFEjgjOECyr/FqE=", - "dev": true + "dev": true, + "requires": { + "string.prototype.codepointat": "0.2.0" + } }, "node-fetch": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.1.tgz", "integrity": "sha512-j8XsFGCLw79vWXkZtMSmmLaOk9z5SQ9bV/tkbZVCqvgwzrjAGq66igobLofHtF63NvMTp2WjytpsNTGKa+XRIQ==", - "dev": true + "dev": true, + "requires": { + "encoding": "0.1.12", + "is-stream": "1.1.0" + } }, "node-gyp": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=", "dev": true, + "requires": { + "fstream": "1.0.11", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "mkdirp": "0.5.0", + "nopt": "3.0.6", + "npmlog": "4.1.0", + "osenv": "0.1.4", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "which": "1.2.14" + }, "dependencies": { "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true + "dev": true, + "requires": { + "abbrev": "1.1.0" + } } } }, @@ -8893,12 +13534,42 @@ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-1.1.1.tgz", "integrity": "sha1-KjgkOr7dff/NB6l8mspWaJdab+o=", "dev": true, + "requires": { + "assert": "1.4.1", + "browserify-zlib": "0.1.4", + "buffer": "4.9.1", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.11.0", + "domain-browser": "1.1.7", + "events": "1.1.1", + "https-browserify": "0.0.1", + "os-browserify": "0.2.1", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.2.11", + "stream-browserify": "2.0.1", + "stream-http": "2.7.1", + "string_decoder": "0.10.31", + "timers-browserify": "1.4.2", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.3", + "vm-browserify": "0.0.4" + }, "dependencies": { "buffer": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "dev": true + "dev": true, + "requires": { + "base64-js": "1.2.0", + "ieee754": "1.1.8", + "isarray": "1.0.0" + } }, "isarray": { "version": "1.0.0", @@ -8911,12 +13582,24 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.0.1", + "string_decoder": "1.0.2", + "util-deprecate": "1.0.2" + }, "dependencies": { "string_decoder": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } } } }, @@ -8939,24 +13622,54 @@ "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-3.13.1.tgz", "integrity": "sha1-ckD7v/I5YwS0IjUn7TAgWJwAT8I=", "dev": true, + "requires": { + "async-foreach": "0.1.3", + "chalk": "1.1.3", + "cross-spawn": "3.0.1", + "gaze": "1.1.2", + "get-stdin": "4.0.1", + "glob": "7.1.2", + "in-publish": "2.0.0", + "lodash.assign": "4.2.0", + "lodash.clonedeep": "4.5.0", + "meow": "3.7.0", + "mkdirp": "0.5.1", + "nan": "2.6.2", + "node-gyp": "3.6.2", + "npmlog": "4.1.0", + "request": "2.81.0", + "sass-graph": "2.2.4" + }, "dependencies": { "cross-spawn": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", - "dev": true + "dev": true, + "requires": { + "lru-cache": "4.1.0", + "which": "1.2.14" + } }, "gaze": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", - "dev": true + "dev": true, + "requires": { + "globule": "1.1.0" + } }, "globule": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/globule/-/globule-1.1.0.tgz", "integrity": "sha1-xJNS5NwYPYWJPuglOF65lLtt9F8=", - "dev": true + "dev": true, + "requires": { + "glob": "7.1.2", + "lodash": "4.16.6", + "minimatch": "3.0.4" + } }, "lodash": { "version": "4.16.6", @@ -8980,7 +13693,10 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true + "dev": true, + "requires": { + "minimist": "0.0.8" + } } } }, @@ -8994,31 +13710,47 @@ "version": "0.9.5", "resolved": "https://registry.npmjs.org/nodeunit/-/nodeunit-0.9.5.tgz", "integrity": "sha1-C2MjaAB9lGUczwoYmZgHmC8HOGY=", - "dev": true + "dev": true, + "requires": { + "tap": "7.1.2" + } }, "nomnom": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.6.2.tgz", "integrity": "sha1-hKZqJgF0QI/Ft3oY+IjszET7aXE=", - "dev": true + "dev": true, + "requires": { + "colors": "0.5.1", + "underscore": "1.4.4" + } }, "nopt": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true + "dev": true, + "requires": { + "abbrev": "1.1.0" + } }, "noptify": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/noptify/-/noptify-0.0.3.tgz", "integrity": "sha1-WPZUpz2XU98MUdlobckhBKZ/S7s=", "dev": true, + "requires": { + "nopt": "2.0.0" + }, "dependencies": { "nopt": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.0.0.tgz", "integrity": "sha1-ynQW8gpeP5w7hhgPlilfo9C1Lg0=", - "dev": true + "dev": true, + "requires": { + "abbrev": "1.1.0" + } } } }, @@ -9026,13 +13758,22 @@ "version": "2.3.8", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.8.tgz", "integrity": "sha1-2Bntoqne29H/pWPqQHHZNngilbs=", - "dev": true + "dev": true, + "requires": { + "hosted-git-info": "2.4.2", + "is-builtin-module": "1.0.0", + "semver": "5.3.0", + "validate-npm-package-license": "3.0.1" + } }, "normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true + "dev": true, + "requires": { + "remove-trailing-separator": "1.0.2" + } }, "normalize-range": { "version": "0.1.2", @@ -9044,7 +13785,13 @@ "version": "1.9.1", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", - "dev": true + "dev": true, + "requires": { + "object-assign": "4.1.1", + "prepend-http": "1.0.4", + "query-string": "4.3.4", + "sort-keys": "1.1.2" + } }, "normalizr": { "version": "3.2.3", @@ -9062,19 +13809,37 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-1.0.0.tgz", "integrity": "sha1-9cMr9ZX+ga6Sfa7FLoL4sACsPI8=", - "dev": true + "dev": true, + "requires": { + "path-key": "1.0.0" + } }, "npmlog": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.0.tgz", "integrity": "sha512-ocolIkZYZt8UveuiDS0yAkkIjid1o7lPG8cYm05yNYzBn8ykQtaiPMEGp8fY9tKdDgm8okpdKzkvu1y9hUYugA==", - "dev": true + "dev": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } }, "nugget": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.0.1.tgz", "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=", - "dev": true + "dev": true, + "requires": { + "debug": "2.6.8", + "minimist": "1.2.0", + "pretty-bytes": "1.0.4", + "progress-stream": "1.2.0", + "request": "2.81.0", + "single-line-log": "1.1.2", + "throttleit": "0.0.2" + } }, "num2fraction": { "version": "1.2.2", @@ -9099,11 +13864,43 @@ "resolved": "https://registry.npmjs.org/nyc/-/nyc-7.1.0.tgz", "integrity": "sha1-jhSXHzoV0au+x6xhDvVMuInp/7Q=", "dev": true, + "requires": { + "arrify": "1.0.1", + "caching-transform": "1.0.1", + "convert-source-map": "1.3.0", + "default-require-extensions": "1.0.0", + "find-cache-dir": "0.1.1", + "find-up": "1.1.2", + "foreground-child": "1.5.3", + "glob": "7.0.5", + "istanbul-lib-coverage": "1.0.0-alpha.4", + "istanbul-lib-hook": "1.0.0-alpha.4", + "istanbul-lib-instrument": "1.1.0-alpha.4", + "istanbul-lib-report": "1.0.0-alpha.3", + "istanbul-lib-source-maps": "1.0.0-alpha.10", + "istanbul-reports": "1.0.0-alpha.8", + "md5-hex": "1.3.0", + "micromatch": "2.3.11", + "mkdirp": "0.5.1", + "pkg-up": "1.0.0", + "resolve-from": "2.0.0", + "rimraf": "2.5.4", + "signal-exit": "3.0.0", + "spawn-wrap": "1.2.4", + "test-exclude": "1.1.0", + "yargs": "4.8.1", + "yargs-parser": "2.4.1" + }, "dependencies": { "align-text": { "version": "0.1.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "kind-of": "3.0.3", + "longest": "1.0.1", + "repeat-string": "1.5.4" + } }, "amdefine": { "version": "1.0.0", @@ -9128,7 +13925,10 @@ "arr-diff": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "arr-flatten": "1.0.1" + } }, "arr-flatten": { "version": "1.0.1", @@ -9153,42 +13953,91 @@ "babel-code-frame": { "version": "6.11.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.9.2", + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "2.0.0" + } }, "babel-generator": { "version": "6.11.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "babel-messages": "6.8.0", + "babel-runtime": "6.9.2", + "babel-types": "6.11.1", + "detect-indent": "3.0.1", + "lodash": "4.13.1", + "source-map": "0.5.6" + } }, "babel-messages": { "version": "6.8.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.9.2" + } }, "babel-runtime": { "version": "6.9.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "core-js": "2.4.1", + "regenerator-runtime": "0.9.5" + } }, "babel-template": { "version": "6.9.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.9.2", + "babel-traverse": "6.11.4", + "babel-types": "6.11.1", + "babylon": "6.8.4", + "lodash": "4.13.1" + } }, "babel-traverse": { "version": "6.11.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "babel-code-frame": "6.11.0", + "babel-messages": "6.8.0", + "babel-runtime": "6.9.2", + "babel-types": "6.11.1", + "babylon": "6.8.4", + "debug": "2.2.0", + "globals": "8.18.0", + "invariant": "2.2.1", + "lodash": "4.13.1" + } }, "babel-types": { "version": "6.11.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.9.2", + "babel-traverse": "6.11.4", + "esutils": "2.0.2", + "lodash": "4.13.1", + "to-fast-properties": "1.0.2" + } }, "babylon": { "version": "6.8.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.9.2" + } }, "balanced-match": { "version": "0.4.2", @@ -9198,12 +14047,21 @@ "brace-expansion": { "version": "1.1.6", "bundled": true, - "dev": true + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } }, "braces": { "version": "1.8.5", "bundled": true, - "dev": true + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } }, "builtin-modules": { "version": "1.1.1", @@ -9213,7 +14071,12 @@ "caching-transform": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "md5-hex": "1.3.0", + "mkdirp": "0.5.1", + "write-file-atomic": "1.1.4" + } }, "camelcase": { "version": "1.2.1", @@ -9225,18 +14088,34 @@ "version": "0.1.3", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } }, "chalk": { "version": "1.1.3", "bundled": true, - "dev": true + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } }, "cliui": { "version": "2.1.0", "bundled": true, "dev": true, "optional": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, "dependencies": { "wordwrap": { "version": "0.0.2", @@ -9249,7 +14128,10 @@ "code-point-at": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "number-is-nan": "1.0.0" + } }, "commondir": { "version": "1.0.1", @@ -9274,12 +14156,19 @@ "cross-spawn": { "version": "4.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "lru-cache": "4.0.1", + "which": "1.2.10" + } }, "debug": { "version": "2.2.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "ms": "0.7.1" + } }, "decamelize": { "version": "1.2.0", @@ -9289,12 +14178,20 @@ "default-require-extensions": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "strip-bom": "2.0.0" + } }, "detect-indent": { "version": "3.0.1", "bundled": true, "dev": true, + "requires": { + "get-stdin": "4.0.1", + "minimist": "1.2.0", + "repeating": "1.1.3" + }, "dependencies": { "minimist": { "version": "1.2.0", @@ -9306,7 +14203,10 @@ "error-ex": { "version": "1.3.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } }, "escape-string-regexp": { "version": "1.0.5", @@ -9321,17 +14221,26 @@ "expand-brackets": { "version": "0.1.5", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } }, "expand-range": { "version": "1.8.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "fill-range": "2.2.3" + } }, "extglob": { "version": "0.3.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } }, "filename-regex": { "version": "2.0.0", @@ -9341,17 +14250,33 @@ "fill-range": { "version": "2.2.3", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.5", + "repeat-element": "1.1.2", + "repeat-string": "1.5.4" + } }, "find-cache-dir": { "version": "0.1.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "commondir": "1.0.1", + "mkdirp": "0.5.1", + "pkg-dir": "1.0.0" + } }, "find-up": { "version": "1.1.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } }, "for-in": { "version": "0.1.5", @@ -9361,12 +14286,19 @@ "for-own": { "version": "0.1.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "for-in": "0.1.5" + } }, "foreground-child": { "version": "1.5.3", "bundled": true, - "dev": true + "dev": true, + "requires": { + "cross-spawn": "4.0.0", + "signal-exit": "3.0.0" + } }, "fs.realpath": { "version": "1.0.0", @@ -9386,17 +14318,32 @@ "glob": { "version": "7.0.5", "bundled": true, - "dev": true + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.5", + "inherits": "2.0.1", + "minimatch": "3.0.2", + "once": "1.3.3", + "path-is-absolute": "1.0.0" + } }, "glob-base": { "version": "0.3.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } }, "glob-parent": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-glob": "2.0.1" + } }, "globals": { "version": "8.18.0", @@ -9412,18 +14359,30 @@ "version": "4.0.5", "bundled": true, "dev": true, + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.7.0" + }, "dependencies": { "source-map": { "version": "0.4.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "amdefine": "1.0.0" + } } } }, "has-ansi": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "ansi-regex": "2.0.0" + } }, "has-flag": { "version": "1.0.0", @@ -9443,7 +14402,11 @@ "inflight": { "version": "1.0.5", "bundled": true, - "dev": true + "dev": true, + "requires": { + "once": "1.3.3", + "wrappy": "1.0.2" + } }, "inherits": { "version": "2.0.1", @@ -9453,7 +14416,10 @@ "invariant": { "version": "2.2.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "loose-envify": "1.2.0" + } }, "invert-kv": { "version": "1.0.0", @@ -9473,7 +14439,10 @@ "is-builtin-module": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } }, "is-dotfile": { "version": "1.0.2", @@ -9483,7 +14452,10 @@ "is-equal-shallow": { "version": "0.1.3", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } }, "is-extendable": { "version": "0.1.1", @@ -9498,22 +14470,34 @@ "is-finite": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "number-is-nan": "1.0.0" + } }, "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "number-is-nan": "1.0.0" + } }, "is-glob": { "version": "2.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } }, "is-number": { "version": "2.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "kind-of": "3.0.3" + } }, "is-posix-bracket": { "version": "0.1.1", @@ -9543,7 +14527,10 @@ "isobject": { "version": "2.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "isarray": "1.0.0" + } }, "istanbul-lib-coverage": { "version": "1.0.0-alpha.4", @@ -9553,34 +14540,65 @@ "istanbul-lib-hook": { "version": "1.0.0-alpha.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "append-transform": "0.3.0" + } }, "istanbul-lib-instrument": { "version": "1.1.0-alpha.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "babel-generator": "6.11.4", + "babel-template": "6.9.0", + "babel-traverse": "6.11.4", + "babel-types": "6.11.1", + "babylon": "6.8.4", + "istanbul-lib-coverage": "1.0.0-alpha.4" + } }, "istanbul-lib-report": { "version": "1.0.0-alpha.3", "bundled": true, "dev": true, + "requires": { + "async": "1.5.2", + "istanbul-lib-coverage": "1.0.0-alpha.4", + "mkdirp": "0.5.1", + "path-parse": "1.0.5", + "rimraf": "2.5.4", + "supports-color": "3.1.2" + }, "dependencies": { "supports-color": { "version": "3.1.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "has-flag": "1.0.0" + } } } }, "istanbul-lib-source-maps": { "version": "1.0.0-alpha.10", "bundled": true, - "dev": true + "dev": true, + "requires": { + "istanbul-lib-coverage": "1.0.0-alpha.4", + "mkdirp": "0.5.1", + "rimraf": "2.5.4", + "source-map": "0.5.6" + } }, "istanbul-reports": { "version": "1.0.0-alpha.8", "bundled": true, - "dev": true + "dev": true, + "requires": { + "handlebars": "4.0.5" + } }, "js-tokens": { "version": "2.0.0", @@ -9590,7 +14608,10 @@ "kind-of": { "version": "3.0.3", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-buffer": "1.1.3" + } }, "lazy-cache": { "version": "1.0.4", @@ -9601,12 +14622,22 @@ "lcid": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } }, "load-json-file": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.4", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } }, "lodash": { "version": "4.13.1", @@ -9616,7 +14647,11 @@ "lodash.assign": { "version": "4.0.9", "bundled": true, - "dev": true + "dev": true, + "requires": { + "lodash.keys": "4.0.7", + "lodash.rest": "4.0.3" + } }, "lodash.keys": { "version": "4.0.7", @@ -9637,6 +14672,9 @@ "version": "1.2.0", "bundled": true, "dev": true, + "requires": { + "js-tokens": "1.0.3" + }, "dependencies": { "js-tokens": { "version": "1.0.3", @@ -9648,12 +14686,19 @@ "lru-cache": { "version": "4.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.0.0" + } }, "md5-hex": { "version": "1.3.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "md5-o-matic": "0.1.1" + } }, "md5-o-matic": { "version": "0.1.1", @@ -9663,12 +14708,30 @@ "micromatch": { "version": "2.3.11", "bundled": true, - "dev": true + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.0", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.0.3", + "normalize-path": "2.0.1", + "object.omit": "2.0.0", + "parse-glob": "3.0.4", + "regex-cache": "0.4.3" + } }, "minimatch": { "version": "3.0.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "brace-expansion": "1.1.6" + } }, "minimist": { "version": "0.0.8", @@ -9678,7 +14741,10 @@ "mkdirp": { "version": "0.5.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "minimist": "0.0.8" + } }, "ms": { "version": "0.7.1", @@ -9688,7 +14754,13 @@ "normalize-package-data": { "version": "2.3.5", "bundled": true, - "dev": true + "dev": true, + "requires": { + "hosted-git-info": "2.1.5", + "is-builtin-module": "1.0.0", + "semver": "5.3.0", + "validate-npm-package-license": "3.0.1" + } }, "normalize-path": { "version": "2.0.1", @@ -9703,17 +14775,28 @@ "object.omit": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "for-own": "0.1.4", + "is-extendable": "0.1.1" + } }, "once": { "version": "1.3.3", "bundled": true, - "dev": true + "dev": true, + "requires": { + "wrappy": "1.0.2" + } }, "optimist": { "version": "0.6.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "minimist": "0.0.8", + "wordwrap": "0.0.3" + } }, "os-homedir": { "version": "1.0.1", @@ -9723,22 +14806,37 @@ "os-locale": { "version": "1.4.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "lcid": "1.0.0" + } }, "parse-glob": { "version": "3.0.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.2", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } }, "parse-json": { "version": "2.2.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "error-ex": "1.3.0" + } }, "path-exists": { "version": "2.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } }, "path-is-absolute": { "version": "1.0.0", @@ -9753,7 +14851,12 @@ "path-type": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.4", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } }, "pify": { "version": "2.3.0", @@ -9768,17 +14871,26 @@ "pinkie-promise": { "version": "2.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "pinkie": "2.0.4" + } }, "pkg-dir": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "find-up": "1.1.2" + } }, "pkg-up": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "find-up": "1.1.2" + } }, "preserve": { "version": "0.2.0", @@ -9793,17 +14905,30 @@ "randomatic": { "version": "1.1.5", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-number": "2.1.0", + "kind-of": "3.0.3" + } }, "read-pkg": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.3.5", + "path-type": "1.1.0" + } }, "read-pkg-up": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } }, "regenerator-runtime": { "version": "0.9.5", @@ -9813,7 +14938,11 @@ "regex-cache": { "version": "0.4.3", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3", + "is-primitive": "2.0.0" + } }, "repeat-element": { "version": "1.1.2", @@ -9828,7 +14957,10 @@ "repeating": { "version": "1.1.3", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-finite": "1.0.1" + } }, "require-directory": { "version": "2.1.1", @@ -9849,12 +14981,18 @@ "version": "0.1.3", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "align-text": "0.1.4" + } }, "rimraf": { "version": "2.5.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "glob": "7.0.5" + } }, "semver": { "version": "5.3.0", @@ -9885,6 +15023,14 @@ "version": "1.2.4", "bundled": true, "dev": true, + "requires": { + "foreground-child": "1.5.3", + "mkdirp": "0.5.1", + "os-homedir": "1.0.1", + "rimraf": "2.5.4", + "signal-exit": "2.1.2", + "which": "1.2.10" + }, "dependencies": { "signal-exit": { "version": "2.1.2", @@ -9896,7 +15042,10 @@ "spdx-correct": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "spdx-license-ids": "1.2.1" + } }, "spdx-exceptions": { "version": "1.0.5", @@ -9906,7 +15055,11 @@ "spdx-expression-parse": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "spdx-exceptions": "1.0.5", + "spdx-license-ids": "1.2.1" + } }, "spdx-license-ids": { "version": "1.2.1", @@ -9916,17 +15069,28 @@ "string-width": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "code-point-at": "1.0.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } }, "strip-ansi": { "version": "3.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "ansi-regex": "2.0.0" + } }, "strip-bom": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } }, "supports-color": { "version": "2.0.0", @@ -9936,7 +15100,14 @@ "test-exclude": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "arrify": "1.0.1", + "lodash.assign": "4.0.9", + "micromatch": "2.3.11", + "read-pkg-up": "1.0.1", + "require-main-filename": "1.0.1" + } }, "to-fast-properties": { "version": "1.0.2", @@ -9948,6 +15119,12 @@ "bundled": true, "dev": true, "optional": true, + "requires": { + "async": "0.2.10", + "source-map": "0.5.6", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, "dependencies": { "async": { "version": "0.2.10", @@ -9959,7 +15136,13 @@ "version": "3.10.0", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } } } }, @@ -9972,12 +15155,19 @@ "validate-npm-package-license": { "version": "3.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.2" + } }, "which": { "version": "1.2.10", "bundled": true, - "dev": true + "dev": true, + "requires": { + "isexe": "1.1.2" + } }, "which-module": { "version": "1.0.0", @@ -9998,7 +15188,10 @@ "wrap-ansi": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "string-width": "1.0.1" + } }, "wrappy": { "version": "1.0.2", @@ -10008,7 +15201,12 @@ "write-file-atomic": { "version": "1.1.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.4", + "imurmurhash": "0.1.4", + "slide": "1.1.6" + } }, "y18n": { "version": "3.2.1", @@ -10024,11 +15222,32 @@ "version": "4.8.1", "bundled": true, "dev": true, + "requires": { + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.1", + "lodash.assign": "4.0.9", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.1", + "which-module": "1.0.0", + "window-size": "0.2.0", + "y18n": "3.2.1", + "yargs-parser": "2.4.1" + }, "dependencies": { "cliui": { "version": "3.2.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "string-width": "1.0.1", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.0.0" + } }, "window-size": { "version": "0.2.0", @@ -10041,6 +15260,10 @@ "version": "2.4.1", "bundled": true, "dev": true, + "requires": { + "camelcase": "3.0.0", + "lodash.assign": "4.0.9" + }, "dependencies": { "camelcase": { "version": "3.0.0", @@ -10074,6 +15297,11 @@ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.0.4.tgz", "integrity": "sha1-scnMBE7xuf5jYG/BQau7MuFHMMw=", "dev": true, + "requires": { + "define-properties": "1.1.2", + "function-bind": "1.1.0", + "object-keys": "1.0.11" + }, "dependencies": { "object-keys": { "version": "1.0.11", @@ -10087,13 +15315,21 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } }, "observable-to-promise": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/observable-to-promise/-/observable-to-promise-0.4.0.tgz", "integrity": "sha1-KK/nFkUwjy1B1x9HrT/s4aN35Ss=", - "dev": true + "dev": true, + "requires": { + "is-observable": "0.2.0", + "symbol-observable": "0.2.4" + } }, "obuf": { "version": "1.1.1", @@ -10105,7 +15341,10 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true + "dev": true, + "requires": { + "ee-first": "1.1.1" + } }, "on-headers": { "version": "1.0.1", @@ -10117,7 +15356,10 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true + "dev": true, + "requires": { + "wrappy": "1.0.2" + } }, "onetime": { "version": "1.1.0", @@ -10141,13 +15383,21 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=", - "dev": true + "dev": true, + "requires": { + "object-assign": "4.1.1", + "pinkie-promise": "2.0.1" + } }, "optimist": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, + "requires": { + "minimist": "0.0.10", + "wordwrap": "0.0.3" + }, "dependencies": { "minimist": { "version": "0.0.10", @@ -10161,13 +15411,24 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/option-chain/-/option-chain-0.1.1.tgz", "integrity": "sha1-6bgR4AbxwPVIAvKClb/Ilw+Nz70=", - "dev": true + "dev": true, + "requires": { + "object-assign": "4.1.1" + } }, "optionator": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + }, "dependencies": { "wordwrap": { "version": "1.0.0", @@ -10182,12 +15443,19 @@ "resolved": "https://registry.npmjs.org/original/-/original-1.0.0.tgz", "integrity": "sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs=", "dev": true, + "requires": { + "url-parse": "1.0.5" + }, "dependencies": { "url-parse": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz", "integrity": "sha1-CFSGBCKv3P7+tsllxmLUgAFpkns=", - "dev": true + "dev": true, + "requires": { + "querystringify": "0.0.4", + "requires-port": "1.0.0" + } } } }, @@ -10208,24 +15476,45 @@ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.0.0.tgz", "integrity": "sha1-FZGN7VEFIrge565aMJ1U9jn8OaQ=", "dev": true, + "requires": { + "execa": "0.5.1", + "lcid": "1.0.0", + "mem": "1.1.0" + }, "dependencies": { "execa": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/execa/-/execa-0.5.1.tgz", "integrity": "sha1-3j+4XLjW6RyFvLzrFkWBeFy1ezY=", - "dev": true + "dev": true, + "requires": { + "cross-spawn": "4.0.2", + "get-stream": "2.3.1", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } }, "get-stream": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", - "dev": true + "dev": true, + "requires": { + "object-assign": "4.1.1", + "pinkie-promise": "2.0.1" + } }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true + "dev": true, + "requires": { + "path-key": "2.0.1" + } }, "path-key": { "version": "2.0.1", @@ -10245,7 +15534,11 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", - "dev": true + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } }, "p-finally": { "version": "1.0.0", @@ -10263,19 +15556,31 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true + "dev": true, + "requires": { + "p-limit": "1.1.0" + } }, "package-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-1.2.0.tgz", "integrity": "sha1-AD5WzVe3NqbtYRTMK4FUJnJ3DkQ=", - "dev": true + "dev": true, + "requires": { + "md5-hex": "1.3.0" + } }, "package-json": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-2.4.0.tgz", "integrity": "sha1-DRW9Z9HLvduyyiIv8u24a8sxqLs=", - "dev": true + "dev": true, + "requires": { + "got": "5.7.1", + "registry-auth-token": "3.3.1", + "registry-url": "3.1.0", + "semver": "5.3.0" + } }, "pako": { "version": "0.2.9", @@ -10287,13 +15592,23 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", - "dev": true + "dev": true, + "requires": { + "asn1.js": "4.9.1", + "browserify-aes": "1.0.6", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.0", + "pbkdf2": "3.0.12" + } }, "parse-color": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-color/-/parse-color-1.0.0.tgz", "integrity": "sha1-e3SLlag/A/FqlPU15S1/PZRlhhk=", "dev": true, + "requires": { + "color-convert": "0.5.3" + }, "dependencies": { "color-convert": { "version": "0.5.3", @@ -10307,13 +15622,22 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true + "dev": true, + "requires": { + "error-ex": "1.3.1" + } }, "parse-ms": { "version": "1.0.1", @@ -10337,7 +15661,10 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/password-generator/-/password-generator-2.1.0.tgz", "integrity": "sha1-11gEMpUbaYUePY0KmPsdxgtcVto=", - "dev": true + "dev": true, + "requires": { + "optimist": "0.6.1" + } }, "path-browserify": { "version": "0.0.0", @@ -10349,7 +15676,10 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } }, "path-is-absolute": { "version": "1.0.1", @@ -10379,19 +15709,34 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", - "dev": true + "dev": true, + "requires": { + "isarray": "0.0.1" + } }, "path-type": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } }, "pbkdf2": { "version": "3.0.12", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.12.tgz", "integrity": "sha1-vjZ4XFBn6kjYBv+SMojF91C2uKI=", - "dev": true + "dev": true, + "requires": { + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.0", + "sha.js": "2.4.8" + } }, "pend": { "version": "1.2.0", @@ -10421,31 +15766,51 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true + "dev": true, + "requires": { + "pinkie": "2.0.4" + } }, "pkg-conf": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-1.1.3.tgz", "integrity": "sha1-N45W1v0T6Iv7b0ol33qD+qvduls=", - "dev": true + "dev": true, + "requires": { + "find-up": "1.1.2", + "load-json-file": "1.1.0", + "object-assign": "4.1.1", + "symbol": "0.2.3" + } }, "pkg-dir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true + "dev": true, + "requires": { + "find-up": "1.1.2" + } }, "pkg-up": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-1.0.0.tgz", "integrity": "sha1-Pgj7RhUlxEIWJKM7n35tCvWwWiY=", - "dev": true + "dev": true, + "requires": { + "find-up": "1.1.2" + } }, "plist": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/plist/-/plist-2.1.0.tgz", "integrity": "sha1-V8zbeggh3yGDEhejytVOPhRqECU=", "dev": true, + "requires": { + "base64-js": "1.2.0", + "xmlbuilder": "8.2.2", + "xmldom": "0.1.27" + }, "dependencies": { "xmlbuilder": { "version": "8.2.2", @@ -10459,7 +15824,10 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz", "integrity": "sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo=", - "dev": true + "dev": true, + "requires": { + "irregular-plurals": "1.2.0" + } }, "pluralize": { "version": "1.2.1", @@ -10477,91 +15845,155 @@ "version": "1.0.13", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", - "dev": true + "dev": true, + "requires": { + "async": "1.5.2", + "debug": "2.6.8", + "mkdirp": "0.5.0" + } }, "postcss": { "version": "5.2.17", "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } }, "postcss-calc": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17", + "postcss-message-helpers": "2.0.0", + "reduce-css-calc": "1.3.0" + } }, "postcss-colormin": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", - "dev": true + "dev": true, + "requires": { + "colormin": "1.1.2", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + } }, "postcss-convert-values": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + } }, "postcss-discard-comments": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17" + } }, "postcss-discard-duplicates": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17" + } }, "postcss-discard-empty": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17" + } }, "postcss-discard-overridden": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17" + } }, "postcss-discard-unused": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17", + "uniqs": "2.0.0" + } }, "postcss-filter-plugins": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz", "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17", + "uniqid": "4.1.1" + } }, "postcss-merge-idents": { "version": "2.1.7", "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", - "dev": true + "dev": true, + "requires": { + "has": "1.0.1", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + } }, "postcss-merge-longhand": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17" + } }, "postcss-merge-rules": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-api": "1.6.1", + "postcss": "5.2.17", + "postcss-selector-parser": "2.2.3", + "vendors": "1.0.1" + }, "dependencies": { "browserslist": { "version": "1.7.7", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true + "dev": true, + "requires": { + "caniuse-db": "1.0.30000683", + "electron-to-chromium": "1.3.14" + } } } }, @@ -10575,37 +16007,66 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", - "dev": true + "dev": true, + "requires": { + "object-assign": "4.1.1", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + } }, "postcss-minify-gradients": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + } }, "postcss-minify-params": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", - "dev": true + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0", + "uniqs": "2.0.0" + } }, "postcss-minify-selectors": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", - "dev": true + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "has": "1.0.1", + "postcss": "5.2.17", + "postcss-selector-parser": "2.2.3" + } }, "postcss-modules-extract-imports": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", "dev": true, + "requires": { + "postcss": "6.0.1" + }, "dependencies": { "postcss": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } } } }, @@ -10614,24 +16075,43 @@ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", "dev": true, + "requires": { + "css-selector-tokenizer": "0.7.0", + "postcss": "6.0.1" + }, "dependencies": { "css-selector-tokenizer": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", - "dev": true + "dev": true, + "requires": { + "cssesc": "0.1.0", + "fastparse": "1.1.1", + "regexpu-core": "1.0.0" + } }, "postcss": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } }, "regexpu-core": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", - "dev": true + "dev": true, + "requires": { + "regenerate": "1.3.2", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } } } }, @@ -10640,24 +16120,43 @@ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", "dev": true, + "requires": { + "css-selector-tokenizer": "0.7.0", + "postcss": "6.0.1" + }, "dependencies": { "css-selector-tokenizer": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", - "dev": true + "dev": true, + "requires": { + "cssesc": "0.1.0", + "fastparse": "1.1.1", + "regexpu-core": "1.0.0" + } }, "postcss": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } }, "regexpu-core": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", - "dev": true + "dev": true, + "requires": { + "regenerate": "1.3.2", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } } } }, @@ -10666,12 +16165,21 @@ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", "dev": true, + "requires": { + "icss-replace-symbols": "1.1.0", + "postcss": "6.0.1" + }, "dependencies": { "postcss": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } } } }, @@ -10679,55 +16187,96 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17" + } }, "postcss-normalize-url": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", - "dev": true + "dev": true, + "requires": { + "is-absolute-url": "2.1.0", + "normalize-url": "1.9.1", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + } }, "postcss-ordered-values": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + } }, "postcss-reduce-idents": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + } }, "postcss-reduce-initial": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17" + } }, "postcss-reduce-transforms": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", - "dev": true + "dev": true, + "requires": { + "has": "1.0.1", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + } }, "postcss-selector-parser": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", - "dev": true + "dev": true, + "requires": { + "flatten": "1.0.2", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } }, "postcss-svgo": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", - "dev": true + "dev": true, + "requires": { + "is-svg": "2.1.0", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0", + "svgo": "0.7.2" + } }, "postcss-unique-selectors": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", - "dev": true + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "postcss": "5.2.17", + "uniqs": "2.0.0" + } }, "postcss-value-parser": { "version": "3.3.0", @@ -10739,13 +16288,22 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", - "dev": true + "dev": true, + "requires": { + "has": "1.0.1", + "postcss": "5.2.17", + "uniqs": "2.0.0" + } }, "power-assert-context-formatter": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/power-assert-context-formatter/-/power-assert-context-formatter-1.1.1.tgz", "integrity": "sha1-7bo1LT7YpgMRTWZyZazOYNaJzN8=", "dev": true, + "requires": { + "core-js": "2.4.1", + "power-assert-context-traversal": "1.1.1" + }, "dependencies": { "core-js": { "version": "2.4.1", @@ -10760,6 +16318,10 @@ "resolved": "https://registry.npmjs.org/power-assert-context-traversal/-/power-assert-context-traversal-1.1.1.tgz", "integrity": "sha1-iMq8oNE7Y1nwfT0+ivppkmRXftk=", "dev": true, + "requires": { + "core-js": "2.4.1", + "estraverse": "4.2.0" + }, "dependencies": { "core-js": { "version": "2.4.1", @@ -10773,7 +16335,11 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/power-assert-renderer-assertion/-/power-assert-renderer-assertion-1.1.1.tgz", "integrity": "sha1-y/wOd+AIao+Wrz8djme57n4ozpg=", - "dev": true + "dev": true, + "requires": { + "power-assert-renderer-base": "1.1.1", + "power-assert-util-string-width": "1.1.1" + } }, "power-assert-renderer-base": { "version": "1.1.1", @@ -10786,6 +16352,12 @@ "resolved": "https://registry.npmjs.org/power-assert-renderer-diagram/-/power-assert-renderer-diagram-1.1.2.tgz", "integrity": "sha1-ZV+PcRk1qbbVQbhjJ2VHF8Y3qYY=", "dev": true, + "requires": { + "core-js": "2.4.1", + "power-assert-renderer-base": "1.1.1", + "power-assert-util-string-width": "1.1.1", + "stringifier": "1.3.0" + }, "dependencies": { "core-js": { "version": "2.4.1", @@ -10800,6 +16372,10 @@ "resolved": "https://registry.npmjs.org/power-assert-renderer-succinct/-/power-assert-renderer-succinct-1.1.1.tgz", "integrity": "sha1-wqRosjgiq9b4Diq6UyI0ewnfR24=", "dev": true, + "requires": { + "core-js": "2.4.1", + "power-assert-renderer-diagram": "1.1.2" + }, "dependencies": { "core-js": { "version": "2.4.1", @@ -10813,7 +16389,10 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/power-assert-util-string-width/-/power-assert-util-string-width-1.1.1.tgz", "integrity": "sha1-vmWet5N/3S5smncmjar2S9W3xZI=", - "dev": true + "dev": true, + "requires": { + "eastasianwidth": "0.1.1" + } }, "prefix-style": { "version": "2.0.1", @@ -10843,13 +16422,22 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", - "dev": true + "dev": true, + "requires": { + "get-stdin": "4.0.1", + "meow": "3.7.0" + } }, "pretty-ms": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-2.1.0.tgz", "integrity": "sha1-QlfCVt8/sLRR1q/6qwIYhBJpgdw=", "dev": true, + "requires": { + "is-finite": "1.0.2", + "parse-ms": "1.0.1", + "plur": "1.0.0" + }, "dependencies": { "plur": { "version": "1.0.0", @@ -10887,25 +16475,40 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz", "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=", - "dev": true + "dev": true, + "requires": { + "speedometer": "0.1.4", + "through2": "0.2.3" + } }, "promise": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.1.1.tgz", "integrity": "sha1-SJZUxpJha4qlWwck+oCbt9tJxb8=", - "dev": true + "dev": true, + "requires": { + "asap": "2.0.5" + } }, "prop-types": { "version": "15.5.10", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.5.10.tgz", "integrity": "sha1-J5ffwxJhguOpXj37suiT3ddFYVQ=", - "dev": true + "dev": true, + "requires": { + "fbjs": "0.8.12", + "loose-envify": "1.3.1" + } }, "proxy-addr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.4.tgz", "integrity": "sha1-J+VF9pYKRKYn2bREZ+NcG2tM4vM=", - "dev": true + "dev": true, + "requires": { + "forwarded": "0.1.0", + "ipaddr.js": "1.3.0" + } }, "prr": { "version": "0.0.0", @@ -10923,7 +16526,14 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.6", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "parse-asn1": "5.1.0", + "randombytes": "2.0.5" + } }, "punycode": { "version": "1.4.1", @@ -10947,7 +16557,11 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", - "dev": true + "dev": true, + "requires": { + "object-assign": "4.1.1", + "strict-uri-encode": "1.1.0" + } }, "querystring": { "version": "0.2.0", @@ -10972,6 +16586,9 @@ "resolved": "https://registry.npmjs.org/raf/-/raf-3.3.2.tgz", "integrity": "sha1-DBO+C1tJtG921maSSNUnzysC/ic=", "dev": true, + "requires": { + "performance-now": "2.1.0" + }, "dependencies": { "performance-now": { "version": "2.1.0", @@ -10991,32 +16608,50 @@ "version": "0.4.5", "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.5.tgz", "integrity": "sha1-/+OoDD9mbNceawCOR35YTBoy/z4=", - "dev": true + "dev": true, + "requires": { + "discontinuous-range": "1.0.0", + "ret": "0.1.14" + } }, "random-path": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/random-path/-/random-path-0.1.1.tgz", "integrity": "sha1-+PTTb3WhNMoV/TnH11BfvxY7Y0w=", "dev": true, - "optional": true + "optional": true, + "requires": { + "base32-encode": "0.1.0", + "murmur-32": "0.1.0" + } }, "randomatic": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, "dependencies": { "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, + "requires": { + "kind-of": "3.2.2" + }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } } } }, @@ -11024,7 +16659,10 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } } } }, @@ -11032,7 +16670,10 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.1.0" + } }, "range-parser": { "version": "1.2.0", @@ -11050,49 +16691,93 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", - "dev": true + "dev": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + } }, "rc-animate": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/rc-animate/-/rc-animate-2.3.6.tgz", "integrity": "sha1-QXeigixnrfT9W5CM66fO6NE8H6w=", - "dev": true + "dev": true, + "requires": { + "css-animation": "1.3.2", + "prop-types": "15.5.10" + } }, "rc-tree": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-1.5.0.tgz", "integrity": "sha1-a3ADA8TxYK1/bEOKj9ylfelqXdE=", - "dev": true + "dev": true, + "requires": { + "classnames": "2.2.5", + "object-assign": "4.1.1", + "prop-types": "15.5.10", + "rc-animate": "2.3.6", + "rc-util": "4.0.4" + } }, "rc-util": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.0.4.tgz", "integrity": "sha1-mYE92Qrufim2STmnCsF26tP0/zk=", - "dev": true + "dev": true, + "requires": { + "add-dom-event-listener": "1.0.2", + "babel-runtime": "6.23.0", + "shallowequal": "0.2.2" + } }, "react": { "version": "15.5.4", "resolved": "https://registry.npmjs.org/react/-/react-15.5.4.tgz", "integrity": "sha1-+oPrAVBqsjfNwcjDsc6o3gEr8Ec=", - "dev": true + "dev": true, + "requires": { + "fbjs": "0.8.12", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "prop-types": "15.5.10" + } }, "react-addons-test-utils": { "version": "15.5.1", "resolved": "https://registry.npmjs.org/react-addons-test-utils/-/react-addons-test-utils-15.5.1.tgz", "integrity": "sha1-4NJYzaKhIq0N/2n4OCYNDDlY9fc=", - "dev": true + "dev": true, + "requires": { + "fbjs": "0.8.12", + "object-assign": "4.1.1" + } }, "react-color": { "version": "2.13.0", "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.13.0.tgz", "integrity": "sha512-A1kk4YTFLgchAj3bX7pigFtNhiAAXpEmA5lhAE2gOfgxSmHfBDZi6j+NZKnf/oSgKCrpbaQQm283hVYCQ0vj+Q==", - "dev": true + "dev": true, + "requires": { + "lodash": "4.17.4", + "material-colors": "1.2.5", + "prop-types": "15.5.10", + "reactcss": "1.2.2", + "tinycolor2": "1.4.1" + } }, "react-custom-scrollbars": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/react-custom-scrollbars/-/react-custom-scrollbars-4.1.2.tgz", "integrity": "sha1-DmDEpGxKYfnkmUp2Y+K5y7xRh6M=", - "dev": true + "dev": true, + "requires": { + "dom-css": "2.1.0", + "prop-types": "15.5.10", + "raf": "3.3.2" + } }, "react-deep-force-update": { "version": "2.0.1", @@ -11104,25 +16789,45 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/react-dimensions/-/react-dimensions-1.3.0.tgz", "integrity": "sha1-9d7I57hGRKYFqQDK4PSmZUrPTp8=", - "dev": true + "dev": true, + "requires": { + "element-resize-event": "2.0.9" + } }, "react-dom": { "version": "15.5.4", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.5.4.tgz", "integrity": "sha1-ugwoeG/VLtfk8hNf4CiNRirvk9o=", - "dev": true + "dev": true, + "requires": { + "fbjs": "0.8.12", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "prop-types": "15.5.10" + } }, "react-hot-loader": { "version": "3.0.0-beta.6", "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-3.0.0-beta.6.tgz", "integrity": "sha1-Rj+sC/yLY6g4UlivIMkWNqvOdfQ=", "dev": true, + "requires": { + "babel-template": "6.25.0", + "global": "4.3.2", + "react-deep-force-update": "2.0.1", + "react-proxy": "3.0.0-alpha.1", + "redbox-react": "1.4.0", + "source-map": "0.4.4" + }, "dependencies": { "source-map": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true + "dev": true, + "requires": { + "amdefine": "1.0.1" + } } } }, @@ -11131,12 +16836,18 @@ "resolved": "https://registry.npmjs.org/react-icon-base/-/react-icon-base-2.0.7.tgz", "integrity": "sha1-C9GHNr1s55ym1pzoOHoH+41M7/4=", "dev": true, + "requires": { + "prop-types": "15.5.8" + }, "dependencies": { "prop-types": { "version": "15.5.8", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.5.8.tgz", "integrity": "sha1-a3suFBCDvjjIWVqlH8VXdccZk5Q=", - "dev": true + "dev": true, + "requires": { + "fbjs": "0.8.12" + } } } }, @@ -11144,55 +16855,104 @@ "version": "2.2.5", "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-2.2.5.tgz", "integrity": "sha1-+UJQHCGkzARWziu+5QMsk/YFHc8=", - "dev": true + "dev": true, + "requires": { + "react-icon-base": "2.0.7" + } }, "react-popover": { "version": "0.4.14", "resolved": "https://registry.npmjs.org/react-popover/-/react-popover-0.4.14.tgz", "integrity": "sha1-QjGwVjkqzUPyFPrPemr32tYjgKw=", - "dev": true + "dev": true, + "requires": { + "create-react-class": "15.5.3", + "css-vendor": "0.3.8", + "debug": "2.6.8", + "lodash.throttle": "3.0.4", + "prop-types": "15.5.10" + } }, "react-portal": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/react-portal/-/react-portal-3.1.0.tgz", "integrity": "sha1-hlxE+3Kh2hBsZJIGk2VZzoke6Jk=", - "dev": true + "dev": true, + "requires": { + "prop-types": "15.5.10" + } }, "react-proxy": { "version": "3.0.0-alpha.1", "resolved": "https://registry.npmjs.org/react-proxy/-/react-proxy-3.0.0-alpha.1.tgz", "integrity": "sha1-RABCa8+oDKpnJMd1VpUxUgn6Swc=", - "dev": true + "dev": true, + "requires": { + "lodash": "4.17.4" + } }, "react-redux": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.0.5.tgz", "integrity": "sha1-+OjHsjlCJXblLWt9sGQ5RpvphGo=", - "dev": true + "dev": true, + "requires": { + "create-react-class": "15.5.3", + "hoist-non-react-statics": "1.2.0", + "invariant": "2.2.2", + "lodash": "4.17.4", + "lodash-es": "4.17.4", + "loose-envify": "1.3.1", + "prop-types": "15.5.10" + } }, "react-router": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.1.1.tgz", "integrity": "sha1-1Ejzt8G0Kab7sDOVCZlJxgax/pU=", - "dev": true + "dev": true, + "requires": { + "history": "4.6.1", + "hoist-non-react-statics": "1.2.0", + "invariant": "2.2.2", + "loose-envify": "1.3.1", + "path-to-regexp": "1.7.0", + "prop-types": "15.5.10", + "warning": "3.0.0" + } }, "react-router-dom": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.1.1.tgz", "integrity": "sha1-MCGt4fLBYK+Xz5TiVZTF8pRYMCU=", - "dev": true + "dev": true, + "requires": { + "history": "4.6.1", + "loose-envify": "1.3.1", + "prop-types": "15.5.10", + "react-router": "4.1.1" + } }, "react-split-pane": { "version": "0.1.63", "resolved": "https://registry.npmjs.org/react-split-pane/-/react-split-pane-0.1.63.tgz", "integrity": "sha1-+ts5YMxlmRHdBf+8iKzuS+n1NYM=", "dev": true, + "requires": { + "inline-style-prefixer": "3.0.6", + "prop-types": "15.5.10", + "react-style-proptype": "3.0.0" + }, "dependencies": { "inline-style-prefixer": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-3.0.6.tgz", "integrity": "sha1-sn/jCbQWijHq84yOjGCrnnwRcx8=", - "dev": true + "dev": true, + "requires": { + "bowser": "1.7.0", + "css-in-js-utils": "1.0.3" + } } } }, @@ -11200,19 +16960,29 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/react-style-proptype/-/react-style-proptype-3.0.0.tgz", "integrity": "sha1-ieC2RvJmxlarsPDdggLb1QNsMeY=", - "dev": true + "dev": true, + "requires": { + "prop-types": "15.5.10" + } }, "reactcss": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.2.tgz", "integrity": "sha1-QbDvQ+AdVIgDV8NLEawVMSCTUO8=", - "dev": true + "dev": true, + "requires": { + "lodash": "4.17.4" + } }, "read-all-stream": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", "dev": true, + "requires": { + "pinkie-promise": "2.0.1", + "readable-stream": "2.2.11" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -11224,7 +16994,16 @@ "version": "2.2.11", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.0.1", + "string_decoder": "1.0.2", + "util-deprecate": "1.0.2" + } }, "safe-buffer": { "version": "5.0.1", @@ -11236,7 +17015,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } } } }, @@ -11244,25 +17026,46 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.3.8", + "path-type": "1.1.0" + } }, "read-pkg-up": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } }, "readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "readdirp": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.2.11", + "set-immediate-shim": "1.0.1" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -11274,7 +17077,16 @@ "version": "2.2.11", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.0.1", + "string_decoder": "1.0.2", + "util-deprecate": "1.0.2" + } }, "safe-buffer": { "version": "5.0.1", @@ -11286,7 +17098,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } } } }, @@ -11294,25 +17109,43 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", - "dev": true + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "mute-stream": "0.0.5" + } }, "rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true + "dev": true, + "requires": { + "resolve": "1.3.3" + } }, "redbox-react": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/redbox-react/-/redbox-react-1.4.0.tgz", "integrity": "sha512-w8fMl0+uxMc3/rpS4QwTwZOxRxn1DjRApTyQHEkodT8Ah4D6p3lZJvkj+ct2wod9LCQF1d80Gqnrl5okaCebZQ==", - "dev": true + "dev": true, + "requires": { + "error-stack-parser": "1.3.6", + "object-assign": "4.1.1", + "prop-types": "15.5.10", + "sourcemapped-stacktrace": "1.1.6" + } }, "redent": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true + "dev": true, + "requires": { + "indent-string": "2.1.0", + "strip-indent": "1.0.1" + } }, "reduce-component": { "version": "1.0.1", @@ -11324,13 +17157,21 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", - "dev": true + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "math-expression-evaluator": "1.2.17", + "reduce-function-call": "1.0.2" + } }, "reduce-function-call": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", - "dev": true + "dev": true, + "requires": { + "balanced-match": "0.4.2" + } }, "reduce-reducers": { "version": "0.1.2", @@ -11343,6 +17184,12 @@ "resolved": "https://registry.npmjs.org/redux/-/redux-3.6.0.tgz", "integrity": "sha1-iHwrPQub2G7KK+cFccJ2VMGeGI0=", "dev": true, + "requires": { + "lodash": "4.17.4", + "lodash-es": "4.17.4", + "loose-envify": "1.3.1", + "symbol-observable": "1.0.4" + }, "dependencies": { "symbol-observable": { "version": "1.0.4", @@ -11356,31 +17203,57 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/redux-actions/-/redux-actions-2.0.3.tgz", "integrity": "sha1-FVCrqd7xeRZszSNNB2chBKc22Ik=", - "dev": true + "dev": true, + "requires": { + "invariant": "2.2.2", + "lodash": "4.17.4", + "lodash-es": "4.17.4", + "reduce-reducers": "0.1.2" + } }, "redux-electron-store": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/redux-electron-store/-/redux-electron-store-0.4.1.tgz", "integrity": "sha1-ufkrQpm+l7Clkg8DyJmn+ShcPhw=", - "dev": true + "dev": true, + "requires": { + "lodash": "4.17.4" + } }, "redux-form": { "version": "6.8.0", "resolved": "https://registry.npmjs.org/redux-form/-/redux-form-6.8.0.tgz", "integrity": "sha512-rISN+EERGB8nAS/LDnOSQaTf0f+QreXEq+7pRVvBFzmH5vIsYRwVpBtYA8UsibGzO+0BL1bl5L5bxdrNwxI+sA==", - "dev": true + "dev": true, + "requires": { + "deep-equal": "1.0.1", + "es6-error": "4.0.2", + "hoist-non-react-statics": "1.2.0", + "invariant": "2.2.2", + "is-promise": "2.1.0", + "lodash": "4.17.4", + "lodash-es": "4.17.4", + "prop-types": "15.5.10" + } }, "redux-logger": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/redux-logger/-/redux-logger-3.0.6.tgz", "integrity": "sha1-91VZZvMJjzyIYExEnPC69XeCdL8=", - "dev": true + "dev": true, + "requires": { + "deep-diff": "0.3.8" + } }, "redux-persist": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-3.5.0.tgz", "integrity": "sha1-hL10wrF+MtSQrqcRlqgS8gE/zI4=", - "dev": true + "dev": true, + "requires": { + "json-stringify-safe": "5.0.1", + "lodash": "4.17.4" + } }, "redux-thunk": { "version": "2.2.0", @@ -11404,31 +17277,52 @@ "version": "0.9.11", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.9.11.tgz", "integrity": "sha1-On0GdSDLe3F2dp61/4aGkb7+EoM=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0", + "private": "0.1.7" + } }, "regex-cache": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", - "dev": true + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3", + "is-primitive": "2.0.0" + } }, "regexpu-core": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", - "dev": true + "dev": true, + "requires": { + "regenerate": "1.3.2", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } }, "registry-auth-token": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.1.tgz", "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=", - "dev": true + "dev": true, + "requires": { + "rc": "1.2.1", + "safe-buffer": "5.1.0" + } }, "registry-url": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "dev": true + "dev": true, + "requires": { + "rc": "1.2.1" + } }, "regjsgen": { "version": "0.2.0", @@ -11441,6 +17335,9 @@ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, + "requires": { + "jsesc": "0.5.0" + }, "dependencies": { "jsesc": { "version": "0.5.0", @@ -11472,13 +17369,40 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true + "dev": true, + "requires": { + "is-finite": "1.0.2" + } }, "request": { "version": "2.81.0", "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", "dev": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.1.0", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + }, "dependencies": { "uuid": { "version": "3.0.1", @@ -11511,6 +17435,10 @@ "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", "dev": true, + "requires": { + "caller-path": "0.1.0", + "resolve-from": "1.0.1" + }, "dependencies": { "resolve-from": { "version": "1.0.1", @@ -11536,13 +17464,19 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz", "integrity": "sha1-ZVkHw0aahoDcLeOidaj91paR8OU=", - "dev": true + "dev": true, + "requires": { + "path-parse": "1.0.5" + } }, "resolve-cwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-1.0.0.tgz", "integrity": "sha1-Tq7qQe0EDRcCRX32SkKysH0kb58=", - "dev": true + "dev": true, + "requires": { + "resolve-from": "2.0.0" + } }, "resolve-from": { "version": "2.0.0", @@ -11560,7 +17494,10 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/resolve-pkg/-/resolve-pkg-0.1.0.tgz", "integrity": "sha1-AsyZNBDik2livZcWahsHfalyVTE=", - "dev": true + "dev": true, + "requires": { + "resolve-from": "2.0.0" + } }, "resolve-url": { "version": "0.2.1", @@ -11572,7 +17509,11 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true + "dev": true, + "requires": { + "exit-hook": "1.1.1", + "onetime": "1.1.0" + } }, "ret": { "version": "0.1.14", @@ -11590,25 +17531,38 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true + "dev": true, + "requires": { + "align-text": "0.1.4" + } }, "rimraf": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", - "dev": true + "dev": true, + "requires": { + "glob": "7.1.2" + } }, "ripemd160": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", - "dev": true + "dev": true, + "requires": { + "hash-base": "2.0.2", + "inherits": "2.0.3" + } }, "run-async": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", - "dev": true + "dev": true, + "requires": { + "once": "1.4.0" + } }, "rwlock": { "version": "5.0.0", @@ -11638,13 +17592,22 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.1.tgz", "integrity": "sha1-YS2hyWRz+gLczaktzVtKsWSmdyo=", - "dev": true + "dev": true, + "requires": { + "truncate-utf8-bytes": "1.0.2" + } }, "sass-graph": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", "dev": true, + "requires": { + "glob": "7.1.2", + "lodash": "4.17.4", + "scss-tokenizer": "0.2.3", + "yargs": "7.1.0" + }, "dependencies": { "camelcase": { "version": "3.0.0", @@ -11656,7 +17619,10 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true + "dev": true, + "requires": { + "lcid": "1.0.0" + } }, "which-module": { "version": "1.0.0", @@ -11668,13 +17634,31 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true + "dev": true, + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "y18n": "3.2.1", + "yargs-parser": "5.0.0" + } }, "yargs-parser": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true + "dev": true, + "requires": { + "camelcase": "3.0.0" + } } } }, @@ -11683,12 +17667,20 @@ "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-4.1.1.tgz", "integrity": "sha1-ee+UaM8L9kbClSnh8sumvW5Rx7w=", "dev": true, + "requires": { + "async": "2.4.1", + "loader-utils": "0.2.17", + "object-assign": "4.1.1" + }, "dependencies": { "async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/async/-/async-2.4.1.tgz", "integrity": "sha1-YqVrJ5yYoR0JhwlqAcw+6463u9c=", - "dev": true + "dev": true, + "requires": { + "lodash": "4.17.4" + } } } }, @@ -11703,12 +17695,19 @@ "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", "dev": true, + "requires": { + "js-base64": "2.1.9", + "source-map": "0.4.4" + }, "dependencies": { "source-map": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true + "dev": true, + "requires": { + "amdefine": "1.0.1" + } } } }, @@ -11728,19 +17727,40 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "dev": true + "dev": true, + "requires": { + "semver": "5.3.0" + } }, "send": { "version": "0.15.3", "resolved": "https://registry.npmjs.org/send/-/send-0.15.3.tgz", "integrity": "sha1-UBP5+ZAj31DRvZiSwZ4979HVMwk=", "dev": true, + "requires": { + "debug": "2.6.7", + "depd": "1.1.0", + "destroy": "1.0.4", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "etag": "1.8.0", + "fresh": "0.5.0", + "http-errors": "1.6.1", + "mime": "1.3.4", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.3.1" + }, "dependencies": { "debug": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", - "dev": true + "dev": true, + "requires": { + "ms": "2.0.0" + } }, "ms": { "version": "2.0.0", @@ -11754,13 +17774,28 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.0.tgz", "integrity": "sha1-0rKA/FYNYW7oG0i/D6gqvtJIXOc=", - "dev": true + "dev": true, + "requires": { + "accepts": "1.3.3", + "batch": "0.6.1", + "debug": "2.6.8", + "escape-html": "1.0.3", + "http-errors": "1.6.1", + "mime-types": "2.1.15", + "parseurl": "1.3.1" + } }, "serve-static": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.3.tgz", "integrity": "sha1-n0uhni8wMMVH+K+ZEHg47DjVseI=", - "dev": true + "dev": true, + "requires": { + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "parseurl": "1.3.1", + "send": "0.15.3" + } }, "set-blocking": { "version": "2.0.0", @@ -11790,19 +17825,30 @@ "version": "2.4.8", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.8.tgz", "integrity": "sha1-NwaMLEdra69ALRSknGf1l5IfY08=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3" + } }, "shallowequal": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-0.2.2.tgz", "integrity": "sha1-HjL9W8q2rWiKSBLLDMBO/HXHAU4=", - "dev": true + "dev": true, + "requires": { + "lodash.keys": "3.1.2" + } }, "shelljs": { "version": "0.7.8", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", - "dev": true + "dev": true, + "requires": { + "glob": "7.1.2", + "interpret": "1.0.3", + "rechoir": "0.6.2" + } }, "sigmund": { "version": "1.0.1", @@ -11820,7 +17866,10 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz", "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=", - "dev": true + "dev": true, + "requires": { + "string-width": "1.0.2" + } }, "slash": { "version": "1.0.0", @@ -11844,19 +17893,29 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true + "dev": true, + "requires": { + "hoek": "2.16.3" + } }, "sockjs": { "version": "0.3.18", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.18.tgz", "integrity": "sha1-2bKJMWyn33dZXvKZ4HXw+TfrQgc=", "dev": true, + "requires": { + "faye-websocket": "0.10.0", + "uuid": "2.0.3" + }, "dependencies": { "faye-websocket": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true + "dev": true, + "requires": { + "websocket-driver": "0.6.5" + } } } }, @@ -11865,12 +17924,23 @@ "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.1.tgz", "integrity": "sha1-KEhD6al4TXxHSxVxsyQPyp3aS7A=", "dev": true, + "requires": { + "debug": "2.6.8", + "eventsource": "0.1.6", + "faye-websocket": "0.11.1", + "inherits": "2.0.3", + "json3": "3.3.2", + "url-parse": "1.1.9" + }, "dependencies": { "faye-websocket": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", - "dev": true + "dev": true, + "requires": { + "websocket-driver": "0.6.5" + } } } }, @@ -11878,7 +17948,10 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "dev": true + "dev": true, + "requires": { + "is-plain-obj": "1.1.0" + } }, "source-list-map": { "version": "0.1.8", @@ -11896,13 +17969,22 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.3.1.tgz", "integrity": "sha1-YQ9hIqRFuN1RU1oqcbeD38Ekh2E=", - "dev": true + "dev": true, + "requires": { + "atob": "1.1.3", + "resolve-url": "0.2.1", + "source-map-url": "0.3.0", + "urix": "0.1.0" + } }, "source-map-support": { "version": "0.4.15", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.15.tgz", "integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E=", - "dev": true + "dev": true, + "requires": { + "source-map": "0.5.6" + } }, "source-map-url": { "version": "0.3.0", @@ -11914,13 +17996,19 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/sourcemapped-stacktrace/-/sourcemapped-stacktrace-1.1.6.tgz", "integrity": "sha1-ES2HSclCw807Yw36yVFFd7hqOlE=", - "dev": true + "dev": true, + "requires": { + "source-map": "0.5.6" + } }, "spdx-correct": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", - "dev": true + "dev": true, + "requires": { + "spdx-license-ids": "1.2.2" + } }, "spdx-expression-parse": { "version": "1.0.4", @@ -11938,13 +18026,30 @@ "version": "3.4.7", "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", - "dev": true + "dev": true, + "requires": { + "debug": "2.6.8", + "handle-thing": "1.2.5", + "http-deceiver": "1.2.7", + "safe-buffer": "5.1.0", + "select-hose": "2.0.0", + "spdy-transport": "2.0.20" + } }, "spdy-transport": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.0.20.tgz", "integrity": "sha1-c15yBUxIayNU/onnAiVgBKOazk0=", "dev": true, + "requires": { + "debug": "2.6.8", + "detect-node": "2.0.3", + "hpack.js": "2.1.6", + "obuf": "1.1.1", + "readable-stream": "2.2.11", + "safe-buffer": "5.1.0", + "wbuf": "1.7.2" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -11957,6 +18062,15 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.0.1", + "string_decoder": "1.0.2", + "util-deprecate": "1.0.2" + }, "dependencies": { "safe-buffer": { "version": "5.0.1", @@ -11971,6 +18085,9 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", "dev": true, + "requires": { + "safe-buffer": "5.0.1" + }, "dependencies": { "safe-buffer": { "version": "5.0.1", @@ -11986,7 +18103,14 @@ "version": "3.6.4", "resolved": "https://registry.npmjs.org/spectron/-/spectron-3.6.4.tgz", "integrity": "sha1-VvQqtcSBVHkdjbLztTGyWOcgWqA=", - "dev": true + "dev": true, + "requires": { + "dev-null": "0.1.1", + "electron-chromedriver": "1.6.0", + "request": "2.81.0", + "split": "1.0.0", + "webdriverio": "4.8.0" + } }, "speedometer": { "version": "0.1.4", @@ -11998,7 +18122,10 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/split/-/split-1.0.0.tgz", "integrity": "sha1-xDlc5oOrzSVLwo/h2rtuXCfc/64=", - "dev": true + "dev": true, + "requires": { + "through": "2.3.8" + } }, "sprintf-js": { "version": "1.0.3", @@ -12011,6 +18138,16 @@ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", "dev": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -12049,6 +18186,10 @@ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.2.11" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -12060,7 +18201,16 @@ "version": "2.2.11", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.0.1", + "string_decoder": "1.0.2", + "util-deprecate": "1.0.2" + } }, "safe-buffer": { "version": "5.0.1", @@ -12072,7 +18222,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } } } }, @@ -12088,6 +18241,13 @@ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.1.tgz", "integrity": "sha1-VGpRdBrVprB+njGwsQRBqRffUoo=", "dev": true, + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.2.11", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -12099,7 +18259,16 @@ "version": "2.2.11", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.0.1", + "string_decoder": "1.0.2", + "util-deprecate": "1.0.2" + } }, "safe-buffer": { "version": "5.0.1", @@ -12111,7 +18280,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } }, "xtend": { "version": "4.0.1", @@ -12143,7 +18315,12 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } }, "string.prototype.codepointat": { "version": "0.2.0", @@ -12162,6 +18339,11 @@ "resolved": "https://registry.npmjs.org/stringifier/-/stringifier-1.3.0.tgz", "integrity": "sha1-3vGDQvaTPbDy2/yaoCF1tEjBeVk=", "dev": true, + "requires": { + "core-js": "2.4.1", + "traverse": "0.6.6", + "type-name": "2.0.2" + }, "dependencies": { "core-js": { "version": "2.4.1", @@ -12181,13 +18363,19 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } }, "strip-bom": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } }, "strip-eof": { "version": "1.0.0", @@ -12199,7 +18387,10 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true + "dev": true, + "requires": { + "get-stdin": "4.0.1" + } }, "strip-json-comments": { "version": "2.0.1", @@ -12212,12 +18403,20 @@ "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.13.2.tgz", "integrity": "sha1-dFMzhM9pjHEEx5URULSXF63C87s=", "dev": true, + "requires": { + "loader-utils": "1.1.0" + }, "dependencies": { "loader-utils": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true + "dev": true, + "requires": { + "big.js": "3.1.3", + "emojis-list": "2.1.0", + "json5": "0.5.1" + } } } }, @@ -12225,25 +18424,56 @@ "version": "1.4.6", "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-1.4.6.tgz", "integrity": "sha1-WPMuimq1EPsUgekB6DjgR38UiwY=", - "dev": true + "dev": true, + "requires": { + "buffer": "5.0.6", + "css-to-react-native": "1.0.6", + "fbjs": "0.8.12", + "inline-style-prefixer": "2.0.5", + "is-function": "1.0.1", + "is-plain-object": "2.0.3", + "prop-types": "15.5.10", + "supports-color": "3.2.3" + } }, "styled-flexbox": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/styled-flexbox/-/styled-flexbox-0.2.0.tgz", "integrity": "sha1-HYktR6Whg3fUNlJkE+muah9mFlE=", - "dev": true + "dev": true, + "requires": { + "prop-types": "15.5.10", + "styled-components": "1.4.6" + } }, "sumchecker": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-1.3.1.tgz", "integrity": "sha1-ebs7RFbdBPGOvbwNcDodHa7FEF0=", - "dev": true + "dev": true, + "requires": { + "debug": "2.6.8", + "es6-promise": "4.1.0" + } }, "superagent": { "version": "1.8.5", "resolved": "https://registry.npmjs.org/superagent/-/superagent-1.8.5.tgz", "integrity": "sha1-HA3cOvMOgOuE68BcshItqP6UC1U=", "dev": true, + "requires": { + "component-emitter": "1.2.1", + "cookiejar": "2.0.6", + "debug": "2.6.8", + "extend": "3.0.0", + "form-data": "1.0.0-rc3", + "formidable": "1.0.17", + "methods": "1.1.2", + "mime": "1.3.4", + "qs": "2.3.3", + "readable-stream": "1.0.27-1", + "reduce-component": "1.0.1" + }, "dependencies": { "extend": { "version": "3.0.0", @@ -12255,7 +18485,12 @@ "version": "1.0.0-rc3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.0-rc3.tgz", "integrity": "sha1-01vGLn+8KTeuePlIqqDTjZBgdXc=", - "dev": true + "dev": true, + "requires": { + "async": "1.5.2", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } }, "qs": { "version": "2.3.3", @@ -12267,7 +18502,13 @@ "version": "1.0.27-1", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.27-1.tgz", "integrity": "sha1-a2eYPCA1fO/QfwFlABoW1xDZEHg=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } } } }, @@ -12275,13 +18516,25 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true + "dev": true, + "requires": { + "has-flag": "1.0.0" + } }, "svgo": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", "dev": true, + "requires": { + "coa": "1.0.2", + "colors": "1.1.2", + "csso": "2.3.2", + "js-yaml": "3.7.0", + "mkdirp": "0.5.1", + "sax": "1.2.2", + "whet.extend": "0.9.9" + }, "dependencies": { "colors": { "version": "1.1.2", @@ -12299,7 +18552,10 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true + "dev": true, + "requires": { + "minimist": "0.0.8" + } } } }, @@ -12332,6 +18588,14 @@ "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", "dev": true, + "requires": { + "ajv": "4.11.8", + "ajv-keywords": "1.5.1", + "chalk": "1.1.3", + "lodash": "4.17.4", + "slice-ansi": "0.0.4", + "string-width": "2.0.0" + }, "dependencies": { "ajv-keywords": { "version": "1.5.1", @@ -12349,7 +18613,11 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.0.0.tgz", "integrity": "sha1-Y1xUNsxypuDDh87KJ41OLuxSaH4=", - "dev": true + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "3.0.1" + } } } }, @@ -12358,6 +18626,27 @@ "resolved": "https://registry.npmjs.org/tap/-/tap-7.1.2.tgz", "integrity": "sha1-36w+zxSshUe7rSW70Wzyw3Q/Zc8=", "dev": true, + "requires": { + "bluebird": "3.5.0", + "clean-yaml-object": "0.1.0", + "color-support": "1.1.3", + "coveralls": "2.13.1", + "deeper": "2.1.0", + "foreground-child": "1.5.6", + "glob": "7.1.2", + "isexe": "1.1.2", + "js-yaml": "3.7.0", + "nyc": "7.1.0", + "only-shallow": "1.2.0", + "opener": "1.4.3", + "os-homedir": "1.0.1", + "readable-stream": "2.2.11", + "signal-exit": "3.0.2", + "stack-utils": "0.4.0", + "tap-mocha-reporter": "2.0.1", + "tap-parser": "2.2.3", + "tmatch": "2.0.1" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -12381,7 +18670,16 @@ "version": "2.2.11", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.0.1", + "string_decoder": "1.0.2", + "util-deprecate": "1.0.2" + } }, "safe-buffer": { "version": "5.0.1", @@ -12393,7 +18691,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } } } }, @@ -12402,6 +18703,17 @@ "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-2.0.1.tgz", "integrity": "sha1-xwMWFz1uOhbFjhupLV1s2N5YoS4=", "dev": true, + "requires": { + "color-support": "1.1.3", + "debug": "2.6.8", + "diff": "1.4.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "js-yaml": "3.7.0", + "readable-stream": "2.2.11", + "tap-parser": "2.2.3", + "unicode-length": "1.0.3" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -12415,7 +18727,16 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", "dev": true, - "optional": true + "optional": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.0.1", + "string_decoder": "1.0.2", + "util-deprecate": "1.0.2" + } }, "safe-buffer": { "version": "5.0.1", @@ -12428,7 +18749,10 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", "dev": true, - "optional": true + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } } } }, @@ -12437,6 +18761,11 @@ "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-2.2.3.tgz", "integrity": "sha1-rebpbje/04zg8WLaBn80A08GiwE=", "dev": true, + "requires": { + "events-to-array": "1.1.2", + "js-yaml": "3.7.0", + "readable-stream": "2.2.11" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -12450,7 +18779,16 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", "dev": true, - "optional": true + "optional": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.0.1", + "string_decoder": "1.0.2", + "util-deprecate": "1.0.2" + } }, "safe-buffer": { "version": "5.0.1", @@ -12463,7 +18801,10 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", "dev": true, - "optional": true + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } } } }, @@ -12477,13 +18818,24 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } }, "tar-stream": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.4.tgz", "integrity": "sha1-NlSc8E7RrumyowwBQyUiONr5QBY=", "dev": true, + "requires": { + "bl": "1.2.1", + "end-of-stream": "1.4.0", + "readable-stream": "2.2.11", + "xtend": "4.0.1" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -12495,7 +18847,16 @@ "version": "2.2.11", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.0.1", + "string_decoder": "1.0.2", + "util-deprecate": "1.0.2" + } }, "safe-buffer": { "version": "5.0.1", @@ -12507,7 +18868,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } }, "xtend": { "version": "4.0.1", @@ -12522,6 +18886,10 @@ "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", "dev": true, + "requires": { + "os-tmpdir": "1.0.2", + "rimraf": "2.2.8" + }, "dependencies": { "rimraf": { "version": "2.2.8", @@ -12535,13 +18903,11 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz", "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=", - "dev": true - }, - "term-size": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-0.1.1.tgz", - "integrity": "sha1-hzYLljlsq1dgljcUzaDQy+7K2co=", - "dev": true + "dev": true, + "requires": { + "os-tmpdir": "1.0.2", + "uuid": "2.0.3" + } }, "text-table": { "version": "0.2.0", @@ -12571,13 +18937,23 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", - "dev": true + "dev": true, + "requires": { + "readable-stream": "1.1.14", + "xtend": "2.1.2" + } }, "time-require": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/time-require/-/time-require-0.1.2.tgz", "integrity": "sha1-+eEss3D8JgXhFARYK6VO9corLZg=", "dev": true, + "requires": { + "chalk": "0.4.0", + "date-time": "0.1.1", + "pretty-ms": "0.2.2", + "text-table": "0.2.0" + }, "dependencies": { "ansi-styles": { "version": "1.0.0", @@ -12589,7 +18965,12 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", - "dev": true + "dev": true, + "requires": { + "ansi-styles": "1.0.0", + "has-color": "0.1.7", + "strip-ansi": "0.1.1" + } }, "parse-ms": { "version": "0.1.2", @@ -12601,7 +18982,10 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-0.2.2.tgz", "integrity": "sha1-2oeaaC/zOjcBEEbxPWJ/Z8c7hPY=", - "dev": true + "dev": true, + "requires": { + "parse-ms": "0.1.2" + } }, "strip-ansi": { "version": "0.1.1", @@ -12621,13 +19005,22 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", - "dev": true + "dev": true, + "requires": { + "process": "0.11.10" + } }, "tiny-lr-fork": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/tiny-lr-fork/-/tiny-lr-fork-0.0.5.tgz", "integrity": "sha1-Hpnh4qhGm3NquX2X7vqYxx927Qo=", "dev": true, + "requires": { + "debug": "0.7.4", + "faye-websocket": "0.4.4", + "noptify": "0.0.3", + "qs": "0.5.6" + }, "dependencies": { "debug": { "version": "0.7.4", @@ -12659,14 +19052,20 @@ "version": "0.0.31", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", - "dev": true + "dev": true, + "requires": { + "os-tmpdir": "1.0.2" + } }, "tn1150": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/tn1150/-/tn1150-0.1.0.tgz", "integrity": "sha1-ZzUD0k1WuH3ouMd/7j/AhT1ZoY0=", "dev": true, - "optional": true + "optional": true, + "requires": { + "unorm": "1.4.1" + } }, "to-arraybuffer": { "version": "1.0.1", @@ -12678,7 +19077,10 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-camel-case/-/to-camel-case-1.0.0.tgz", "integrity": "sha1-GlYFSy+daWKYzmamCJcyK29CPkY=", - "dev": true + "dev": true, + "requires": { + "to-space-case": "1.0.0" + } }, "to-fast-properties": { "version": "1.0.3", @@ -12696,13 +19098,19 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-space-case/-/to-space-case-1.0.0.tgz", "integrity": "sha1-sFLar7Gysp3HcM6gFj5ewOvJ/Bc=", - "dev": true + "dev": true, + "requires": { + "to-no-case": "1.0.2" + } }, "tough-cookie": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", - "dev": true + "dev": true, + "requires": { + "punycode": "1.4.1" + } }, "tr46": { "version": "0.0.3", @@ -12715,6 +19123,11 @@ "resolved": "https://registry.npmjs.org/transformers/-/transformers-2.1.0.tgz", "integrity": "sha1-XSPLNVYd2F3Gf7hIIwm0fVPM6ac=", "dev": true, + "requires": { + "css": "1.0.8", + "promise": "2.0.0", + "uglify-js": "2.2.5" + }, "dependencies": { "is-promise": { "version": "1.0.1", @@ -12726,25 +19139,38 @@ "version": "0.3.7", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", - "dev": true + "dev": true, + "requires": { + "wordwrap": "0.0.3" + } }, "promise": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/promise/-/promise-2.0.0.tgz", "integrity": "sha1-RmSKqdYFr10ucMMCS/WUNtoCuA4=", - "dev": true + "dev": true, + "requires": { + "is-promise": "1.0.1" + } }, "source-map": { "version": "0.1.43", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", - "dev": true + "dev": true, + "requires": { + "amdefine": "1.0.1" + } }, "uglify-js": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz", "integrity": "sha1-puAqcNg5eSuXgEiLe4sYTAlcmcc=", - "dev": true + "dev": true, + "requires": { + "optimist": "0.3.7", + "source-map": "0.1.43" + } } } }, @@ -12770,7 +19196,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", - "dev": true + "dev": true, + "requires": { + "utf8-byte-length": "1.0.4" + } }, "tryit": { "version": "1.0.3", @@ -12788,7 +19217,10 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.1.0" + } }, "tweetnacl": { "version": "0.14.5", @@ -12801,13 +19233,20 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true + "dev": true, + "requires": { + "prelude-ls": "1.1.2" + } }, "type-is": { "version": "1.6.15", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", - "dev": true + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.15" + } }, "type-name": { "version": "2.0.2", @@ -12832,6 +19271,11 @@ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.28.tgz", "integrity": "sha512-WqKNbmNJKzIdIEQu/U2ytgGBbhCy2PVks94GoetczOAJ/zCgVu2CuO7gguI5KPFGPtUtI1dmPQl6h0D4cPzypA==", "dev": true, + "requires": { + "source-map": "0.5.6", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, "dependencies": { "camelcase": { "version": "1.2.1", @@ -12843,7 +19287,12 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true + "dev": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + } }, "wordwrap": { "version": "0.0.2", @@ -12855,7 +19304,13 @@ "version": "3.10.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true + "dev": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } } } }, @@ -12894,7 +19349,11 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-1.0.3.tgz", "integrity": "sha1-Wtp6f+1RhBpBijKM8UlHisg1irs=", - "dev": true + "dev": true, + "requires": { + "punycode": "1.4.1", + "strip-ansi": "3.0.1" + } }, "uniq": { "version": "1.0.1", @@ -12906,7 +19365,10 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz", "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=", - "dev": true + "dev": true, + "requires": { + "macaddress": "0.2.8" + } }, "uniqs": { "version": "2.0.0", @@ -12914,17 +19376,16 @@ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", "dev": true }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "dev": true - }, "unique-temp-dir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unique-temp-dir/-/unique-temp-dir-1.0.0.tgz", "integrity": "sha1-bc6VsmgcoAPuv7MEpBX5y6vMU4U=", "dev": true, + "requires": { + "mkdirp": "0.5.1", + "os-tmpdir": "1.0.2", + "uid2": "0.0.3" + }, "dependencies": { "minimist": { "version": "0.0.8", @@ -12936,7 +19397,10 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true + "dev": true, + "requires": { + "minimist": "0.0.8" + } } } }, @@ -12969,7 +19433,17 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-1.0.3.tgz", "integrity": "sha1-j5LFFUgr1oMbfJMBPnD4dVLHz1o=", - "dev": true + "dev": true, + "requires": { + "boxen": "0.6.0", + "chalk": "1.1.3", + "configstore": "2.1.0", + "is-npm": "1.0.0", + "latest-version": "2.0.0", + "lazy-req": "1.1.0", + "semver-diff": "2.1.0", + "xdg-basedir": "2.0.0" + } }, "urix": { "version": "0.1.0", @@ -12982,6 +19456,10 @@ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, "dependencies": { "punycode": { "version": "1.3.2", @@ -12996,12 +19474,21 @@ "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.5.8.tgz", "integrity": "sha1-uRg7GAHg+EdxhnNnMEC8ncHHFcU=", "dev": true, + "requires": { + "loader-utils": "1.1.0", + "mime": "1.3.4" + }, "dependencies": { "loader-utils": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true + "dev": true, + "requires": { + "big.js": "3.1.3", + "emojis-list": "2.1.0", + "json5": "0.5.1" + } } } }, @@ -13010,6 +19497,10 @@ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.1.9.tgz", "integrity": "sha1-xn8dd11R8KGJEd17P/rSe7nlvRk=", "dev": true, + "requires": { + "querystringify": "1.0.0", + "requires-port": "1.0.0" + }, "dependencies": { "querystringify": { "version": "1.0.0", @@ -13023,13 +19514,19 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true + "dev": true, + "requires": { + "prepend-http": "1.0.4" + } }, "user-home": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", - "dev": true + "dev": true, + "requires": { + "os-homedir": "1.0.2" + } }, "utf8-byte-length": { "version": "1.0.4", @@ -13042,6 +19539,9 @@ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, + "requires": { + "inherits": "2.0.1" + }, "dependencies": { "inherits": { "version": "2.0.1", @@ -13073,13 +19573,20 @@ "version": "0.99.6", "resolved": "https://registry.npmjs.org/uuid-1345/-/uuid-1345-0.99.6.tgz", "integrity": "sha1-sScK4BWnchx63sbEbsFpxgmK7UA=", - "dev": true + "dev": true, + "requires": { + "macaddress": "0.2.8" + } }, "validate-npm-package-license": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", - "dev": true + "dev": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } }, "validator": { "version": "7.0.0", @@ -13109,13 +19616,19 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", - "dev": true + "dev": true, + "requires": { + "extsprintf": "1.0.2" + } }, "vm-browserify": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true + "dev": true, + "requires": { + "indexof": "0.0.1" + } }, "void-elements": { "version": "2.0.1", @@ -13133,19 +19646,30 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", - "dev": true + "dev": true, + "requires": { + "loose-envify": "1.3.1" + } }, "watchpack": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.3.1.tgz", "integrity": "sha1-fYaTkHsozmAT5/NhCqKhrPB9rYc=", "dev": true, + "requires": { + "async": "2.4.1", + "chokidar": "1.7.0", + "graceful-fs": "4.1.11" + }, "dependencies": { "async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/async/-/async-2.4.1.tgz", "integrity": "sha1-YqVrJ5yYoR0JhwlqAcw+6463u9c=", - "dev": true + "dev": true, + "requires": { + "lodash": "4.17.4" + } } } }, @@ -13153,7 +19677,10 @@ "version": "1.7.2", "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.2.tgz", "integrity": "sha1-1pe5nx9ZUS3ydRvkJ2nBWAtYAf4=", - "dev": true + "dev": true, + "requires": { + "minimalistic-assert": "1.0.0" + } }, "wdio-dot-reporter": { "version": "0.0.8", @@ -13165,61 +19692,131 @@ "version": "0.10.0", "resolved": "https://registry.npmjs.org/webdav/-/webdav-0.10.0.tgz", "integrity": "sha1-3n9pNRQB7KsjufUHwjXhpHyZ9nc=", - "dev": true + "dev": true, + "requires": { + "deepmerge": "1.3.2", + "node-fetch": "1.7.1", + "xml2js": "0.4.17" + } }, "webdav-fs": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/webdav-fs/-/webdav-fs-1.3.0.tgz", "integrity": "sha1-2xROSLIqWzGDCL4fNExK7Xnx+0w=", - "dev": true + "dev": true, + "requires": { + "webdav": "0.10.0" + } }, "webdriverio": { "version": "4.8.0", "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-4.8.0.tgz", "integrity": "sha1-1Skpt0kID4mWf24WFAUcvIFy0TI=", "dev": true, + "requires": { + "archiver": "1.3.0", + "babel-runtime": "6.23.0", + "css-parse": "2.0.0", + "css-value": "0.0.1", + "deepmerge": "1.3.2", + "ejs": "2.5.6", + "gaze": "1.1.2", + "glob": "7.1.2", + "inquirer": "3.0.6", + "json-stringify-safe": "5.0.1", + "mkdirp": "0.5.1", + "npm-install-package": "2.1.0", + "optimist": "0.6.1", + "q": "1.5.0", + "request": "2.81.0", + "rgb2hex": "0.1.0", + "safe-buffer": "5.0.1", + "supports-color": "3.2.3", + "url": "0.11.0", + "validator": "7.0.0", + "wdio-dot-reporter": "0.0.8", + "wgxpath": "1.0.0" + }, "dependencies": { "cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true + "dev": true, + "requires": { + "restore-cursor": "2.0.0" + } }, "css": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/css/-/css-2.2.1.tgz", "integrity": "sha1-c6TIHehdtmTU7mdPfUcIXjstVdw=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3", + "source-map": "0.1.43", + "source-map-resolve": "0.3.1", + "urix": "0.1.0" + } }, "css-parse": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-2.0.0.tgz", "integrity": "sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q=", - "dev": true + "dev": true, + "requires": { + "css": "2.2.1" + } }, "figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5" + } }, "gaze": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", - "dev": true + "dev": true, + "requires": { + "globule": "1.1.0" + } }, "globule": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/globule/-/globule-1.1.0.tgz", "integrity": "sha1-xJNS5NwYPYWJPuglOF65lLtt9F8=", - "dev": true + "dev": true, + "requires": { + "glob": "7.1.2", + "lodash": "4.16.6", + "minimatch": "3.0.4" + } }, "inquirer": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.0.6.tgz", "integrity": "sha1-4EqqnQW3o8ubD0B9BDdfBEcZA0c=", - "dev": true + "dev": true, + "requires": { + "ansi-escapes": "1.4.0", + "chalk": "1.1.3", + "cli-cursor": "2.1.0", + "cli-width": "2.1.0", + "external-editor": "2.0.4", + "figures": "2.0.0", + "lodash": "4.16.6", + "mute-stream": "0.0.7", + "run-async": "2.3.0", + "rx": "4.1.0", + "string-width": "2.0.0", + "strip-ansi": "3.0.1", + "through": "2.3.8" + } }, "is-fullwidth-code-point": { "version": "2.0.0", @@ -13243,7 +19840,10 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true + "dev": true, + "requires": { + "minimist": "0.0.8" + } }, "mute-stream": { "version": "0.0.7", @@ -13255,19 +19855,29 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true + "dev": true, + "requires": { + "mimic-fn": "1.1.0" + } }, "restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true + "dev": true, + "requires": { + "onetime": "2.0.1", + "signal-exit": "3.0.2" + } }, "run-async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true + "dev": true, + "requires": { + "is-promise": "2.1.0" + } }, "rx": { "version": "4.1.0", @@ -13285,13 +19895,20 @@ "version": "0.1.43", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", - "dev": true + "dev": true, + "requires": { + "amdefine": "1.0.1" + } }, "string-width": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.0.0.tgz", "integrity": "sha1-Y1xUNsxypuDDh87KJ41OLuxSaH4=", - "dev": true + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "3.0.1" + } } } }, @@ -13306,6 +19923,28 @@ "resolved": "https://registry.npmjs.org/webpack/-/webpack-2.2.0.tgz", "integrity": "sha1-CSRjNrVYHJACNT91vK21mKZI+Xc=", "dev": true, + "requires": { + "acorn": "4.0.13", + "acorn-dynamic-import": "2.0.2", + "ajv": "4.11.8", + "ajv-keywords": "1.5.1", + "async": "2.4.1", + "enhanced-resolve": "3.1.0", + "interpret": "1.0.3", + "json-loader": "0.5.4", + "loader-runner": "2.3.0", + "loader-utils": "0.2.17", + "memory-fs": "0.4.1", + "mkdirp": "0.5.0", + "node-libs-browser": "2.0.0", + "source-map": "0.5.6", + "supports-color": "3.2.3", + "tapable": "0.2.6", + "uglify-js": "2.8.28", + "watchpack": "1.3.1", + "webpack-sources": "0.1.5", + "yargs": "6.6.0" + }, "dependencies": { "acorn": { "version": "4.0.13", @@ -13323,13 +19962,21 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/async/-/async-2.4.1.tgz", "integrity": "sha1-YqVrJ5yYoR0JhwlqAcw+6463u9c=", - "dev": true + "dev": true, + "requires": { + "lodash": "4.17.4" + } }, "buffer": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "dev": true + "dev": true, + "requires": { + "base64-js": "1.2.0", + "ieee754": "1.1.8", + "isarray": "1.0.0" + } }, "camelcase": { "version": "3.0.0", @@ -13341,7 +19988,13 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.1.0.tgz", "integrity": "sha1-n0tib1dyRe3PSyrYPYbhf09CHew=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "memory-fs": "0.4.1", + "object-assign": "4.1.1", + "tapable": "0.2.6" + } }, "isarray": { "version": "1.0.0", @@ -13353,13 +20006,42 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true + "dev": true, + "requires": { + "errno": "0.1.4", + "readable-stream": "2.2.11" + } }, "node-libs-browser": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.0.0.tgz", "integrity": "sha1-o6WeyXAkmFtG6Vg3lkb5bEthZkY=", "dev": true, + "requires": { + "assert": "1.4.1", + "browserify-zlib": "0.1.4", + "buffer": "4.9.1", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.11.0", + "domain-browser": "1.1.7", + "events": "1.1.1", + "https-browserify": "0.0.1", + "os-browserify": "0.2.1", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.2.11", + "stream-browserify": "2.0.1", + "stream-http": "2.7.1", + "string_decoder": "0.10.31", + "timers-browserify": "2.0.2", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.3", + "vm-browserify": "0.0.4" + }, "dependencies": { "string_decoder": { "version": "0.10.31", @@ -13373,13 +20055,25 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true + "dev": true, + "requires": { + "lcid": "1.0.0" + } }, "readable-stream": { "version": "2.2.11", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.0.1", + "string_decoder": "1.0.2", + "util-deprecate": "1.0.2" + } }, "safe-buffer": { "version": "5.0.1", @@ -13391,13 +20085,19 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } }, "timers-browserify": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.2.tgz", "integrity": "sha1-q0iDz1l9zVCvIRNJoA+8pWrIa4Y=", - "dev": true + "dev": true, + "requires": { + "setimmediate": "1.0.5" + } }, "which-module": { "version": "1.0.0", @@ -13409,13 +20109,31 @@ "version": "6.6.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", - "dev": true + "dev": true, + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "y18n": "3.2.1", + "yargs-parser": "4.2.1" + } }, "yargs-parser": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", - "dev": true + "dev": true, + "requires": { + "camelcase": "3.0.0" + } } } }, @@ -13424,6 +20142,12 @@ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.10.2.tgz", "integrity": "sha1-LiUs4d+wINvaHMs33ybzCrAU29E=", "dev": true, + "requires": { + "memory-fs": "0.4.1", + "mime": "1.3.4", + "path-is-absolute": "1.0.1", + "range-parser": "1.2.0" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -13435,13 +20159,26 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true + "dev": true, + "requires": { + "errno": "0.1.4", + "readable-stream": "2.2.11" + } }, "readable-stream": { "version": "2.2.11", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.0.1", + "string_decoder": "1.0.2", + "util-deprecate": "1.0.2" + } }, "safe-buffer": { "version": "5.0.1", @@ -13453,7 +20190,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } } } }, @@ -13462,6 +20202,23 @@ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.2.0.tgz", "integrity": "sha1-Nkln7Mr4/x1+FoG3qMwk+rTO2KY=", "dev": true, + "requires": { + "chokidar": "1.7.0", + "compression": "1.6.2", + "connect-history-api-fallback": "1.3.0", + "express": "4.15.3", + "http-proxy-middleware": "0.17.4", + "opn": "4.0.2", + "portfinder": "1.0.13", + "serve-index": "1.9.0", + "sockjs": "0.3.18", + "sockjs-client": "1.1.1", + "spdy": "3.4.7", + "strip-ansi": "3.0.1", + "supports-color": "3.2.3", + "webpack-dev-middleware": "1.10.2", + "yargs": "6.6.0" + }, "dependencies": { "camelcase": { "version": "3.0.0", @@ -13473,7 +20230,10 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true + "dev": true, + "requires": { + "lcid": "1.0.0" + } }, "which-module": { "version": "1.0.0", @@ -13485,13 +20245,31 @@ "version": "6.6.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", - "dev": true + "dev": true, + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "y18n": "3.2.1", + "yargs-parser": "4.2.1" + } }, "yargs-parser": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", - "dev": true + "dev": true, + "requires": { + "camelcase": "3.0.0" + } } } }, @@ -13499,19 +20277,29 @@ "version": "2.6.1", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-2.6.1.tgz", "integrity": "sha1-8dgB0sXTn4P/7J8RkkCz476ZShw=", - "dev": true + "dev": true, + "requires": { + "lodash": "4.17.4" + } }, "webpack-sources": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-0.1.5.tgz", "integrity": "sha1-qh86vw8NdNtxEcQOUAuE+WZkB1A=", - "dev": true + "dev": true, + "requires": { + "source-list-map": "0.1.8", + "source-map": "0.5.6" + } }, "websocket-driver": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", - "dev": true + "dev": true, + "requires": { + "websocket-extensions": "0.1.1" + } }, "websocket-extensions": { "version": "0.1.1", @@ -13530,6 +20318,9 @@ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz", "integrity": "sha1-PGxFGhmO567FWx7GHQkgxngBpfQ=", "dev": true, + "requires": { + "iconv-lite": "0.4.13" + }, "dependencies": { "iconv-lite": { "version": "0.4.13", @@ -13550,6 +20341,10 @@ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-4.8.0.tgz", "integrity": "sha1-0pgaqRSMHgCkHFphMRZqtGg7vMA=", "dev": true, + "requires": { + "tr46": "0.0.3", + "webidl-conversions": "3.0.1" + }, "dependencies": { "webidl-conversions": { "version": "3.0.1", @@ -13569,7 +20364,10 @@ "version": "1.2.14", "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", - "dev": true + "dev": true, + "requires": { + "isexe": "2.0.0" + } }, "which-module": { "version": "2.0.0", @@ -13581,13 +20379,19 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", - "dev": true + "dev": true, + "requires": { + "string-width": "1.0.2" + } }, "widest-line": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz", "integrity": "sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw=", - "dev": true + "dev": true, + "requires": { + "string-width": "1.0.2" + } }, "window-size": { "version": "0.1.0", @@ -13600,6 +20404,10 @@ "resolved": "https://registry.npmjs.org/with/-/with-4.0.3.tgz", "integrity": "sha1-7v0VTp550sjTQXtkeo8U2f7M4U4=", "dev": true, + "requires": { + "acorn": "1.2.2", + "acorn-globals": "1.0.9" + }, "dependencies": { "acorn": { "version": "1.2.2", @@ -13619,7 +20427,11 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + } }, "wrappy": { "version": "1.0.2", @@ -13632,6 +20444,9 @@ "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", "dev": true, + "requires": { + "mkdirp": "0.5.1" + }, "dependencies": { "minimist": { "version": "0.0.8", @@ -13643,7 +20458,10 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true + "dev": true, + "requires": { + "minimist": "0.0.8" + } } } }, @@ -13651,13 +20469,27 @@ "version": "1.3.4", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "slide": "1.1.6" + } }, "write-json-file": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-1.2.0.tgz", "integrity": "sha1-LV3+lqvDyIkFfJOXGqQAXvtUgTQ=", "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "mkdirp": "0.5.1", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "sort-keys": "1.1.2", + "write-file-atomic": "1.3.4" + }, "dependencies": { "minimist": { "version": "0.0.8", @@ -13669,7 +20501,10 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true + "dev": true, + "requires": { + "minimist": "0.0.8" + } } } }, @@ -13677,19 +20512,28 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-1.0.0.tgz", "integrity": "sha1-rriqnU14jh2JPfsIVJaLVDqRn1c=", - "dev": true + "dev": true, + "requires": { + "write-json-file": "1.2.0" + } }, "xdg-basedir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=", - "dev": true + "dev": true, + "requires": { + "os-homedir": "1.0.2" + } }, "xelement": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/xelement/-/xelement-1.0.16.tgz", "integrity": "sha1-kAu0bCD8Lf+t/3eKnS3DZpnQ/34=", - "dev": true + "dev": true, + "requires": { + "sax": "1.2.2" + } }, "xml-name-validator": { "version": "2.0.1", @@ -13701,13 +20545,20 @@ "version": "0.4.17", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.17.tgz", "integrity": "sha1-F76T6q4/O3eTWceVtBlwWogX6Gg=", - "dev": true + "dev": true, + "requires": { + "sax": "1.2.2", + "xmlbuilder": "4.2.1" + } }, "xmlbuilder": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz", "integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=", - "dev": true + "dev": true, + "requires": { + "lodash": "4.17.4" + } }, "xmldom": { "version": "0.1.27", @@ -13719,7 +20570,10 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", - "dev": true + "dev": true, + "requires": { + "object-keys": "0.4.0" + } }, "y18n": { "version": "3.2.1", @@ -13738,6 +20592,21 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", "dev": true, + "requires": { + "camelcase": "4.1.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "2.0.0", + "read-pkg-up": "2.0.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.0", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "7.0.0" + }, "dependencies": { "ansi-regex": { "version": "3.0.0", @@ -13755,7 +20624,10 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true + "dev": true, + "requires": { + "locate-path": "2.0.0" + } }, "is-fullwidth-code-point": { "version": "2.0.0", @@ -13767,37 +20639,62 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + } }, "path-type": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true + "dev": true, + "requires": { + "pify": "2.3.0" + } }, "read-pkg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true + "dev": true, + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.3.8", + "path-type": "2.0.0" + } }, "read-pkg-up": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true + "dev": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + } }, "string-width": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.0.tgz", "integrity": "sha1-AwZkVh/BRslCPsfZeP4kV0N/5tA=", - "dev": true + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } }, "strip-bom": { "version": "3.0.0", @@ -13812,6 +20709,9 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", "dev": true, + "requires": { + "camelcase": "4.1.0" + }, "dependencies": { "camelcase": { "version": "4.1.0", @@ -13825,13 +20725,22 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", - "dev": true + "dev": true, + "requires": { + "fd-slicer": "1.0.1" + } }, "zip-stream": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.1.1.tgz", "integrity": "sha1-Uha0i7tNJlH2TVxubwnrSnOZ1Vc=", "dev": true, + "requires": { + "archiver-utils": "1.3.0", + "compress-commons": "1.2.0", + "lodash": "4.17.4", + "readable-stream": "2.2.11" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -13843,7 +20752,16 @@ "version": "2.2.11", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.0.1", + "string_decoder": "1.0.2", + "util-deprecate": "1.0.2" + } }, "safe-buffer": { "version": "5.0.1", @@ -13855,7 +20773,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } } } }, diff --git a/package.json b/package.json index a8e4d55a..aba10012 100644 --- a/package.json +++ b/package.json @@ -151,6 +151,7 @@ "eslint-config-standard-react": "^4.3.0", "eslint-import-resolver-webpack": "^0.8.1", "eslint-plugin-import": "^2.2.0", + "eslint-plugin-jsx-control-statements": "^2.2.0", "eslint-plugin-node": "^4.2.2", "eslint-plugin-promise": "^3.5.0", "eslint-plugin-react": "^6.10.3", @@ -170,6 +171,7 @@ "is-error": "^2.2.1", "jsdom": "^9.8.3", "json-loader": "^0.5.4", + "jsx-control-statements": "^3.2.5", "load-grunt-tasks": "^3.3.0", "lodash": "^4.16.6", "makedeb": "0.0.4", diff --git a/src/renderer/components/empty-view.js b/src/renderer/components/empty-view.js index 8938aefc..19bab280 100644 --- a/src/renderer/components/empty-view.js +++ b/src/renderer/components/empty-view.js @@ -2,6 +2,8 @@ import PropTypes from 'prop-types'; import React from 'react'; import styled from 'styled-components'; import { Flex } from 'styled-flexbox'; +import { isOSX } from '../../shared/utils/platform'; +import logo from '../styles/img/solo-logo.svg'; const Caption = styled.figcaption` color: var(--gray-dark); @@ -30,3 +32,22 @@ EmptyView.propTypes = { }; export default EmptyView; + +const WhiteFlex = styled(Flex)` + background-color: RGBA(20, 20, 20, .8); + color: #fff; +`; + +const Title = styled.h3` + margin-bottom: var(--spacing-half); +`; + +export const NoArchiveSelected = () => ( + +
    +
    + Welcome back to Buttercup. + Unlock an archive to begin ({isOSX() ? '⌘' : 'Ctrl'}+1). + + +); diff --git a/src/renderer/components/workspace.js b/src/renderer/components/workspace.js index 62f489cc..b3a0bb1d 100644 --- a/src/renderer/components/workspace.js +++ b/src/renderer/components/workspace.js @@ -6,8 +6,9 @@ import Archive from '../components/archive'; import Sidebar from '../containers/sidebar'; import '../styles/workspace.global.scss'; import UpdateNotice from './update-notice'; +import EmptyView, { NoArchiveSelected } from './empty-view'; -const Primary = styled(Box)` +const Primary = styled(Flex)` position: relative; `; @@ -16,10 +17,14 @@ const Workspace = ({ currentArchive, update, installUpdate, setColumnSize, colum - + + + + + + + + installUpdate()} /> diff --git a/src/renderer/styles/img/solo-logo.svg b/src/renderer/styles/img/solo-logo.svg new file mode 100644 index 00000000..02739393 --- /dev/null +++ b/src/renderer/styles/img/solo-logo.svg @@ -0,0 +1,14 @@ + + + + Combined Shape + Created with Sketch. + + + + + \ No newline at end of file diff --git a/src/shared/selectors.js b/src/shared/selectors.js index d957c620..edab12e5 100644 --- a/src/shared/selectors.js +++ b/src/shared/selectors.js @@ -15,7 +15,7 @@ export const getCurrentArchiveId = state => state.currentArchive; export const getCurrentArchive = createSelector( state => state.archives, getCurrentArchiveId, - (archives, archiveId) => archives[archiveId] || null + (archives, archiveId) => archives.find(archive => archive.id === archiveId) || null ); // Settings -> From 09bdc1c1b1e97fc83f7f31c20e9b2185acf01a53 Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Mon, 21 Aug 2017 20:38:42 +0300 Subject: [PATCH 28/39] Add welcome empty screen --- src/renderer/components/add-archive-button.js | 40 ++++++++++++++++++ src/renderer/components/empty-view.js | 18 ++++++-- src/renderer/components/sidebar.js | 42 +------------------ src/renderer/components/workspace.js | 22 +++++++--- src/renderer/containers/add-archive-button.js | 12 ++++++ src/renderer/containers/workspace.js | 3 +- src/shared/selectors.js | 2 +- 7 files changed, 89 insertions(+), 50 deletions(-) create mode 100644 src/renderer/components/add-archive-button.js create mode 100644 src/renderer/containers/add-archive-button.js diff --git a/src/renderer/components/add-archive-button.js b/src/renderer/components/add-archive-button.js new file mode 100644 index 00000000..9cde2495 --- /dev/null +++ b/src/renderer/components/add-archive-button.js @@ -0,0 +1,40 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { Button } from '@buttercup/ui'; +import ArchiveIcon from 'react-icons/lib/md/add'; +import { showContextMenu } from '../system/menu'; + +const AddArchiveButton = ({ condenced = false, onNewClick, onOpenClick, onCloudClick, ...props }) => ( + +); + +AddArchiveButton.propTypes = { + condenced: PropTypes.bool, + onOpenClick: PropTypes.func, + onNewClick: PropTypes.func, + onCloudClick: PropTypes.func +}; + +export default AddArchiveButton; diff --git a/src/renderer/components/empty-view.js b/src/renderer/components/empty-view.js index 19bab280..9750841d 100644 --- a/src/renderer/components/empty-view.js +++ b/src/renderer/components/empty-view.js @@ -4,6 +4,7 @@ import styled from 'styled-components'; import { Flex } from 'styled-flexbox'; import { isOSX } from '../../shared/utils/platform'; import logo from '../styles/img/solo-logo.svg'; +import AddArchiveButton from '../containers/add-archive-button'; const Caption = styled.figcaption` color: var(--gray-dark); @@ -33,7 +34,7 @@ EmptyView.propTypes = { export default EmptyView; -const WhiteFlex = styled(Flex)` +const ColoredFlex = styled(Flex)` background-color: RGBA(20, 20, 20, .8); color: #fff; `; @@ -43,11 +44,22 @@ const Title = styled.h3` `; export const NoArchiveSelected = () => ( - +
    Welcome back to Buttercup. Unlock an archive to begin ({isOSX() ? '⌘' : 'Ctrl'}+1).
    -
    + +); + +export const WelcomeScreen = () => ( + +
    + + Welcome to Buttercup. + You haven't added have any archives yet. Why not add one? +
    + +
    ); diff --git a/src/renderer/components/sidebar.js b/src/renderer/components/sidebar.js index a5f49f86..96e6b737 100644 --- a/src/renderer/components/sidebar.js +++ b/src/renderer/components/sidebar.js @@ -1,10 +1,8 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; -import ArchiveIcon from 'react-icons/lib/md/add'; -import { Button } from '@buttercup/ui'; import styled from 'styled-components'; import { isOSX } from '../../shared/utils/platform'; -import { showContextMenu } from '../system/menu'; +import AddArchiveButton from '../containers/add-archive-button'; import EmptyView from './empty-view'; import BaseColumn from './column'; import SidebarItem from './sidebar-item'; @@ -27,34 +25,11 @@ class RecentFiles extends Component { archives: PropTypes.array, currentArchiveId: PropTypes.string, onRemoveClick: PropTypes.func, - onOpenClick: PropTypes.func, - onNewClick: PropTypes.func, - onCloudClick: PropTypes.func, onArchiveUpdate: PropTypes.func, onClick: PropTypes.func, showImportDialog: PropTypes.func }; - showCreateMenu = () => { - showContextMenu([ - { - label: 'Open Archive File', - accelerator: 'CmdOrCtrl+O', - click: this.props.onOpenClick - }, - { - label: 'New Archive File', - accelerator: 'CmdOrCtrl+N', - click: this.props.onNewClick - }, - { - label: 'Connect Cloud Sources', - accelerator: 'CmdOrCtrl+Shift+C', - click: this.props.onCloudClick - } - ]); - } - renderEmptyState() { return (
    @@ -66,20 +41,7 @@ class RecentFiles extends Component { render() { const { archives, currentArchiveId, condenced } = this.props; - // if (archives.length === 0) { - // return this.renderEmptyState(); - // } - - const footer = ( - - ); + const footer = ; return ( diff --git a/src/renderer/components/workspace.js b/src/renderer/components/workspace.js index b3a0bb1d..cfdf731f 100644 --- a/src/renderer/components/workspace.js +++ b/src/renderer/components/workspace.js @@ -1,24 +1,35 @@ import PropTypes from 'prop-types'; import React from 'react'; import styled from 'styled-components'; -import { Flex, Box } from 'styled-flexbox'; +import { Flex } from 'styled-flexbox'; import Archive from '../components/archive'; import Sidebar from '../containers/sidebar'; import '../styles/workspace.global.scss'; import UpdateNotice from './update-notice'; -import EmptyView, { NoArchiveSelected } from './empty-view'; +import { NoArchiveSelected, WelcomeScreen } from './empty-view'; const Primary = styled(Flex)` position: relative; `; -const Workspace = ({ currentArchive, update, installUpdate, setColumnSize, columnSizes, condencedSidebar }) => { +const Workspace = ({ + currentArchive, + archivesCount, + update, + installUpdate, + setColumnSize, + columnSizes, + condencedSidebar +}) => { return ( - + {archivesCount > 0 && } - + + + + 0 && currentArchive === null}> @@ -33,6 +44,7 @@ const Workspace = ({ currentArchive, update, installUpdate, setColumnSize, colum Workspace.propTypes = { currentArchive: PropTypes.object, + archivesCount: PropTypes.number, update: PropTypes.object, columnSizes: PropTypes.object, condencedSidebar: PropTypes.bool, diff --git a/src/renderer/containers/add-archive-button.js b/src/renderer/containers/add-archive-button.js new file mode 100644 index 00000000..2c77ae20 --- /dev/null +++ b/src/renderer/containers/add-archive-button.js @@ -0,0 +1,12 @@ +import { connect } from 'react-redux'; +import { openArchive, newArchive, openFileManager } from '../../shared/actions/files'; +import AddArchiveButton from '../components/add-archive-button'; + +export default connect( + state => ({}), + { + onOpenClick: openArchive, + onNewClick: newArchive, + onCloudClick: openFileManager + } +)(AddArchiveButton); diff --git a/src/renderer/containers/workspace.js b/src/renderer/containers/workspace.js index 7cd38775..b35b0016 100644 --- a/src/renderer/containers/workspace.js +++ b/src/renderer/containers/workspace.js @@ -2,13 +2,14 @@ import { connect } from 'react-redux'; import Workspace from '../components/workspace'; import { installUpdate } from '../../shared/actions/update'; import { setColumnSize } from '../../shared/actions/settings'; -import { getCurrentArchive, getSetting } from '../../shared/selectors'; +import { getCurrentArchive, getSetting, getArchivesCount } from '../../shared/selectors'; export default connect( state => ({ columnSizes: getSetting(state, 'columnSizes'), condencedSidebar: getSetting(state, 'condencedSidebar'), currentArchive: getCurrentArchive(state), + archivesCount: getArchivesCount(state), update: state.update, }), { diff --git a/src/shared/selectors.js b/src/shared/selectors.js index edab12e5..c481bcd9 100644 --- a/src/shared/selectors.js +++ b/src/shared/selectors.js @@ -8,9 +8,9 @@ import { denormalizeGroups } from './buttercup/groups'; // Archive -> +export const getArchivesCount = state => state.archives.length; export const getAllArchives = state => sortByKey(Object.values(state.archives), 'name-asc'); export const getArchive = (state, archiveId) => state.archives.find(archive => archive.id === archiveId); - export const getCurrentArchiveId = state => state.currentArchive; export const getCurrentArchive = createSelector( state => state.archives, From 419f71934497ee4804302a863a33446c9402aef9 Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Mon, 21 Aug 2017 20:50:16 +0300 Subject: [PATCH 29/39] Fix group trash indicator --- src/shared/buttercup/groups.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/buttercup/groups.js b/src/shared/buttercup/groups.js index 3470ebb2..4fc551b3 100644 --- a/src/shared/buttercup/groups.js +++ b/src/shared/buttercup/groups.js @@ -18,7 +18,7 @@ export function groupToObject(group) { const obj = group.toObject(); return { ...obj, - isTrash: group.isTrash, + isTrash: group.isTrash(), groups: obj.groups.map(g => g.id) }; } From 91557783b6f186c31ace0b493461d5bdffd79f28 Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Mon, 21 Aug 2017 20:56:13 +0300 Subject: [PATCH 30/39] Improved input color for tree view --- src/renderer/components/tree-view/tree-label-edit.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/renderer/components/tree-view/tree-label-edit.js b/src/renderer/components/tree-view/tree-label-edit.js index 6f406262..eef73ecc 100644 --- a/src/renderer/components/tree-view/tree-label-edit.js +++ b/src/renderer/components/tree-view/tree-label-edit.js @@ -6,9 +6,9 @@ const Input = styled.input` border: none; outline: none; border-radius: 2px; - background-color: rgba(0, 0, 0, .2); + background-color: #fff; box-sizing: border-box; - color: #fff; + color: #222; `; export default class LabelEditor extends Component { From 8dda5824ad76a7c19310f6d9c85d2a8c06a72959 Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Mon, 21 Aug 2017 22:04:37 +0300 Subject: [PATCH 31/39] Convert old state to new --- .babelrc | 3 +- app/package-lock.json | 271 ++++++++++++++++++++++++++++++---- app/package.json | 3 +- config/webpack.config.base.js | 2 +- package.json | 2 +- src/main/app.js | 11 +- 6 files changed, 260 insertions(+), 32 deletions(-) diff --git a/.babelrc b/.babelrc index d328724d..0f12df17 100644 --- a/.babelrc +++ b/.babelrc @@ -25,7 +25,8 @@ "plugins": [ "transform-remove-console", "transform-remove-debugger", - "dev-expression" + "dev-expression", + "jsx-control-statements" ] }, "node": { diff --git a/app/package-lock.json b/app/package-lock.json index f8205c09..6b3ab3f6 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -2,6 +2,7 @@ "name": "buttercup", "version": "0.18.0", "lockfileVersion": 1, + "requires": true, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -21,17 +22,39 @@ "buttercup": { "version": "0.38.1", "resolved": "https://registry.npmjs.org/buttercup/-/buttercup-0.38.1.tgz", - "integrity": "sha1-9CIk3XWsSGgpoCDWzjxMVWZ7o2Q=" + "integrity": "sha1-9CIk3XWsSGgpoCDWzjxMVWZ7o2Q=", + "requires": { + "clone": "1.0.2", + "debug": "2.3.3", + "gzip-js": "0.3.2", + "iocane": "0.7.0", + "node-fetch": "1.6.3", + "string-hash": "1.1.3", + "uuid": "2.0.3", + "verror": "1.9.0", + "webdav-fs": "0.4.1" + } }, "buttercup-importer": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/buttercup-importer/-/buttercup-importer-0.9.1.tgz", - "integrity": "sha1-OOu95fdJO1yEfKCxpoLlpDCqVsk=" + "integrity": "sha1-OOu95fdJO1yEfKCxpoLlpDCqVsk=", + "requires": { + "buttercup": "0.38.1", + "csvjson": "4.3.3", + "is-dir": "1.0.0", + "kdbxweb": "1.0.1", + "pify": "2.3.0", + "xml2js": "0.4.17" + } }, "cipher-base": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.3.tgz", - "integrity": "sha1-7qvxlEGc6QDaMBjCB9IS8qbfCgc=" + "integrity": "sha1-7qvxlEGc6QDaMBjCB9IS8qbfCgc=", + "requires": { + "inherits": "2.0.3" + } }, "clone": { "version": "1.0.2", @@ -41,13 +64,27 @@ "combined-stream": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=" + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "requires": { + "delayed-stream": "1.0.0" + } }, "component-emitter": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" }, + "conf": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/conf/-/conf-1.0.0.tgz", + "integrity": "sha1-NUcXDTObtNOL9eDobC5a+Xa0f/o=", + "requires": { + "dot-prop": "4.1.1", + "env-paths": "1.0.0", + "mkdirp": "0.5.1", + "pkg-up": "1.0.0" + } + }, "cookiejar": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.0.6.tgz", @@ -66,12 +103,26 @@ "create-hash": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", - "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=" + "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "requires": { + "cipher-base": "1.0.3", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "sha.js": "2.4.8" + } }, "create-hmac": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", - "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=" + "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "requires": { + "cipher-base": "1.0.3", + "create-hash": "1.1.3", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.0", + "sha.js": "2.4.8" + } }, "csvjson": { "version": "4.3.3", @@ -81,7 +132,10 @@ "debug": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=" + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "requires": { + "ms": "0.7.2" + } }, "deepmerge": { "version": "1.3.2", @@ -98,15 +152,35 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, + "dot-prop": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.1.1.tgz", + "integrity": "sha1-qEk/C3te7sglJbXHWH+n3nyoWcE=", + "requires": { + "is-obj": "1.0.1" + } + }, "dropbox": { "version": "2.5.4", "resolved": "https://registry.npmjs.org/dropbox/-/dropbox-2.5.4.tgz", - "integrity": "sha1-UtRDOSvWG7ym6/QTpcHge5+Rq38=" + "integrity": "sha1-UtRDOSvWG7ym6/QTpcHge5+Rq38=", + "requires": { + "es6-promise": "3.3.1", + "superagent": "1.8.5" + } }, "encoding": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=" + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "requires": { + "iconv-lite": "0.4.18" + } + }, + "env-paths": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz", + "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=" }, "es6-promise": { "version": "3.3.1", @@ -123,10 +197,24 @@ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, "form-data": { "version": "1.0.0-rc3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.0-rc3.tgz", - "integrity": "sha1-01vGLn+8KTeuePlIqqDTjZBgdXc=" + "integrity": "sha1-01vGLn+8KTeuePlIqqDTjZBgdXc=", + "requires": { + "async": "1.5.2", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } }, "formidable": { "version": "1.0.17", @@ -136,12 +224,19 @@ "gzip-js": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/gzip-js/-/gzip-js-0.3.2.tgz", - "integrity": "sha1-IxF+/usozzhSSN7/Df+tiUg22Ws=" + "integrity": "sha1-IxF+/usozzhSSN7/Df+tiUg22Ws=", + "requires": { + "crc32": "0.2.2", + "deflate-js": "0.2.3" + } }, "hash-base": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", - "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=" + "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "requires": { + "inherits": "2.0.3" + } }, "hash_file": { "version": "0.1.1", @@ -161,13 +256,23 @@ "iocane": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/iocane/-/iocane-0.7.0.tgz", - "integrity": "sha1-+DLmGw85ddFO96edt5E0sLAsTKc=" + "integrity": "sha1-+DLmGw85ddFO96edt5E0sLAsTKc=", + "requires": { + "debug": "2.3.3", + "hash_file": "0.1.1", + "pbkdf2": "3.0.12" + } }, "is-dir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-dir/-/is-dir-1.0.0.tgz", "integrity": "sha1-QdN/SV/MrMBaR3jWboMCTCkro/8=" }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -182,6 +287,13 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/kdbxweb/-/kdbxweb-1.0.1.tgz", "integrity": "sha1-/i19fXoP4hQ90yainKG/bGLuT0I=", + "requires": { + "jssha": "git://github.com/keeweb/jssha.git#1ffad73a7e5ab7158596c090a524f29ca2aee13d", + "pako": "git://github.com/keeweb/pako.git#653c0b00d8941c89d09ed4546d2179001ec44efc", + "promise-polyfill": "git://github.com/keeweb/promise-polyfill.git#1a787918fe1a118b53ccf93fcb1e47da51f4950b", + "text-encoding": "git://github.com/keeweb/text-encoding.git#4dfb7cb0954c222852092f8b06ae4f6b4f60bfbb", + "xmldom": "git://github.com/keeweb/xmldom.git#ec8f61f723e2f403adaf7a1bbf55ced4ff1ea0c6" + }, "dependencies": { "jssha": { "version": "git://github.com/keeweb/jssha.git#1ffad73a7e5ab7158596c090a524f29ca2aee13d" @@ -223,7 +335,23 @@ "mime-types": { "version": "2.1.15", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", - "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=" + "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", + "requires": { + "mime-db": "1.27.0" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } }, "ms": { "version": "0.7.2", @@ -233,18 +361,58 @@ "node-fetch": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.6.3.tgz", - "integrity": "sha1-3CNO3WSJmC1Y6PDbT2lQKavNjAQ=" + "integrity": "sha1-3CNO3WSJmC1Y6PDbT2lQKavNjAQ=", + "requires": { + "encoding": "0.1.12", + "is-stream": "1.1.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "2.0.1" + } }, "pbkdf2": { "version": "3.0.12", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.12.tgz", - "integrity": "sha1-vjZ4XFBn6kjYBv+SMojF91C2uKI=" + "integrity": "sha1-vjZ4XFBn6kjYBv+SMojF91C2uKI=", + "requires": { + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.0", + "sha.js": "2.4.8" + } }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-up": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-1.0.0.tgz", + "integrity": "sha1-Pgj7RhUlxEIWJKM7n35tCvWwWiY=", + "requires": { + "find-up": "1.1.2" + } + }, "qs": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz", @@ -253,7 +421,13 @@ "readable-stream": { "version": "1.0.27-1", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.27-1.tgz", - "integrity": "sha1-a2eYPCA1fO/QfwFlABoW1xDZEHg=" + "integrity": "sha1-a2eYPCA1fO/QfwFlABoW1xDZEHg=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "reduce-component": { "version": "1.0.1", @@ -263,7 +437,11 @@ "ripemd160": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", - "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=" + "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "requires": { + "hash-base": "2.0.2", + "inherits": "2.0.3" + } }, "safe-buffer": { "version": "5.1.0", @@ -278,7 +456,10 @@ "sha.js": { "version": "2.4.8", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.8.tgz", - "integrity": "sha1-NwaMLEdra69ALRSknGf1l5IfY08=" + "integrity": "sha1-NwaMLEdra69ALRSknGf1l5IfY08=", + "requires": { + "inherits": "2.0.3" + } }, "streamifier": { "version": "0.1.1", @@ -298,7 +479,20 @@ "superagent": { "version": "1.8.5", "resolved": "https://registry.npmjs.org/superagent/-/superagent-1.8.5.tgz", - "integrity": "sha1-HA3cOvMOgOuE68BcshItqP6UC1U=" + "integrity": "sha1-HA3cOvMOgOuE68BcshItqP6UC1U=", + "requires": { + "component-emitter": "1.2.1", + "cookiejar": "2.0.6", + "debug": "2.3.3", + "extend": "3.0.0", + "form-data": "1.0.0-rc3", + "formidable": "1.0.17", + "methods": "1.1.2", + "mime": "1.3.4", + "qs": "2.3.3", + "readable-stream": "1.0.27-1", + "reduce-component": "1.0.1" + } }, "uuid": { "version": "2.0.3", @@ -308,27 +502,50 @@ "verror": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.9.0.tgz", - "integrity": "sha1-EHqKLRTDNYb8S7gwBXzS0Zripu4=" + "integrity": "sha1-EHqKLRTDNYb8S7gwBXzS0Zripu4=", + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + } }, "webdav": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/webdav/-/webdav-0.5.0.tgz", - "integrity": "sha1-7NasgPq0OyYXLGkDI0kSoHAYxUs=" + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/webdav/-/webdav-0.10.0.tgz", + "integrity": "sha1-3n9pNRQB7KsjufUHwjXhpHyZ9nc=", + "requires": { + "deepmerge": "1.3.2", + "node-fetch": "1.6.3", + "xml2js": "0.4.17" + } }, "webdav-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/webdav-fs/-/webdav-fs-0.4.1.tgz", - "integrity": "sha1-IYzaOXj7itbR7YR09bQDa/EBnmw=" + "integrity": "sha1-IYzaOXj7itbR7YR09bQDa/EBnmw=", + "requires": { + "brototype": "0.0.5", + "node-fetch": "1.6.3", + "streamifier": "0.1.1", + "xml2js": "0.4.17" + } }, "xml2js": { "version": "0.4.17", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.17.tgz", - "integrity": "sha1-F76T6q4/O3eTWceVtBlwWogX6Gg=" + "integrity": "sha1-F76T6q4/O3eTWceVtBlwWogX6Gg=", + "requires": { + "sax": "1.2.2", + "xmlbuilder": "4.2.1" + } }, "xmlbuilder": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz", - "integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=" + "integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=", + "requires": { + "lodash": "4.17.4" + } }, "zxcvbn": { "version": "4.4.2", diff --git a/app/package.json b/app/package.json index 0dbb7da0..e3754cec 100644 --- a/app/package.json +++ b/app/package.json @@ -1,6 +1,6 @@ { "name": "buttercup", - "version": "0.18.0", + "version": "0.19.0", "productName": "Buttercup", "main": "./dist/app.js", "description": "Free and Open Source password vault", @@ -9,6 +9,7 @@ "author": "Buttercup ", "dependencies": { "buttercup-importer": "~0.9.1", + "conf": "~1.0.0", "dropbox": "^2.3.0", "webdav": "~0.10.0", "zxcvbn": "^4.4.2" diff --git a/config/webpack.config.base.js b/config/webpack.config.base.js index 031fecb2..4b3d2c7f 100644 --- a/config/webpack.config.base.js +++ b/config/webpack.config.base.js @@ -33,6 +33,6 @@ module.exports = { plugins: [ ], externals: [ - 'buttercup-importer', 'zxcvbn', 'dropbox', 'webdav', 'electron-config', 'conf' + 'buttercup-importer', 'zxcvbn', 'dropbox', 'webdav', 'conf' ] }; diff --git a/package.json b/package.json index aba10012..55c63ea4 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "buttercup", "productName": "Buttercup", - "version": "0.18.0", + "version": "0.19.0", "description": "Free and Open Source password vault", "main": "app/dist/app.js", "scripts": { diff --git a/src/main/app.js b/src/main/app.js index 4e4ee8e8..1676c515 100644 --- a/src/main/app.js +++ b/src/main/app.js @@ -82,11 +82,20 @@ app.on('ready', async () => { // Create Store const state = await storage.get('state'); + + // Temporary bridge to new format + // @TODO: remove this! + if (state.archives && !Array.isArray(state.archives)) { + log.info('Updating old state format to new.'); + state.archives = []; + state.settingsByArchiveId = {}; + } + const store = configureStore(state, 'main'); // Persist Store to Disk store.subscribe(throttle(() => { - storage.set('state', store.getState()); + // storage.set('state', store.getState()); }, 100)); // Setup Windows & IPC Actions From 339ba4da9182cd63eaa390ef0c61be0aafb10f4f Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Mon, 21 Aug 2017 22:31:34 +0300 Subject: [PATCH 32/39] Show error message for deleted archives --- src/shared/buttercup/archive.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/shared/buttercup/archive.js b/src/shared/buttercup/archive.js index ea283fc7..89d3be4a 100644 --- a/src/shared/buttercup/archive.js +++ b/src/shared/buttercup/archive.js @@ -32,7 +32,15 @@ export function removeArchiveFromArchiveManager(archiveId) { export function unlockArchiveInArchiveManager(archiveId, masterPassword) { const manager = getSharedArchiveManager(); - return manager.unlock(archiveId, masterPassword).then(() => archiveId); + return manager + .unlock(archiveId, masterPassword) + .then(() => archiveId) + .catch(err => { + if (err.message && err.message.includes('ENOENT')) { + throw new Error('Archive source was not found.'); + } + throw err; + }); } export function getSharedArchiveManager() { From 72d10c9bd617b79c0de5ab50f66a7dbf30d8d234 Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Mon, 21 Aug 2017 22:36:38 +0300 Subject: [PATCH 33/39] Save state --- src/main/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/app.js b/src/main/app.js index 1676c515..148d0dd5 100644 --- a/src/main/app.js +++ b/src/main/app.js @@ -95,7 +95,7 @@ app.on('ready', async () => { // Persist Store to Disk store.subscribe(throttle(() => { - // storage.set('state', store.getState()); + storage.set('state', store.getState()); }, 100)); // Setup Windows & IPC Actions From fdc943dba9bc81991abafe287c597e4af9ac6e88 Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Mon, 21 Aug 2017 22:46:52 +0300 Subject: [PATCH 34/39] Condensed sidebar = true --- app/package-lock.json | 2 +- src/shared/reducers/settings.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/package-lock.json b/app/package-lock.json index 6b3ab3f6..cb2f26e6 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -1,6 +1,6 @@ { "name": "buttercup", - "version": "0.18.0", + "version": "0.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/src/shared/reducers/settings.js b/src/shared/reducers/settings.js index 5a57def6..958a43e4 100644 --- a/src/shared/reducers/settings.js +++ b/src/shared/reducers/settings.js @@ -25,7 +25,7 @@ export function settingsByArchiveId(state = {}, action) { const DEFAULT_SETTINGS = { columnSizes: { tree: 230, entries: 230 }, - condencedSidebar: false + condencedSidebar: true }; export function settings(state = DEFAULT_SETTINGS, action) { From 0fc17eb2c8c3d74881a88baedb78b5aa5e14397e Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Mon, 21 Aug 2017 23:12:44 +0300 Subject: [PATCH 35/39] Update dependencies --- package-lock.json | 1404 +++++++++++++++++++++++++++++++++------------ package.json | 1 - 2 files changed, 1047 insertions(+), 358 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3027eb6e..aeafb5b3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "buttercup", - "version": "0.18.2", + "version": "0.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -10,17 +10,6 @@ "integrity": "sha1-nK+xca+CMpSQNTtIFvAzR6oVCjA=", "dev": true }, - "7zip-bin": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-2.1.0.tgz", - "integrity": "sha512-jgBTCcJ0gQedE9o8Jw+H/Gyq//EnQxmVpha7CdprIwzRSC81Uj37inHvPzv6jaZgZwkCcfho52rAaIFBrdbO7w==", - "dev": true, - "requires": { - "7zip-bin-linux": "1.1.0", - "7zip-bin-mac": "1.0.1", - "7zip-bin-win": "2.1.0" - } - }, "7zip-bin-linux": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/7zip-bin-linux/-/7zip-bin-linux-1.1.0.tgz", @@ -562,16 +551,6 @@ "integrity": "sha1-UidltQw1EEkOUtfc/ghe+bqWlY8=", "dev": true }, - "asar-integrity": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/asar-integrity/-/asar-integrity-0.1.1.tgz", - "integrity": "sha512-Nt9p2sWWNFkgqaioFCjsjTQTBAu0YFy2UyW0cWqNr1UBs9vV0j1kG0GI3r1lEJ6XxV4jiz1/AwCJnCDj5DLJUg==", - "dev": true, - "requires": { - "bluebird-lst": "1.0.2", - "fs-extra-p": "4.3.0" - } - }, "asn1": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", @@ -616,6 +595,12 @@ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", "dev": true }, + "async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "dev": true + }, "async-foreach": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", @@ -2707,12 +2692,12 @@ } }, "buttercup-web": { - "version": "0.32.0", - "resolved": "https://registry.npmjs.org/buttercup-web/-/buttercup-web-0.32.0.tgz", - "integrity": "sha1-5tlmB3fIvc1QiUAs2HR/T/TUA3I=", + "version": "0.32.2", + "resolved": "https://registry.npmjs.org/buttercup-web/-/buttercup-web-0.32.2.tgz", + "integrity": "sha1-E1nw8poPlRyo2o/lkBUU0VGk7pg=", "dev": true, "requires": { - "buttercup": "0.41.0" + "buttercup": "0.41.2" }, "dependencies": { "assert-plus": { @@ -2722,9 +2707,9 @@ "dev": true }, "buttercup": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/buttercup/-/buttercup-0.41.0.tgz", - "integrity": "sha1-KeNwUogtjyXA0XJ/7CI/RNI6nNA=", + "version": "0.41.2", + "resolved": "https://registry.npmjs.org/buttercup/-/buttercup-0.41.2.tgz", + "integrity": "sha1-j8BfVwGC/g9Qohx1mxsFEcgrIYY=", "dev": true, "requires": { "clone": "1.0.2", @@ -2780,26 +2765,6 @@ "core-util-is": "1.0.2", "extsprintf": "1.3.0" } - }, - "webdav": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/webdav/-/webdav-0.10.0.tgz", - "integrity": "sha1-3n9pNRQB7KsjufUHwjXhpHyZ9nc=", - "dev": true, - "requires": { - "deepmerge": "1.3.2", - "node-fetch": "1.6.3", - "xml2js": "0.4.17" - } - }, - "webdav-fs": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/webdav-fs/-/webdav-fs-1.3.0.tgz", - "integrity": "sha1-2xROSLIqWzGDCL4fNExK7Xnx+0w=", - "dev": true, - "requires": { - "webdav": "0.10.0" - } } } }, @@ -3562,6 +3527,47 @@ } } }, + "conf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/conf/-/conf-1.1.2.tgz", + "integrity": "sha512-0ZvmcIhd7IGdB2Kx4Uz9/dRibqLb2c9q2uaMQJmq54m1qSZfULL0RzU+APThtAxiXM/iNbZ346EeX7BtukJZOg==", + "dev": true, + "requires": { + "dot-prop": "4.2.0", + "env-paths": "1.0.0", + "make-dir": "1.0.0", + "pkg-up": "2.0.0" + }, + "dependencies": { + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "dev": true, + "requires": { + "is-obj": "1.0.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "2.0.0" + } + }, + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "dev": true, + "requires": { + "find-up": "2.1.0" + } + } + } + }, "configstore": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/configstore/-/configstore-2.1.0.tgz", @@ -3996,16 +4002,6 @@ "which": "1.2.14" } }, - "cross-spawn-async": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz", - "integrity": "sha1-hF/wwINKPe2dFg2sptOQkGuyiMw=", - "dev": true, - "requires": { - "lru-cache": "4.1.0", - "which": "1.2.14" - } - }, "cross-unzip": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/cross-unzip/-/cross-unzip-0.0.2.tgz", @@ -4574,6 +4570,18 @@ "is-obj": "1.0.1" } }, + "dotenv": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz", + "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=", + "dev": true + }, + "dotenv-expand": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.0.1.tgz", + "integrity": "sha1-aP3cFWGBTgoQlkERBX/xOM7X16g=", + "dev": true + }, "dropbox": { "version": "2.5.4", "resolved": "https://registry.npmjs.org/dropbox/-/dropbox-2.5.4.tgz", @@ -4660,6 +4668,12 @@ } } }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, "eastasianwidth": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.1.1.tgz", @@ -4689,86 +4703,87 @@ "dev": true }, "electron": { - "version": "1.6.10", - "resolved": "https://registry.npmjs.org/electron/-/electron-1.6.10.tgz", - "integrity": "sha1-Twuc1ZbjVwC1cSj5iMwdLOZ+VnE=", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/electron/-/electron-1.7.5.tgz", + "integrity": "sha1-BloxAr+LhxAt9QxQmF/v5sVpBFs=", "dev": true, "requires": { - "@types/node": "7.0.29", + "@types/node": "7.0.42", "electron-download": "3.3.0", "extract-zip": "1.6.5" }, "dependencies": { "@types/node": { - "version": "7.0.29", - "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.29.tgz", - "integrity": "sha512-+8JrLZny/uR+d/jLK9eaV63buRM7X/gNzQk57q76NS4KNKLSKOmxJYFIlwuP2zDvA7wqZj05POPhSd9Z1hYQpQ==", + "version": "7.0.42", + "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.42.tgz", + "integrity": "sha512-cF/2SHIITu6Xen1DqBobqsx63Bdui37ZnID90G/vkuF1T7orBijcgyYcgkRpChCRwoRaf4LV/jXjrfVtFL/Y8Q==", "dev": true } } }, "electron-builder": { - "version": "19.4.2", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-19.4.2.tgz", - "integrity": "sha512-2QOYo9U/vCZ7ueNjdGLUeqnc8el1+S0Q8IWvYxVIWXIASk0V+9SIuV8GrtU0rxdOhKk/c/KKe2iuL0A6XvNMMg==", + "version": "19.24.1", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-19.24.1.tgz", + "integrity": "sha512-3ieCWar8nN08kug107NmRHwR7pmge5jbZMYfps0wcYIWmASVFgcJtLpdegFA4cbxt1Ak71h/+Zk3QJvGtfupRQ==", "dev": true, "requires": { - "7zip-bin": "2.1.0", - "ajv": "5.2.0", + "7zip-bin": "2.2.3", + "ajv": "5.2.2", "ajv-keywords": "2.1.0", - "asar-integrity": "0.1.1", - "bluebird-lst": "1.0.2", - "chalk": "1.1.3", + "asar-integrity": "0.1.2", + "bluebird-lst": "1.0.3", + "chalk": "2.1.0", "chromium-pickle-js": "0.2.0", "cuint": "0.2.2", - "debug": "2.6.8", - "electron-builder-http": "19.4.2", - "electron-builder-util": "19.4.2", + "debug": "3.0.0", + "dotenv": "4.0.0", + "dotenv-expand": "4.0.1", + "ejs": "2.5.7", + "electron-builder-http": "19.23.0", + "electron-builder-util": "19.24.0", "electron-download-tf": "4.3.1", - "electron-osx-sign": "0.4.6", - "electron-publish": "19.4.2", - "fs-extra-p": "4.3.0", - "hosted-git-info": "2.4.2", + "electron-osx-sign": "0.4.7", + "electron-publish": "19.24.0", + "fs-extra-p": "4.4.0", + "hosted-git-info": "2.5.0", "is-ci": "1.0.10", "isbinaryfile": "3.0.2", - "js-yaml": "3.8.4", - "json5": "0.5.1", + "js-yaml": "3.9.1", + "lazy-val": "1.0.2", "minimatch": "3.0.4", - "node-forge": "0.7.1", - "normalize-package-data": "2.3.8", + "normalize-package-data": "2.4.0", "parse-color": "1.0.0", "plist": "2.1.0", + "read-config-file": "1.0.5", "sanitize-filename": "1.6.1", - "semver": "5.3.0", + "semver": "5.4.1", + "temp-file": "2.0.2", "update-notifier": "2.2.0", "uuid-1345": "0.99.6", "yargs": "8.0.2" }, "dependencies": { + "7zip-bin": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-2.2.3.tgz", + "integrity": "sha512-S2f7InK2SwceVFly0tx/+1xakOWhSZQeY5hOXFl/sZ9orfRE4i4Z9edsWonT5lyYTowBN73RwBbLqZaVrtSEuw==", + "dev": true, + "requires": { + "7zip-bin-linux": "1.1.0", + "7zip-bin-mac": "1.0.1", + "7zip-bin-win": "2.1.0" + } + }, "ajv": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.0.tgz", - "integrity": "sha1-wXNQJMXaLvdcwZBxMHPUTwmL9IY=", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.2.tgz", + "integrity": "sha1-R8aNaehvXZUxA7AHSpQw3GPaXjk=", "dev": true, "requires": { "co": "4.6.0", - "fast-deep-equal": "0.1.0", + "fast-deep-equal": "1.0.0", "json-schema-traverse": "0.3.1", "json-stable-stringify": "1.0.1" - }, - "dependencies": { - "fast-deep-equal": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-0.1.0.tgz", - "integrity": "sha1-XG9FmaumszPuM0Li7ZeGcvEAH40=", - "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 - } } }, "ansi-align": { @@ -4777,33 +4792,56 @@ "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", "dev": true, "requires": { - "string-width": "2.0.0" + "string-width": "2.1.1" + } + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + }, + "asar-integrity": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/asar-integrity/-/asar-integrity-0.1.2.tgz", + "integrity": "sha512-I5ZfmdG03WnC141nVuyHvbNO55kSS+uxEbC11p54YFXE1fBFlC5XV0KHGjCX3y1+KSnr53JHJf22ev4qi4LHXQ==", + "dev": true, + "requires": { + "bluebird-lst": "1.0.3", + "fs-extra-p": "4.4.0" + } + }, + "bluebird-lst": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.3.tgz", + "integrity": "sha512-NKk/GQk5fXcLKt4USI1htGuMwXHhKLa2a32FCNBFAOcpL0k8U5yFpusr3+NKc6RjytL8umW5pSQmtJCWWhiLrQ==", + "dev": true, + "requires": { + "bluebird": "3.5.0" } }, "boxen": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.1.0.tgz", - "integrity": "sha1-sbad1SIwXoB6md7ud329blFnsQI=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.2.1.tgz", + "integrity": "sha1-DxHn/jRO25OXl3/BPt5/ZNlWSB0=", "dev": true, "requires": { "ansi-align": "2.0.0", "camelcase": "4.1.0", - "chalk": "1.1.3", + "chalk": "2.1.0", "cli-boxes": "1.0.0", - "string-width": "2.0.0", - "term-size": "0.1.1", + "string-width": "2.1.1", + "term-size": "1.2.0", "widest-line": "1.0.0" - }, - "dependencies": { - "term-size": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-0.1.1.tgz", - "integrity": "sha1-hzYLljlsq1dgljcUzaDQy+7K2co=", - "dev": true, - "requires": { - "execa": "0.4.0" - } - } } }, "camelcase": { @@ -4812,79 +4850,54 @@ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true }, + "chalk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", + "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.2.1" + } + }, "configstore": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.0.tgz", - "integrity": "sha1-Rd+QcHPibfoc9LLVL1tgVF6qEdE=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.1.tgz", + "integrity": "sha512-5oNkD/L++l0O6xGXxb1EWS7SivtjfGQlRyxJsYgE0Z495/L81e2h4/d3r969hoPXuFItzNOKMtsXgYG4c7dYvw==", "dev": true, "requires": { - "dot-prop": "4.1.1", + "dot-prop": "4.2.0", "graceful-fs": "4.1.11", "make-dir": "1.0.0", "unique-string": "1.0.0", - "write-file-atomic": "2.1.0", + "write-file-atomic": "2.3.0", "xdg-basedir": "3.0.0" - }, - "dependencies": { - "make-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.0.0.tgz", - "integrity": "sha1-l6ARdR6R3YfPre9Ygy67BJNt6Xg=", - "dev": true, - "requires": { - "pify": "2.3.0" - } - }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "dev": true, - "requires": { - "crypto-random-string": "1.0.0" - } - } } }, - "dot-prop": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.1.1.tgz", - "integrity": "sha1-qEk/C3te7sglJbXHWH+n3nyoWcE=", + "debug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.0.0.tgz", + "integrity": "sha512-XQkHxxqbsCb+zFurCHbotmJZl5jXsxvkRt952pT6Hpo7LmjWAJF12d9/kqBg5owjbLADbBDli1olravjSiSg8g==", "dev": true, "requires": { - "is-obj": "1.0.1" + "ms": "2.0.0" } }, - "electron-builder-http": { - "version": "19.4.2", - "resolved": "https://registry.npmjs.org/electron-builder-http/-/electron-builder-http-19.4.2.tgz", - "integrity": "sha512-9t0W0ynQT3Aul+XAzwg16bfBzJ8GS6aQ9oPVMR4IiBu0Z7DTpWeorrtlrhr6XJzs0c0mkK8/YL18Pjn9696iNg==", + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", "dev": true, "requires": { - "debug": "2.6.8", - "fs-extra-p": "4.3.0" + "is-obj": "1.0.1" } }, - "electron-builder-util": { - "version": "19.4.2", - "resolved": "https://registry.npmjs.org/electron-builder-util/-/electron-builder-util-19.4.2.tgz", - "integrity": "sha512-khgF/4VdsdW4sY2nZLjGgeAqVgueW3+s5OFSFY7EuU0LqZ81ZZz7hR0MvcLf1xXxbPswkHFJWASMVseWXGwmDg==", - "dev": true, - "requires": { - "7zip-bin": "2.1.0", - "bluebird-lst": "1.0.2", - "chalk": "1.1.3", - "debug": "2.6.8", - "electron-builder-http": "19.4.2", - "fcopy-pre-bundled": "0.3.4", - "fs-extra-p": "4.3.0", - "ini": "1.3.4", - "is-ci": "1.0.10", - "node-emoji": "1.5.1", - "source-map-support": "0.4.15", - "stat-mode": "0.2.2", - "tunnel-agent": "0.6.0" - } + "ejs": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.7.tgz", + "integrity": "sha1-zIcsFoiArjxxiXYv1f/ACJbJUYo=", + "dev": true }, "electron-download-tf": { "version": "4.3.1", @@ -4899,51 +4912,36 @@ "nugget": "2.0.1", "path-exists": "3.0.0", "rc": "1.2.1", - "semver": "5.3.0", + "semver": "5.4.1", "sumchecker": "2.0.2" }, "dependencies": { - "env-paths": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz", - "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=", - "dev": true + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "3.0.1", + "universalify": "0.1.0" + } } } }, - "electron-osx-sign": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.4.6.tgz", - "integrity": "sha1-I5ji18q1wdjD7quxzUkDdlKOw5o=", - "dev": true, - "requires": { - "bluebird": "3.5.0", - "compare-version": "0.1.2", - "debug": "2.6.8", - "isbinaryfile": "3.0.2", - "minimist": "1.2.0", - "plist": "2.1.0", - "tempfile": "1.1.1" - } - }, - "electron-publish": { - "version": "19.4.2", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-19.4.2.tgz", - "integrity": "sha512-WSJHY+F4IHq4HtWftz0uPhpFX7DIRzgjtrtd1VwMctckVg3H3SzxEgfGUAE8xolKHsErGXqBubHDHd+66szSZg==", - "dev": true, - "requires": { - "bluebird-lst": "1.0.2", - "chalk": "1.1.3", - "electron-builder-http": "19.4.2", - "electron-builder-util": "19.4.2", - "fs-extra-p": "4.3.0", - "mime": "1.3.6" - } - }, "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", "dev": true }, "find-up": { @@ -4956,16 +4954,26 @@ } }, "fs-extra": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.1.tgz", + "integrity": "sha1-f8DGyJV/mD9X8waiTlud3Y0N2IA=", "dev": true, "requires": { "graceful-fs": "4.1.11", - "jsonfile": "3.0.0", + "jsonfile": "3.0.1", "universalify": "0.1.0" } }, + "fs-extra-p": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/fs-extra-p/-/fs-extra-p-4.4.0.tgz", + "integrity": "sha512-SDAF7Ma08/ERKmbNHBvoaxxox33/xiomZGhJlxoSaGYGn7jHCwLTFRnJ82wxrylZa+h0TtkBrrtXzRO79p3AHQ==", + "dev": true, + "requires": { + "bluebird-lst": "1.0.3", + "fs-extra": "4.0.1" + } + }, "got": { "version": "6.7.1", "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", @@ -4983,22 +4991,20 @@ "timed-out": "4.0.1", "unzip-response": "2.0.1", "url-parse-lax": "1.0.0" - }, - "dependencies": { - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - } } }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "hosted-git-info": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "dev": true + }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", @@ -5006,19 +5012,19 @@ "dev": true }, "js-yaml": { - "version": "3.8.4", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.8.4.tgz", - "integrity": "sha1-UgtFZPhlc7qWZir4Woyvp7S1pvY=", + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.9.1.tgz", + "integrity": "sha512-CbcG379L1e+mWBnLvHWWeLs8GyV/EMw862uLI3c+GxVyDHWZcjZinwuBd3iW2pgxgIlksW/1vNJa4to+RvDOww==", "dev": true, "requires": { "argparse": "1.0.9", - "esprima": "3.1.3" + "esprima": "4.0.0" } }, "jsonfile": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.0.tgz", - "integrity": "sha1-kufHRE5f/V+jLmqa6LhQNN+DR9A=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", "dev": true, "requires": { "graceful-fs": "4.1.11" @@ -5045,12 +5051,24 @@ "strip-bom": "3.0.0" } }, - "mime": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz", - "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=", + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "2.5.0", + "is-builtin-module": "1.0.0", + "semver": "5.4.1", + "validate-npm-package-license": "3.0.1" + } + }, "package-json": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", @@ -5060,7 +5078,7 @@ "got": "6.7.1", "registry-auth-token": "3.3.1", "registry-url": "3.1.0", - "semver": "5.3.0" + "semver": "5.4.1" } }, "path-exists": { @@ -5085,7 +5103,7 @@ "dev": true, "requires": { "load-json-file": "2.0.0", - "normalize-package-data": "2.3.8", + "normalize-package-data": "2.4.0", "path-type": "2.0.0" } }, @@ -5099,14 +5117,29 @@ "read-pkg": "2.0.0" } }, + "semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "dev": true + }, "string-width": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.0.0.tgz", - "integrity": "sha1-Y1xUNsxypuDDh87KJ41OLuxSaH4=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "3.0.1" + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" } }, "strip-bom": { @@ -5122,6 +5155,26 @@ "dev": true, "requires": { "debug": "2.6.8" + }, + "dependencies": { + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "supports-color": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", + "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", + "dev": true, + "requires": { + "has-flag": "2.0.0" } }, "timed-out": { @@ -5142,9 +5195,9 @@ "integrity": "sha1-G1g3z5DAc22IYncytmHBOPht5y8=", "dev": true, "requires": { - "boxen": "1.1.0", + "boxen": "1.2.1", "chalk": "1.1.3", - "configstore": "3.1.0", + "configstore": "3.1.1", "import-lazy": "2.1.0", "is-npm": "1.0.0", "latest-version": "3.1.0", @@ -5152,23 +5205,57 @@ "xdg-basedir": "3.0.0" }, "dependencies": { - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true } } }, "write-file-atomic": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.1.0.tgz", - "integrity": "sha512-0TZ20a+xcIl4u0+Mj5xDH2yOWdmQiXlKf9Hm+TgDXjTMsEYb+gDrmb8e8UNAzMCitX8NBqG4Z/FUQIyzv/R1JQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", + "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", "dev": true, "requires": { "graceful-fs": "4.1.11", "imurmurhash": "0.1.4", - "slide": "1.1.6" + "signal-exit": "3.0.2" } }, "xdg-basedir": { @@ -5192,7 +5279,7 @@ "require-directory": "2.1.1", "require-main-filename": "1.0.1", "set-blocking": "2.0.0", - "string-width": "2.0.0", + "string-width": "2.1.1", "which-module": "2.0.0", "y18n": "3.2.1", "yargs-parser": "7.0.0" @@ -5200,6 +5287,223 @@ } } }, + "electron-builder-http": { + "version": "19.23.0", + "resolved": "https://registry.npmjs.org/electron-builder-http/-/electron-builder-http-19.23.0.tgz", + "integrity": "sha512-cZ6+KR0ciSzlh10Jkwy2jH+sUfxX3dItu4bLciGIU9KW0oDTkFh1tzJMPUZzszyunZy41Zga+5A7k3F5TiQSgQ==", + "dev": true, + "requires": { + "bluebird-lst": "1.0.3", + "debug": "3.0.0", + "fs-extra-p": "4.4.0" + }, + "dependencies": { + "bluebird-lst": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.3.tgz", + "integrity": "sha512-NKk/GQk5fXcLKt4USI1htGuMwXHhKLa2a32FCNBFAOcpL0k8U5yFpusr3+NKc6RjytL8umW5pSQmtJCWWhiLrQ==", + "dev": true, + "requires": { + "bluebird": "3.5.0" + } + }, + "debug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.0.0.tgz", + "integrity": "sha512-XQkHxxqbsCb+zFurCHbotmJZl5jXsxvkRt952pT6Hpo7LmjWAJF12d9/kqBg5owjbLADbBDli1olravjSiSg8g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "fs-extra": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.1.tgz", + "integrity": "sha1-f8DGyJV/mD9X8waiTlud3Y0N2IA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "3.0.1", + "universalify": "0.1.0" + } + }, + "fs-extra-p": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/fs-extra-p/-/fs-extra-p-4.4.0.tgz", + "integrity": "sha512-SDAF7Ma08/ERKmbNHBvoaxxox33/xiomZGhJlxoSaGYGn7jHCwLTFRnJ82wxrylZa+h0TtkBrrtXzRO79p3AHQ==", + "dev": true, + "requires": { + "bluebird-lst": "1.0.3", + "fs-extra": "4.0.1" + } + }, + "jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "electron-builder-util": { + "version": "19.24.0", + "resolved": "https://registry.npmjs.org/electron-builder-util/-/electron-builder-util-19.24.0.tgz", + "integrity": "sha512-DbdsDz55383/rp5UJmpKYTIhmw0F84EZbzwiM4tlorTS/9GYFdLBs7P12ORtxy1d8ajpDxtMD/0f/Hsn25w1sg==", + "dev": true, + "requires": { + "7zip-bin": "2.2.3", + "bluebird-lst": "1.0.3", + "chalk": "2.1.0", + "debug": "3.0.0", + "electron-builder-http": "19.23.0", + "fcopy-pre-bundled": "0.3.4", + "fs-extra-p": "4.4.0", + "ini": "1.3.4", + "is-ci": "1.0.10", + "lazy-val": "1.0.2", + "node-emoji": "1.8.1", + "semver": "5.4.1", + "source-map-support": "0.4.16", + "stat-mode": "0.2.2", + "temp-file": "2.0.2", + "tunnel-agent": "0.6.0" + }, + "dependencies": { + "7zip-bin": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-2.2.3.tgz", + "integrity": "sha512-S2f7InK2SwceVFly0tx/+1xakOWhSZQeY5hOXFl/sZ9orfRE4i4Z9edsWonT5lyYTowBN73RwBbLqZaVrtSEuw==", + "dev": true, + "requires": { + "7zip-bin-linux": "1.1.0", + "7zip-bin-mac": "1.0.1", + "7zip-bin-win": "2.1.0" + } + }, + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + }, + "bluebird-lst": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.3.tgz", + "integrity": "sha512-NKk/GQk5fXcLKt4USI1htGuMwXHhKLa2a32FCNBFAOcpL0k8U5yFpusr3+NKc6RjytL8umW5pSQmtJCWWhiLrQ==", + "dev": true, + "requires": { + "bluebird": "3.5.0" + } + }, + "chalk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", + "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.2.1" + } + }, + "debug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.0.0.tgz", + "integrity": "sha512-XQkHxxqbsCb+zFurCHbotmJZl5jXsxvkRt952pT6Hpo7LmjWAJF12d9/kqBg5owjbLADbBDli1olravjSiSg8g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "fs-extra": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.1.tgz", + "integrity": "sha1-f8DGyJV/mD9X8waiTlud3Y0N2IA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "3.0.1", + "universalify": "0.1.0" + } + }, + "fs-extra-p": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/fs-extra-p/-/fs-extra-p-4.4.0.tgz", + "integrity": "sha512-SDAF7Ma08/ERKmbNHBvoaxxox33/xiomZGhJlxoSaGYGn7jHCwLTFRnJ82wxrylZa+h0TtkBrrtXzRO79p3AHQ==", + "dev": true, + "requires": { + "bluebird-lst": "1.0.3", + "fs-extra": "4.0.1" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node-emoji": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.8.1.tgz", + "integrity": "sha512-+ktMAh1Jwas+TnGodfCfjUbJKoANqPaJFN0z0iqh41eqD8dvguNzcitVSBSVK1pidz0AqGbLKcoVuVLRVZ/aVg==", + "dev": true, + "requires": { + "lodash.toarray": "4.4.0" + } + }, + "semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "dev": true + }, + "source-map-support": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.16.tgz", + "integrity": "sha512-A6vlydY7H/ljr4L2UOhDSajQdZQ6dMD7cLH0pzwcmwLyc9u8PNI4WGtnfDDzX7uzGL6c/T+ORL97Zlh+S4iOrg==", + "dev": true, + "requires": { + "source-map": "0.5.6" + } + }, + "supports-color": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", + "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, "electron-chromedriver": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/electron-chromedriver/-/electron-chromedriver-1.6.0.tgz", @@ -5221,14 +5525,13 @@ } }, "electron-devtools-installer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/electron-devtools-installer/-/electron-devtools-installer-2.0.1.tgz", - "integrity": "sha1-1S3LOkMKlbdx3AHY3rE/y9qo0Tw=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/electron-devtools-installer/-/electron-devtools-installer-2.2.0.tgz", + "integrity": "sha1-mBPmgRr81p3co8rlQW23Lqfs+2o=", "dev": true, "requires": { "7zip": "0.0.6", "cross-unzip": "0.0.2", - "request": "2.81.0", "rimraf": "2.6.1", "semver": "5.3.0" } @@ -5268,61 +5571,181 @@ "dev": true }, "electron-json-storage": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/electron-json-storage/-/electron-json-storage-3.0.5.tgz", - "integrity": "sha1-UXAtLCXcXHUsjUylBBLugKV2g6Q=", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/electron-json-storage/-/electron-json-storage-3.0.7.tgz", + "integrity": "sha1-ohN3VtBngv5WWUi40HJC0/ViTCc=", "dev": true, "requires": { - "async": "2.4.1", + "async": "2.5.0", "lodash": "4.17.4", "mkdirp": "0.5.1", - "rimraf": "2.6.1" + "rimraf": "2.6.1", + "rwlock": "5.0.0" }, "dependencies": { "async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.4.1.tgz", - "integrity": "sha1-YqVrJ5yYoR0JhwlqAcw+6463u9c=", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", + "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, + "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.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + } + } + }, + "electron-localshortcut": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/electron-localshortcut/-/electron-localshortcut-0.6.1.tgz", + "integrity": "sha1-xOJow4puQvQN5WGPyQbR7WCPEao=", + "dev": true + }, + "electron-log": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-2.2.6.tgz", + "integrity": "sha1-zPo+CbOfMhRoyQpkJwE4CjQHnxo=", + "dev": true + }, + "electron-osx-sign": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.4.7.tgz", + "integrity": "sha1-HXVkeoJ0jqzUi+pwYW7IP/rePuU=", + "dev": true, + "requires": { + "bluebird": "3.5.0", + "compare-version": "0.1.2", + "debug": "2.6.8", + "isbinaryfile": "3.0.2", + "minimist": "1.2.0", + "plist": "2.1.0" + } + }, + "electron-publish": { + "version": "19.24.0", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-19.24.0.tgz", + "integrity": "sha512-xxwKHen9OGVqC0QmWdmt2WKlmIdvdbLxvFRvpB0jICSjRDR06nzNJYNwqICN92vtQ1c5M4gE1SW09X+CV3rnjA==", + "dev": true, + "requires": { + "bluebird-lst": "1.0.3", + "chalk": "2.1.0", + "electron-builder-http": "19.23.0", + "electron-builder-util": "19.24.0", + "fs-extra-p": "4.4.0", + "mime": "1.3.6" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + }, + "bluebird-lst": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.3.tgz", + "integrity": "sha512-NKk/GQk5fXcLKt4USI1htGuMwXHhKLa2a32FCNBFAOcpL0k8U5yFpusr3+NKc6RjytL8umW5pSQmtJCWWhiLrQ==", + "dev": true, + "requires": { + "bluebird": "3.5.0" + } + }, + "chalk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", + "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.2.1" + } + }, + "fs-extra": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.1.tgz", + "integrity": "sha1-f8DGyJV/mD9X8waiTlud3Y0N2IA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "3.0.1", + "universalify": "0.1.0" + } + }, + "fs-extra-p": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/fs-extra-p/-/fs-extra-p-4.4.0.tgz", + "integrity": "sha512-SDAF7Ma08/ERKmbNHBvoaxxox33/xiomZGhJlxoSaGYGn7jHCwLTFRnJ82wxrylZa+h0TtkBrrtXzRO79p3AHQ==", + "dev": true, + "requires": { + "bluebird-lst": "1.0.3", + "fs-extra": "4.0.1" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", "dev": true, "requires": { - "lodash": "4.17.4" + "graceful-fs": "4.1.11" } }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "mime": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz", + "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=", "dev": true }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "supports-color": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", + "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", "dev": true, "requires": { - "minimist": "0.0.8" + "has-flag": "2.0.0" } } } }, - "electron-localshortcut": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/electron-localshortcut/-/electron-localshortcut-0.6.1.tgz", - "integrity": "sha1-xOJow4puQvQN5WGPyQbR7WCPEao=", - "dev": true - }, - "electron-log": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-2.2.6.tgz", - "integrity": "sha1-zPo+CbOfMhRoyQpkJwE4CjQHnxo=", - "dev": true - }, "electron-rpc": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/electron-rpc/-/electron-rpc-2.0.1.tgz", "integrity": "sha1-BJXx3PMllzIPhmEZDP8jBKB73cQ=", "dev": true }, + "electron-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/electron-store/-/electron-store-1.2.0.tgz", + "integrity": "sha1-lvcI8BiMdwiQfp+bfLp5C+1rmJ8=", + "dev": true, + "requires": { + "conf": "1.1.2" + } + }, "electron-to-chromium": { "version": "1.3.14", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.14.tgz", @@ -5330,12 +5753,13 @@ "dev": true }, "electron-unhandled": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/electron-unhandled/-/electron-unhandled-0.1.1.tgz", - "integrity": "sha1-/ybseBzMsTCyldQ79AbB68Bf4dU=", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/electron-unhandled/-/electron-unhandled-0.2.0.tgz", + "integrity": "sha1-5mvaW5PIQ5Knt9e34mfZDC0MGuM=", "dev": true, "requires": { - "clean-stack": "1.3.0" + "clean-stack": "1.3.0", + "ensure-error": "0.1.0" } }, "electron-updater": { @@ -5465,6 +5889,18 @@ "tapable": "0.2.6" } }, + "ensure-error": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ensure-error/-/ensure-error-0.1.0.tgz", + "integrity": "sha1-zz/TNlv3/YMkRzHL1PMABtmd8lk=", + "dev": true + }, + "env-paths": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz", + "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=", + "dev": true + }, "errno": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", @@ -5899,6 +6335,12 @@ } } }, + "eslint-plugin-jsx-control-statements": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-control-statements/-/eslint-plugin-jsx-control-statements-2.2.0.tgz", + "integrity": "sha512-c1a9pwrx93KBX2GJmkpMaGZW+yR2O4wRCpndnnXIb+mesH3DOrmDejIA+81kVvaMijheSDUAs74gdTZxJJh9tA==", + "dev": true + }, "eslint-plugin-node": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-4.2.2.tgz", @@ -6105,20 +6547,6 @@ "create-hash": "1.1.3" } }, - "execa": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.4.0.tgz", - "integrity": "sha1-TrZGejaglfq7KXD/nV4/t7zm68M=", - "dev": true, - "requires": { - "cross-spawn-async": "2.2.5", - "is-stream": "1.1.0", - "npm-run-path": "1.0.0", - "object-assign": "4.1.1", - "path-key": "1.0.0", - "strip-eof": "1.0.0" - } - }, "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -6291,6 +6719,12 @@ "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", "dev": true }, + "fast-deep-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", + "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", + "dev": true + }, "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", @@ -7770,6 +8204,12 @@ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", "dev": true }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, "getobject": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", @@ -8694,6 +9134,12 @@ "dev": true, "optional": true }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, "imul": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz", @@ -9342,6 +9788,12 @@ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", "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 + }, "json-stable-stringify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", @@ -9443,6 +9895,16 @@ "integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=", "dev": true }, + "jsx-control-statements": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/jsx-control-statements/-/jsx-control-statements-3.2.6.tgz", + "integrity": "sha512-FW+Yu0eYs/rXfVj9OsCATr0LE7rwFvwvIrlnE+esfCr4Smi+fIkHRH3sEPgoMeCbVcpuIjnAzzdvF1by0gbmKg==", + "dev": true, + "requires": { + "babel-core": "6.25.0", + "babel-plugin-syntax-jsx": "6.18.0" + } + }, "kdbxweb": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/kdbxweb/-/kdbxweb-1.0.1.tgz", @@ -12680,6 +13142,12 @@ "integrity": "sha1-va6+rTD42CQDnODOFJ1Nqge6H6w=", "dev": true }, + "lazy-val": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.2.tgz", + "integrity": "sha512-2BaSu6qVnicKdWQPysrffZVFAKcPcZQ/q2YyeSjAxWaJlvCvKSrkcvsSHlleeIfA//fW2goTcYDTy2cBLN7+PQ==", + "dev": true + }, "lazystream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", @@ -13047,6 +13515,12 @@ "lodash.debounce": "3.1.1" } }, + "lodash.toarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", + "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=", + "dev": true + }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -13125,6 +13599,15 @@ "nan": "2.6.2" } }, + "make-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.0.0.tgz", + "integrity": "sha1-l6ARdR6R3YfPre9Ygy67BJNt6Xg=", + "dev": true, + "requires": { + "pify": "2.3.0" + } + }, "makedeb": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/makedeb/-/makedeb-0.0.4.tgz", @@ -13173,6 +13656,12 @@ "escape-string-regexp": "1.0.5" } }, + "material-colors": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.5.tgz", + "integrity": "sha1-UpJZPmdUyxvMK5gDDk4Najr8nqE=", + "dev": true + }, "math-expression-evaluator": { "version": "1.2.17", "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", @@ -13518,15 +14007,6 @@ "inherits": "2.0.3" } }, - "node-emoji": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.5.1.tgz", - "integrity": "sha1-/ZGOQSdpv4xEgFEjgjOECyr/FqE=", - "dev": true, - "requires": { - "string.prototype.codepointat": "0.2.0" - } - }, "node-fetch": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.1.tgz", @@ -13537,12 +14017,6 @@ "is-stream": "1.1.0" } }, - "node-forge": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.1.tgz", - "integrity": "sha1-naYR6giYL0uUIGs760zJZl8gwwA=", - "dev": true - }, "node-gyp": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", @@ -13835,21 +14309,18 @@ "sort-keys": "1.1.2" } }, + "normalizr": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/normalizr/-/normalizr-3.2.3.tgz", + "integrity": "sha1-iHVcZN5BiwQPpq0TKbLeXDJQrEk=", + "dev": true + }, "npm-install-package": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/npm-install-package/-/npm-install-package-2.1.0.tgz", "integrity": "sha1-1+/jz816sAYUuJbqUxGdyaslkSU=", "dev": true }, - "npm-run-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-1.0.0.tgz", - "integrity": "sha1-9cMr9ZX+ga6Sfa7FLoL4sACsPI8=", - "dev": true, - "requires": { - "path-key": "1.0.0" - } - }, "npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", @@ -15729,12 +16200,6 @@ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", "dev": true }, - "path-key": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-1.0.0.tgz", - "integrity": "sha1-XVPVeAGWRsDWiADbThRua9wqx68=", - "dev": true - }, "path-parse": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", @@ -16791,6 +17256,18 @@ "object-assign": "4.1.1" } }, + "react-color": { + "version": "2.13.5", + "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.13.5.tgz", + "integrity": "sha512-YR6fH/lLa3/eR1c+OhfXEFdGq2yX812UqOrRY4iiEF/9znwekg4mbn8FoUVgxX2vob6PPRcv0wO85SbU3qtsGg==", + "dev": true, + "requires": { + "lodash": "4.17.4", + "material-colors": "1.2.5", + "reactcss": "1.2.2", + "tinycolor2": "1.4.1" + } + }, "react-custom-scrollbars": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/react-custom-scrollbars/-/react-custom-scrollbars-4.1.2.tgz", @@ -16896,6 +17373,15 @@ "prop-types": "15.5.10" } }, + "react-portal": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/react-portal/-/react-portal-3.1.0.tgz", + "integrity": "sha1-hlxE+3Kh2hBsZJIGk2VZzoke6Jk=", + "dev": true, + "requires": { + "prop-types": "15.5.10" + } + }, "react-proxy": { "version": "3.0.0-alpha.1", "resolved": "https://registry.npmjs.org/react-proxy/-/react-proxy-3.0.0-alpha.1.tgz", @@ -16979,6 +17465,15 @@ "prop-types": "15.5.10" } }, + "reactcss": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.2.tgz", + "integrity": "sha1-QbDvQ+AdVIgDV8NLEawVMSCTUO8=", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, "read-all-stream": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", @@ -17027,6 +17522,76 @@ } } }, + "read-config-file": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-1.0.5.tgz", + "integrity": "sha512-hI5Z0kO8tHI58DhK2DeBjf7wfKYaGlpxMZWU1KAwyYefm6IgHGfUeFYNlG4x4dDxBXLUiWGsmoWn9qUiQcUkmQ==", + "dev": true, + "requires": { + "bluebird-lst": "1.0.3", + "fs-extra-p": "4.4.0", + "js-yaml": "3.9.1", + "json5": "0.5.1", + "lazy-val": "1.0.2" + }, + "dependencies": { + "bluebird-lst": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.3.tgz", + "integrity": "sha512-NKk/GQk5fXcLKt4USI1htGuMwXHhKLa2a32FCNBFAOcpL0k8U5yFpusr3+NKc6RjytL8umW5pSQmtJCWWhiLrQ==", + "dev": true, + "requires": { + "bluebird": "3.5.0" + } + }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "dev": true + }, + "fs-extra": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.1.tgz", + "integrity": "sha1-f8DGyJV/mD9X8waiTlud3Y0N2IA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "3.0.1", + "universalify": "0.1.0" + } + }, + "fs-extra-p": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/fs-extra-p/-/fs-extra-p-4.4.0.tgz", + "integrity": "sha512-SDAF7Ma08/ERKmbNHBvoaxxox33/xiomZGhJlxoSaGYGn7jHCwLTFRnJ82wxrylZa+h0TtkBrrtXzRO79p3AHQ==", + "dev": true, + "requires": { + "bluebird-lst": "1.0.3", + "fs-extra": "4.0.1" + } + }, + "js-yaml": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.9.1.tgz", + "integrity": "sha512-CbcG379L1e+mWBnLvHWWeLs8GyV/EMw862uLI3c+GxVyDHWZcjZinwuBd3iW2pgxgIlksW/1vNJa4to+RvDOww==", + "dev": true, + "requires": { + "argparse": "1.0.9", + "esprima": "4.0.0" + } + }, + "jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + } + } + }, "read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", @@ -17569,6 +18134,12 @@ "once": "1.4.0" } }, + "rwlock": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/rwlock/-/rwlock-5.0.0.tgz", + "integrity": "sha1-iI1qd6M1HMGiCSBO8u4XIgk4Ns8=", + "dev": true + }, "rx": { "version": "2.3.24", "resolved": "https://registry.npmjs.org/rx/-/rx-2.3.24.tgz", @@ -17833,6 +18404,21 @@ "lodash.keys": "3.1.2" } }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, "shelljs": { "version": "0.7.8", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", @@ -18363,12 +18949,6 @@ "strip-ansi": "3.0.1" } }, - "string.prototype.codepointat": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.0.tgz", - "integrity": "sha1-aybpvTr8qnvjtCabUm3huCAArHg=", - "dev": true - }, "string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", @@ -18940,14 +19520,109 @@ } } }, - "tempfile": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz", - "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=", + "temp-file": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-2.0.2.tgz", + "integrity": "sha512-PFNC4wAem2UF2wwyoVM0ozvkk0g2A1c+uAb2zRXr2zHsVoWF796cV2LIFKuBhWWtaHGfZp2dtA1AfWoDXpkrOQ==", "dev": true, "requires": { - "os-tmpdir": "1.0.2", - "uuid": "2.0.3" + "async-exit-hook": "2.0.1", + "bluebird-lst": "1.0.3", + "fs-extra-p": "4.4.0", + "lazy-val": "1.0.2" + }, + "dependencies": { + "bluebird-lst": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.3.tgz", + "integrity": "sha512-NKk/GQk5fXcLKt4USI1htGuMwXHhKLa2a32FCNBFAOcpL0k8U5yFpusr3+NKc6RjytL8umW5pSQmtJCWWhiLrQ==", + "dev": true, + "requires": { + "bluebird": "3.5.0" + } + }, + "fs-extra": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.1.tgz", + "integrity": "sha1-f8DGyJV/mD9X8waiTlud3Y0N2IA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "3.0.1", + "universalify": "0.1.0" + } + }, + "fs-extra-p": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/fs-extra-p/-/fs-extra-p-4.4.0.tgz", + "integrity": "sha512-SDAF7Ma08/ERKmbNHBvoaxxox33/xiomZGhJlxoSaGYGn7jHCwLTFRnJ82wxrylZa+h0TtkBrrtXzRO79p3AHQ==", + "dev": true, + "requires": { + "bluebird-lst": "1.0.3", + "fs-extra": "4.0.1" + } + }, + "jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + } + } + }, + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "dev": true, + "requires": { + "execa": "0.7.0" + }, + "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.1.0", + "shebang-command": "1.2.0", + "which": "1.2.14" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "2.0.1" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + } } }, "text-table": { @@ -19077,6 +19752,12 @@ } } }, + "tinycolor2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz", + "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=", + "dev": true + }, "tmatch": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/tmatch/-/tmatch-2.0.1.tgz", @@ -19411,6 +20092,15 @@ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", "dev": true }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dev": true, + "requires": { + "crypto-random-string": "1.0.0" + } + }, "unique-temp-dir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unique-temp-dir/-/unique-temp-dir-1.0.0.tgz", @@ -20758,4 +21448,4 @@ "dev": true } } -} \ No newline at end of file +} diff --git a/package.json b/package.json index 3394405d..2fc5d2cb 100644 --- a/package.json +++ b/package.json @@ -181,7 +181,6 @@ "node-noop": "^1.0.0", "node-sass": "^4.5.3", "normalizr": "^3.2.3", - "node-sass": "^4.5.3", "pify": "^2.3.0", "prop-types": "^15.5.10", "raw-loader": "^0.5.1", From 7ad2809a43b1bcfa2b3477b2c978972a3fc2023f Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Tue, 22 Aug 2017 20:59:36 +0300 Subject: [PATCH 36/39] Add category for linux dist --- package.json | 2 +- src/main/app.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 2fc5d2cb..e6db09d7 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "AppImage", "deb" ], - "packageCategory": "utils", + "category": "Utility", "synopsis": "Free and Open Source Password Vault" }, "fileAssociations": { diff --git a/src/main/app.js b/src/main/app.js index 92604637..676296c8 100644 --- a/src/main/app.js +++ b/src/main/app.js @@ -85,10 +85,11 @@ app.on('ready', async () => { try { state = await storage.get('state'); log.info('Restoring state...', state); - + // Temporary bridge to new format // @TODO: remove this! if (state.archives && !Array.isArray(state.archives)) { + storage.set('state.backup', state); log.info('Updating old state format to new.'); state.archives = []; state.settingsByArchiveId = {}; From c1db89c5de8275d58815ff0f6515af792b06e539 Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Tue, 22 Aug 2017 21:21:07 +0300 Subject: [PATCH 37/39] Minor changes --- config/webpack.config.development.js | 2 -- src/renderer/styles/img/logos/floppy.svg | 12 ------------ src/shared/actions/archives.js | 1 - src/shared/actions/entries.js | 1 - src/shared/selectors.js | 4 +++- 5 files changed, 3 insertions(+), 17 deletions(-) delete mode 100644 src/renderer/styles/img/logos/floppy.svg diff --git a/config/webpack.config.development.js b/config/webpack.config.development.js index ecc58d19..a6f9c5e9 100644 --- a/config/webpack.config.development.js +++ b/config/webpack.config.development.js @@ -9,8 +9,6 @@ module.exports = merge(baseConfig, { entry: { main: [ 'react-hot-loader/patch', - // 'webpack-dev-server/client?http://localhost:3000/', - // 'webpack/hot/only-dev-server', resolve(__dirname, '../src/renderer/index') ], fileManager: resolve(__dirname, '../src/renderer/file-manager') diff --git a/src/renderer/styles/img/logos/floppy.svg b/src/renderer/styles/img/logos/floppy.svg deleted file mode 100644 index d23dbe44..00000000 --- a/src/renderer/styles/img/logos/floppy.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/src/shared/actions/archives.js b/src/shared/actions/archives.js index 55903558..d496913f 100644 --- a/src/shared/actions/archives.js +++ b/src/shared/actions/archives.js @@ -41,7 +41,6 @@ export const loadArchive = payload => (dispatch, getState) => { }; export const removeArchive = payload => () => { - // @todo: unload archive return removeArchiveFromArchiveManager(payload); }; diff --git a/src/shared/actions/entries.js b/src/shared/actions/entries.js index 02f6496a..a6c60cfa 100644 --- a/src/shared/actions/entries.js +++ b/src/shared/actions/entries.js @@ -15,7 +15,6 @@ import { } from './types'; export const selectEntry = createAction(ENTRIES_SELECTED); -// export const changeMode = createAction(ENTRIES_CHANGE_MODE); export const setFilter = createAction(ENTRIES_SET_FILTER); export const setSortMode = createAction(ENTRIES_SET_SORT); diff --git a/src/shared/selectors.js b/src/shared/selectors.js index c481bcd9..e511516c 100644 --- a/src/shared/selectors.js +++ b/src/shared/selectors.js @@ -71,7 +71,9 @@ export const getDismissableGroupIds = state => Object.keys(state.groups.byId) .filter(groupId => state.groups.byId[groupId].isNew); export const getGroupsById = state => state.groups.byId; export const getCurrentGroupId = state => state.groups.currentGroup; -export const getCurrentGroup = state => state.groups.currentGroup ? state.groups.byId[state.groups.currentGroup] : null; +export const getCurrentGroup = state => state.groups.currentGroup + ? state.groups.byId[state.groups.currentGroup] + : null; export const getTrashGroupId = state => Object.keys(state.groups.byId) .find(groupId => state.groups.byId[groupId].isTrash); From b430ed0611877ec7d5cdc2b12c08f09fdc811135 Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Wed, 23 Aug 2017 22:31:32 +0300 Subject: [PATCH 38/39] Fix review comments --- package.json | 2 +- src/renderer/index.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index e6db09d7..d2a84a62 100644 --- a/package.json +++ b/package.json @@ -126,7 +126,7 @@ "babel-register": "^6.18.0", "babili-webpack-plugin": "^0.1.1", "buttercup-importer": "~0.9.2", - "buttercup-web": "^0.32.1", + "buttercup-web": "~0.32.1", "classnames": "^2.2.5", "concurrently": "^2.1.0", "cross-env": "^1.0.8", diff --git a/src/renderer/index.js b/src/renderer/index.js index fa8e94a7..0e0412d9 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -17,8 +17,8 @@ import { setupShortcuts } from './system/shortcuts'; import Root from './containers/root'; // Unhandled rejections -// const unhandled = require('electron-unhandled'); -// unhandled(); +const unhandled = require('electron-unhandled'); +unhandled(); // Make crypto faster! Buttercup.Web.HashingTools.patchCorePBKDF(); From 5e28dfacdfa5ee0827654eec287772685270423d Mon Sep 17 00:00:00 2001 From: Sallar Kaboli Date: Thu, 24 Aug 2017 17:39:09 +0300 Subject: [PATCH 39/39] Update version to 0.20.0 to mark Beta --- app/package.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/package.json b/app/package.json index e322b2da..fb065d70 100644 --- a/app/package.json +++ b/app/package.json @@ -1,6 +1,6 @@ { "name": "buttercup", - "version": "0.19.0", + "version": "0.20.0", "productName": "Buttercup", "main": "./dist/app.js", "description": "Free and Open Source password vault", diff --git a/package.json b/package.json index d2a84a62..5dca2ae7 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "buttercup", "productName": "Buttercup", - "version": "0.19.0", + "version": "0.20.0", "description": "Free and Open Source password vault", "main": "app/dist/app.js", "scripts": {