From 3863c517fd10644b5aa8a7c1e5e667eb07795622 Mon Sep 17 00:00:00 2001 From: Liam Cardenas Date: Tue, 20 Feb 2018 21:41:30 -0800 Subject: [PATCH 001/192] Upgrade daemon to 0.19.0rc35 --- package.json | 2 +- src/renderer/constants/action_types.js | 4 ++-- src/renderer/lbry.js | 8 ++++---- src/renderer/redux/actions/content.js | 6 +++--- src/renderer/redux/actions/wallet.js | 2 +- src/renderer/redux/reducers/claims.js | 4 ++-- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 8b82a3891..6f3ee8702 100644 --- a/package.json +++ b/package.json @@ -116,7 +116,7 @@ }, "license": "MIT", "lbrySettings": { - "lbrynetDaemonVersion": "0.18.2", + "lbrynetDaemonVersion": "0.19.0rc35", "lbrynetDaemonUrlTemplate": "https://github.com/lbryio/lbry/releases/download/vDAEMONVER/lbrynet-daemon-vDAEMONVER-OSNAME.zip" } } diff --git a/src/renderer/constants/action_types.js b/src/renderer/constants/action_types.js index df8cf1407..0bd5cae80 100644 --- a/src/renderer/constants/action_types.js +++ b/src/renderer/constants/action_types.js @@ -62,8 +62,8 @@ export const FETCH_CLAIM_LIST_MINE_STARTED = 'FETCH_CLAIM_LIST_MINE_STARTED'; export const FETCH_CLAIM_LIST_MINE_COMPLETED = 'FETCH_CLAIM_LIST_MINE_COMPLETED'; export const ABANDON_CLAIM_STARTED = 'ABANDON_CLAIM_STARTED'; export const ABANDON_CLAIM_SUCCEEDED = 'ABANDON_CLAIM_SUCCEEDED'; -export const FETCH_CHANNEL_LIST_MINE_STARTED = 'FETCH_CHANNEL_LIST_MINE_STARTED'; -export const FETCH_CHANNEL_LIST_MINE_COMPLETED = 'FETCH_CHANNEL_LIST_MINE_COMPLETED'; +export const FETCH_CHANNEL_LIST_STARTED = 'FETCH_CHANNEL_LIST_STARTED'; +export const FETCH_CHANNEL_LIST_COMPLETED = 'FETCH_CHANNEL_LIST_COMPLETED'; export const CREATE_CHANNEL_STARTED = 'CREATE_CHANNEL_STARTED'; export const CREATE_CHANNEL_COMPLETED = 'CREATE_CHANNEL_COMPLETED'; export const PUBLISH_STARTED = 'PUBLISH_STARTED'; diff --git a/src/renderer/lbry.js b/src/renderer/lbry.js index 64ad8517e..130403458 100644 --- a/src/renderer/lbry.js +++ b/src/renderer/lbry.js @@ -211,11 +211,11 @@ Lbry.getAppVersionInfo = () => /** * Returns results from the file_list API method, plus dummy entries for pending publishes. - * (If a real publish with the same name is found, the pending publish will be ignored and removed.) + * (If a real publish with the same claim name is found, the pending publish will be ignored and removed.) */ Lbry.file_list = (params = {}) => new Promise((resolve, reject) => { - const { name, channel_name: channelName, outpoint } = params; + const { claim_name, channel_name: channelName, outpoint } = params; /** * If we're searching by outpoint, check first to see if there's a matching pending publish. @@ -234,10 +234,10 @@ Lbry.file_list = (params = {}) => 'file_list', params, fileInfos => { - removePendingPublishIfNeeded({ name, channelName, outpoint }); + removePendingPublishIfNeeded({ claim_name, channelName, outpoint }); // if a naked file_list call, append the pending file infos - if (!name && !channelName && !outpoint) { + if (!claim_name && !channelName && !outpoint) { const dummyFileInfos = Lbry.getPendingPublishes().map(pendingPublishToDummyFileInfo); resolve([...fileInfos, ...dummyFileInfos]); diff --git a/src/renderer/redux/actions/content.js b/src/renderer/redux/actions/content.js index 2ca2c4dbb..e0609672e 100644 --- a/src/renderer/redux/actions/content.js +++ b/src/renderer/redux/actions/content.js @@ -419,17 +419,17 @@ export function doPlayUri(uri) { export function doFetchChannelListMine() { return dispatch => { dispatch({ - type: ACTIONS.FETCH_CHANNEL_LIST_MINE_STARTED, + type: ACTIONS.FETCH_CHANNEL_LIST_STARTED, }); const callback = channels => { dispatch({ - type: ACTIONS.FETCH_CHANNEL_LIST_MINE_COMPLETED, + type: ACTIONS.FETCH_CHANNEL_LIST_COMPLETED, data: { claims: channels }, }); }; - Lbry.channel_list_mine().then(callback); + Lbry.channel_list().then(callback); }; } diff --git a/src/renderer/redux/actions/wallet.js b/src/renderer/redux/actions/wallet.js index df2faeb8d..6422b6315 100644 --- a/src/renderer/redux/actions/wallet.js +++ b/src/renderer/redux/actions/wallet.js @@ -35,7 +35,7 @@ export function doFetchTransactions() { type: ACTIONS.FETCH_TRANSACTIONS_STARTED, }); - Lbry.transaction_list({ include_tip_info: true }).then(results => { + Lbry.transaction_list().then(results => { dispatch({ type: ACTIONS.FETCH_TRANSACTIONS_COMPLETED, data: { diff --git a/src/renderer/redux/reducers/claims.js b/src/renderer/redux/reducers/claims.js index 73eee7815..5078bfccc 100644 --- a/src/renderer/redux/reducers/claims.js +++ b/src/renderer/redux/reducers/claims.js @@ -71,10 +71,10 @@ reducers[ACTIONS.FETCH_CLAIM_LIST_MINE_COMPLETED] = (state, action) => { }); }; -reducers[ACTIONS.FETCH_CHANNEL_LIST_MINE_STARTED] = state => +reducers[ACTIONS.FETCH_CHANNEL_LIST_STARTED] = state => Object.assign({}, state, { fetchingMyChannels: true }); -reducers[ACTIONS.FETCH_CHANNEL_LIST_MINE_COMPLETED] = (state, action) => { +reducers[ACTIONS.FETCH_CHANNEL_LIST_COMPLETED] = (state, action) => { const { claims } = action.data; const myChannelClaims = new Set(state.myChannelClaims); const byId = Object.assign({}, state.byId); -- 2.45.3 From 4aee6d5f56d243741c6167a0aa9e52c12a03fbc2 Mon Sep 17 00:00:00 2001 From: Liam Cardenas Date: Wed, 21 Feb 2018 11:01:43 -0800 Subject: [PATCH 002/192] Fix downloads page --- src/renderer/component/fileList/view.jsx | 10 +++--- src/renderer/lbryURI.js | 42 ++++++++++++------------ 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/renderer/component/fileList/view.jsx b/src/renderer/component/fileList/view.jsx index 8dcccadc3..51670e0f5 100644 --- a/src/renderer/component/fileList/view.jsx +++ b/src/renderer/component/fileList/view.jsx @@ -20,10 +20,10 @@ class FileList extends React.PureComponent { return fileInfos.slice().sort((fileInfo1, fileInfo2) => { const title1 = fileInfo1.value ? fileInfo1.value.stream.metadata.title.toLowerCase() - : fileInfo1.name; + : fileInfo1.claim_name; const title2 = fileInfo2.value ? fileInfo2.value.stream.metadata.title.toLowerCase() - : fileInfo2.name; + : fileInfo2.claim_name; if (title1 < title2) { return -1; } else if (title1 > title2) { @@ -51,7 +51,7 @@ class FileList extends React.PureComponent { if (fileInfo.value) { return fileInfo.value.publisherSignature.certificateId; } - return fileInfo.metadata.publisherSignature.certificateId; + return fileInfo.channel_claim_id; } handleSortChanged(event) { @@ -70,11 +70,11 @@ class FileList extends React.PureComponent { if (fileInfo.channel_name) { uriParams.channelName = fileInfo.channel_name; - uriParams.contentName = fileInfo.name; + uriParams.contentName = fileInfo.claim_name; uriParams.claimId = this.getChannelSignature(fileInfo); } else { uriParams.claimId = fileInfo.claim_id; - uriParams.name = fileInfo.name; + uriParams.claim_name = fileInfo.claim_name; } const uri = buildURI(uriParams); diff --git a/src/renderer/lbryURI.js b/src/renderer/lbryURI.js index e0691965e..b611e4707 100644 --- a/src/renderer/lbryURI.js +++ b/src/renderer/lbryURI.js @@ -30,11 +30,11 @@ export function parseURI(URI, requireProto = false) { // Break into components. Empty sub-matches are converted to null const componentsRegex = new RegExp( '^((?:lbry://)?)' + // protocol - '([^:$#/]*)' + // name (stops at the first separator or end) + '([^:$#/]*)' + // claim name (stops at the first separator or end) '([:$#]?)([^/]*)' + // modifier separator, modifier (stops at the first path separator or end) '(/?)(.*)' // path separator, path ); - const [proto, name, modSep, modVal, pathSep, path] = componentsRegex + const [proto, claim_name, modSep, modVal, pathSep, path] = componentsRegex .exec(URI) .slice(1) .map(match => match || null); @@ -47,12 +47,12 @@ export function parseURI(URI, requireProto = false) { } // Validate and process name - if (!name) { + if (!claim_name) { throw new Error(__('URI does not include name.')); } - const isChannel = name.startsWith('@'); - const channelName = isChannel ? name.slice(1) : name; + const isChannel = claim_name.startsWith('@'); + const channelName = isChannel ? claim_name.slice(1) : claim_name; if (isChannel) { if (!channelName) { @@ -66,7 +66,7 @@ export function parseURI(URI, requireProto = false) { contentName = path; } - const nameBadChars = (channelName || name).match(regexInvalidURI); + const nameBadChars = (channelName || claim_name).match(regexInvalidURI); if (nameBadChars) { throw new Error( __( @@ -128,7 +128,7 @@ export function parseURI(URI, requireProto = false) { } return { - name, + claim_name, path, isChannel, ...(contentName ? { contentName } : {}), @@ -148,24 +148,24 @@ export function parseURI(URI, requireProto = false) { export function buildURI(URIObj, includeProto = true) { const { claimId, claimSequence, bidPosition, contentName, channelName } = URIObj; - let { name, path } = URIObj; + let { claim_name, path } = URIObj; if (channelName) { const channelNameFormatted = channelName.startsWith('@') ? channelName : `@${channelName}`; - if (!name) { - name = channelNameFormatted; - } else if (name !== channelNameFormatted) { + if (!claim_name) { + claim_name = channelNameFormatted; + } else if (claim_name !== channelNameFormatted) { throw new Error( __( - 'Received a channel content URI, but name and channelName do not match. "name" represents the value in the name position of the URI (lbry://name...), which for channel content will be the channel name. In most cases, to construct a channel URI you should just pass channelName and contentName.' + 'Received a channel content URI, but claim name and channelName do not match. "name" represents the value in the name position of the URI (lbry://name...), which for channel content will be the channel name. In most cases, to construct a channel URI you should just pass channelName and contentName.' ) ); } } if (contentName) { - if (!name) { - name = contentName; + if (!claim_name) { + claim_name = contentName; } else if (!path) { path = contentName; } @@ -180,7 +180,7 @@ export function buildURI(URIObj, includeProto = true) { return ( (includeProto ? 'lbry://' : '') + - name + + claim_name + (claimId ? `#${claimId}` : '') + (claimSequence ? `:${claimSequence}` : '') + (bidPosition ? `${bidPosition}` : '') + @@ -192,8 +192,8 @@ export function buildURI(URIObj, includeProto = true) { export function normalizeURI(URI) { if (URI.match(/pending_claim/)) return URI; - const { name, path, bidPosition, claimSequence, claimId } = parseURI(URI); - return buildURI({ name, path, claimSequence, bidPosition, claimId }); + const { claim_name, path, bidPosition, claimSequence, claimId } = parseURI(URI); + return buildURI({ claim_name, path, claimSequence, bidPosition, claimId }); } export function isURIValid(URI) { @@ -203,12 +203,12 @@ export function isURIValid(URI) { } catch (error) { return false; } - return parts && parts.name; + return parts && parts.claim_name; } -export function isNameValid(name, checkCase = true) { +export function isNameValid(claim_name, checkCase = true) { const regexp = new RegExp('^[a-z0-9-]+$', checkCase ? '' : 'i'); - return regexp.test(name); + return regexp.test(claim_name); } export function isURIClaimable(URI) { @@ -220,7 +220,7 @@ export function isURIClaimable(URI) { } return ( parts && - parts.name && + parts.claim_name && !parts.claimId && !parts.bidPosition && !parts.claimSequence && -- 2.45.3 From 26c62fc326c359cf11e8dc116608f751ad9a991a Mon Sep 17 00:00:00 2001 From: Liam Cardenas Date: Wed, 21 Feb 2018 11:10:36 -0800 Subject: [PATCH 003/192] Update claim_name to cammel case in lbryuri --- src/renderer/component/fileList/view.jsx | 2 +- src/renderer/lbryURI.js | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/renderer/component/fileList/view.jsx b/src/renderer/component/fileList/view.jsx index 51670e0f5..4b737189c 100644 --- a/src/renderer/component/fileList/view.jsx +++ b/src/renderer/component/fileList/view.jsx @@ -74,7 +74,7 @@ class FileList extends React.PureComponent { uriParams.claimId = this.getChannelSignature(fileInfo); } else { uriParams.claimId = fileInfo.claim_id; - uriParams.claim_name = fileInfo.claim_name; + uriParams.claimName = fileInfo.claim_name; } const uri = buildURI(uriParams); diff --git a/src/renderer/lbryURI.js b/src/renderer/lbryURI.js index b611e4707..ba0aff2ec 100644 --- a/src/renderer/lbryURI.js +++ b/src/renderer/lbryURI.js @@ -34,7 +34,7 @@ export function parseURI(URI, requireProto = false) { '([:$#]?)([^/]*)' + // modifier separator, modifier (stops at the first path separator or end) '(/?)(.*)' // path separator, path ); - const [proto, claim_name, modSep, modVal, pathSep, path] = componentsRegex + const [proto, claimName, modSep, modVal, pathSep, path] = componentsRegex .exec(URI) .slice(1) .map(match => match || null); @@ -47,12 +47,12 @@ export function parseURI(URI, requireProto = false) { } // Validate and process name - if (!claim_name) { + if (!claimName) { throw new Error(__('URI does not include name.')); } - const isChannel = claim_name.startsWith('@'); - const channelName = isChannel ? claim_name.slice(1) : claim_name; + const isChannel = claimName.startsWith('@'); + const channelName = isChannel ? claimName.slice(1) : claimName; if (isChannel) { if (!channelName) { @@ -66,7 +66,7 @@ export function parseURI(URI, requireProto = false) { contentName = path; } - const nameBadChars = (channelName || claim_name).match(regexInvalidURI); + const nameBadChars = (channelName || claimName).match(regexInvalidURI); if (nameBadChars) { throw new Error( __( @@ -128,7 +128,7 @@ export function parseURI(URI, requireProto = false) { } return { - claim_name, + claim_name: claimName, path, isChannel, ...(contentName ? { contentName } : {}), -- 2.45.3 From dcd5a7e28dedcd85a704bb780ada7d48146e26a1 Mon Sep 17 00:00:00 2001 From: Liam Cardenas Date: Thu, 22 Feb 2018 12:00:04 -0800 Subject: [PATCH 004/192] RC35 -> RC37 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6f3ee8702..415fcc184 100644 --- a/package.json +++ b/package.json @@ -116,7 +116,7 @@ }, "license": "MIT", "lbrySettings": { - "lbrynetDaemonVersion": "0.19.0rc35", + "lbrynetDaemonVersion": "0.19.0rc37", "lbrynetDaemonUrlTemplate": "https://github.com/lbryio/lbry/releases/download/vDAEMONVER/lbrynet-daemon-vDAEMONVER-OSNAME.zip" } } -- 2.45.3 From 7296800ce0683adb94ad8584903e25b8b20321fc Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Mon, 5 Mar 2018 16:28:11 -0800 Subject: [PATCH 005/192] Add most recent latest video to subscription state --- src/renderer/constants/action_types.js | 1 + src/renderer/redux/actions/content.js | 9 +++++++++ src/renderer/redux/actions/subscriptions.js | 11 +++++++++++ src/renderer/redux/reducers/subscriptions.js | 18 +++++++++++++++++- 4 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/renderer/constants/action_types.js b/src/renderer/constants/action_types.js index df8cf1407..ffc20b6bb 100644 --- a/src/renderer/constants/action_types.js +++ b/src/renderer/constants/action_types.js @@ -164,6 +164,7 @@ export const CLEAR_SHAPE_SHIFT = 'CLEAR_SHAPE_SHIFT'; export const CHANNEL_SUBSCRIBE = 'CHANNEL_SUBSCRIBE'; export const CHANNEL_UNSUBSCRIBE = 'CHANNEL_UNSUBSCRIBE'; export const HAS_FETCHED_SUBSCRIPTIONS = 'HAS_FETCHED_SUBSCRIPTIONS'; +export const SET_SUBSCRIPTION_LATEST = 'SET_SUBSCRIPTION_LATEST'; // Video controls export const SET_VIDEO_PAUSE = 'SET_VIDEO_PAUSE'; diff --git a/src/renderer/redux/actions/content.js b/src/renderer/redux/actions/content.js index 2ca2c4dbb..263470103 100644 --- a/src/renderer/redux/actions/content.js +++ b/src/renderer/redux/actions/content.js @@ -7,6 +7,7 @@ import Lbryio from 'lbryio'; import { normalizeURI, buildURI } from 'lbryURI'; import { doAlertError, doOpenModal } from 'redux/actions/app'; import { doClaimEligiblePurchaseRewards } from 'redux/actions/rewards'; +import { setSubscriptionLatest } from 'redux/actions/subscriptions'; import { selectBadgeNumber } from 'redux/selectors/app'; import { selectMyClaimsRaw } from 'redux/selectors/claims'; import { selectResolvingUris } from 'redux/selectors/content'; @@ -358,6 +359,14 @@ export function doFetchClaimsByChannel(uri, page) { const claimResult = result[uri] || {}; const { claims_in_channel: claimsInChannel, returned_page: returnedPage } = claimResult; + if(claimResult && claimResult.claims_in_channel && claimResult.claims_in_channel.length) { + let latest = claimResult.claims_in_channel[0]; + dispatch(setSubscriptionLatest({ + channelName: latest.channel_name, + uri: `${latest.channel_name}#${latest.value.publisherSignature.certificateId}` + }, `${latest.name}#${latest.claim_id}`)); + } + dispatch({ type: ACTIONS.FETCH_CHANNEL_CLAIMS_COMPLETED, data: { diff --git a/src/renderer/redux/actions/subscriptions.js b/src/renderer/redux/actions/subscriptions.js index e3eb939ed..55632c785 100644 --- a/src/renderer/redux/actions/subscriptions.js +++ b/src/renderer/redux/actions/subscriptions.js @@ -14,5 +14,16 @@ export const doChannelUnsubscribe = (subscription: Subscription) => (dispatch: D data: subscription, }); +export const setSubscriptionLatest = (subscription: Subscription, uri: string) => (dispatch: Dispatch) => +{ + return dispatch({ + type: ACTIONS.SET_SUBSCRIPTION_LATEST, + data: { + subscription, + uri + } + }) +}; + export const setHasFetchedSubscriptions = () => (dispatch: Dispatch) => dispatch({ type: ACTIONS.HAS_FETCHED_SUBSCRIPTIONS }); diff --git a/src/renderer/redux/reducers/subscriptions.js b/src/renderer/redux/reducers/subscriptions.js index f7a846ffc..e821b5854 100644 --- a/src/renderer/redux/reducers/subscriptions.js +++ b/src/renderer/redux/reducers/subscriptions.js @@ -5,6 +5,7 @@ import { handleActions } from 'util/redux-utils'; export type Subscription = { channelName: string, uri: string, + latest: ?string }; // Subscription redux types @@ -28,7 +29,15 @@ type HasFetchedSubscriptions = { type: ACTIONS.HAS_FETCHED_SUBSCRIPTIONS, }; -export type Action = doChannelSubscribe | doChannelUnsubscribe | HasFetchedSubscriptions; +type setSubscriptionLatest = { + type: ACTIONS.SET_SUBSCRIPTION_LATEST, + data: { + subscription: Subscription, + uri: string + } +} + +export type Action = doChannelSubscribe | doChannelUnsubscribe | HasFetchedSubscriptions | setSubscriptionLatest; export type Dispatch = (action: Action) => any; const defaultState = { @@ -70,6 +79,13 @@ export default handleActions( ...state, hasFetchedSubscriptions: true, }), + [ACTIONS.SET_SUBSCRIPTION_LATEST]: ( + state: SubscriptionState, + action: setSubscriptionLatest + ): SubscriptionState => ({ + ...state, + subscriptions: state.subscriptions.map(subscription => subscription.channelName === action.data.subscription.channelName ? {...subscription, latest: action.data.uri} : subscription) + }) }, defaultState ); -- 2.45.3 From c3dd7f34496dd0cf7c9ad352edecee853d9ff00f Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Mon, 5 Mar 2018 23:44:36 -0800 Subject: [PATCH 006/192] Added notifications and downloading upon detecting to subscription items --- src/renderer/constants/action_types.js | 3 ++ src/renderer/redux/actions/app.js | 2 + src/renderer/redux/actions/content.js | 8 +-- src/renderer/redux/actions/subscriptions.js | 52 +++++++++++++++++++- src/renderer/redux/reducers/subscriptions.js | 10 +++- 5 files changed, 69 insertions(+), 6 deletions(-) diff --git a/src/renderer/constants/action_types.js b/src/renderer/constants/action_types.js index ffc20b6bb..584fa7a47 100644 --- a/src/renderer/constants/action_types.js +++ b/src/renderer/constants/action_types.js @@ -165,6 +165,9 @@ export const CHANNEL_SUBSCRIBE = 'CHANNEL_SUBSCRIBE'; export const CHANNEL_UNSUBSCRIBE = 'CHANNEL_UNSUBSCRIBE'; export const HAS_FETCHED_SUBSCRIPTIONS = 'HAS_FETCHED_SUBSCRIPTIONS'; export const SET_SUBSCRIPTION_LATEST = 'SET_SUBSCRIPTION_LATEST'; +export const CHECK_SUBSCRIPTION_STARTED = 'CHECK_SUBSCRIPTION_STARTED'; +export const CHECK_SUBSCRIPTION_COMPLETED = 'CHECK_SUBSCRIPTION_COMPLETED'; +export const CHECK_SUBSCRIPTIONS_SUBSCRIBE = 'CHECK_SUBSCRIPTIONS_SUBSCRIBE'; // Video controls export const SET_VIDEO_PAUSE = 'SET_VIDEO_PAUSE'; diff --git a/src/renderer/redux/actions/app.js b/src/renderer/redux/actions/app.js index 08009c896..f8f6cecdc 100644 --- a/src/renderer/redux/actions/app.js +++ b/src/renderer/redux/actions/app.js @@ -11,6 +11,7 @@ import { doFetchDaemonSettings } from 'redux/actions/settings'; import { doAuthenticate } from 'redux/actions/user'; import { doBalanceSubscribe } from 'redux/actions/wallet'; import { doPause } from 'redux/actions/media'; +import { doCheckSubscriptions } from 'redux/actions/subscriptions'; import { selectCurrentModal, @@ -298,6 +299,7 @@ export function doDaemonReady() { dispatch(doCheckUpgradeAvailable()); } dispatch(doCheckUpgradeSubscribe()); + dispatch(doCheckSubscriptions()); }; } diff --git a/src/renderer/redux/actions/content.js b/src/renderer/redux/actions/content.js index 263470103..d665828d6 100644 --- a/src/renderer/redux/actions/content.js +++ b/src/renderer/redux/actions/content.js @@ -289,7 +289,7 @@ export function doLoadVideo(uri) { }; } -export function doPurchaseUri(uri) { +export function doPurchaseUri(uri, specificCostInfo) { return (dispatch, getState) => { const state = getState(); const balance = selectBalance(state); @@ -322,7 +322,7 @@ export function doPurchaseUri(uri) { return; } - const costInfo = makeSelectCostInfoForUri(uri)(state); + const costInfo = makeSelectCostInfoForUri(uri)(state) || specificCostInfo; const { cost } = costInfo; if (cost > balance) { @@ -359,8 +359,8 @@ export function doFetchClaimsByChannel(uri, page) { const claimResult = result[uri] || {}; const { claims_in_channel: claimsInChannel, returned_page: returnedPage } = claimResult; - if(claimResult && claimResult.claims_in_channel && claimResult.claims_in_channel.length) { - let latest = claimResult.claims_in_channel[0]; + if(claimsInChannel && claimsInChannel.length) { + let latest = claimsInChannel[0]; dispatch(setSubscriptionLatest({ channelName: latest.channel_name, uri: `${latest.channel_name}#${latest.value.publisherSignature.certificateId}` diff --git a/src/renderer/redux/actions/subscriptions.js b/src/renderer/redux/actions/subscriptions.js index 55632c785..5121648e0 100644 --- a/src/renderer/redux/actions/subscriptions.js +++ b/src/renderer/redux/actions/subscriptions.js @@ -1,6 +1,12 @@ // @flow import * as ACTIONS from 'constants/action_types'; -import type { Subscription, Dispatch } from 'redux/reducers/subscriptions'; +import type { Subscription, Dispatch, SubscriptionState } from 'redux/reducers/subscriptions'; +import { selectSubscriptions } from 'redux/selectors/subscriptions'; +import Lbry from 'lbry'; +import { doPurchaseUri } from 'redux/actions/content'; +import { doNavigate } from 'redux/actions/navigation'; + +const CHECK_SUBSCRIPTIONS_INTERVAL = 10 * 60 * 1000; export const doChannelSubscribe = (subscription: Subscription) => (dispatch: Dispatch) => dispatch({ @@ -14,6 +20,50 @@ export const doChannelUnsubscribe = (subscription: Subscription) => (dispatch: D data: subscription, }); +export const doCheckSubscriptions = () => (dispatch: Dispatch, getState: () => SubscriptionState) => { + const checkSubscriptionsTimer = setInterval( + () => selectSubscriptions(getState()).map((subscription: Subscription) => dispatch(doCheckSubscription(subscription))), + CHECK_SUBSCRIPTIONS_INTERVAL + ); + dispatch({ + type: ACTIONS.CHECK_SUBSCRIPTIONS_SUBSCRIBE, + data: { checkSubscriptionsTimer }, + }); +}; + +export const doCheckSubscription = (subscription: Subscription) => (dispatch: Dispatch) => { + dispatch({ + type: ACTIONS.CHECK_SUBSCRIPTION_STARTED, + data: subscription, + }); + + Lbry.claim_list_by_channel({ uri: subscription.uri, page: 1 }).then(result => { + const claimResult = result[subscription.uri] || {}; + const { claims_in_channel: claimsInChannel } = claimResult; + + let count = claimsInChannel.reduce((prev, cur, index) => `${cur.name}#${cur.claim_id}` === subscription.latest ? index : prev, -1) + + if(count !== 0) { + if(!claimsInChannel[0].value.stream.metadata.fee) { + dispatch(doPurchaseUri(`${claimsInChannel[0].name}#${claimsInChannel[0].claim_id}`, {cost: 0})); + } + + const notif = new window.Notification(subscription.channelName, { + body: `Posted ${claimsInChannel[0].value.stream.metadata.title}${count > 1 ? ` and ${count-1} other new items` : '' }${count < 0 ? ' and 9+ other new items' : ''}`, + silent: false, + }); + notif.onclick = () => { + dispatch(doNavigate('/show', { uri: `lbry://${claimsInChannel[0].name}#${claimsInChannel[0].claim_id}` })) + }; + } + + dispatch({ + type: ACTIONS.CHECK_SUBSCRIPTION_COMPLETED, + data: subscription + }); + }); +} + export const setSubscriptionLatest = (subscription: Subscription, uri: string) => (dispatch: Dispatch) => { return dispatch({ diff --git a/src/renderer/redux/reducers/subscriptions.js b/src/renderer/redux/reducers/subscriptions.js index e821b5854..2ef3b17cc 100644 --- a/src/renderer/redux/reducers/subscriptions.js +++ b/src/renderer/redux/reducers/subscriptions.js @@ -37,7 +37,15 @@ type setSubscriptionLatest = { } } -export type Action = doChannelSubscribe | doChannelUnsubscribe | HasFetchedSubscriptions | setSubscriptionLatest; +type CheckSubscriptionStarted = { + type: ACTIONS.CHECK_SUBSCRIPTION_STARTED +} + +type CheckSubscriptionCompleted = { + type: ACTIONS.CHECK_SUBSCRIPTION_COMPLETED +} + +export type Action = doChannelSubscribe | doChannelUnsubscribe | HasFetchedSubscriptions | setSubscriptionLatest | CheckSubscriptionStarted | CheckSubscriptionCompleted | Function; export type Dispatch = (action: Action) => any; const defaultState = { -- 2.45.3 From 2c6f2d52bfd6f84d94444fd8ccf558b5d48746d9 Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Tue, 6 Mar 2018 00:32:58 -0800 Subject: [PATCH 007/192] Fix issues with viewing most recent and uninitiated latest videos --- src/renderer/page/file/index.js | 2 ++ src/renderer/page/file/view.jsx | 8 ++++++++ src/renderer/redux/actions/subscriptions.js | 19 ++++++++++++++----- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/renderer/page/file/index.js b/src/renderer/page/file/index.js index 4984ed812..a4a86f131 100644 --- a/src/renderer/page/file/index.js +++ b/src/renderer/page/file/index.js @@ -4,6 +4,7 @@ import { doFetchFileInfo } from 'redux/actions/file_info'; import { makeSelectFileInfoForUri } from 'redux/selectors/file_info'; import { selectRewardContentClaimIds } from 'redux/selectors/content'; import { doFetchCostInfoForUri } from 'redux/actions/cost_info'; +import { checkSubscriptionLatest } from 'redux/actions/subscriptions'; import { makeSelectClaimForUri, makeSelectContentTypeForUri, @@ -29,6 +30,7 @@ const perform = dispatch => ({ navigate: (path, params) => dispatch(doNavigate(path, params)), fetchFileInfo: uri => dispatch(doFetchFileInfo(uri)), fetchCostInfo: uri => dispatch(doFetchCostInfoForUri(uri)), + checkSubscriptionLatest: (subscription, uri) => dispatch(checkSubscriptionLatest(subscription, uri)), }); export default connect(select, perform)(FilePage); diff --git a/src/renderer/page/file/view.jsx b/src/renderer/page/file/view.jsx index e248ee5d6..77d422d1c 100644 --- a/src/renderer/page/file/view.jsx +++ b/src/renderer/page/file/view.jsx @@ -17,6 +17,7 @@ class FilePage extends React.PureComponent { componentDidMount() { this.fetchFileInfo(this.props); this.fetchCostInfo(this.props); + this.checkSubscriptionLatest(this.props); } componentWillReceiveProps(nextProps) { @@ -35,6 +36,13 @@ class FilePage extends React.PureComponent { } } + checkSubscriptionLatest(props) { + props.checkSubscriptionLatest({ + channelName: props.claim.channel_name, + uri: `${props.claim.channel_name}#${props.claim.value.publisherSignature.certificateId}`, + }, `${props.claim.name}#${props.claim.claim_id}`); + } + render() { const { claim, diff --git a/src/renderer/redux/actions/subscriptions.js b/src/renderer/redux/actions/subscriptions.js index 5121648e0..5ae3885ea 100644 --- a/src/renderer/redux/actions/subscriptions.js +++ b/src/renderer/redux/actions/subscriptions.js @@ -41,7 +41,7 @@ export const doCheckSubscription = (subscription: Subscription) => (dispatch: Di const claimResult = result[subscription.uri] || {}; const { claims_in_channel: claimsInChannel } = claimResult; - let count = claimsInChannel.reduce((prev, cur, index) => `${cur.name}#${cur.claim_id}` === subscription.latest ? index : prev, -1) + let count = subscription.latest ? claimsInChannel.reduce((prev, cur, index) => `${cur.name}#${cur.claim_id}` === subscription.latest ? index : prev, -1) : 1; if(count !== 0) { if(!claimsInChannel[0].value.stream.metadata.fee) { @@ -64,16 +64,25 @@ export const doCheckSubscription = (subscription: Subscription) => (dispatch: Di }); } +export const checkSubscriptionLatest = (channel: Subscription, uri: string) => (dispatch: Dispatch) => { + Lbry.claim_list_by_channel({ uri: channel.uri, page: 1 }).then(result => { + const claimResult = result[channel.uri] || {}; + const { claims_in_channel: claimsInChannel } = claimResult; + + if(claimsInChannel && claimsInChannel.length && `${claimsInChannel[0].name}#${claimsInChannel[0].claim_id}` === uri) { + dispatch(setSubscriptionLatest(channel, uri)); + } + }); +} + export const setSubscriptionLatest = (subscription: Subscription, uri: string) => (dispatch: Dispatch) => -{ - return dispatch({ + dispatch({ type: ACTIONS.SET_SUBSCRIPTION_LATEST, data: { subscription, uri } - }) -}; + }); export const setHasFetchedSubscriptions = () => (dispatch: Dispatch) => dispatch({ type: ACTIONS.HAS_FETCHED_SUBSCRIPTIONS }); -- 2.45.3 From 98c9dfb68e444e62d02b306ed832970abb4557fc Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Tue, 6 Mar 2018 00:36:04 -0800 Subject: [PATCH 008/192] Formatted code with prettier --- src/main/index.js | 4 +- src/renderer/component/fileList/view.jsx | 12 ++-- src/renderer/component/rewardSummary/view.jsx | 6 +- src/renderer/index.js | 2 +- src/renderer/page/file/index.js | 3 +- src/renderer/page/file/view.jsx | 11 ++-- src/renderer/redux/actions/content.js | 15 +++-- src/renderer/redux/actions/settings.js | 3 +- src/renderer/redux/actions/subscriptions.js | 62 ++++++++++++++----- src/renderer/redux/reducers/subscriptions.js | 34 ++++++---- 10 files changed, 101 insertions(+), 51 deletions(-) diff --git a/src/main/index.js b/src/main/index.js index d068e87e0..ec468ae70 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -64,8 +64,8 @@ app.on('ready', async () => { dialog.showErrorBox( 'Daemon has Exited', 'The daemon may have encountered an unexpected error, or another daemon instance is already running. \n\n' + - 'For more information please visit: \n' + - 'https://lbry.io/faq/startup-troubleshooting' + 'For more information please visit: \n' + + 'https://lbry.io/faq/startup-troubleshooting' ); app.quit(); } diff --git a/src/renderer/component/fileList/view.jsx b/src/renderer/component/fileList/view.jsx index afb446323..eef0993c6 100644 --- a/src/renderer/component/fileList/view.jsx +++ b/src/renderer/component/fileList/view.jsx @@ -15,27 +15,27 @@ class FileList extends React.PureComponent { this._sortFunctions = { dateNew(fileInfos) { return fileInfos.slice().sort((fileInfo1, fileInfo2) => { - const height1 = fileInfo1.height - const height2 = fileInfo2.height + const height1 = fileInfo1.height; + const height2 = fileInfo2.height; if (height1 > height2) { return -1; } else if (height1 < height2) { return 1; } return 0; - }); + }); }, dateOld(fileInfos) { return fileInfos.slice().sort((fileInfo1, fileInfo2) => { - const height1 = fileInfo1.height - const height2 = fileInfo2.height + const height1 = fileInfo1.height; + const height2 = fileInfo2.height; if (height1 < height2) { return -1; } else if (height1 > height2) { return 1; } return 0; - }); + }); }, title(fileInfos) { return fileInfos.slice().sort((fileInfo1, fileInfo2) => { diff --git a/src/renderer/component/rewardSummary/view.jsx b/src/renderer/component/rewardSummary/view.jsx index 36507d535..9fa611902 100644 --- a/src/renderer/component/rewardSummary/view.jsx +++ b/src/renderer/component/rewardSummary/view.jsx @@ -15,9 +15,9 @@ const RewardSummary = (props: Props) => {

{__('Rewards')}

- {__('Read our')}{' '} - {__('FAQ')}{' '}{__('to learn more about LBRY Rewards')}. -

+ {__('Read our')} {__('FAQ')}{' '} + {__('to learn more about LBRY Rewards')}. +

{unclaimedRewardAmount > 0 ? ( diff --git a/src/renderer/index.js b/src/renderer/index.js index 822f0b153..c1edc1271 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -69,7 +69,7 @@ ipcRenderer.on('window-is-focused', () => { document.addEventListener('dragover', event => { event.preventDefault(); -}) +}); document.addEventListener('drop', event => { event.preventDefault(); }); diff --git a/src/renderer/page/file/index.js b/src/renderer/page/file/index.js index a4a86f131..eb5dd0fd4 100644 --- a/src/renderer/page/file/index.js +++ b/src/renderer/page/file/index.js @@ -30,7 +30,8 @@ const perform = dispatch => ({ navigate: (path, params) => dispatch(doNavigate(path, params)), fetchFileInfo: uri => dispatch(doFetchFileInfo(uri)), fetchCostInfo: uri => dispatch(doFetchCostInfoForUri(uri)), - checkSubscriptionLatest: (subscription, uri) => dispatch(checkSubscriptionLatest(subscription, uri)), + checkSubscriptionLatest: (subscription, uri) => + dispatch(checkSubscriptionLatest(subscription, uri)), }); export default connect(select, perform)(FilePage); diff --git a/src/renderer/page/file/view.jsx b/src/renderer/page/file/view.jsx index 77d422d1c..1de94e32a 100644 --- a/src/renderer/page/file/view.jsx +++ b/src/renderer/page/file/view.jsx @@ -37,10 +37,13 @@ class FilePage extends React.PureComponent { } checkSubscriptionLatest(props) { - props.checkSubscriptionLatest({ - channelName: props.claim.channel_name, - uri: `${props.claim.channel_name}#${props.claim.value.publisherSignature.certificateId}`, - }, `${props.claim.name}#${props.claim.claim_id}`); + props.checkSubscriptionLatest( + { + channelName: props.claim.channel_name, + uri: `${props.claim.channel_name}#${props.claim.value.publisherSignature.certificateId}`, + }, + `${props.claim.name}#${props.claim.claim_id}` + ); } render() { diff --git a/src/renderer/redux/actions/content.js b/src/renderer/redux/actions/content.js index d665828d6..c369ceb1a 100644 --- a/src/renderer/redux/actions/content.js +++ b/src/renderer/redux/actions/content.js @@ -359,12 +359,17 @@ export function doFetchClaimsByChannel(uri, page) { const claimResult = result[uri] || {}; const { claims_in_channel: claimsInChannel, returned_page: returnedPage } = claimResult; - if(claimsInChannel && claimsInChannel.length) { + if (claimsInChannel && claimsInChannel.length) { let latest = claimsInChannel[0]; - dispatch(setSubscriptionLatest({ - channelName: latest.channel_name, - uri: `${latest.channel_name}#${latest.value.publisherSignature.certificateId}` - }, `${latest.name}#${latest.claim_id}`)); + dispatch( + setSubscriptionLatest( + { + channelName: latest.channel_name, + uri: `${latest.channel_name}#${latest.value.publisherSignature.certificateId}`, + }, + `${latest.name}#${latest.claim_id}` + ) + ); } dispatch({ diff --git a/src/renderer/redux/actions/settings.js b/src/renderer/redux/actions/settings.js index da4ed52a0..db3fa5020 100644 --- a/src/renderer/redux/actions/settings.js +++ b/src/renderer/redux/actions/settings.js @@ -70,7 +70,8 @@ export function doUpdateIsNight() { const momentNow = moment(); return { type: ACTIONS.UPDATE_IS_NIGHT, - data: { isNight: (() => { + data: { + isNight: (() => { const startNightMoment = moment('21:00', 'HH:mm'); const endNightMoment = moment('8:00', 'HH:mm'); return !(momentNow.isAfter(endNightMoment) && momentNow.isBefore(startNightMoment)); diff --git a/src/renderer/redux/actions/subscriptions.js b/src/renderer/redux/actions/subscriptions.js index 5ae3885ea..5e8fddb8c 100644 --- a/src/renderer/redux/actions/subscriptions.js +++ b/src/renderer/redux/actions/subscriptions.js @@ -20,9 +20,15 @@ export const doChannelUnsubscribe = (subscription: Subscription) => (dispatch: D data: subscription, }); -export const doCheckSubscriptions = () => (dispatch: Dispatch, getState: () => SubscriptionState) => { +export const doCheckSubscriptions = () => ( + dispatch: Dispatch, + getState: () => SubscriptionState +) => { const checkSubscriptionsTimer = setInterval( - () => selectSubscriptions(getState()).map((subscription: Subscription) => dispatch(doCheckSubscription(subscription))), + () => + selectSubscriptions(getState()).map((subscription: Subscription) => + dispatch(doCheckSubscription(subscription)) + ), CHECK_SUBSCRIPTIONS_INTERVAL ); dispatch({ @@ -41,47 +47,69 @@ export const doCheckSubscription = (subscription: Subscription) => (dispatch: Di const claimResult = result[subscription.uri] || {}; const { claims_in_channel: claimsInChannel } = claimResult; - let count = subscription.latest ? claimsInChannel.reduce((prev, cur, index) => `${cur.name}#${cur.claim_id}` === subscription.latest ? index : prev, -1) : 1; + let count = subscription.latest + ? claimsInChannel.reduce( + (prev, cur, index) => + `${cur.name}#${cur.claim_id}` === subscription.latest ? index : prev, + -1 + ) + : 1; - if(count !== 0) { - if(!claimsInChannel[0].value.stream.metadata.fee) { - dispatch(doPurchaseUri(`${claimsInChannel[0].name}#${claimsInChannel[0].claim_id}`, {cost: 0})); + if (count !== 0) { + if (!claimsInChannel[0].value.stream.metadata.fee) { + dispatch( + doPurchaseUri(`${claimsInChannel[0].name}#${claimsInChannel[0].claim_id}`, { cost: 0 }) + ); } const notif = new window.Notification(subscription.channelName, { - body: `Posted ${claimsInChannel[0].value.stream.metadata.title}${count > 1 ? ` and ${count-1} other new items` : '' }${count < 0 ? ' and 9+ other new items' : ''}`, + body: `Posted ${claimsInChannel[0].value.stream.metadata.title}${ + count > 1 ? ` and ${count - 1} other new items` : '' + }${count < 0 ? ' and 9+ other new items' : ''}`, silent: false, }); notif.onclick = () => { - dispatch(doNavigate('/show', { uri: `lbry://${claimsInChannel[0].name}#${claimsInChannel[0].claim_id}` })) + dispatch( + doNavigate('/show', { + uri: `lbry://${claimsInChannel[0].name}#${claimsInChannel[0].claim_id}`, + }) + ); }; } dispatch({ type: ACTIONS.CHECK_SUBSCRIPTION_COMPLETED, - data: subscription + data: subscription, }); }); -} +}; -export const checkSubscriptionLatest = (channel: Subscription, uri: string) => (dispatch: Dispatch) => { +export const checkSubscriptionLatest = (channel: Subscription, uri: string) => ( + dispatch: Dispatch +) => { Lbry.claim_list_by_channel({ uri: channel.uri, page: 1 }).then(result => { const claimResult = result[channel.uri] || {}; const { claims_in_channel: claimsInChannel } = claimResult; - if(claimsInChannel && claimsInChannel.length && `${claimsInChannel[0].name}#${claimsInChannel[0].claim_id}` === uri) { + if ( + claimsInChannel && + claimsInChannel.length && + `${claimsInChannel[0].name}#${claimsInChannel[0].claim_id}` === uri + ) { dispatch(setSubscriptionLatest(channel, uri)); } }); -} +}; -export const setSubscriptionLatest = (subscription: Subscription, uri: string) => (dispatch: Dispatch) => - dispatch({ +export const setSubscriptionLatest = (subscription: Subscription, uri: string) => ( + dispatch: Dispatch +) => + dispatch({ type: ACTIONS.SET_SUBSCRIPTION_LATEST, data: { subscription, - uri - } + uri, + }, }); export const setHasFetchedSubscriptions = () => (dispatch: Dispatch) => diff --git a/src/renderer/redux/reducers/subscriptions.js b/src/renderer/redux/reducers/subscriptions.js index 2ef3b17cc..a8f40746f 100644 --- a/src/renderer/redux/reducers/subscriptions.js +++ b/src/renderer/redux/reducers/subscriptions.js @@ -5,7 +5,7 @@ import { handleActions } from 'util/redux-utils'; export type Subscription = { channelName: string, uri: string, - latest: ?string + latest: ?string, }; // Subscription redux types @@ -33,19 +33,26 @@ type setSubscriptionLatest = { type: ACTIONS.SET_SUBSCRIPTION_LATEST, data: { subscription: Subscription, - uri: string - } -} + uri: string, + }, +}; type CheckSubscriptionStarted = { - type: ACTIONS.CHECK_SUBSCRIPTION_STARTED -} + type: ACTIONS.CHECK_SUBSCRIPTION_STARTED, +}; type CheckSubscriptionCompleted = { - type: ACTIONS.CHECK_SUBSCRIPTION_COMPLETED -} + type: ACTIONS.CHECK_SUBSCRIPTION_COMPLETED, +}; -export type Action = doChannelSubscribe | doChannelUnsubscribe | HasFetchedSubscriptions | setSubscriptionLatest | CheckSubscriptionStarted | CheckSubscriptionCompleted | Function; +export type Action = + | doChannelSubscribe + | doChannelUnsubscribe + | HasFetchedSubscriptions + | setSubscriptionLatest + | CheckSubscriptionStarted + | CheckSubscriptionCompleted + | Function; export type Dispatch = (action: Action) => any; const defaultState = { @@ -92,8 +99,13 @@ export default handleActions( action: setSubscriptionLatest ): SubscriptionState => ({ ...state, - subscriptions: state.subscriptions.map(subscription => subscription.channelName === action.data.subscription.channelName ? {...subscription, latest: action.data.uri} : subscription) - }) + subscriptions: state.subscriptions.map( + subscription => + subscription.channelName === action.data.subscription.channelName + ? { ...subscription, latest: action.data.uri } + : subscription + ), + }), }, defaultState ); -- 2.45.3 From 6e293fd04b6efbb3b9ec9d2a5faaa8ab8ba09e08 Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Tue, 6 Mar 2018 01:37:53 -0800 Subject: [PATCH 009/192] Fixed weird issue with flow throwing fallacious error --- src/renderer/page/file/view.jsx | 4 ++-- src/renderer/redux/actions/content.js | 4 ++-- src/renderer/redux/actions/subscriptions.js | 10 ++++++---- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/renderer/page/file/view.jsx b/src/renderer/page/file/view.jsx index 1de94e32a..670fd8e10 100644 --- a/src/renderer/page/file/view.jsx +++ b/src/renderer/page/file/view.jsx @@ -40,9 +40,9 @@ class FilePage extends React.PureComponent { props.checkSubscriptionLatest( { channelName: props.claim.channel_name, - uri: `${props.claim.channel_name}#${props.claim.value.publisherSignature.certificateId}`, + uri: buildURI({ contentName: props.claim.channel_name, claimId: props.claim.value.publisherSignature.certificateId }, false), }, - `${props.claim.name}#${props.claim.claim_id}` + buildURI({ contentName: props.claim.name, claimId: props.claim.claim_id }, false) ); } diff --git a/src/renderer/redux/actions/content.js b/src/renderer/redux/actions/content.js index c369ceb1a..cc81b1ed1 100644 --- a/src/renderer/redux/actions/content.js +++ b/src/renderer/redux/actions/content.js @@ -365,9 +365,9 @@ export function doFetchClaimsByChannel(uri, page) { setSubscriptionLatest( { channelName: latest.channel_name, - uri: `${latest.channel_name}#${latest.value.publisherSignature.certificateId}`, + uri: buildURI({ contentName: latest.channel_name, claimId: latest.value.publisherSignature.certificateId }, false), }, - `${latest.name}#${latest.claim_id}` + buildURI({ contentName: latest.name, claimId: latest.claim_id }, false) ) ); } diff --git a/src/renderer/redux/actions/subscriptions.js b/src/renderer/redux/actions/subscriptions.js index 5e8fddb8c..c75ba1408 100644 --- a/src/renderer/redux/actions/subscriptions.js +++ b/src/renderer/redux/actions/subscriptions.js @@ -5,6 +5,7 @@ import { selectSubscriptions } from 'redux/selectors/subscriptions'; import Lbry from 'lbry'; import { doPurchaseUri } from 'redux/actions/content'; import { doNavigate } from 'redux/actions/navigation'; +import { buildURI } from 'lbryURI'; const CHECK_SUBSCRIPTIONS_INTERVAL = 10 * 60 * 1000; @@ -50,7 +51,7 @@ export const doCheckSubscription = (subscription: Subscription) => (dispatch: Di let count = subscription.latest ? claimsInChannel.reduce( (prev, cur, index) => - `${cur.name}#${cur.claim_id}` === subscription.latest ? index : prev, + buildURI({ contentName: cur.name, claimId: cur.claim_id}, false) === subscription.latest ? index : prev, -1 ) : 1; @@ -58,7 +59,7 @@ export const doCheckSubscription = (subscription: Subscription) => (dispatch: Di if (count !== 0) { if (!claimsInChannel[0].value.stream.metadata.fee) { dispatch( - doPurchaseUri(`${claimsInChannel[0].name}#${claimsInChannel[0].claim_id}`, { cost: 0 }) + doPurchaseUri(buildURI({ contentName: claimsInChannel[0].name, claimId: claimsInChannel[0].claim_id }, false), { cost: 0 }) ); } @@ -71,12 +72,13 @@ export const doCheckSubscription = (subscription: Subscription) => (dispatch: Di notif.onclick = () => { dispatch( doNavigate('/show', { - uri: `lbry://${claimsInChannel[0].name}#${claimsInChannel[0].claim_id}`, + uri: buildURI({ contentName: claimsInChannel[0].name, claimId: claimsInChannel[0].claim_id }, true), }) ); }; } + //$FlowIssue dispatch({ type: ACTIONS.CHECK_SUBSCRIPTION_COMPLETED, data: subscription, @@ -94,7 +96,7 @@ export const checkSubscriptionLatest = (channel: Subscription, uri: string) => ( if ( claimsInChannel && claimsInChannel.length && - `${claimsInChannel[0].name}#${claimsInChannel[0].claim_id}` === uri + buildURI({ contentName: claimsInChannel[0].name, claimId: claimsInChannel[0].claim_id }, false) === uri ) { dispatch(setSubscriptionLatest(channel, uri)); } -- 2.45.3 From 1e1c49436726a72d12196ad773750aadd0fbb708 Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Wed, 7 Mar 2018 11:19:45 -0800 Subject: [PATCH 010/192] Re-ran prettier --- src/renderer/page/file/view.jsx | 8 ++++++- src/renderer/redux/actions/content.js | 8 ++++++- src/renderer/redux/actions/subscriptions.js | 23 +++++++++++++++++---- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/src/renderer/page/file/view.jsx b/src/renderer/page/file/view.jsx index 670fd8e10..9742c9848 100644 --- a/src/renderer/page/file/view.jsx +++ b/src/renderer/page/file/view.jsx @@ -40,7 +40,13 @@ class FilePage extends React.PureComponent { props.checkSubscriptionLatest( { channelName: props.claim.channel_name, - uri: buildURI({ contentName: props.claim.channel_name, claimId: props.claim.value.publisherSignature.certificateId }, false), + uri: buildURI( + { + contentName: props.claim.channel_name, + claimId: props.claim.value.publisherSignature.certificateId, + }, + false + ), }, buildURI({ contentName: props.claim.name, claimId: props.claim.claim_id }, false) ); diff --git a/src/renderer/redux/actions/content.js b/src/renderer/redux/actions/content.js index cc81b1ed1..9962d7e69 100644 --- a/src/renderer/redux/actions/content.js +++ b/src/renderer/redux/actions/content.js @@ -365,7 +365,13 @@ export function doFetchClaimsByChannel(uri, page) { setSubscriptionLatest( { channelName: latest.channel_name, - uri: buildURI({ contentName: latest.channel_name, claimId: latest.value.publisherSignature.certificateId }, false), + uri: buildURI( + { + contentName: latest.channel_name, + claimId: latest.value.publisherSignature.certificateId, + }, + false + ), }, buildURI({ contentName: latest.name, claimId: latest.claim_id }, false) ) diff --git a/src/renderer/redux/actions/subscriptions.js b/src/renderer/redux/actions/subscriptions.js index c75ba1408..5dca7d859 100644 --- a/src/renderer/redux/actions/subscriptions.js +++ b/src/renderer/redux/actions/subscriptions.js @@ -51,7 +51,10 @@ export const doCheckSubscription = (subscription: Subscription) => (dispatch: Di let count = subscription.latest ? claimsInChannel.reduce( (prev, cur, index) => - buildURI({ contentName: cur.name, claimId: cur.claim_id}, false) === subscription.latest ? index : prev, + buildURI({ contentName: cur.name, claimId: cur.claim_id }, false) === + subscription.latest + ? index + : prev, -1 ) : 1; @@ -59,7 +62,13 @@ export const doCheckSubscription = (subscription: Subscription) => (dispatch: Di if (count !== 0) { if (!claimsInChannel[0].value.stream.metadata.fee) { dispatch( - doPurchaseUri(buildURI({ contentName: claimsInChannel[0].name, claimId: claimsInChannel[0].claim_id }, false), { cost: 0 }) + doPurchaseUri( + buildURI( + { contentName: claimsInChannel[0].name, claimId: claimsInChannel[0].claim_id }, + false + ), + { cost: 0 } + ) ); } @@ -72,7 +81,10 @@ export const doCheckSubscription = (subscription: Subscription) => (dispatch: Di notif.onclick = () => { dispatch( doNavigate('/show', { - uri: buildURI({ contentName: claimsInChannel[0].name, claimId: claimsInChannel[0].claim_id }, true), + uri: buildURI( + { contentName: claimsInChannel[0].name, claimId: claimsInChannel[0].claim_id }, + true + ), }) ); }; @@ -96,7 +108,10 @@ export const checkSubscriptionLatest = (channel: Subscription, uri: string) => ( if ( claimsInChannel && claimsInChannel.length && - buildURI({ contentName: claimsInChannel[0].name, claimId: claimsInChannel[0].claim_id }, false) === uri + buildURI( + { contentName: claimsInChannel[0].name, claimId: claimsInChannel[0].claim_id }, + false + ) === uri ) { dispatch(setSubscriptionLatest(channel, uri)); } -- 2.45.3 From 3f8f25dc431adf131c2006419af463b53bab1455 Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Wed, 7 Mar 2018 11:41:14 -0800 Subject: [PATCH 011/192] let --> const --- src/renderer/redux/actions/content.js | 2 +- src/renderer/redux/actions/subscriptions.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/renderer/redux/actions/content.js b/src/renderer/redux/actions/content.js index 9962d7e69..bdf831a03 100644 --- a/src/renderer/redux/actions/content.js +++ b/src/renderer/redux/actions/content.js @@ -360,7 +360,7 @@ export function doFetchClaimsByChannel(uri, page) { const { claims_in_channel: claimsInChannel, returned_page: returnedPage } = claimResult; if (claimsInChannel && claimsInChannel.length) { - let latest = claimsInChannel[0]; + const latest = claimsInChannel[0]; dispatch( setSubscriptionLatest( { diff --git a/src/renderer/redux/actions/subscriptions.js b/src/renderer/redux/actions/subscriptions.js index 5dca7d859..650f98a9b 100644 --- a/src/renderer/redux/actions/subscriptions.js +++ b/src/renderer/redux/actions/subscriptions.js @@ -48,7 +48,7 @@ export const doCheckSubscription = (subscription: Subscription) => (dispatch: Di const claimResult = result[subscription.uri] || {}; const { claims_in_channel: claimsInChannel } = claimResult; - let count = subscription.latest + const count = subscription.latest ? claimsInChannel.reduce( (prev, cur, index) => buildURI({ contentName: cur.name, claimId: cur.claim_id }, false) === -- 2.45.3 From 174285aea8703726bd46bcec0bea863aff145ff3 Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Wed, 7 Mar 2018 12:02:53 -0800 Subject: [PATCH 012/192] Reduce unnecessary api calls --- src/renderer/page/file/index.js | 2 ++ src/renderer/page/file/view.jsx | 32 +++++++++++++++++++------------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/renderer/page/file/index.js b/src/renderer/page/file/index.js index eb5dd0fd4..37fb13c7f 100644 --- a/src/renderer/page/file/index.js +++ b/src/renderer/page/file/index.js @@ -14,6 +14,7 @@ import { makeSelectCostInfoForUri } from 'redux/selectors/cost_info'; import { selectShowNsfw } from 'redux/selectors/settings'; import FilePage from './view'; import { makeSelectCurrentParam } from 'redux/selectors/navigation'; +import { selectSubscriptions } from 'redux/selectors/subscriptions'; const select = (state, props) => ({ claim: makeSelectClaimForUri(props.uri)(state), @@ -24,6 +25,7 @@ const select = (state, props) => ({ tab: makeSelectCurrentParam('tab')(state), fileInfo: makeSelectFileInfoForUri(props.uri)(state), rewardedContentClaimIds: selectRewardContentClaimIds(state, props), + subscriptions: selectSubscriptions(state), }); const perform = dispatch => ({ diff --git a/src/renderer/page/file/view.jsx b/src/renderer/page/file/view.jsx index 9742c9848..069a0dfdc 100644 --- a/src/renderer/page/file/view.jsx +++ b/src/renderer/page/file/view.jsx @@ -37,19 +37,25 @@ class FilePage extends React.PureComponent { } checkSubscriptionLatest(props) { - props.checkSubscriptionLatest( - { - channelName: props.claim.channel_name, - uri: buildURI( - { - contentName: props.claim.channel_name, - claimId: props.claim.value.publisherSignature.certificateId, - }, - false - ), - }, - buildURI({ contentName: props.claim.name, claimId: props.claim.claim_id }, false) - ); + if ( + props.subscriptions + .map(subscription => subscription.channelName) + .indexOf(props.claim.channel_name) !== -1 + ) { + props.checkSubscriptionLatest( + { + channelName: props.claim.channel_name, + uri: buildURI( + { + contentName: props.claim.channel_name, + claimId: props.claim.value.publisherSignature.certificateId, + }, + false + ), + }, + buildURI({ contentName: props.claim.name, claimId: props.claim.claim_id }, false) + ); + } } render() { -- 2.45.3 From b9f4d7b307ba15a2f3115b5e49902d02c7b495a3 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Wed, 7 Mar 2018 18:03:45 -0500 Subject: [PATCH 013/192] chore: migrate to AppImage and update publish workflow (#1010) The app now uses AppImage instead of .deb files for Linux. Thanks to this change, the app supports now auto-updates on Linux too. The publishing workflow has been updated. It uses now the publishing mechanisms offered by electron-builder. --- .flowconfig | 3 +- .gitignore | 1 + .travis.yml | 71 +- build/build.sh | 2 +- build/downloadDaemon.js | 47 + electron-builder.json | 30 +- package.json | 56 +- src/main/createWindow.js | 27 +- src/main/index.js | 7 +- src/main/menu/setupContextMenu.js | 3 +- src/renderer/app.js | 3 +- src/renderer/component/fileList/view.jsx | 4 +- src/renderer/index.js | 31 +- src/renderer/redux/actions/app.js | 93 +- src/renderer/redux/actions/settings.js | 27 +- webpack.renderer.additions.js | 3 +- yarn.lock | 2684 +++++++++++++++------- 17 files changed, 2064 insertions(+), 1028 deletions(-) create mode 100644 build/downloadDaemon.js diff --git a/.flowconfig b/.flowconfig index 899a096e6..f98db8793 100644 --- a/.flowconfig +++ b/.flowconfig @@ -1,10 +1,9 @@ [ignore] -.*/node_modules/** [include] [libs] -flow-typed +./flow-typed [lints] diff --git a/.gitignore b/.gitignore index 91e5403cc..4e8a81944 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ /node_modules /dist /build/daemon.ver +/build/daemon.zip /build/venv *.pyc /static/daemon/lbrynet* diff --git a/.travis.yml b/.travis.yml index 9e6873e39..1e86c783d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,28 +1,45 @@ -env: - global: - - TRANSIFEX_USER: api - - secure: u6gwnZlPGJLnvpoPPCpUZ+jBPajQuIW1+aq6UGW57z54AUjTAECxaYpqcGTGtDBjYark/yeiso887wP/EmJva7hMHeNMf6uLqwzP3YFsIv/Iv+9c1f4MXbJNgOrEKN834o/BdkD4ifi9CCiH9uPPVYGPx1bvfaxGpcHmQXdW4F4S0uj+jePB257mt+afGiNlz9wET6kWJKNNZf/4BNmefldVNq7h6oTSLsyO1TBhDcvSjatpKIwmXUNQfSUTFWvrtpWUB/m/IzitGuUtrt82vU2fPl7tuH6BHNrNp58MINjFzXXJLC+mMybb2UBDIAuc3+k7vj4J0U2rkcTloxDNCKNmYa1jBogOKBRgGp98Ct7E0V2vuLGAPniUbvBcCGK1wwed7uwDjsz3YNCGxUEcyyWc3OVDgN/up4+gXHxkh9FTpZy8Q3rSZx4Lwj700impBUQIVh/5p7Vgv+bSUdOeVRAMlcP9yT83jX50w9LkJMfICFPNv1tOZ3/SOnnB+JdW/ahpplFI4Z68/fBLttZTeaNcU4f28oJvPer8Wll+Elx5kxwLqLbwVUFNlxTxY1LYnPB7SPjGxrFNy3mVTRq5Pxp1hMiTZF4TlapkfHgR+gEzk2wpcJGmub70tW2baZaJF0jDBWIh7GXV+EGve53BKDhpX2Z6jTK0gkhrSUW1MT8= - - secure: h1r9Qzv2xHRQl7nDHcscB4qDv7KlF/ncgHko1YuoY4oLZipBV8mzQXDmn3nlMKwaKOe1/Tty/bjoZexkWict4cwKBzU7/1HtJeMa6nxRICuS6DiVhLUNGZEddK6jQLxeEZFxkFPSCZyjybPWtasF8f8jd0lqqLIL4/FcIVV56aRCKAsUwCbedxi8Vnc19l74xjaQIK82xBFYOQPK078OBovk9DDOnicTjMulUo3/pKEZD1njSdcEhfSRv+MFE+31B/a6lpoLo7twPlyzLMfpo30NlEzIN0TeMAk44e4PV6DYg0wntC2GJ21p4BqMnDGocwnZwm7gpjflzUZdW6hF0esGLcqOdbyJLUb3rNX9AzQmn0p9KwDC3S80peZFxSiuLJGL8eivceVDUK/jwWinu3OHDJ/eO5iMDm9odm2ALemPtrDTSlRNT8HzNCY9PQTU9Dhdm4Q/dGDsRPWibFJSJ/qGKhVgadk2CUEAPua0hB1zZ556PkTGx4R1JDscgFDAkgemzgKl4Z/4qK3xGDoEtz1HmBlvQtn+B/PuhA2essADj0iTDiItxb7AYTA7EzsHEcRMmrbYarZ3Eh2onWy2GOpAGRN5Xl9cBIDbibcSC6BLI1m2PcLABpP7DhUX4bJbsVNSiGesHEU7o9Dgn8Ig09eHW/8F9i0VVoGUZXxKMJ8= - -os: linux -dist: xenial - -branches: - only: - - "/^v\\d+\\.\\d+\\.\\d+$/" - -install: -- rvm install 2.3.1 - +matrix: + include: + - os: osx + osx_image: xcode9.2 + language: node_js + node_js: "9" + env: + - ELECTRON_CACHE=$HOME/.cache/electron + - ELECTRON_BUILDER_CACHE=$HOME/.cache/electron-builder + - os: linux + services: docker + language: generic +before_cache: + - rm -rf $HOME/.cache/electron-builder/wine +cache: + directories: + - node_modules + - $HOME/.cache/electron + - $HOME/.cache/electron-builder +before_install: + - | + if [ "$TRAVIS_OS_NAME" == "osx" ]; then + mkdir -p /tmp/git-lfs && curl -L https://github.com/github/git-lfs/releases/download/v2.3.1/git-lfs-$([ "$TRAVIS_OS_NAME" == "linux" ] && echo "linux" || echo "darwin")-amd64-2.3.1.tar.gz | tar -xz -C /tmp/git-lfs --strip-components 1 + export PATH="/tmp/git-lfs:$PATH" + fi +before_script: + - git lfs pull script: -- rvm use 2.3.1 && gem install danger --version '~> 4.0' && danger -- FULL_BUILD=true ./build.sh - -sudo: required -after_success: -- pip install virtualenv -- virtualenv ~/env -- source ~/env/bin/activate -- pip install transifex-client -- sudo echo $'[https://www.transifex.com]\nhostname = https://www.transifex.com\nusername= '"$TRANSIFEX_USER"$'\npassword = '"$TRANSIFEX_PASSWORD"$'\ntoken = '"$TRANSIFEX_API_TOKEN"$'\n' > ~/.transifexrc -- tx push -s + - | + if [ "$TRAVIS_OS_NAME" == "linux" ]; then + docker run --rm \ + --env-file <(env | grep -iE 'DEBUG|NODE_|ELECTRON_|YARN_|NPM_|CI|CIRCLE|TRAVIS|APPVEYOR_|CSC_|GH_|GITHUB_|BT_|AWS_|STRIP|BUILD_') \ + -v ${PWD}:/project \ + -v ~/.cache/electron:/root/.cache/electron \ + -v ~/.cache/electron-builder:/root/.cache/electron-builder \ + electronuserland/builder:wine \ + /bin/bash -c "yarn --link-duplicates --pure-lockfile && yarn build --linux --win" + else + yarn build + fi +branches: + except: + - "/^v\\d+\\.\\d+\\.\\d+$/" +addons: + artifacts: true \ No newline at end of file diff --git a/build/build.sh b/build/build.sh index 1ace2ad48..5d9edcc5a 100755 --- a/build/build.sh +++ b/build/build.sh @@ -59,7 +59,7 @@ DAEMON_VER_PATH="$BUILD_DIR/daemon.ver" echo "$DAEMON_VER_PATH" if [[ ! -f $DAEMON_VER_PATH || ! -f $ROOT/static/daemon/lbrynet-daemon || "$(< "$DAEMON_VER_PATH")" != "$DAEMON_VER" ]]; then curl -sL -o "$BUILD_DIR/daemon.zip" "$DAEMON_URL" - unzip "$BUILD_DIR/daemon.zip" -d "$ROOT/static/daemon/" + unzip -o "$BUILD_DIR/daemon.zip" -d "$ROOT/static/daemon/" rm "$BUILD_DIR/daemon.zip" echo "$DAEMON_VER" > "$DAEMON_VER_PATH" else diff --git a/build/downloadDaemon.js b/build/downloadDaemon.js new file mode 100644 index 000000000..35620b620 --- /dev/null +++ b/build/downloadDaemon.js @@ -0,0 +1,47 @@ +/* eslint-disable no-console,import/no-commonjs */ +const path = require('path'); +const fs = require('fs'); +const packageJSON = require('../package.json'); +// eslint-disable-next-line import/no-extraneous-dependencies +const axios = require('axios'); +// eslint-disable-next-line import/no-extraneous-dependencies +const decompress = require('decompress'); +const os = require('os'); + +const daemonURLTemplate = packageJSON.lbrySettings.lbrynetDaemonUrlTemplate; +const daemonVersion = packageJSON.lbrySettings.lbrynetDaemonVersion; +let currentPlatform = os.platform(); +if (currentPlatform === 'darwin') currentPlatform = 'macos'; +if (currentPlatform === 'win32') currentPlatform = 'windows'; + +const daemonURL = daemonURLTemplate + .replace(/DAEMONVER/g, daemonVersion) + .replace(/OSNAME/g, currentPlatform); +const tmpZipPath = 'build/daemon.zip'; + +console.log('\x1b[34minfo\x1b[0m Downloading daemon...'); +axios + .request({ + responseType: 'arraybuffer', + url: daemonURL, + method: 'get', + headers: { + 'Content-Type': 'application/zip', + }, + }) + .then(result => { + fs.writeFileSync(tmpZipPath, result.data); + return true; + }) + .then(() => { + decompress(tmpZipPath, 'static/daemon', { + filter: file => + path.basename(file.path).replace(path.extname(file.path), '') === 'lbrynet-daemon', + }); + }) + .then(() => { + console.log('\x1b[32msuccess\x1b[0m Daemon downloaded!'); + }) + .catch(error => { + console.error(`\x1b[31merror\x1b[0m Daemon download failed due to: \x1b[35m${error}\x1b[0m`); + }); diff --git a/electron-builder.json b/electron-builder.json index 011d1f3b3..2d6386c11 100644 --- a/electron-builder.json +++ b/electron-builder.json @@ -1,11 +1,13 @@ { "appId": "io.lbry.LBRY", - "publish": { + "productName": "LBRY", + "publish": [{ "provider": "s3", "bucket": "releases.lbry.io", "path": "app/latest" - }, + }, "github"], "mac": { + "target": "dmg", "category": "public.app-category.entertainment" }, "dmg": { @@ -28,36 +30,24 @@ "width": 500, "height": 300 }, - "background": "build/background.png" + "background": "./build/background.png" }, "protocols": [ { - "name": "lbry", + "name": "LBRY URI", "schemes": ["lbry"], "role": "Viewer" } ], "linux": { - "target": "deb", - "category": "Video;AudioVideo;", + "target": "AppImage", + "category": "AudioVideo;Video", "desktop": { - "MimeType": "x-scheme-handler/lbry", - "Exec": "/opt/LBRY/lbry %U" + "MimeType": "x-scheme-handler/lbry;" } }, - "deb": { - "depends": [ - "gconf2", - "gconf-service", - "libnotify4", - "libappindicator1", - "libxtst6", - "libnss3", - "libsecret-1-0" - ] - }, "nsis": { "perMachine": true }, - "artifactName": "${productName}_${version}_${arch}.${ext}" + "artifactName": "${productName}_${version}.${ext}" } diff --git a/package.json b/package.json index 8b82a3891..abc06fca8 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "LBRY", + "name": "lbry-app", "version": "0.20.0", "description": "A browser for the LBRY network, a digital marketplace controlled by its users.", "homepage": "https://lbry.io/", @@ -21,7 +21,8 @@ "compile": "electron-webpack && yarn extract-langs", "build": "yarn compile && electron-builder build", "build:dir": "yarn build -- --dir -c.compression=store -c.mac.identity=null", - "postinstall": "electron-builder install-app-deps", + "release": "yarn compile && electron-builder build", + "postinstall": "electron-builder install-app-deps && node build/downloadDaemon.js", "lint": "eslint 'src/**/*.{js,jsx}' --fix", "format": "prettier 'src/**/*.{js,jsx,scss,json}' --write" }, @@ -33,16 +34,17 @@ "classnames": "^2.2.5", "country-data": "^0.0.31", "electron-dl": "^1.6.0", + "electron-is-dev": "^0.3.0", "electron-log": "^2.2.12", - "electron-publisher-s3": "^19.47.0", - "electron-updater": "^2.18.2", + "electron-publisher-s3": "^20.2.0", + "electron-updater": "^2.21.0", "find-process": "^1.1.0", "formik": "^0.10.4", "from2": "^2.3.0", "install": "^0.10.2", "jayson": "^2.0.2", "jshashes": "^1.0.7", - "keytar-prebuild": "^4.0.4", + "keytar-prebuild": "^4.1.1", "localforage": "^1.5.0", "mixpanel-browser": "^2.17.1", "moment": "^2.20.1", @@ -72,43 +74,41 @@ "y18n": "^4.0.0" }, "devDependencies": { - "babel-eslint": "^8.0.3", - "babel-plugin-module-resolver": "^3.0.0", - "babel-plugin-react-require": "^3.0.0", + "axios": "^0.18.0", + "babel-eslint": "^8.2.2", + "babel-plugin-module-resolver": "^3.1.0", "babel-polyfill": "^6.20.0", "babel-preset-env": "^1.6.1", "babel-preset-react": "^6.24.1", "babel-preset-stage-2": "^6.18.0", + "decompress": "^4.2.0", "devtron": "^1.4.0", - "electron": "^1.7.11", - "electron-builder": "^19.55.2", - "electron-devtools-installer": "^2.2.1", - "electron-webpack": "^1.11.0", - "eslint": "^4.13.1", + "electron": "^1.8.3", + "electron-builder": "^20.3.1", + "electron-devtools-installer": "^2.2.3", + "electron-webpack": "^1.13.0", + "eslint": "^4.18.2", "eslint-config-airbnb": "^16.1.0", "eslint-config-prettier": "^2.9.0", - "eslint-import-resolver-webpack": "^0.8.3", - "eslint-plugin-flowtype": "^2.40.1", - "eslint-plugin-import": "^2.8.0", + "eslint-import-resolver-webpack": "^0.8.4", + "eslint-plugin-flowtype": "^2.46.1", + "eslint-plugin-import": "^2.9.0", "eslint-plugin-jsx-a11y": "^6.0.3", - "eslint-plugin-prettier": "^2.4.0", - "eslint-plugin-react": "^7.5.1", - "flow-babel-webpack-plugin": "^1.1.0", - "flow-bin": "^0.61.0", - "flow-typed": "^2.2.3", + "eslint-plugin-prettier": "^2.6.0", + "eslint-plugin-react": "^7.7.0", + "flow-babel-webpack-plugin": "^1.1.1", + "flow-bin": "^0.66.0", + "flow-typed": "^2.3.0", "husky": "^0.14.3", "i18n-extract": "^0.5.1", "json-loader": "^0.5.4", - "lint-staged": "^6.0.0", + "lint-staged": "^7.0.0", "node-loader": "^0.6.0", "node-sass": "^4.7.2", - "prettier": "^1.4.2", - "sass-loader": "^6.0.6", + "prettier": "^1.11.1", + "sass-loader": "^6.0.7", "webpack": "^3.10.0", - "webpack-build-notifier": "^0.1.18" - }, - "resolutions": { - "webpack/webpack-sources": "1.0.1" + "webpack-build-notifier": "^0.1.23" }, "engines": { "node": ">=6", diff --git a/src/main/createWindow.js b/src/main/createWindow.js index 8521b3207..ce54fe053 100644 --- a/src/main/createWindow.js +++ b/src/main/createWindow.js @@ -1,4 +1,5 @@ import { app, BrowserWindow, dialog } from 'electron'; +import isDev from 'electron-is-dev'; import setupBarMenu from './menu/setupBarMenu'; import setupContextMenu from './menu/setupContextMenu'; @@ -12,20 +13,18 @@ export default appState => { }; // Disable renderer process's webSecurity on development to enable CORS. - windowConfiguration = - process.env.NODE_ENV === 'development' - ? { - ...windowConfiguration, - webPreferences: { - webSecurity: false, - }, - } - : windowConfiguration; + windowConfiguration = isDev + ? { + ...windowConfiguration, + webPreferences: { + webSecurity: false, + }, + } + : windowConfiguration; - const rendererURL = - process.env.NODE_ENV === 'development' - ? `http://localhost:${process.env.ELECTRON_WEBPACK_WDS_PORT}` - : `file://${__dirname}/index.html`; + const rendererURL = isDev + ? `http://localhost:${process.env.ELECTRON_WEBPACK_WDS_PORT}` + : `file://${__dirname}/index.html`; let window = new BrowserWindow(windowConfiguration); @@ -84,7 +83,7 @@ export default appState => { window.webContents.on('did-finish-load', () => { window.webContents.send('open-uri-requested', deepLinkingURI, true); window.webContents.session.setUserAgent(`LBRY/${app.getVersion()}`); - if (process.env.NODE_ENV === 'development') { + if (isDev) { window.webContents.openDevTools(); } }); diff --git a/src/main/index.js b/src/main/index.js index d068e87e0..22875c708 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -7,6 +7,7 @@ import url from 'url'; import https from 'https'; import { shell, app, ipcMain, dialog } from 'electron'; import { autoUpdater } from 'electron-updater'; +import isDev from 'electron-is-dev'; import Daemon from './Daemon'; import createTray from './createTray'; import createWindow from './createWindow'; @@ -64,15 +65,15 @@ app.on('ready', async () => { dialog.showErrorBox( 'Daemon has Exited', 'The daemon may have encountered an unexpected error, or another daemon instance is already running. \n\n' + - 'For more information please visit: \n' + - 'https://lbry.io/faq/startup-troubleshooting' + 'For more information please visit: \n' + + 'https://lbry.io/faq/startup-troubleshooting' ); app.quit(); } }); daemon.launch(); } - if (process.env.NODE_ENV === 'development') { + if (isDev) { await installExtensions(); } rendererWindow = createWindow(appState); diff --git a/src/main/menu/setupContextMenu.js b/src/main/menu/setupContextMenu.js index 01f540d81..658ac731a 100644 --- a/src/main/menu/setupContextMenu.js +++ b/src/main/menu/setupContextMenu.js @@ -1,5 +1,6 @@ // @flow import { Menu, BrowserWindow } from 'electron'; +import isDev from 'electron-is-dev'; export default (rendererWindow: BrowserWindow) => { rendererWindow.webContents.on('context-menu', (e, params) => { @@ -17,7 +18,7 @@ export default (rendererWindow: BrowserWindow) => { }, ]; - if (process.env.NODE_ENV === 'development') { + if (isDev) { template.push(...developmentTemplateAddition); } diff --git a/src/renderer/app.js b/src/renderer/app.js index 75752fac7..9933b47eb 100644 --- a/src/renderer/app.js +++ b/src/renderer/app.js @@ -2,6 +2,7 @@ import store from 'store'; import { remote } from 'electron'; import Path from 'path'; import y18n from 'y18n'; +import isDev from 'electron-is-dev'; const env = process.env.NODE_ENV || 'production'; const i18n = y18n({ @@ -22,7 +23,7 @@ const app = { }; // Workaround for https://github.com/electron-userland/electron-webpack/issues/52 -if (env !== 'development') { +if (!isDev) { window.staticResourcesPath = Path.join(remote.app.getAppPath(), '../static').replace( /\\/g, '\\\\' diff --git a/src/renderer/component/fileList/view.jsx b/src/renderer/component/fileList/view.jsx index afb446323..f803ee141 100644 --- a/src/renderer/component/fileList/view.jsx +++ b/src/renderer/component/fileList/view.jsx @@ -23,7 +23,7 @@ class FileList extends React.PureComponent { return 1; } return 0; - }); + }); }, dateOld(fileInfos) { return fileInfos.slice().sort((fileInfo1, fileInfo2) => { @@ -35,7 +35,7 @@ class FileList extends React.PureComponent { return 1; } return 0; - }); + }); }, title(fileInfos) { return fileInfos.slice().sort((fileInfo1, fileInfo2) => { diff --git a/src/renderer/index.js b/src/renderer/index.js index 822f0b153..a5eadda32 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -14,9 +14,8 @@ import { doShowSnackBar, doAutoUpdate, } from 'redux/actions/app'; -import { doUpdateIsNightAsync } from 'redux/actions/settings'; import { doNavigate } from 'redux/actions/navigation'; -import { doDownloadLanguages } from 'redux/actions/settings'; +import { doDownloadLanguages, doUpdateIsNightAsync } from 'redux/actions/settings'; import { doUserEmailVerify } from 'redux/actions/user'; import 'scss/all.scss'; import store from 'store'; @@ -27,11 +26,6 @@ const { autoUpdater } = remote.require('electron-updater'); autoUpdater.logger = remote.require('electron-log'); -window.addEventListener('contextmenu', event => { - contextMenu(remote.getCurrentWindow(), event.x, event.y, app.env === 'development'); - event.preventDefault(); -}); - ipcRenderer.on('open-uri-requested', (event, uri, newSession) => { if (uri && uri.startsWith('lbry://')) { if (uri.startsWith('lbry://?verify=')) { @@ -106,18 +100,17 @@ const init = () => { app.store.dispatch(doAutoUpdate()); }); - if (['win32', 'darwin'].includes(process.platform)) { - autoUpdater.on('update-available', () => { - console.log('Update available'); - }); - autoUpdater.on('update-not-available', () => { - console.log('Update not available'); - }); - autoUpdater.on('update-downloaded', () => { - console.log('Update downloaded'); - app.store.dispatch(doAutoUpdate()); - }); - } + autoUpdater.on('update-available', () => { + console.log('Update available'); + }); + autoUpdater.on('update-not-available', () => { + console.log('Update not available'); + }); + autoUpdater.on('update-downloaded', () => { + console.log('Update downloaded'); + app.store.dispatch(doAutoUpdate()); + }); + app.store.dispatch(doUpdateIsNightAsync()); app.store.dispatch(doDownloadLanguages()); diff --git a/src/renderer/redux/actions/app.js b/src/renderer/redux/actions/app.js index 08009c896..1d9b55f8e 100644 --- a/src/renderer/redux/actions/app.js +++ b/src/renderer/redux/actions/app.js @@ -1,9 +1,9 @@ -/* eslint-disable import/no-commonjs */ +import isDev from 'electron-is-dev'; +import Lbry from 'lbry'; +import path from 'path'; import * as ACTIONS from 'constants/action_types'; import * as MODALS from 'constants/modal_types'; import { ipcRenderer, remote } from 'electron'; -import Lbry from 'lbry'; -import Path from 'path'; import { doFetchRewardedContent } from 'redux/actions/content'; import { doFetchFileInfosAndPublishedClaims } from 'redux/actions/file_info'; import { doAuthNavigate } from 'redux/actions/navigation'; @@ -11,22 +11,20 @@ import { doFetchDaemonSettings } from 'redux/actions/settings'; import { doAuthenticate } from 'redux/actions/user'; import { doBalanceSubscribe } from 'redux/actions/wallet'; import { doPause } from 'redux/actions/media'; - import { selectCurrentModal, selectIsUpgradeSkipped, - selectRemoteVersion, selectUpdateUrl, selectUpgradeDownloadItem, selectUpgradeDownloadPath, selectUpgradeFilename, selectAutoUpdateDeclined, } from 'redux/selectors/app'; +import { lbrySettings as config } from 'package.json'; const { autoUpdater } = remote.require('electron-updater'); const { download } = remote.require('electron-dl'); const Fs = remote.require('fs'); -const { lbrySettings: config } = require('package.json'); const CHECK_UPGRADE_INTERVAL = 10 * 60 * 1000; @@ -84,25 +82,19 @@ export function doDownloadUpgradeRequested() { const autoUpdateDeclined = selectAutoUpdateDeclined(state); - if (['win32', 'darwin'].includes(process.platform)) { - // electron-updater behavior - if (autoUpdateDeclined) { - // The user declined an update before, so show the "confirm" dialog - dispatch({ - type: ACTIONS.OPEN_MODAL, - data: { modal: MODALS.AUTO_UPDATE_CONFIRM }, - }); - } else { - // The user was never shown the original update dialog (e.g. because they were - // watching a video). So show the inital "update downloaded" dialog. - dispatch({ - type: ACTIONS.OPEN_MODAL, - data: { modal: MODALS.AUTO_UPDATE_DOWNLOADED }, - }); - } + if (autoUpdateDeclined) { + // The user declined an update before, so show the "confirm" dialog + dispatch({ + type: ACTIONS.OPEN_MODAL, + data: { modal: MODALS.AUTO_UPDATE_CONFIRM }, + }); } else { - // Old behavior for Linux - dispatch(doDownloadUpgrade()); + // The user was never shown the original update dialog (e.g. because they were + // watching a video). So show the initial "update downloaded" dialog. + dispatch({ + type: ACTIONS.OPEN_MODAL, + data: { modal: MODALS.AUTO_UPDATE_DOWNLOADED }, + }); } }; } @@ -111,7 +103,7 @@ export function doDownloadUpgrade() { return (dispatch, getState) => { const state = getState(); // Make a new directory within temp directory so the filename is guaranteed to be available - const dir = Fs.mkdtempSync(remote.app.getPath('temp') + Path.sep); + const dir = Fs.mkdtempSync(remote.app.getPath('temp') + path.sep); const upgradeFilename = selectUpgradeFilename(state); const options = { @@ -129,7 +121,7 @@ export function doDownloadUpgrade() { type: ACTIONS.UPGRADE_DOWNLOAD_COMPLETED, data: { downloadItem, - path: Path.join(dir, upgradeFilename), + path: path.join(dir, upgradeFilename), }, }); }); @@ -147,8 +139,7 @@ export function doDownloadUpgrade() { } export function doAutoUpdate() { - return function(dispatch, getState) { - const state = getState(); + return dispatch => { dispatch({ type: ACTIONS.AUTO_UPDATE_DOWNLOADED, }); @@ -161,8 +152,7 @@ export function doAutoUpdate() { } export function doAutoUpdateDeclined() { - return function(dispatch, getState) { - const state = getState(); + return dispatch => { dispatch({ type: ACTIONS.AUTO_UPDATE_DECLINED, }); @@ -183,6 +173,7 @@ export function doCancelUpgrade() { try { upgradeDownloadItem.cancel(); } catch (err) { + // eslint-disable-next-line no-console console.error(err); // Do nothing } @@ -199,47 +190,11 @@ export function doCheckUpgradeAvailable() { type: ACTIONS.CHECK_UPGRADE_START, }); - if (['win32', 'darwin'].includes(process.platform)) { - // On Windows and Mac, updates happen silently through - // electron-updater. - const autoUpdateDeclined = selectAutoUpdateDeclined(state); + const autoUpdateDeclined = selectAutoUpdateDeclined(state); - if (!autoUpdateDeclined) { - autoUpdater.checkForUpdates(); - } - return; + if (!autoUpdateDeclined && !isDev) { + autoUpdater.checkForUpdates(); } - - const success = ({ remoteVersion, upgradeAvailable }) => { - dispatch({ - type: ACTIONS.CHECK_UPGRADE_SUCCESS, - data: { - upgradeAvailable, - remoteVersion, - }, - }); - - if ( - upgradeAvailable && - !selectCurrentModal(state) && - (!selectIsUpgradeSkipped(state) || remoteVersion !== selectRemoteVersion(state)) - ) { - dispatch({ - type: ACTIONS.OPEN_MODAL, - data: { - modal: MODALS.UPGRADE, - }, - }); - } - }; - - const fail = () => { - dispatch({ - type: ACTIONS.CHECK_UPGRADE_FAIL, - }); - }; - - Lbry.getAppVersionInfo().then(success, fail); }; } diff --git a/src/renderer/redux/actions/settings.js b/src/renderer/redux/actions/settings.js index da4ed52a0..e0fe6b1c5 100644 --- a/src/renderer/redux/actions/settings.js +++ b/src/renderer/redux/actions/settings.js @@ -56,6 +56,20 @@ export function doGetThemes() { }; } +export function doUpdateIsNight() { + const momentNow = moment(); + return { + type: ACTIONS.UPDATE_IS_NIGHT, + data: { + isNight: (() => { + const startNightMoment = moment('21:00', 'HH:mm'); + const endNightMoment = moment('8:00', 'HH:mm'); + return !(momentNow.isAfter(endNightMoment) && momentNow.isBefore(startNightMoment)); + })(), + }, + }; +} + export function doUpdateIsNightAsync() { return dispatch => { dispatch(doUpdateIsNight()); @@ -66,19 +80,6 @@ export function doUpdateIsNightAsync() { }; } -export function doUpdateIsNight() { - const momentNow = moment(); - return { - type: ACTIONS.UPDATE_IS_NIGHT, - data: { isNight: (() => { - const startNightMoment = moment('21:00', 'HH:mm'); - const endNightMoment = moment('8:00', 'HH:mm'); - return !(momentNow.isAfter(endNightMoment) && momentNow.isBefore(startNightMoment)); - })(), - }, - }; -} - export function doDownloadLanguage(langFile) { return dispatch => { const destinationPath = `${app.i18n.directory}/${langFile}`; diff --git a/webpack.renderer.additions.js b/webpack.renderer.additions.js index aebfe1576..476a8b242 100644 --- a/webpack.renderer.additions.js +++ b/webpack.renderer.additions.js @@ -1,5 +1,6 @@ const path = require('path'); const FlowFlowPlugin = require('./flowtype-plugin'); +const isDev = require('electron-is-dev'); const ELECTRON_RENDERER_PROCESS_ROOT = path.resolve(__dirname, 'src/renderer/'); @@ -23,7 +24,7 @@ module.exports = { }, }; -if (process.env.NODE_ENV === 'development') { +if (isDev) { module.exports.plugins = [ new FlowFlowPlugin({ warn: true, diff --git a/yarn.lock b/yarn.lock index 7b2d79f2b..ef2ba3c1f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,82 +10,113 @@ version "1.0.1" resolved "https://registry.yarnpkg.com/7zip-bin-mac/-/7zip-bin-mac-1.0.1.tgz#3e68778bbf0926adc68159427074505d47555c02" -"7zip-bin-win@~2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/7zip-bin-win/-/7zip-bin-win-2.1.1.tgz#8acfc28bb34e53a9476b46ae85a97418e6035c20" +"7zip-bin-win@~2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/7zip-bin-win/-/7zip-bin-win-2.2.0.tgz#0b81c43e911100f3ece2ebac4f414ca95a572d5b" -"7zip-bin@^2.4.1": - version "2.4.1" - resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-2.4.1.tgz#88cf99736d35b104dab1d430c4edd1d51e58aade" +"7zip-bin@~3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-3.1.0.tgz#70814c6b6d44fef8b74be6fc64d3977a2eff59a5" optionalDependencies: "7zip-bin-linux" "~1.3.1" "7zip-bin-mac" "~1.0.1" - "7zip-bin-win" "~2.1.1" + "7zip-bin-win" "~2.2.0" "7zip@0.0.6": version "0.0.6" resolved "https://registry.yarnpkg.com/7zip/-/7zip-0.0.6.tgz#9cafb171af82329490353b4816f03347aa150a30" -"@babel/code-frame@7.0.0-beta.31": - version "7.0.0-beta.31" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.31.tgz#473d021ecc573a2cce1c07d5b509d5215f46ba35" +"@babel/code-frame@7.0.0-beta.40", "@babel/code-frame@^7.0.0-beta.35", "@babel/code-frame@^7.0.0-beta.40": + version "7.0.0-beta.40" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.40.tgz#37e2b0cf7c56026b4b21d3927cadf81adec32ac6" + dependencies: + "@babel/highlight" "7.0.0-beta.40" + +"@babel/generator@7.0.0-beta.40": + version "7.0.0-beta.40" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.40.tgz#ab61f9556f4f71dbd1138949c795bb9a21e302ea" + dependencies: + "@babel/types" "7.0.0-beta.40" + jsesc "^2.5.1" + lodash "^4.2.0" + source-map "^0.5.0" + trim-right "^1.0.1" + +"@babel/helper-function-name@7.0.0-beta.40": + version "7.0.0-beta.40" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.40.tgz#9d033341ab16517f40d43a73f2d81fc431ccd7b6" + dependencies: + "@babel/helper-get-function-arity" "7.0.0-beta.40" + "@babel/template" "7.0.0-beta.40" + "@babel/types" "7.0.0-beta.40" + +"@babel/helper-get-function-arity@7.0.0-beta.40": + version "7.0.0-beta.40" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.40.tgz#ac0419cf067b0ec16453e1274f03878195791c6e" + dependencies: + "@babel/types" "7.0.0-beta.40" + +"@babel/helper-module-imports@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.35.tgz#308e350e731752cdb4d0f058df1d704925c64e0a" + dependencies: + "@babel/types" "7.0.0-beta.35" + lodash "^4.2.0" + +"@babel/highlight@7.0.0-beta.40": + version "7.0.0-beta.40" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.40.tgz#b43d67d76bf46e1d10d227f68cddcd263786b255" dependencies: chalk "^2.0.0" esutils "^2.0.2" js-tokens "^3.0.0" -"@babel/helper-function-name@7.0.0-beta.31": - version "7.0.0-beta.31" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.31.tgz#afe63ad799209989348b1109b44feb66aa245f57" +"@babel/template@7.0.0-beta.40": + version "7.0.0-beta.40" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.40.tgz#034988c6424eb5c3268fe6a608626de1f4410fc8" dependencies: - "@babel/helper-get-function-arity" "7.0.0-beta.31" - "@babel/template" "7.0.0-beta.31" - "@babel/traverse" "7.0.0-beta.31" - "@babel/types" "7.0.0-beta.31" - -"@babel/helper-get-function-arity@7.0.0-beta.31": - version "7.0.0-beta.31" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.31.tgz#1176d79252741218e0aec872ada07efb2b37a493" - dependencies: - "@babel/types" "7.0.0-beta.31" - -"@babel/template@7.0.0-beta.31": - version "7.0.0-beta.31" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.31.tgz#577bb29389f6c497c3e7d014617e7d6713f68bda" - dependencies: - "@babel/code-frame" "7.0.0-beta.31" - "@babel/types" "7.0.0-beta.31" - babylon "7.0.0-beta.31" + "@babel/code-frame" "7.0.0-beta.40" + "@babel/types" "7.0.0-beta.40" + babylon "7.0.0-beta.40" lodash "^4.2.0" -"@babel/traverse@7.0.0-beta.31": - version "7.0.0-beta.31" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.31.tgz#db399499ad74aefda014f0c10321ab255134b1df" +"@babel/traverse@^7.0.0-beta.40": + version "7.0.0-beta.40" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.40.tgz#d140e449b2e093ef9fe1a2eecc28421ffb4e521e" dependencies: - "@babel/code-frame" "7.0.0-beta.31" - "@babel/helper-function-name" "7.0.0-beta.31" - "@babel/types" "7.0.0-beta.31" - babylon "7.0.0-beta.31" + "@babel/code-frame" "7.0.0-beta.40" + "@babel/generator" "7.0.0-beta.40" + "@babel/helper-function-name" "7.0.0-beta.40" + "@babel/types" "7.0.0-beta.40" + babylon "7.0.0-beta.40" debug "^3.0.1" - globals "^10.0.0" + globals "^11.1.0" invariant "^2.2.0" lodash "^4.2.0" -"@babel/types@7.0.0-beta.31": - version "7.0.0-beta.31" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.31.tgz#42c9c86784f674c173fb21882ca9643334029de4" +"@babel/types@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.35.tgz#cf933a9a9a38484ca724b335b88d83726d5ab960" dependencies: esutils "^2.0.2" lodash "^4.2.0" to-fast-properties "^2.0.0" -"@types/node@^7.0.18": - version "7.0.52" - resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.52.tgz#8990d3350375542b0c21a83cd0331e6a8fc86716" +"@babel/types@7.0.0-beta.40", "@babel/types@^7.0.0-beta.40": + version "7.0.0-beta.40" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.40.tgz#25c3d7aae14126abe05fcb098c65a66b6d6b8c14" + dependencies: + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^2.0.0" -"@types/webpack-env@^1.13.2": - version "1.13.2" - resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.13.2.tgz#c290b99dbef74df21b06671aea36e355bf3b27e1" +"@types/node@^8.0.24": + version "8.9.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.9.4.tgz#dfd327582a06c114eb6e0441fa3d6fab35edad48" + +"@types/webpack-env@^1.13.5": + version "1.13.5" + resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.13.5.tgz#ca854e9fbdbcdf45d7376882875f28e2c60593f8" JSONStream@1.0.3: version "1.0.3" @@ -101,6 +132,10 @@ JSONStream@~1.3.1: jsonparse "^1.2.0" through ">=2.2.7 <3" +abab@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" + abbrev@1, abbrev@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -122,6 +157,12 @@ acorn-dynamic-import@^2.0.0: dependencies: acorn "^4.0.3" +acorn-globals@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538" + dependencies: + acorn "^5.0.0" + acorn-jsx@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" @@ -140,7 +181,11 @@ acorn@^4.0.3: version "4.0.13" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" -acorn@^5.0.0, acorn@^5.2.1: +acorn@^5.0.0, acorn@^5.3.0, acorn@^5.5.0: + version "5.5.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.1.tgz#84e05a9ea0acbe131227da50301e62464dc9c1d8" + +acorn@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7" @@ -156,10 +201,14 @@ agentkeepalive@^3.3.0: dependencies: humanize-ms "^1.2.1" -ajv-keywords@^2.0.0, ajv-keywords@^2.1.0: +ajv-keywords@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" +ajv-keywords@^3.0.0, ajv-keywords@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.1.0.tgz#ac2b27939c543e95d2c06e7f7f5c27be4aa543be" + ajv@^4.9.1: version "4.11.8" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" @@ -167,7 +216,7 @@ ajv@^4.9.1: co "^4.6.0" json-stable-stringify "^1.0.1" -ajv@^5.0.0, ajv@^5.1.5, ajv@^5.2.3: +ajv@^5.0.0: version "5.5.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.0.tgz#eb2840746e9dc48bd5e063a36e3fd400c5eab5a9" dependencies: @@ -176,7 +225,7 @@ ajv@^5.0.0, ajv@^5.1.5, ajv@^5.2.3: fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" -ajv@^5.1.0, ajv@^5.5.0: +ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" dependencies: @@ -185,11 +234,10 @@ ajv@^5.1.0, ajv@^5.5.0: fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" -ajv@^5.3.0: - version "5.5.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.1.tgz#b38bb8876d9e86bee994956a04e721e88b248eb2" +ajv@^6.0.1, ajv@^6.1.0, ajv@^6.1.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.2.1.tgz#28a6abc493a2abe0fb4c8507acaedb43fa550671" dependencies: - co "^4.6.0" fast-deep-equal "^1.0.0" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" @@ -246,6 +294,12 @@ ansi-styles@^3.1.0, ansi-styles@^3.2.0: dependencies: color-convert "^1.9.0" +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + dependencies: + color-convert "^1.9.0" + ansicolors@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" @@ -258,14 +312,54 @@ any-observable@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.2.0.tgz#c67870058003579009083f54ac0abafb5c33d242" -anymatch@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" dependencies: - micromatch "^2.1.5" - normalize-path "^2.0.0" + micromatch "^3.1.4" + normalize-path "^2.1.1" -app-root-path@^2.0.0: +app-builder-bin-linux@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/app-builder-bin-linux/-/app-builder-bin-linux-1.6.0.tgz#d7731d7988b8a740e74d591cbd565f168a266111" + +app-builder-bin-linux@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/app-builder-bin-linux/-/app-builder-bin-linux-1.7.1.tgz#925967add77c13d387e3fe88359a4b4dce82c525" + +app-builder-bin-mac@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/app-builder-bin-mac/-/app-builder-bin-mac-1.6.0.tgz#c976da70796d67aeb7134a57899636f2581d1c67" + +app-builder-bin-mac@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/app-builder-bin-mac/-/app-builder-bin-mac-1.7.1.tgz#e5c2b49be82473a737e000cfccfc65a68f9cc62d" + +app-builder-bin-win@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/app-builder-bin-win/-/app-builder-bin-win-1.6.0.tgz#528ef96430d519c270b4de260bea0ddc70df1733" + +app-builder-bin-win@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/app-builder-bin-win/-/app-builder-bin-win-1.7.1.tgz#e1ba3d6d645896552b28e4dd05525b39561b9b88" + +app-builder-bin@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-1.6.0.tgz#c0e88a488d4c23c2e7fe0bbfb70c1d61165be206" + optionalDependencies: + app-builder-bin-linux "1.6.0" + app-builder-bin-mac "1.6.0" + app-builder-bin-win "1.6.0" + +app-builder-bin@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-1.7.1.tgz#c2540eb8b164c91c30bc8cf3f16b5c181f3f5c31" + optionalDependencies: + app-builder-bin-linux "1.7.1" + app-builder-bin-mac "1.7.1" + app-builder-bin-win "1.7.1" + +app-root-path@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46" @@ -302,10 +396,22 @@ arr-diff@^2.0.0: dependencies: arr-flatten "^1.0.1" -arr-flatten@^1.0.1: +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + +arr-flatten@^1.0.1, arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" @@ -343,6 +449,10 @@ array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + arrify@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -351,16 +461,9 @@ asap@^2.0.0, asap@~2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" -asar-integrity@0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asar-integrity/-/asar-integrity-0.2.4.tgz#b7867c9720e08c461d12bc42f005c239af701733" - dependencies: - bluebird-lst "^1.0.5" - fs-extra-p "^4.5.0" - asn1.js@^4.0.0: - version "4.9.2" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.2.tgz#8117ef4f7ed87cd8f89044b5bff97ac243a16c9a" + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" dependencies: bn.js "^4.0.0" inherits "^2.0.1" @@ -384,6 +487,10 @@ assert@^1.1.1: dependencies: util "0.10.3" +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + ast-types-flow@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" @@ -408,11 +515,15 @@ async-foreach@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" +async-limiter@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + async@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" -async@^2.1.2, async@^2.1.5, async@^2.4.1: +async@^2.1.2, async@^2.4.1: version "2.6.0" resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" dependencies: @@ -422,6 +533,10 @@ asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" +atob@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.0.3.tgz#19c7a760473774468f20b2d2d03372ad7d4cbf5d" + autoprefixer@^6.3.1: version "6.7.7" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" @@ -433,9 +548,9 @@ autoprefixer@^6.3.1: postcss "^5.2.16" postcss-value-parser "^3.2.3" -aws-sdk@^2.186.0: - version "2.188.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.188.0.tgz#9062abc7dba6393459fa2f3423cf5d294f004611" +aws-sdk@^2.202.0: + version "2.205.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.205.0.tgz#1a93730253e2be027a4bd3af9248cbda0573de80" dependencies: buffer "4.9.1" events "^1.1.1" @@ -459,13 +574,20 @@ aws4@^1.2.1, aws4@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" +axios@^0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.0.tgz#32d53e4851efdc0a11993b6cd000789d70c05102" + dependencies: + follow-redirects "^1.3.0" + is-buffer "^1.1.5" + axobject-query@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0" dependencies: ast-types-flow "0.0.7" -babel-code-frame@^6.11.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: +babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" dependencies: @@ -473,7 +595,7 @@ babel-code-frame@^6.11.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: esutils "^2.0.2" js-tokens "^3.0.2" -babel-core@^6.24.1, babel-core@^6.26.0: +babel-core@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" dependencies: @@ -497,14 +619,16 @@ babel-core@^6.24.1, babel-core@^6.26.0: slash "^1.0.0" source-map "^0.5.6" -babel-eslint@^8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.0.3.tgz#f29ecf02336be438195325cd47c468da81ee4e98" +babel-eslint@^8.2.2: + version "8.2.2" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.2.tgz#1102273354c6f0b29b4ea28a65f97d122296b68b" dependencies: - "@babel/code-frame" "7.0.0-beta.31" - "@babel/traverse" "7.0.0-beta.31" - "@babel/types" "7.0.0-beta.31" - babylon "7.0.0-beta.31" + "@babel/code-frame" "^7.0.0-beta.40" + "@babel/traverse" "^7.0.0-beta.40" + "@babel/types" "^7.0.0-beta.40" + babylon "^7.0.0-beta.40" + eslint-scope "~3.7.1" + eslint-visitor-keys "^1.0.0" babel-generator@^6.26.0: version "6.26.0" @@ -561,10 +685,6 @@ babel-helper-define-map@^6.24.1: babel-types "^6.26.0" lodash "^4.17.4" -babel-helper-evaluate-path@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.2.0.tgz#0bb2eb01996c0cef53c5e8405e999fe4a0244c08" - babel-helper-explode-assignable-expression@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" @@ -582,10 +702,6 @@ babel-helper-explode-class@^6.24.1: babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-helper-flip-expressions@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.2.0.tgz#160d2090a3d9f9c64a750905321a0bc218f884ec" - babel-helper-function-name@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" @@ -610,18 +726,6 @@ babel-helper-hoist-variables@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" -babel-helper-is-nodes-equiv@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz#34e9b300b1479ddd98ec77ea0bbe9342dfe39684" - -babel-helper-is-void-0@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-helper-is-void-0/-/babel-helper-is-void-0-0.2.0.tgz#6ed0ada8a9b1c5b6e88af6b47c1b3b5c080860eb" - -babel-helper-mark-eval-scopes@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.2.0.tgz#7648aaf2ec92aae9b09a20ad91e8df5e1fcc94b2" - babel-helper-optimise-call-expression@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" @@ -647,10 +751,6 @@ babel-helper-remap-async-to-generator@^6.24.1: babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-helper-remove-or-void@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.2.0.tgz#8e46ad5b30560d57d7510b3fd93f332ee7c67386" - babel-helper-replace-supers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" @@ -662,10 +762,6 @@ babel-helper-replace-supers@^6.24.1: babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-helper-to-multiple-sequence-expressions@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.2.0.tgz#d1a419634c6cb301f27858c659167cfee0a9d318" - babel-helpers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" @@ -687,92 +783,21 @@ babel-messages@^6.23.0: dependencies: babel-runtime "^6.22.0" -babel-minify-webpack-plugin@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-minify-webpack-plugin/-/babel-minify-webpack-plugin-0.2.0.tgz#ef9694d11a1b8ab8f3204d89f5c9278dd28fc2a9" - dependencies: - babel-core "^6.24.1" - babel-preset-minify "^0.2.0" - webpack-sources "^1.0.1" - babel-plugin-check-es2015-constants@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" dependencies: babel-runtime "^6.22.0" -babel-plugin-component@^0.10.1: - version "0.10.1" - resolved "https://registry.yarnpkg.com/babel-plugin-component/-/babel-plugin-component-0.10.1.tgz#cfac25045e5c6e1353e89f05ff5a675af9712759" - -babel-plugin-minify-builtins@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.2.0.tgz#317f824b0907210b6348671bb040ca072e2e0c82" +babel-plugin-component@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-component/-/babel-plugin-component-1.1.0.tgz#74fa3446814bca990f52bcad6700465361b011b7" dependencies: - babel-helper-evaluate-path "^0.2.0" + "@babel/helper-module-imports" "7.0.0-beta.35" -babel-plugin-minify-constant-folding@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.2.0.tgz#8c70b528b2eb7c13e94d95c8789077d4cdbc3970" - dependencies: - babel-helper-evaluate-path "^0.2.0" - -babel-plugin-minify-dead-code-elimination@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.2.0.tgz#e8025ee10a1e5e4f202633a6928ce892c33747e3" - dependencies: - babel-helper-evaluate-path "^0.2.0" - babel-helper-mark-eval-scopes "^0.2.0" - babel-helper-remove-or-void "^0.2.0" - lodash.some "^4.6.0" - -babel-plugin-minify-flip-comparisons@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.2.0.tgz#0c9c8e93155c8f09dedad8118b634c259f709ef5" - dependencies: - babel-helper-is-void-0 "^0.2.0" - -babel-plugin-minify-guarded-expressions@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.2.0.tgz#8a8c950040fce3e258a12e6eb21eab94ad7235ab" - dependencies: - babel-helper-flip-expressions "^0.2.0" - -babel-plugin-minify-infinity@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.2.0.tgz#30960c615ddbc657c045bb00a1d8eb4af257cf03" - -babel-plugin-minify-mangle-names@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.2.0.tgz#719892297ff0106a6ec1a4b0fc062f1f8b6a8529" - dependencies: - babel-helper-mark-eval-scopes "^0.2.0" - -babel-plugin-minify-numeric-literals@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.2.0.tgz#5746e851700167a380c05e93f289a7070459a0d1" - -babel-plugin-minify-replace@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.2.0.tgz#3c1f06bc4e6d3e301eacb763edc1be611efc39b0" - -babel-plugin-minify-simplify@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.2.0.tgz#21ceec4857100c5476d7cef121f351156e5c9bc0" - dependencies: - babel-helper-flip-expressions "^0.2.0" - babel-helper-is-nodes-equiv "^0.0.1" - babel-helper-to-multiple-sequence-expressions "^0.2.0" - -babel-plugin-minify-type-constructors@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.2.0.tgz#7f3b6458be0863cfd59e9985bed6d134aa7a2e17" - dependencies: - babel-helper-is-void-0 "^0.2.0" - -babel-plugin-module-resolver@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.0.0.tgz#a2fe5b97f7b809a8bbac18beada0a94d45987c63" +babel-plugin-module-resolver@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.1.0.tgz#cf7868bd2c1818f855aede16141009b87dd1f95b" dependencies: find-babel-config "^1.1.0" glob "^7.1.2" @@ -780,10 +805,6 @@ babel-plugin-module-resolver@^3.0.0: reselect "^3.0.1" resolve "^1.4.0" -babel-plugin-react-require@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-react-require/-/babel-plugin-react-require-3.0.0.tgz#2e4e7b4496b93a654a1c80042276de4e4eeb20e3" - babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" @@ -1049,22 +1070,6 @@ babel-plugin-transform-flow-strip-types@^6.22.0: babel-plugin-syntax-flow "^6.18.0" babel-runtime "^6.22.0" -babel-plugin-transform-inline-consecutive-adds@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.2.0.tgz#15dae78921057f4004f8eafd79e15ddc5f12f426" - -babel-plugin-transform-member-expression-literals@^6.8.5: - version "6.8.5" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.8.5.tgz#e06ae305cf48d819822e93a70d79269f04d89eec" - -babel-plugin-transform-merge-sibling-variables@^6.8.6: - version "6.8.6" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.8.6.tgz#6d21efa5ee4981f71657fae716f9594bb2622aef" - -babel-plugin-transform-minify-booleans@^6.8.3: - version "6.8.3" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.8.3.tgz#5906ed776d3718250519abf1bace44b0b613ddf9" - babel-plugin-transform-object-rest-spread@^6.22.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" @@ -1072,12 +1077,6 @@ babel-plugin-transform-object-rest-spread@^6.22.0: babel-plugin-syntax-object-rest-spread "^6.8.0" babel-runtime "^6.26.0" -babel-plugin-transform-property-literals@^6.8.5: - version "6.8.5" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.8.5.tgz#67ed5930b34805443452c8b9690c7ebe1e206c40" - dependencies: - esutils "^2.0.2" - babel-plugin-transform-react-display-name@^6.23.0: version "6.25.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" @@ -1112,28 +1111,6 @@ babel-plugin-transform-regenerator@^6.22.0: dependencies: regenerator-transform "^0.10.0" -babel-plugin-transform-regexp-constructors@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.2.0.tgz#6aa5dd0acc515db4be929bbcec4ed4c946c534a3" - -babel-plugin-transform-remove-console@^6.8.5: - version "6.8.5" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.8.5.tgz#fde9d2d3d725530b0fadd8d31078402410386810" - -babel-plugin-transform-remove-debugger@^6.8.5: - version "6.8.5" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.8.5.tgz#809584d412bf918f071fdf41e1fdb15ea89cdcd5" - -babel-plugin-transform-remove-undefined@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.2.0.tgz#94f052062054c707e8d094acefe79416b63452b1" - dependencies: - babel-helper-evaluate-path "^0.2.0" - -babel-plugin-transform-simplify-comparison-operators@^6.8.5: - version "6.8.5" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.8.5.tgz#a838786baf40cc33a93b95ae09e05591227e43bf" - babel-plugin-transform-strict-mode@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" @@ -1141,11 +1118,7 @@ babel-plugin-transform-strict-mode@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" -babel-plugin-transform-undefined-to-void@^6.8.3: - version "6.8.3" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.8.3.tgz#fc52707f6ee1ddc71bb91b0d314fbefdeef9beb4" - -babel-polyfill@^6.20.0, babel-polyfill@^6.23.0: +babel-polyfill@^6.20.0, babel-polyfill@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" dependencies: @@ -1194,34 +1167,6 @@ babel-preset-flow@^6.23.0: dependencies: babel-plugin-transform-flow-strip-types "^6.22.0" -babel-preset-minify@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-preset-minify/-/babel-preset-minify-0.2.0.tgz#006566552d9b83834472273f306c0131062a0acc" - dependencies: - babel-plugin-minify-builtins "^0.2.0" - babel-plugin-minify-constant-folding "^0.2.0" - babel-plugin-minify-dead-code-elimination "^0.2.0" - babel-plugin-minify-flip-comparisons "^0.2.0" - babel-plugin-minify-guarded-expressions "^0.2.0" - babel-plugin-minify-infinity "^0.2.0" - babel-plugin-minify-mangle-names "^0.2.0" - babel-plugin-minify-numeric-literals "^0.2.0" - babel-plugin-minify-replace "^0.2.0" - babel-plugin-minify-simplify "^0.2.0" - babel-plugin-minify-type-constructors "^0.2.0" - babel-plugin-transform-inline-consecutive-adds "^0.2.0" - babel-plugin-transform-member-expression-literals "^6.8.5" - babel-plugin-transform-merge-sibling-variables "^6.8.6" - babel-plugin-transform-minify-booleans "^6.8.3" - babel-plugin-transform-property-literals "^6.8.5" - babel-plugin-transform-regexp-constructors "^0.2.0" - babel-plugin-transform-remove-console "^6.8.5" - babel-plugin-transform-remove-debugger "^6.8.5" - babel-plugin-transform-remove-undefined "^0.2.0" - babel-plugin-transform-simplify-comparison-operators "^6.8.5" - babel-plugin-transform-undefined-to-void "^6.8.3" - lodash.isplainobject "^4.0.6" - babel-preset-react@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" @@ -1304,9 +1249,9 @@ babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: lodash "^4.17.4" to-fast-properties "^1.0.3" -babylon@7.0.0-beta.31: - version "7.0.0-beta.31" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.31.tgz#7ec10f81e0e456fd0f855ad60fa30c2ac454283f" +babylon@7.0.0-beta.40, babylon@^7.0.0-beta.40: + version "7.0.0-beta.40" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.40.tgz#91fc8cd56d5eb98b28e6fde41045f2957779940a" babylon@^6.18.0: version "6.18.0" @@ -1328,10 +1273,30 @@ base62@^1.1.0: version "1.2.1" resolved "https://registry.yarnpkg.com/base62/-/base62-1.2.1.tgz#95a5a22350b0a557f3f081247fc2c398803ecb0c" -base64-js@1.2.0, base64-js@^1.0.2: +base64-js@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978" + +base64-js@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" +base64-js@^1.0.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.3.tgz#fb13668233d9614cf5fb4bce95a9ba4096cdf801" + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" @@ -1373,7 +1338,7 @@ block-stream@*: dependencies: inherits "~2.0.0" -bluebird-lst@^1.0.4, bluebird-lst@^1.0.5: +bluebird-lst@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/bluebird-lst/-/bluebird-lst-1.0.5.tgz#bebc83026b7e92a72871a3dc599e219cbfb002a9" dependencies: @@ -1460,8 +1425,8 @@ boxen@^1.2.1: widest-line "^2.0.0" brace-expansion@^1.1.7: - version "1.1.8" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" dependencies: balanced-match "^1.0.0" concat-map "0.0.1" @@ -1474,10 +1439,37 @@ braces@^1.8.2: preserve "^0.2.0" repeat-element "^1.1.2" +braces@^2.3.0, braces@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.1.tgz#7086c913b4e5a08dbe37ac0ee6a2500c4ba691bb" + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + define-property "^1.0.0" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + kind-of "^6.0.2" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" +browser-process-hrtime@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" + +browser-resolve@^1.11.2: + version "1.11.2" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + dependencies: + resolve "1.1.7" + browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.1.1" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f" @@ -1524,12 +1516,6 @@ browserify-sign@^4.0.0: inherits "^2.0.1" parse-asn1 "^5.0.0" -browserify-zlib@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" - dependencies: - pako "~0.2.0" - browserify-zlib@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" @@ -1550,6 +1536,10 @@ browserslist@^2.1.2: caniuse-lite "^1.0.30000770" electron-to-chromium "^1.3.27" +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + buffer-indexof@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" @@ -1566,59 +1556,38 @@ buffer@4.9.1, buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" +buffer@^3.0.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-3.6.0.tgz#a72c936f77b96bf52f5f7e7b467180628551defb" + dependencies: + base64-js "0.0.8" + ieee754 "^1.1.4" + isarray "^1.0.0" + buffers@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" -builder-util-runtime@4.0.3, builder-util-runtime@~4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-4.0.3.tgz#c9f1959598e3fb534cdbe9ce4160e985af11a0fe" +builder-util-runtime@4.0.5, builder-util-runtime@^4.0.5, builder-util-runtime@~4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-4.0.5.tgz#5340cf9886b9283ea6e5b20dc09b5e3e461aef62" dependencies: bluebird-lst "^1.0.5" debug "^3.1.0" fs-extra-p "^4.5.0" sax "^1.2.4" -builder-util-runtime@^4.0.3, builder-util-runtime@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-4.0.4.tgz#c92c352097006a07f3324ea200fa815440cba198" +builder-util@5.6.1: + version "5.6.1" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.6.1.tgz#ab90845cb8949ea4ac81da0ce87b8ec3424cdbf9" dependencies: + "7zip-bin" "~3.1.0" + app-builder-bin "1.6.0" bluebird-lst "^1.0.5" + builder-util-runtime "^4.0.5" + chalk "^2.3.2" debug "^3.1.0" - fs-extra-p "^4.5.0" - sax "^1.2.4" - -builder-util@4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-4.2.1.tgz#ca9f0ddb5af1da5fe432129f7c6cbd447b552016" - dependencies: - "7zip-bin" "^2.4.1" - bluebird-lst "^1.0.5" - builder-util-runtime "^4.0.3" - chalk "^2.3.0" - debug "^3.1.0" - fs-extra-p "^4.5.0" - ini "^1.3.5" - is-ci "^1.1.0" - js-yaml "^3.10.0" - lazy-val "^1.0.3" - semver "^5.5.0" - source-map-support "^0.5.1" - stat-mode "^0.2.2" - temp-file "^3.1.1" - tunnel-agent "^0.6.0" - -builder-util@^4.2.1: - version "4.2.2" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-4.2.2.tgz#366b2bc32324bfe5565a7e4f13f86238fef5e92b" - dependencies: - "7zip-bin" "^2.4.1" - bluebird-lst "^1.0.5" - builder-util-runtime "^4.0.4" - chalk "^2.3.0" - debug "^3.1.0" - fs-extra-p "^4.5.0" - ini "^1.3.5" + fs-extra-p "^4.5.2" is-ci "^1.1.0" js-yaml "^3.10.0" lazy-val "^1.0.3" @@ -1626,7 +1595,25 @@ builder-util@^4.2.1: source-map-support "^0.5.3" stat-mode "^0.2.2" temp-file "^3.1.1" - tunnel-agent "^0.6.0" + +builder-util@5.6.3, builder-util@^5.6.0: + version "5.6.3" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.6.3.tgz#194288b979958832e0592fe91c8306ce207a60f1" + dependencies: + "7zip-bin" "~3.1.0" + app-builder-bin "1.7.1" + bluebird-lst "^1.0.5" + builder-util-runtime "^4.0.5" + chalk "^2.3.2" + debug "^3.1.0" + fs-extra-p "^4.5.2" + is-ci "^1.1.0" + js-yaml "^3.11.0" + lazy-val "^1.0.3" + semver "^5.5.0" + source-map-support "^0.5.3" + stat-mode "^0.2.2" + temp-file "^3.1.1" builtin-modules@^1.0.0, builtin-modules@^1.1.1: version "1.1.1" @@ -1662,6 +1649,24 @@ cacache@^10.0.0: unique-filename "^1.1.0" y18n "^3.2.1" +cacache@^10.0.1: + version "10.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460" + dependencies: + bluebird "^3.5.1" + chownr "^1.0.1" + glob "^7.1.2" + graceful-fs "^4.1.11" + lru-cache "^4.1.1" + mississippi "^2.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.2" + ssri "^5.2.4" + unique-filename "^1.1.0" + y18n "^4.0.0" + cacache@^9.2.9, cacache@~9.2.9: version "9.2.9" resolved "https://registry.yarnpkg.com/cacache/-/cacache-9.2.9.tgz#f9d7ffe039851ec94c28290662afa4dd4bb9e8dd" @@ -1680,6 +1685,20 @@ cacache@^9.2.9, cacache@~9.2.9: unique-filename "^1.1.0" y18n "^3.2.1" +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + call-limit@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/call-limit/-/call-limit-1.1.0.tgz#6fd61b03f3da42a2cd0ec2b60f02bd0e71991fea" @@ -1694,6 +1713,10 @@ callsites@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + camel-case@3.0.x: version "3.0.0" resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" @@ -1784,6 +1807,14 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0: escape-string-regexp "^1.0.5" supports-color "^4.0.0" +chalk@^2.3.1, chalk@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + chardet@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" @@ -1792,18 +1823,21 @@ charenc@~0.0.1: version "0.0.2" resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" -chokidar@^1.6.0, chokidar@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" +chokidar@^2.0.0, chokidar@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.2.tgz#4dc65139eeb2714977735b6a35d06e97b494dfd7" dependencies: - anymatch "^1.3.0" + anymatch "^2.0.0" async-each "^1.0.0" - glob-parent "^2.0.0" + braces "^2.3.0" + glob-parent "^3.1.0" inherits "^2.0.1" is-binary-path "^1.0.0" - is-glob "^2.0.0" + is-glob "^4.0.0" + normalize-path "^2.1.1" path-is-absolute "^1.0.0" readdirp "^2.0.0" + upath "^1.0.0" optionalDependencies: fsevents "^1.0.0" @@ -1840,6 +1874,15 @@ clap@^1.0.9: dependencies: chalk "^1.1.3" +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + classnames@^2.2.5: version "2.2.5" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" @@ -1914,14 +1957,14 @@ cliui@^4.0.0: strip-ansi "^4.0.0" wrap-ansi "^2.0.0" -clone-deep@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-0.3.0.tgz#348c61ae9cdbe0edfe053d91ff4cc521d790ede8" +clone-deep@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-2.0.2.tgz#00db3a1e173656730d1188c3d6aced6d7ea97713" dependencies: for-own "^1.0.0" - is-plain-object "^2.0.1" - kind-of "^3.2.2" - shallow-clone "^0.1.2" + is-plain-object "^2.0.4" + kind-of "^6.0.0" + shallow-clone "^1.0.0" clone@^1.0.2: version "1.0.3" @@ -1958,6 +2001,13 @@ codemirror@*: version "5.32.0" resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.32.0.tgz#cb6ff5d8ef36d0b10f031130e2d9ebeee92c902e" +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + color-convert@^1.3.0, color-convert@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" @@ -2006,8 +2056,8 @@ columnify@~1.5.4: wcwidth "^1.0.0" combined-stream@^1.0.5, combined-stream@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" + version "1.0.6" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" dependencies: delayed-stream "~1.0.0" @@ -2021,6 +2071,20 @@ commander@2.12.x, commander@^2.11.0, commander@^2.5.0, commander@^2.9.0, command version "2.12.2" resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555" +commander@2.14.x, commander@^2.14.1, commander@~2.14.1: + version "2.14.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa" + +commander@~2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" + +commander@~2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" + dependencies: + graceful-readlink ">= 1.0.0" + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -2060,6 +2124,10 @@ compare-version@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/compare-version/-/compare-version-0.1.2.tgz#0162ec2d9351f5ddd59a9202cba935366a725080" +component-emitter@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + compressible@~2.0.11: version "2.0.12" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.12.tgz#c59a5c99db76767e9876500e271ef63b3493bd66" @@ -2082,7 +2150,7 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -concat-stream@1.6.0, concat-stream@^1.5.0, concat-stream@^1.5.2, concat-stream@^1.6.0: +concat-stream@1.6.0, concat-stream@^1.5.0, concat-stream@^1.5.2: version "1.6.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" dependencies: @@ -2090,6 +2158,14 @@ concat-stream@1.6.0, concat-stream@^1.5.0, concat-stream@^1.5.2, concat-stream@^ readable-stream "^2.2.2" typedarray "^0.0.6" +concat-stream@^1.6.0: + version "1.6.1" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.1.tgz#261b8f518301f1d834e36342b9fea095d2620a26" + dependencies: + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + config-chain@~1.1.11: version "1.1.11" resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.11.tgz#aba09747dfbe4c3e70e766a6e41586e1859fc6f2" @@ -2134,6 +2210,10 @@ content-disposition@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" +content-type-parser@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7" + content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" @@ -2161,6 +2241,10 @@ copy-concurrently@^1.0.0: rimraf "^2.5.4" run-queue "^1.0.0" +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" @@ -2173,13 +2257,13 @@ core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" -cosmiconfig@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-3.1.0.tgz#640a94bf9847f321800403cd273af60665c73397" +cosmiconfig@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc" dependencies: is-directory "^0.3.1" js-yaml "^3.9.0" - parse-json "^3.0.0" + parse-json "^4.0.0" require-from-string "^2.0.1" country-data@^0.0.31: @@ -2287,29 +2371,30 @@ css-color-names@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" -css-hot-loader@^1.3.2: - version "1.3.4" - resolved "https://registry.yarnpkg.com/css-hot-loader/-/css-hot-loader-1.3.4.tgz#cd58b9419cd7ec82350b1d60713d86e480a8b286" +css-hot-loader@^1.3.7: + version "1.3.8" + resolved "https://registry.yarnpkg.com/css-hot-loader/-/css-hot-loader-1.3.8.tgz#edc17f9a24c8e2254c1c570e3779257489aa53f6" dependencies: loader-utils "^1.1.0" + lodash "^4.17.5" normalize-url "^1.9.1" -css-loader@^0.28.7: - version "0.28.7" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.7.tgz#5f2ee989dd32edd907717f953317656160999c1b" +css-loader@^0.28.9: + version "0.28.10" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.10.tgz#40282e79230f7bcb4e483efa631d670b735ebf42" dependencies: - babel-code-frame "^6.11.0" + babel-code-frame "^6.26.0" css-selector-tokenizer "^0.7.0" - cssnano ">=2.6.1 <4" + cssnano "^3.10.0" icss-utils "^2.1.0" loader-utils "^1.0.2" lodash.camelcase "^4.3.0" - object-assign "^4.0.1" + object-assign "^4.1.1" postcss "^5.0.6" - postcss-modules-extract-imports "^1.0.0" - postcss-modules-local-by-default "^1.0.1" - postcss-modules-scope "^1.0.0" - postcss-modules-values "^1.1.0" + postcss-modules-extract-imports "^1.2.0" + postcss-modules-local-by-default "^1.2.0" + postcss-modules-scope "^1.1.0" + postcss-modules-values "^1.3.0" postcss-value-parser "^3.3.0" source-list-map "^2.0.0" @@ -2338,7 +2423,7 @@ cssesc@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" -"cssnano@>=2.6.1 <4": +cssnano@^3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" dependencies: @@ -2382,6 +2467,16 @@ csso@~2.3.1: clap "^1.0.9" source-map "^0.5.3" +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" + +"cssstyle@>= 0.2.37 < 0.3.0": + version "0.2.37" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" + dependencies: + cssom "0.3.x" + currency-symbol-map@~2: version "2.2.0" resolved "https://registry.yarnpkg.com/currency-symbol-map/-/currency-symbol-map-2.2.0.tgz#2b3c1872ff1ac2ce595d8273e58e1fff0272aea2" @@ -2420,7 +2515,7 @@ date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" -debug@2, debug@2.6.9, debug@^2.1.3, debug@^2.2.0, debug@^2.6.6, debug@^2.6.8: +debug@2, debug@2.6.9, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: @@ -2450,6 +2545,54 @@ decompress-response@^3.2.0: dependencies: mimic-response "^1.0.0" +decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1" + dependencies: + file-type "^5.2.0" + is-stream "^1.1.0" + tar-stream "^1.5.2" + +decompress-tarbz2@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz#3082a5b880ea4043816349f378b56c516be1a39b" + dependencies: + decompress-tar "^4.1.0" + file-type "^6.1.0" + is-stream "^1.1.0" + seek-bzip "^1.0.5" + unbzip2-stream "^1.0.9" + +decompress-targz@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/decompress-targz/-/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee" + dependencies: + decompress-tar "^4.1.1" + file-type "^5.2.0" + is-stream "^1.1.0" + +decompress-unzip@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/decompress-unzip/-/decompress-unzip-4.0.1.tgz#deaaccdfd14aeaf85578f733ae8210f9b4848f69" + dependencies: + file-type "^3.8.0" + get-stream "^2.2.0" + pify "^2.3.0" + yauzl "^2.4.2" + +decompress@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/decompress/-/decompress-4.2.0.tgz#7aedd85427e5a92dacfe55674a7c505e96d01f9d" + dependencies: + decompress-tar "^4.0.0" + decompress-tarbz2 "^4.0.0" + decompress-targz "^4.0.0" + decompress-unzip "^4.0.1" + graceful-fs "^4.1.10" + make-dir "^1.0.0" + pify "^2.3.0" + strip-dirs "^2.0.0" + dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" @@ -2483,6 +2626,25 @@ define-properties@^1.1.2: foreach "^2.0.5" object-keys "^1.0.8" +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + defined@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" @@ -2573,6 +2735,10 @@ dezalgo@^1.0.0, dezalgo@~1.0.3: asap "^2.0.0" wrappy "1" +diff@^3.2.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + diffie-hellman@^5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" @@ -2581,16 +2747,18 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" -dmg-builder@3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-3.1.3.tgz#aa296f4be369e7ff013e67923adc70258bc0a510" +dmg-builder@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-4.1.1.tgz#a12214eb3eb3cba0addccfd129f1981c9805045c" dependencies: bluebird-lst "^1.0.5" - builder-util "^4.2.1" - fs-extra-p "^4.5.0" + builder-util "^5.6.0" + electron-builder-lib "~20.2.0" + fs-extra-p "^4.5.2" iconv-lite "^0.4.19" js-yaml "^3.10.0" parse-color "^1.0.0" + sanitize-filename "^1.6.1" dns-equal@^1.0.0: version "1.0.0" @@ -2616,12 +2784,18 @@ doctrine@1.5.0: esutils "^2.0.2" isarray "^1.0.0" -doctrine@^2.0.0, doctrine@^2.0.2: +doctrine@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.2.tgz#68f96ce8efc56cc42651f1faadb4f175273b0075" dependencies: esutils "^2.0.2" +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + dependencies: + esutils "^2.0.2" + dom-converter@~0.1: version "0.1.4" resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz#a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b" @@ -2640,8 +2814,8 @@ dom-walk@^0.1.0: resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" domain-browser@^1.1.1: - version "1.1.7" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" domelementtype@1: version "1.3.0" @@ -2651,6 +2825,12 @@ domelementtype@~1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" +domexception@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + dependencies: + webidl-conversions "^4.0.2" + domhandler@2.1: version "2.1.0" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594" @@ -2684,6 +2864,10 @@ dotenv@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-4.0.0.tgz#864ef1379aced55ce6f95debecdce179f7a0cd1d" +dotenv@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" + duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" @@ -2715,23 +2899,51 @@ ejs@^2.5.7: version "2.5.7" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.7.tgz#cc872c168880ae3c7189762fd5ffc00896c9518a" -electron-builder-lib@19.55.3: - version "19.55.3" - resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-19.55.3.tgz#06fd10374c3c2315eade512c408f857baa5921e5" +electron-builder-lib@20.3.1: + version "20.3.1" + resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.3.1.tgz#b479a03a718fa443ff29e0623c1ec661199e3eae" dependencies: - "7zip-bin" "^2.4.1" - asar-integrity "0.2.4" + "7zip-bin" "~3.1.0" + app-builder-bin "1.7.1" async-exit-hook "^2.0.1" bluebird-lst "^1.0.5" - builder-util "4.2.1" - builder-util-runtime "4.0.3" + builder-util "5.6.3" + builder-util-runtime "4.0.5" chromium-pickle-js "^0.2.0" debug "^3.1.0" - dmg-builder "3.1.3" ejs "^2.5.7" electron-osx-sign "0.4.8" - electron-publish "19.55.2" - fs-extra-p "^4.5.0" + electron-publish "20.2.0" + fs-extra-p "^4.5.2" + hosted-git-info "^2.5.0" + is-ci "^1.1.0" + isbinaryfile "^3.0.2" + js-yaml "^3.11.0" + lazy-val "^1.0.3" + minimatch "^3.0.4" + normalize-package-data "^2.4.0" + plist "^2.1.0" + read-config-file "3.0.0" + sanitize-filename "^1.6.1" + semver "^5.5.0" + temp-file "^3.1.1" + +electron-builder-lib@~20.2.0: + version "20.2.1" + resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.2.1.tgz#ff8dc6ac7f6f3c676fc370ddafb2aba464a17672" + dependencies: + "7zip-bin" "~3.1.0" + app-builder-bin "1.6.0" + async-exit-hook "^2.0.1" + bluebird-lst "^1.0.5" + builder-util "5.6.1" + builder-util-runtime "4.0.5" + chromium-pickle-js "^0.2.0" + debug "^3.1.0" + ejs "^2.5.7" + electron-osx-sign "0.4.8" + electron-publish "20.2.0" + fs-extra-p "^4.5.2" hosted-git-info "^2.5.0" is-ci "^1.1.0" isbinaryfile "^3.0.2" @@ -2740,32 +2952,33 @@ electron-builder-lib@19.55.3: minimatch "^3.0.4" normalize-package-data "^2.4.0" plist "^2.1.0" - read-config-file "2.1.1" + read-config-file "3.0.0" sanitize-filename "^1.6.1" semver "^5.5.0" temp-file "^3.1.1" -electron-builder@^19.55.2: - version "19.55.3" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-19.55.3.tgz#01d3070af8a2eb97d91e6d029f28104b4bf8a068" +electron-builder@^20.3.1: + version "20.3.1" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-20.3.1.tgz#a05bc5cb729d416ee15122552dac3592f2ede4fd" dependencies: bluebird-lst "^1.0.5" - builder-util "4.2.1" - builder-util-runtime "4.0.3" - chalk "^2.3.0" - electron-builder-lib "19.55.3" + builder-util "5.6.3" + builder-util-runtime "4.0.5" + chalk "^2.3.2" + dmg-builder "4.1.1" + electron-builder-lib "20.3.1" electron-download-tf "4.3.4" - fs-extra-p "^4.5.0" + fs-extra-p "^4.5.2" is-ci "^1.1.0" lazy-val "^1.0.3" - read-config-file "2.1.1" + read-config-file "3.0.0" sanitize-filename "^1.6.1" update-notifier "^2.3.0" yargs "^11.0.0" -electron-devtools-installer@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/electron-devtools-installer/-/electron-devtools-installer-2.2.1.tgz#0beb73ccbf65cbc4d09e706cebda638f839b8c55" +electron-devtools-installer@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/electron-devtools-installer/-/electron-devtools-installer-2.2.3.tgz#58b9a4ec507377bc46e091cd43714188e0c369be" dependencies: "7zip" "0.0.6" cross-unzip "0.0.2" @@ -2827,93 +3040,94 @@ electron-osx-sign@0.4.8: minimist "^1.2.0" plist "^2.1.0" -electron-publish@19.55.2, electron-publish@~19.55.2: - version "19.55.2" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-19.55.2.tgz#773b6d13bc11312095848c08b3287f98c91ccc7e" +electron-publish@20.2.0, electron-publish@~20.2.0: + version "20.2.0" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-20.2.0.tgz#1812738c4a4e14a8e156a9a083424a6e4e8e8264" dependencies: bluebird-lst "^1.0.5" - builder-util "^4.2.1" - builder-util-runtime "^4.0.3" + builder-util "^5.6.0" + builder-util-runtime "^4.0.5" chalk "^2.3.0" - fs-extra-p "^4.5.0" + fs-extra-p "^4.5.2" + lazy-val "^1.0.3" mime "^2.2.0" -electron-publisher-s3@^19.47.0: - version "19.55.2" - resolved "https://registry.yarnpkg.com/electron-publisher-s3/-/electron-publisher-s3-19.55.2.tgz#59446ebcf465e01995f67820592f13142d4146d8" +electron-publisher-s3@^20.2.0: + version "20.2.0" + resolved "https://registry.yarnpkg.com/electron-publisher-s3/-/electron-publisher-s3-20.2.0.tgz#6c2963adb1f33bdd0f4ce273988e2f74fc5c53b7" dependencies: - aws-sdk "^2.186.0" + aws-sdk "^2.202.0" bluebird-lst "^1.0.5" - builder-util "^4.2.1" - electron-publish "~19.55.2" - fs-extra-p "^4.5.0" + builder-util "^5.6.0" + electron-publish "~20.2.0" + fs-extra-p "^4.5.2" mime "^2.2.0" electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.27: version "1.3.27" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz#78ecb8a399066187bb374eede35d9c70565a803d" -electron-updater@^2.18.2: - version "2.20.1" - resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-2.20.1.tgz#3d2714a3e472fbf198f6053daf8fd12209101aa2" +electron-updater@^2.21.0: + version "2.21.0" + resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-2.21.0.tgz#3c8765af946090100f7df982127e4c3412cbc1af" dependencies: bluebird-lst "^1.0.5" - builder-util-runtime "~4.0.3" + builder-util-runtime "~4.0.5" electron-is-dev "^0.3.0" - fs-extra-p "^4.5.0" + fs-extra-p "^4.5.2" js-yaml "^3.10.0" lazy-val "^1.0.3" lodash.isequal "^4.5.0" semver "^5.5.0" - source-map-support "^0.5.2" + source-map-support "^0.5.3" -electron-webpack-js@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/electron-webpack-js/-/electron-webpack-js-1.1.0.tgz#c7c1cf375f6d32638ba62f46e1bd31445b7f1018" +electron-webpack-js@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/electron-webpack-js/-/electron-webpack-js-1.2.0.tgz#0d53038ba36dd9802df30647570957ec4347fe20" dependencies: babel-core "^6.26.0" babel-loader "^7.1.2" - babel-plugin-component "^0.10.1" + babel-plugin-component "^1.1.0" babel-plugin-syntax-dynamic-import "^6.18.0" babel-preset-env "^1.6.1" -electron-webpack@^1.11.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/electron-webpack/-/electron-webpack-1.11.0.tgz#51cbdc1a6ba1e73af8504fba135996eb1f28ca52" +electron-webpack@^1.13.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/electron-webpack/-/electron-webpack-1.13.0.tgz#f123dd94e660d966cce45950bf39f8af10755e78" dependencies: - "@types/webpack-env" "^1.13.2" + "@types/webpack-env" "^1.13.5" async-exit-hook "^2.0.1" - babel-minify-webpack-plugin "^0.2.0" bluebird-lst "^1.0.5" - chalk "^2.3.0" + chalk "^2.3.1" crocket "^0.9.11" - css-hot-loader "^1.3.2" - css-loader "^0.28.7" + css-hot-loader "^1.3.7" + css-loader "^0.28.9" debug "^3.1.0" - electron-devtools-installer "^2.2.1" - electron-webpack-js "~1.1.0" + electron-devtools-installer "^2.2.3" + electron-webpack-js "~1.2.0" extract-text-webpack-plugin "^3.0.2" - file-loader "^1.1.5" - fs-extra-p "^4.4.4" - html-loader "^0.5.1" + file-loader "^1.1.7" + fs-extra-p "^4.5.2" + html-loader "^0.5.5" html-webpack-plugin "^2.30.1" - lazy-val "^1.0.2" + lazy-val "^1.0.3" node-loader "^0.6.0" - read-config-file "^1.2.0" - semver "^5.4.1" - source-map-support "^0.5.0" - style-loader "^0.19.0" + read-config-file "^3.0.0" + semver "^5.5.0" + source-map-support "^0.5.3" + style-loader "^0.20.2" + uglifyjs-webpack-plugin "^1.2.0" url-loader "^0.6.2" virtual-module-webpack-plugin "^0.3.0" - webpack-dev-server "^2.9.3" - webpack-merge "^4.1.0" - yargs "^10.0.3" + webpack-dev-server "^2.11.1" + webpack-merge "^4.1.1" + yargs "^11.0.0" -electron@^1.7.11: - version "1.7.11" - resolved "https://registry.yarnpkg.com/electron/-/electron-1.7.11.tgz#993b6aa79e0e79a7cfcc369f4c813fbd9a0b08d9" +electron@^1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/electron/-/electron-1.8.3.tgz#001416ea3a25ce594e317cb5531bc41eadd22f7f" dependencies: - "@types/node" "^7.0.18" + "@types/node" "^8.0.24" electron-download "^3.0.1" extract-zip "^1.0.3" @@ -2993,7 +3207,13 @@ err-code@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" -errno@^0.1.3, errno@^0.1.4: +errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + dependencies: + prr "~1.0.1" + +errno@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" dependencies: @@ -3032,13 +3252,13 @@ es3ify@^0.1.3: through "~2.3.4" es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.37" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.37.tgz#0ee741d148b80069ba27d020393756af257defc3" + version "0.10.39" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.39.tgz#fca21b67559277ca4ac1a1ed7048b107b6f76d87" dependencies: - es6-iterator "~2.0.1" + es6-iterator "~2.0.3" es6-symbol "~3.1.1" -es6-iterator@^2.0.1, es6-iterator@~2.0.1: +es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" dependencies: @@ -3098,7 +3318,7 @@ es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: d "1" es5-ext "~0.10.14" -es6-templates@^0.2.2: +es6-templates@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/es6-templates/-/es6-templates-0.2.3.tgz#5cb9ac9fb1ded6eb1239342b81d792bbb4078ee4" dependencies: @@ -3122,6 +3342,17 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" +escodegen@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.1.tgz#dbae17ef96c8e4bedb1356f4504fa4cc2f7cb7e2" + dependencies: + esprima "^3.1.3" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + escope@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" @@ -3156,9 +3387,9 @@ eslint-import-resolver-node@^0.3.1: debug "^2.6.8" resolve "^1.2.0" -eslint-import-resolver-webpack@^0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.8.3.tgz#ad61e28df378a474459d953f246fd43f92675385" +eslint-import-resolver-webpack@^0.8.4: + version "0.8.4" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.8.4.tgz#0f7cd74bc9d7fc1773e8d5fc25baf864b2f87a42" dependencies: array-find "^1.0.0" debug "^2.6.8" @@ -3168,7 +3399,7 @@ eslint-import-resolver-webpack@^0.8.3: interpret "^1.0.0" is-absolute "^0.2.3" lodash.get "^3.7.0" - node-libs-browser "^1.0.0" + node-libs-browser "^1.0.0 || ^2.0.0" resolve "^1.2.0" semver "^5.3.0" @@ -3179,15 +3410,15 @@ eslint-module-utils@^2.1.1: debug "^2.6.8" pkg-dir "^1.0.0" -eslint-plugin-flowtype@^2.40.1: - version "2.40.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.40.1.tgz#f78a8e6a4cc6da831dd541eb61e803ff0279b796" +eslint-plugin-flowtype@^2.46.1: + version "2.46.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.46.1.tgz#c4f81d580cd89c82bc3a85a1ccf4ae3a915143a4" dependencies: lodash "^4.15.0" -eslint-plugin-import@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz#fa1b6ef31fcb3c501c09859c1b86f1fc5b986894" +eslint-plugin-import@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.9.0.tgz#26002efbfca5989b7288ac047508bd24f217b169" dependencies: builtin-modules "^1.1.1" contains-path "^0.1.0" @@ -3196,7 +3427,7 @@ eslint-plugin-import@^2.8.0: eslint-import-resolver-node "^0.3.1" eslint-module-utils "^2.1.1" has "^1.0.1" - lodash.cond "^4.3.0" + lodash "^4.17.4" minimatch "^3.0.3" read-pkg-up "^2.0.0" @@ -3212,48 +3443,52 @@ eslint-plugin-jsx-a11y@^6.0.3: emoji-regex "^6.1.0" jsx-ast-utils "^2.0.0" -eslint-plugin-prettier@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.4.0.tgz#85cab0775c6d5e3344ef01e78d960f166fb93aae" +eslint-plugin-prettier@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.0.tgz#33e4e228bdb06142d03c560ce04ec23f6c767dd7" dependencies: fast-diff "^1.1.1" jest-docblock "^21.0.0" -eslint-plugin-react@^7.5.1: - version "7.5.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.5.1.tgz#52e56e8d80c810de158859ef07b880d2f56ee30b" +eslint-plugin-react@^7.7.0: + version "7.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.7.0.tgz#f606c719dbd8a1a2b3d25c16299813878cca0160" dependencies: - doctrine "^2.0.0" + doctrine "^2.0.2" has "^1.0.1" - jsx-ast-utils "^2.0.0" + jsx-ast-utils "^2.0.1" prop-types "^15.6.0" eslint-restricted-globals@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" -eslint-scope@^3.7.1: +eslint-scope@^3.7.1, eslint-scope@~3.7.1: version "3.7.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint@^4.13.1: - version "4.13.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.13.1.tgz#0055e0014464c7eb7878caf549ef2941992b444f" +eslint-visitor-keys@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" + +eslint@^4.18.2: + version "4.18.2" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.18.2.tgz#0f81267ad1012e7d2051e186a9004cc2267b8d45" dependencies: ajv "^5.3.0" babel-code-frame "^6.22.0" chalk "^2.1.0" concat-stream "^1.6.0" cross-spawn "^5.1.0" - debug "^3.0.1" - doctrine "^2.0.2" + debug "^3.1.0" + doctrine "^2.1.0" eslint-scope "^3.7.1" + eslint-visitor-keys "^1.0.0" espree "^3.5.2" esquery "^1.0.0" - estraverse "^4.2.0" esutils "^2.0.2" file-entry-cache "^2.0.0" functional-red-black-tree "^1.0.1" @@ -3278,7 +3513,7 @@ eslint@^4.13.1: semver "^5.3.0" strip-ansi "^4.0.0" strip-json-comments "~2.0.1" - table "^4.0.1" + table "4.0.2" text-table "~0.2.0" esmangle-evaluator@^1.0.0: @@ -3286,10 +3521,10 @@ esmangle-evaluator@^1.0.0: resolved "https://registry.yarnpkg.com/esmangle-evaluator/-/esmangle-evaluator-1.0.1.tgz#620d866ef4861b3311f75766d52a8572bb3c6336" espree@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.2.tgz#756ada8b979e9dcfcdb30aad8d1a9304a905e1ca" + version "3.5.4" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" dependencies: - acorn "^5.2.1" + acorn "^5.5.0" acorn-jsx "^3.0.0" esprima-fb@^15001.1.0-dev-harmony-fb: @@ -3308,14 +3543,14 @@ esprima@^2.6.0: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" +esprima@^3.1.3, esprima@~3.1.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + esprima@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" -esprima@~3.1.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - esquery@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" @@ -3323,11 +3558,10 @@ esquery@^1.0.0: estraverse "^4.0.0" esrecurse@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" dependencies: estraverse "^4.1.0" - object-assign "^4.0.1" estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.2.0" @@ -3381,9 +3615,9 @@ execa@^0.7.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" +execa@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.9.0.tgz#adb7ce62cf985071f60580deb4a88b9e34712d01" dependencies: cross-spawn "^5.0.1" get-stream "^3.0.0" @@ -3407,6 +3641,18 @@ expand-brackets@^0.1.4: dependencies: is-posix-bracket "^0.1.0" +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + expand-range@^1.8.1: version "1.8.2" resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" @@ -3417,6 +3663,17 @@ expand-template@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-1.1.0.tgz#e09efba977bf98f9ee0ed25abd0c692e02aec3fc" +expect@^22.4.0: + version "22.4.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-22.4.0.tgz#371edf1ae15b83b5bf5ec34b42f1584660a36c16" + dependencies: + ansi-styles "^3.2.0" + jest-diff "^22.4.0" + jest-get-type "^22.1.0" + jest-matcher-utils "^22.4.0" + jest-message-util "^22.4.0" + jest-regex-util "^22.1.0" + express@^4.16.2: version "4.16.2" resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c" @@ -3465,6 +3722,19 @@ ext-name@^5.0.0: ext-list "^2.0.0" sort-keys-length "^1.0.0" +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + extend@~3.0.0, extend@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" @@ -3483,6 +3753,19 @@ extglob@^0.3.1: dependencies: is-extglob "^1.0.0" +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + extract-text-webpack-plugin@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz#5f043eaa02f9750a9258b78c0a6e0dc1408fb2f7" @@ -3523,8 +3806,8 @@ falafel@^1.0.1: object-keys "^1.0.6" fast-deep-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" + version "1.1.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" fast-diff@^1.1.1: version "1.1.2" @@ -3602,12 +3885,24 @@ file-entry-cache@^2.0.0: flat-cache "^1.2.1" object-assign "^4.0.1" -file-loader@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.5.tgz#91c25b6b6fbe56dae99f10a425fd64933b5c9daa" +file-loader@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8" dependencies: loader-utils "^1.0.2" - schema-utils "^0.3.0" + schema-utils "^0.4.5" + +file-type@^3.8.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" + +file-type@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6" + +file-type@^6.1.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919" filename-regex@^2.0.0: version "2.0.1" @@ -3623,6 +3918,15 @@ fill-range@^2.1.0: repeat-element "^1.1.2" repeat-string "^1.5.2" +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + finalhandler@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" @@ -3692,37 +3996,40 @@ flatten@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" -flow-babel-webpack-plugin@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/flow-babel-webpack-plugin/-/flow-babel-webpack-plugin-1.1.0.tgz#a8dfa7430fc88d18d7d28acc96edf0e2a2329510" +flow-babel-webpack-plugin@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flow-babel-webpack-plugin/-/flow-babel-webpack-plugin-1.1.1.tgz#7dd41110b96045eab8d8af6df48883310de54e91" dependencies: babel-plugin-transform-flow-comments "^6.17.0" flow-bin ">=0.44.2 <1" lodash.merge "^4.6.0" -"flow-bin@>=0.44.2 <1", flow-bin@^0.61.0: +"flow-bin@>=0.44.2 <1": version "0.61.0" resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.61.0.tgz#d0473a8c35dbbf4de573823f4932124397d32d35" -flow-typed@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/flow-typed/-/flow-typed-2.2.3.tgz#e7a35915a0f4cfcf8068c1ce291b5c99e6b89efa" +flow-bin@^0.66.0: + version "0.66.0" + resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.66.0.tgz#a96dde7015dc3343fd552a7b4963c02be705ca26" + +flow-typed@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/flow-typed/-/flow-typed-2.3.0.tgz#0f8604faab60691b885024e16ec0e3256e3b680e" dependencies: - babel-polyfill "^6.23.0" + babel-polyfill "^6.26.0" colors "^1.1.2" - fs-extra "^4.0.0" + fs-extra "^5.0.0" github "0.2.4" glob "^7.1.2" got "^7.1.0" md5 "^2.1.0" mkdirp "^0.5.1" - request "^2.81.0" - rimraf "^2.6.1" - semver "^5.1.0" - table "^4.0.1" + rimraf "^2.6.2" + semver "^5.5.0" + table "^4.0.2" through "^2.3.8" unzip "^0.1.11" - which "^1.2.14" + which "^1.3.0" yargs "^4.2.0" flush-write-stream@^1.0.0: @@ -3732,6 +4039,12 @@ flush-write-stream@^1.0.0: inherits "^2.0.1" readable-stream "^2.0.4" +follow-redirects@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.4.1.tgz#d8120f4518190f55aac65bb6fc7b85fcd666d6aa" + dependencies: + debug "^3.1.0" + for-each@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.2.tgz#2c40450b9348e97f281322593ba96704b9abd4d4" @@ -3742,7 +4055,7 @@ for-in@^0.1.3: version "0.1.8" resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" -for-in@^1.0.1: +for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -3794,6 +4107,12 @@ forwarded@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + dependencies: + map-cache "^0.2.2" + fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" @@ -3812,13 +4131,6 @@ from2@^2.1.0, from2@^2.3.0: inherits "^2.0.1" readable-stream "^2.0.0" -fs-extra-p@^4.4.4: - version "4.4.4" - resolved "https://registry.yarnpkg.com/fs-extra-p/-/fs-extra-p-4.4.4.tgz#396ad6f914eb2954e1700fd0e18288301ed45f04" - dependencies: - bluebird-lst "^1.0.4" - fs-extra "^4.0.2" - fs-extra-p@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/fs-extra-p/-/fs-extra-p-4.5.0.tgz#b79f3f3fcc0b5e57b7e7caeb06159f958ef15fe8" @@ -3826,6 +4138,13 @@ fs-extra-p@^4.5.0: bluebird-lst "^1.0.5" fs-extra "^5.0.0" +fs-extra-p@^4.5.2: + version "4.5.2" + resolved "https://registry.yarnpkg.com/fs-extra-p/-/fs-extra-p-4.5.2.tgz#0a22aba489284d17f375d5dc5139aa777fe2df51" + dependencies: + bluebird-lst "^1.0.5" + fs-extra "^5.0.0" + fs-extra@^0.30.0: version "0.30.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" @@ -3836,7 +4155,7 @@ fs-extra@^0.30.0: path-is-absolute "^1.0.0" rimraf "^2.2.8" -fs-extra@^4.0.0, fs-extra@^4.0.1, fs-extra@^4.0.2: +fs-extra@^4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" dependencies: @@ -3963,10 +4282,21 @@ get-stdin@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" +get-stream@^2.2.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" + dependencies: + object-assign "^4.0.1" + pinkie-promise "^2.0.0" + get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -4003,6 +4333,13 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + glob@^5.0.15: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" @@ -4047,13 +4384,9 @@ global@~4.3.0: min-document "^2.19.0" process "~0.5.1" -globals@^10.0.0: - version "10.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-10.4.0.tgz#5c477388b128a9e4c5c5d01c7a2aca68c68b2da7" - -globals@^11.0.1: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.1.0.tgz#632644457f5f0e3ae711807183700ebf2e4633e4" +globals@^11.0.1, globals@^11.1.0: + version "11.3.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.3.0.tgz#e04fdb7b9796d8adac9c8f64c14837b2313378b0" globals@^9.18.0: version "9.18.0" @@ -4123,7 +4456,7 @@ got@^7.1.0: url-parse-lax "^1.0.0" url-to-options "^1.0.1" -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@~4.1.11: +graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@~4.1.11: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" @@ -4133,6 +4466,10 @@ graceful-fs@~3.0.2: dependencies: natives "^1.1.0" +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" @@ -4186,6 +4523,10 @@ has-flag@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + has-symbol-support-x@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.1.tgz#66ec2e377e0c7d7ccedb07a3a84d77510ff1bc4c" @@ -4200,6 +4541,33 @@ has-unicode@^2.0.0, has-unicode@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + has@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" @@ -4300,21 +4668,27 @@ html-comment-regex@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" +html-encoding-sniffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + dependencies: + whatwg-encoding "^1.0.1" + html-entities@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" -html-loader@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-0.5.1.tgz#4f1e8396a1ea6ab42bedc987dfac058070861ebe" +html-loader@^0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-0.5.5.tgz#6356dbeb0c49756d8ebd5ca327f16ff06ab5faea" dependencies: - es6-templates "^0.2.2" + es6-templates "^0.2.3" fastparse "^1.1.1" - html-minifier "^3.0.1" - loader-utils "^1.0.2" - object-assign "^4.1.0" + html-minifier "^3.5.8" + loader-utils "^1.1.0" + object-assign "^4.1.1" -html-minifier@^3.0.1, html-minifier@^3.2.3: +html-minifier@^3.2.3: version "3.5.7" resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.7.tgz#511e69bb5a8e7677d1012ebe03819aa02ca06208" dependencies: @@ -4327,6 +4701,19 @@ html-minifier@^3.0.1, html-minifier@^3.2.3: relateurl "0.2.x" uglify-js "3.2.x" +html-minifier@^3.5.8: + version "3.5.10" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.10.tgz#8522c772c388db81aa5c26f62033302d906ea1c7" + dependencies: + camel-case "3.0.x" + clean-css "4.1.x" + commander "2.14.x" + he "1.1.x" + ncname "1.0.x" + param-case "2.1.x" + relateurl "0.2.x" + uglify-js "3.3.x" + html-webpack-plugin@^2.30.1: version "2.30.1" resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz#7f9c421b7ea91ec460f56527d78df484ee7537d5" @@ -4407,10 +4794,6 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -https-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" - https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" @@ -4489,9 +4872,9 @@ import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" -import-local@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-0.1.1.tgz#b1179572aacdc11c6a91009fb430dbcab5f668a8" +import-local@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" dependencies: pkg-dir "^2.0.0" resolve-cwd "^2.0.0" @@ -4537,7 +4920,7 @@ inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" -ini@^1.3.4, ini@^1.3.5, ini@~1.3.0, ini@~1.3.4: +ini@^1.3.4, ini@~1.3.0, ini@~1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" @@ -4594,12 +4977,18 @@ interpret@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" -invariant@^2.0.0, invariant@^2.2.0, invariant@^2.2.2: +invariant@^2.0.0, invariant@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" dependencies: loose-envify "^1.0.0" +invariant@^2.2.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.3.tgz#1a827dfde7dcbd7c323f0ca826be8fa7c5e9d688" + dependencies: + loose-envify "^1.0.0" + invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" @@ -4623,6 +5012,18 @@ is-absolute@^0.2.3: is-relative "^0.2.1" is-windows "^0.2.0" +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + dependencies: + kind-of "^6.0.0" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -4637,7 +5038,7 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" -is-buffer@^1.0.2, is-buffer@^1.1.5, is-buffer@~1.1.1: +is-buffer@^1.1.5, is-buffer@~1.1.1: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -4669,10 +5070,38 @@ is-cidr@~1.0.0: dependencies: cidr-regex "1.0.6" +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + dependencies: + kind-of "^6.0.0" + is-date-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + is-directory@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" @@ -4687,10 +5116,16 @@ is-equal-shallow@^0.1.3: dependencies: is-primitive "^2.0.0" -is-extendable@^0.1.1: +is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + dependencies: + is-plain-object "^2.0.4" + is-extglob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" @@ -4719,6 +5154,10 @@ is-function@^1.0.1, is-function@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" +is-generator-fn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" + is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" @@ -4753,6 +5192,10 @@ is-my-json-valid@^2.12.4: jsonpointer "^4.0.0" xtend "^4.0.0" +is-natural-number@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" + is-npm@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" @@ -4769,6 +5212,10 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" +is-number@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + is-obj@^1.0.0, is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" @@ -4783,6 +5230,12 @@ is-observable@^0.2.0: dependencies: symbol-observable "^0.2.2" +is-odd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24" + dependencies: + is-number "^4.0.0" + is-path-cwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" @@ -4803,7 +5256,7 @@ is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" -is-plain-object@^2.0.1: +is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" dependencies: @@ -4846,8 +5299,8 @@ is-relative@^0.2.1: is-unc-path "^0.1.1" is-resolvable@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.1.tgz#acca1cd36dbe44b974b924321555a70ba03b1cf4" + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" is-retry-allowed@^1.0.0: version "1.1.0" @@ -4885,6 +5338,10 @@ is-windows@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" @@ -4911,7 +5368,7 @@ isobject@^2.0.0: dependencies: isarray "1.0.0" -isobject@^3.0.1: +isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" @@ -4944,22 +5401,135 @@ jayson@^2.0.2: json-stringify-safe "5.0.1" lodash "3.6.0" +jest-config@^22.4.2: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.4.2.tgz#580ba5819bf81a5e48f4fd470e8b81834f45c855" + dependencies: + chalk "^2.0.1" + glob "^7.1.1" + jest-environment-jsdom "^22.4.1" + jest-environment-node "^22.4.1" + jest-get-type "^22.1.0" + jest-jasmine2 "^22.4.2" + jest-regex-util "^22.1.0" + jest-resolve "^22.4.2" + jest-util "^22.4.1" + jest-validate "^22.4.2" + pretty-format "^22.4.0" + +jest-diff@^22.4.0: + version "22.4.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.4.0.tgz#384c2b78519ca44ca126382df53f134289232525" + dependencies: + chalk "^2.0.1" + diff "^3.2.0" + jest-get-type "^22.1.0" + pretty-format "^22.4.0" + jest-docblock@^21.0.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" -jest-get-type@^21.2.0: - version "21.2.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-21.2.0.tgz#f6376ab9db4b60d81e39f30749c6c466f40d4a23" +jest-environment-jsdom@^22.4.1: + version "22.4.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.4.1.tgz#754f408872441740100d3917e5ec40c74de6447f" + dependencies: + jest-mock "^22.2.0" + jest-util "^22.4.1" + jsdom "^11.5.1" -jest-validate@^21.1.0: - version "21.2.1" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-21.2.1.tgz#cc0cbca653cd54937ba4f2a111796774530dd3c7" +jest-environment-node@^22.4.1: + version "22.4.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.4.1.tgz#418850eb654596b8d6e36c2021cbedbc23df8e16" + dependencies: + jest-mock "^22.2.0" + jest-util "^22.4.1" + +jest-get-type@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.1.0.tgz#4e90af298ed6181edc85d2da500dbd2753e0d5a9" + +jest-jasmine2@^22.4.2: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.4.2.tgz#dfd3d259579ed6f52510d8f1ab692808f0d40691" dependencies: chalk "^2.0.1" - jest-get-type "^21.2.0" + co "^4.6.0" + expect "^22.4.0" + graceful-fs "^4.1.11" + is-generator-fn "^1.0.0" + jest-diff "^22.4.0" + jest-matcher-utils "^22.4.0" + jest-message-util "^22.4.0" + jest-snapshot "^22.4.0" + jest-util "^22.4.1" + source-map-support "^0.5.0" + +jest-matcher-utils@^22.4.0: + version "22.4.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.4.0.tgz#d55f5faf2270462736bdf7c7485ee931c9d4b6a1" + dependencies: + chalk "^2.0.1" + jest-get-type "^22.1.0" + pretty-format "^22.4.0" + +jest-message-util@^22.4.0: + version "22.4.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.4.0.tgz#e3d861df16d2fee60cb2bc8feac2188a42579642" + dependencies: + "@babel/code-frame" "^7.0.0-beta.35" + chalk "^2.0.1" + micromatch "^2.3.11" + slash "^1.0.0" + stack-utils "^1.0.1" + +jest-mock@^22.2.0: + version "22.2.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.2.0.tgz#444b3f9488a7473adae09bc8a77294afded397a7" + +jest-regex-util@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.1.0.tgz#5daf2fe270074b6da63e5d85f1c9acc866768f53" + +jest-resolve@^22.4.2: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.4.2.tgz#25d88aa4147462c9c1c6a1ba16250d3794c24d00" + dependencies: + browser-resolve "^1.11.2" + chalk "^2.0.1" + +jest-snapshot@^22.4.0: + version "22.4.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.4.0.tgz#03d3ce63f8fa7352388afc6a3c8b5ccc3a180ed7" + dependencies: + chalk "^2.0.1" + jest-diff "^22.4.0" + jest-matcher-utils "^22.4.0" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + pretty-format "^22.4.0" + +jest-util@^22.4.1: + version "22.4.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.4.1.tgz#dd17c3bdb067f8e90591563ec0c42bf847dc249f" + dependencies: + callsites "^2.0.0" + chalk "^2.0.1" + graceful-fs "^4.1.11" + is-ci "^1.0.10" + jest-message-util "^22.4.0" + mkdirp "^0.5.1" + source-map "^0.6.0" + +jest-validate@^22.4.0, jest-validate@^22.4.2: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.4.2.tgz#e789a4e056173bf97fe797a2df2d52105c57d4f4" + dependencies: + chalk "^2.0.1" + jest-config "^22.4.2" + jest-get-type "^22.1.0" leven "^2.1.0" - pretty-format "^21.2.1" + pretty-format "^22.4.0" jmespath@0.15.0: version "0.15.0" @@ -4973,13 +5543,20 @@ js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -js-yaml@^3.10.0, js-yaml@^3.9.0, js-yaml@^3.9.1: +js-yaml@^3.10.0, js-yaml@^3.9.0: version "3.10.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" dependencies: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^3.11.0, js-yaml@^3.9.1: + version "3.11.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + js-yaml@~3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" @@ -4991,10 +5568,45 @@ jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" +jsdom@^11.5.1: + version "11.6.2" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.6.2.tgz#25d1ef332d48adf77fc5221fe2619967923f16bb" + dependencies: + abab "^1.0.4" + acorn "^5.3.0" + acorn-globals "^4.1.0" + array-equal "^1.0.0" + browser-process-hrtime "^0.1.2" + content-type-parser "^1.0.2" + cssom ">= 0.3.2 < 0.4.0" + cssstyle ">= 0.2.37 < 0.3.0" + domexception "^1.0.0" + escodegen "^1.9.0" + html-encoding-sniffer "^1.0.2" + left-pad "^1.2.0" + nwmatcher "^1.4.3" + parse5 "4.0.0" + pn "^1.1.0" + request "^2.83.0" + request-promise-native "^1.0.5" + sax "^1.2.4" + symbol-tree "^3.2.2" + tough-cookie "^2.3.3" + w3c-hr-time "^1.0.1" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.3" + whatwg-url "^6.4.0" + ws "^4.0.0" + xml-name-validator "^3.0.0" + jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" +jsesc@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe" + jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" @@ -5007,7 +5619,7 @@ json-loader@^0.5.4: version "0.5.7" resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" -json-parse-better-errors@^1.0.0: +json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz#50183cd1b2d25275de069e9e71b467ac9eab973a" @@ -5096,7 +5708,7 @@ jstransform@~3.0.0: esprima-fb "~3001.1.0-dev-harmony-fb" source-map "0.1.31" -jsx-ast-utils@^2.0.0: +jsx-ast-utils@^2.0.0, jsx-ast-utils@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" dependencies: @@ -5106,7 +5718,7 @@ keypress@0.1.x: version "0.1.0" resolved "https://registry.yarnpkg.com/keypress/-/keypress-0.1.0.tgz#4a3188d4291b66b4f65edb99f806aa9ae293592a" -keytar-prebuild@^4.0.4: +keytar-prebuild@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/keytar-prebuild/-/keytar-prebuild-4.1.1.tgz#f31cd3b2e5de743303f8c2f607f29f0117981295" dependencies: @@ -5117,13 +5729,7 @@ killable@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.0.tgz#da8b84bd47de5395878f95d64d02f2449fe05e6b" -kind-of@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-2.0.1.tgz#018ec7a4ce7e3a86cb9141be519d24c8faa981b5" - dependencies: - is-buffer "^1.0.2" - -kind-of@^3.0.2, kind-of@^3.2.2: +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" dependencies: @@ -5135,6 +5741,14 @@ kind-of@^4.0.0: dependencies: is-buffer "^1.1.5" +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + klaw@^1.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" @@ -5147,22 +5761,20 @@ latest-version@^3.0.0: dependencies: package-json "^4.0.0" -lazy-cache@^0.2.3: - version "0.2.7" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-0.2.7.tgz#7feddf2dcb6edb77d11ef1d117ab5ffdf0ab1b65" - lazy-cache@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" +lazy-cache@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-2.0.2.tgz#b9190a4f913354694840859f8a8f7084d8822264" + dependencies: + set-getter "^0.1.0" + lazy-property@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lazy-property/-/lazy-property-1.0.0.tgz#84ddc4b370679ba8bd4cdcfa4c06b43d57111147" -lazy-val@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.2.tgz#d9b07fb1fce54cbc99b3c611de431b83249369b6" - lazy-val@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.3.tgz#bb97b200ef00801d94c317e29dc6ed39e31c5edc" @@ -5173,6 +5785,10 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" +left-pad@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.2.0.tgz#d30a73c6b8201d8f7d8e7956ba9616087a68e0ee" + leven@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" @@ -5206,30 +5822,31 @@ lie@3.0.2: inline-process-browser "^1.0.0" unreachable-branch-transform "^0.3.0" -lint-staged@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-6.0.0.tgz#7ab7d345f2fe302ff196f1de6a005594ace03210" +lint-staged@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-7.0.0.tgz#57926c63201e7bd38ca0576d74391efa699b4a9d" dependencies: - app-root-path "^2.0.0" - chalk "^2.1.0" - commander "^2.11.0" - cosmiconfig "^3.1.0" + app-root-path "^2.0.1" + chalk "^2.3.1" + commander "^2.14.1" + cosmiconfig "^4.0.0" debug "^3.1.0" dedent "^0.7.0" - execa "^0.8.0" + execa "^0.9.0" find-parent-dir "^0.3.0" is-glob "^4.0.0" - jest-validate "^21.1.0" + jest-validate "^22.4.0" listr "^0.13.0" - lodash "^4.17.4" - log-symbols "^2.0.0" - minimatch "^3.0.0" + lodash "^4.17.5" + log-symbols "^2.2.0" + micromatch "^3.1.8" npm-which "^3.0.1" p-map "^1.1.1" path-is-inside "^1.0.2" pify "^3.0.0" - staged-git-files "0.0.4" - stringify-object "^3.2.0" + please-upgrade-node "^3.0.1" + staged-git-files "1.1.0" + stringify-object "^3.2.2" listr-silent-renderer@^1.1.1: version "1.1.1" @@ -5377,10 +5994,6 @@ lodash.clonedeep@^4.3.2, lodash.clonedeep@~4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" -lodash.cond@^4.3.0: - version "4.5.2" - resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" - lodash.forin@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.forin/-/lodash.forin-4.4.0.tgz#5d3f20ae564011fbe88381f7d98949c9c9519731" @@ -5432,9 +6045,9 @@ lodash.set@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" -lodash.some@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" lodash.tail@^4.1.1: version "4.1.1" @@ -5464,19 +6077,23 @@ lodash@^3.10.1: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" -lodash@^4.0.0, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@~4.17.4: +lodash@^4.0.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@~4.17.4: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" +lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.5, lodash@^4.3.0: + version "4.17.5" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" + log-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" dependencies: chalk "^1.0.0" -log-symbols@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.1.0.tgz#f35fa60e278832b538dc4dddcbb478a45d3e3be6" +log-symbols@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" dependencies: chalk "^2.0.1" @@ -5553,10 +6170,20 @@ make-fetch-happen@^2.4.13, make-fetch-happen@^2.5.0: socks-proxy-agent "^3.0.1" ssri "^5.0.0" +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + map-obj@^1.0.0, map-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + dependencies: + object-visit "^1.0.0" + marked@*: version "0.3.6" resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" @@ -5647,7 +6274,7 @@ methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" -micromatch@^2.1.5, micromatch@^2.3.11: +micromatch@^2.3.11: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" dependencies: @@ -5665,6 +6292,24 @@ micromatch@^2.1.5, micromatch@^2.3.11: parse-glob "^3.0.4" regex-cache "^0.4.2" +micromatch@^3.1.4, micromatch@^3.1.8: + version "3.1.9" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.9.tgz#15dc93175ae39e52e93087847096effc73efcf89" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -5680,7 +6325,17 @@ mime-db@~1.30.0: version "1.30.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" -mime-types@^2.1.12, mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.7: +mime-db@~1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" + +mime-types@^2.1.12, mime-types@~2.1.7: + version "2.1.18" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + dependencies: + mime-db "~1.33.0" + +mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.17: version "2.1.17" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" dependencies: @@ -5699,8 +6354,8 @@ mime@^2.2.0: resolved "https://registry.yarnpkg.com/mime/-/mime-2.2.0.tgz#161e541965551d3b549fa1114391e3a3d55b923b" mimic-fn@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" mimic-response@^1.0.0: version "1.0.0" @@ -5761,6 +6416,28 @@ mississippi@^1.2.0, mississippi@^1.3.0, mississippi@~1.3.0: stream-each "^1.1.0" through2 "^2.0.0" +mississippi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f" + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^2.0.1" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + mixin-object@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e" @@ -5848,10 +6525,31 @@ nan@2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" -nan@^2.3.0, nan@^2.3.2: +nan@^2.3.0: + version "2.9.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.9.2.tgz#f564d75f5f8f36a6d9456cca7a6c4fe488ab7866" + +nan@^2.3.2: version "2.5.1" resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.1.tgz#d5b01691253326a97a2bbee9e61c55d8d60351e2" +nanomatch@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-odd "^2.0.0" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + natives@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.1.tgz#011acce1f7cbd87f7ba6b3093d6cd9392be1c574" @@ -5870,6 +6568,10 @@ negotiator@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" +neo-async@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.0.tgz#76b1c823130cca26acfbaccc8fbaf0a2fa33b18f" + next-event@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/next-event/-/next-event-1.0.0.tgz#e7778acde2e55802e0ad1879c39cf6f75eda61d8" @@ -5923,35 +6625,7 @@ node-gyp@^3.3.1, node-gyp@~3.6.2: tar "^2.0.0" which "1" -node-libs-browser@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-1.1.1.tgz#2a38243abedd7dffcd07a97c9aca5668975a6fea" - dependencies: - assert "^1.1.1" - browserify-zlib "^0.1.4" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^1.0.0" - https-browserify "0.0.1" - os-browserify "^0.2.0" - path-browserify "0.0.0" - process "^0.11.0" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.0.5" - stream-browserify "^2.0.1" - stream-http "^2.3.1" - string_decoder "^0.10.25" - timers-browserify "^1.4.2" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.10.3" - vm-browserify "0.0.4" - -node-libs-browser@^2.0.0: +"node-libs-browser@^1.0.0 || ^2.0.0", node-libs-browser@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" dependencies: @@ -5983,7 +6657,7 @@ node-loader@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/node-loader/-/node-loader-0.6.0.tgz#c797ef51095ed5859902b157f6384f6361e05ae8" -node-notifier@^5.1.2: +node-notifier@5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff" dependencies: @@ -6062,7 +6736,7 @@ normalize-path@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" -normalize-path@^2.0.0, normalize-path@^2.0.1: +normalize-path@^2.0.1, normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" dependencies: @@ -6310,6 +6984,10 @@ number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" +nwmatcher@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.3.tgz#64348e3b3d80f035b40ac11563d278f8b72db89c" + oauth-sign@~0.8.1, oauth-sign@~0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" @@ -6322,6 +7000,14 @@ object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + object-keys@^1.0.6, object-keys@^1.0.8: version "1.0.11" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" @@ -6330,6 +7016,12 @@ object-keys@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + dependencies: + isobject "^3.0.0" + object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" @@ -6337,6 +7029,12 @@ object.omit@^2.0.0: for-own "^0.1.4" is-extendable "^0.1.1" +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + dependencies: + isobject "^3.0.1" + obuf@^1.0.0, obuf@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.1.tgz#104124b6c602c6796881a042541d36db43a5264e" @@ -6377,7 +7075,7 @@ opn@^5.1.0: dependencies: is-wsl "^1.1.0" -optionator@^0.8.2: +optionator@^0.8.1, optionator@^0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" dependencies: @@ -6403,10 +7101,6 @@ original@>=0.0.5: dependencies: url-parse "1.0.x" -os-browserify@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f" - os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" @@ -6433,13 +7127,20 @@ os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" -osenv@0, osenv@^0.1.4, osenv@~0.1.4: +osenv@0, osenv@~0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.0" +osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + "over@>= 0.0.5 < 1": version "0.0.5" resolved "https://registry.yarnpkg.com/over/-/over-0.0.5.tgz#f29852e70fd7e25f360e013a8ec44c82aedb5708" @@ -6513,10 +7214,6 @@ pacote@~6.0.2: unique-filename "^1.1.0" which "^1.3.0" -pako@~0.2.0: - version "0.2.9" - resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" - pako@~1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" @@ -6573,11 +7270,16 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" -parse-json@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-3.0.0.tgz#fa6f47b18e23826ead32f263e744d0e1e847fb13" +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" dependencies: error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse5@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" parseurl@~1.3.2: version "1.3.2" @@ -6591,6 +7293,10 @@ path-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + path-exists@^2.0.0, path-exists@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" @@ -6657,7 +7363,7 @@ performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" -pify@^2.0.0: +pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -6693,6 +7399,10 @@ pkg-up@^2.0.0: dependencies: find-up "^2.1.0" +please-upgrade-node@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.0.1.tgz#0a681f2c18915e5433a5ca2cd94e0b8206a782db" + plist@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/plist/-/plist-2.1.0.tgz#57ccdb7a0821df21831217a3cad54e3e146a1025" @@ -6705,6 +7415,10 @@ pluralize@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" +pn@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + portfinder@^1.0.9: version "1.0.13" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9" @@ -6713,6 +7427,10 @@ portfinder@^1.0.9: debug "^2.2.0" mkdirp "0.5.x" +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + postcss-calc@^5.2.0: version "5.3.1" resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" @@ -6835,27 +7553,27 @@ postcss-minify-selectors@^2.0.4: postcss "^5.0.14" postcss-selector-parser "^2.0.0" -postcss-modules-extract-imports@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz#b614c9720be6816eaee35fb3a5faa1dba6a05ddb" +postcss-modules-extract-imports@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz#66140ecece38ef06bf0d3e355d69bf59d141ea85" dependencies: postcss "^6.0.1" -postcss-modules-local-by-default@^1.0.1: +postcss-modules-local-by-default@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" dependencies: css-selector-tokenizer "^0.7.0" postcss "^6.0.1" -postcss-modules-scope@^1.0.0: +postcss-modules-scope@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" dependencies: css-selector-tokenizer "^0.7.0" postcss "^6.0.1" -postcss-modules-values@^1.1.0: +postcss-modules-values@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" dependencies: @@ -6991,9 +7709,9 @@ preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" -prettier@^1.4.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.8.2.tgz#bff83e7fd573933c607875e5ba3abbdffb96aeb8" +prettier@^1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.11.1.tgz#61e43fc4cd44e68f2b0dfc2c38cd4bb0fccdcc75" pretty-bytes@^1.0.2: version "1.0.4" @@ -7009,9 +7727,9 @@ pretty-error@^2.0.2: renderkid "^2.0.1" utila "~0.4" -pretty-format@^21.2.1: - version "21.2.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-21.2.1.tgz#ae5407f3cf21066cd011aa1ba5fce7b6a2eddb36" +pretty-format@^22.4.0: + version "22.4.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.4.0.tgz#237b1f7e1c50ed03bc65c03ccc29d7c8bb7beb94" dependencies: ansi-regex "^3.0.0" ansi-styles "^3.2.0" @@ -7024,7 +7742,11 @@ process-nextick-args@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" -process@^0.11.0, process@^0.11.10, process@~0.11.0: +process-nextick-args@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + +process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" @@ -7095,6 +7817,10 @@ prr@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -7125,6 +7851,13 @@ pump@^1.0.0, pump@^1.0.1: end-of-stream "^1.1.0" once "^1.3.1" +pump@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + pumpify@^1.3.3: version "1.3.5" resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.3.5.tgz#1b671c619940abcaeac0ad0e3a3c164be760993b" @@ -7141,6 +7874,10 @@ punycode@^1.2.4, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" +punycode@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + pupa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/pupa/-/pupa-1.0.0.tgz#9a9568a5af7e657b8462a6e9d5328743560ceff6" @@ -7219,14 +7956,14 @@ randomatic@^1.1.3: kind-of "^4.0.0" randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.5.tgz#dc009a246b8d09a177b4b7a0ae77bc570f4b1b79" + version "2.0.6" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" dependencies: safe-buffer "^5.1.0" randomfill@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.3.tgz#b96b7df587f01dd91726c418f30553b1418e3d62" + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" dependencies: randombytes "^2.0.5" safe-buffer "^5.1.0" @@ -7258,7 +7995,7 @@ rc-progress@^2.0.6: babel-runtime "6.x" prop-types "^15.5.8" -rc@^1.0.1, rc@^1.1.6, rc@^1.2.1: +rc@^1.0.1, rc@^1.1.6, rc@^1.1.7, rc@^1.2.1: version "1.2.5" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.5.tgz#275cd687f6e3b36cc756baa26dfee80a790301fd" dependencies: @@ -7276,15 +8013,6 @@ rc@^1.1.2: minimist "^1.2.0" strip-json-comments "~2.0.1" -rc@^1.1.7: - version "1.2.1" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" - dependencies: - deep-extend "~0.4.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - react-addons-create-fragment@^15.0.0: version "15.6.2" resolved "https://registry.yarnpkg.com/react-addons-create-fragment/-/react-addons-create-fragment-15.6.2.tgz#a394de7c2c7becd6b5475ba1b97ac472ce7c74f8" @@ -7366,34 +8094,20 @@ read-cmd-shim@~1.0.1: dependencies: graceful-fs "^4.1.2" -read-config-file@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-2.1.1.tgz#bd6c2b93e97a82a35f71a3c9eb43161e16692054" +read-config-file@3.0.0, read-config-file@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-3.0.0.tgz#771def5184a7f76abaf6b2c82f20cb983775b8ea" dependencies: - ajv "^5.5.0" - ajv-keywords "^2.1.0" + ajv "^6.1.1" + ajv-keywords "^3.1.0" bluebird-lst "^1.0.5" - dotenv "^4.0.0" + dotenv "^5.0.0" dotenv-expand "^4.0.1" fs-extra-p "^4.5.0" js-yaml "^3.10.0" json5 "^0.5.1" lazy-val "^1.0.3" -read-config-file@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-1.2.0.tgz#1fd7dc8ccdad838cac9f686182625290fc94f456" - dependencies: - ajv "^5.2.3" - ajv-keywords "^2.1.0" - bluebird-lst "^1.0.4" - dotenv "^4.0.0" - dotenv-expand "^4.0.1" - fs-extra-p "^4.4.4" - js-yaml "^3.10.0" - json5 "^0.5.1" - lazy-val "^1.0.2" - read-installed@~4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/read-installed/-/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067" @@ -7464,7 +8178,7 @@ read@1, read@~1.0.1, read@~1.0.7: dependencies: mute-stream "~0.0.4" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.3, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.6, readable-stream@^2.2.9, readable-stream@^2.3.3, readable-stream@~2.3.3: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.3, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" dependencies: @@ -7485,6 +8199,18 @@ readable-stream@1.0, "readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0 isarray "0.0.1" string_decoder "~0.10.x" +readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.3.3: + version "2.3.5" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.5.tgz#b4f85003a938cbb6ecbce2a124fb1012bd1a838d" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.0.3" + util-deprecate "~1.0.1" + readable-stream@~1.1.10, readable-stream@~1.1.9: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" @@ -7626,6 +8352,13 @@ regex-cache@^0.4.2: dependencies: is-equal-shallow "^0.1.3" +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + regexpu-core@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" @@ -7697,7 +8430,7 @@ repeat-element@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" -repeat-string@^1.5.2: +repeat-string@^1.5.2, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" @@ -7707,7 +8440,21 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -request@2, request@^2.45.0, request@^2.55.0, request@^2.74.0, request@^2.81.0, request@~2.83.0: +request-promise-core@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" + dependencies: + lodash "^4.13.1" + +request-promise-native@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" + dependencies: + request-promise-core "1.1.1" + stealthy-require "^1.1.0" + tough-cookie ">=2.3.3" + +request@2, request@^2.45.0, request@^2.55.0, request@^2.74.0, request@^2.83.0, request@~2.83.0: version "2.83.0" resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" dependencies: @@ -7827,6 +8574,14 @@ resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + resolve@^1.2.0, resolve@^1.4.0: version "1.5.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" @@ -7847,6 +8602,10 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + retry@^0.10.0, retry@~0.10.1: version "0.10.1" resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" @@ -7857,7 +8616,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@~2.6.2: +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@~2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: @@ -7902,6 +8661,12 @@ safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, s version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + dependencies: + ret "~0.1.10" + sanitize-filename@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.1.tgz#612da1c96473fa02dccda92dcd5b4ab164a6772a" @@ -7917,14 +8682,14 @@ sass-graph@^2.2.4: scss-tokenizer "^0.2.3" yargs "^7.0.0" -sass-loader@^6.0.6: - version "6.0.6" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-6.0.6.tgz#e9d5e6c1f155faa32a4b26d7a9b7107c225e40f9" +sass-loader@^6.0.7: + version "6.0.7" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-6.0.7.tgz#dd2fdb3e7eeff4a53f35ba6ac408715488353d00" dependencies: - async "^2.1.5" - clone-deep "^0.3.0" + clone-deep "^2.0.1" loader-utils "^1.0.1" lodash.tail "^4.1.1" + neo-async "^2.5.0" pify "^3.0.0" sax@1.2.1: @@ -7941,6 +8706,13 @@ schema-utils@^0.3.0: dependencies: ajv "^5.0.0" +schema-utils@^0.4.2, schema-utils@^0.4.3, schema-utils@^0.4.5: + version "0.4.5" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.5.tgz#21836f0608aac17b78f9e3e24daff14a5ca13a3e" + dependencies: + ajv "^6.1.0" + ajv-keywords "^3.1.0" + scss-tokenizer@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" @@ -7948,6 +8720,12 @@ scss-tokenizer@^0.2.3: js-base64 "^2.1.8" source-map "^0.4.2" +seek-bzip@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.5.tgz#cfe917cb3d274bcffac792758af53173eb1fabdc" + dependencies: + commander "~2.8.1" + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" @@ -7994,6 +8772,10 @@ send@0.16.1: range-parser "~1.2.0" statuses "~1.3.1" +serialize-javascript@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.4.0.tgz#7c958514db6ac2443a8abc062dc9f7886a7f6005" + serve-index@^1.7.2: version "1.9.1" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" @@ -8019,10 +8801,34 @@ set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" +set-getter@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/set-getter/-/set-getter-0.1.0.tgz#d769c182c9d5a51f409145f2fba82e5e86e80376" + dependencies: + to-object-path "^0.3.0" + set-immediate-shim@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" +set-value@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.1" + to-object-path "^0.3.0" + +set-value@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + "setimmediate@>= 1.0.1 < 2", "setimmediate@>= 1.0.2 < 2", setimmediate@^1.0.4, setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -8036,8 +8842,8 @@ setprototypeof@1.1.0: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.9" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.9.tgz#98f64880474b74f4a38b8da9d3c0f2d104633e7d" + version "2.4.10" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.10.tgz#b1fde5cd7d11a5626638a07c604ab909cfa31f9b" dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" @@ -8049,13 +8855,12 @@ sha@~2.0.1: graceful-fs "^4.1.2" readable-stream "^2.0.2" -shallow-clone@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-0.1.2.tgz#5909e874ba77106d73ac414cfec1ffca87d97060" +shallow-clone@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-1.0.0.tgz#4480cd06e882ef68b2ad88a3ea54832e2c48b571" dependencies: is-extendable "^0.1.1" - kind-of "^2.0.1" - lazy-cache "^0.2.3" + kind-of "^5.0.0" mixin-object "^2.0.1" shapeshift.io@^1.3.1: @@ -8133,6 +8938,33 @@ smart-buffer@^1.0.13: version "1.1.15" resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-1.1.15.tgz#7f114b5b65fab3e2a35aa775bb12f0d1c649bf16" +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.1.tgz#e12b5487faded3e3dea0ac91e9400bf75b401370" + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^2.0.0" + sntp@1.x.x: version "1.0.9" resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" @@ -8156,12 +8988,12 @@ sockjs-client@1.1.4: json3 "^3.3.2" url-parse "^1.1.8" -sockjs@0.3.18: - version "0.3.18" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.18.tgz#d9b289316ca7df77595ef299e075f0f937eb4207" +sockjs@0.3.19: + version "0.3.19" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" dependencies: faye-websocket "^0.10.0" - uuid "^2.0.2" + uuid "^3.0.1" socks-proxy-agent@^3.0.1: version "3.0.1" @@ -8204,6 +9036,16 @@ source-list-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" +source-map-resolve@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.1.tgz#7ad0f593f2281598e854df80f19aae4b92d7a11a" + dependencies: + atob "^2.0.0" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + source-map-support@^0.4.15: version "0.4.18" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" @@ -8216,19 +9058,23 @@ source-map-support@^0.5.0: dependencies: source-map "^0.6.0" -source-map-support@^0.5.1, source-map-support@^0.5.2, source-map-support@^0.5.3: +source-map-support@^0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.3.tgz#2b3d5fff298cfa4d1afd7d4352d569e9a0158e76" dependencies: source-map "^0.6.0" +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + source-map@0.1.31: version "0.1.31" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.31.tgz#9f704d0d69d9e138a81badf6ebb4fde33d151c61" dependencies: amdefine ">=0.0.4" -source-map@0.5.x, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.0, source-map@~0.5.1, source-map@~0.5.3: +source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.0, source-map@~0.5.1: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" @@ -8242,19 +9088,27 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" -spdx-correct@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" +spdx-correct@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" dependencies: - spdx-license-ids "^1.0.2" + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" -spdx-expression-parse@~1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" +spdx-exceptions@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" -spdx-license-ids@^1.0.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" spdy-transport@^2.0.18: version "2.0.20" @@ -8283,6 +9137,12 @@ speedometer@~0.1.2: version "0.1.4" resolved "https://registry.yarnpkg.com/speedometer/-/speedometer-0.1.4.tgz#9876dbd2a169d3115402d48e6ea6329c8816a50d" +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + dependencies: + extend-shallow "^3.0.0" + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -8313,14 +9173,31 @@ ssri@^5.0.0: dependencies: safe-buffer "^5.1.0" -staged-git-files@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-0.0.4.tgz#d797e1b551ca7a639dec0237dc6eb4bb9be17d35" +ssri@^5.2.4: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.2.4.tgz#9985e14041e65fc397af96542be35724ac11da52" + dependencies: + safe-buffer "^5.1.1" + +stack-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" + +staged-git-files@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.0.tgz#1a9bb131c1885601023c7aaddd3d54c22142c526" stat-mode@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-0.2.2.tgz#e6c80b623123d7d80cf132ce538f346289072502" +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + "statuses@>= 1.3.1 < 2", statuses@~1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" @@ -8331,6 +9208,10 @@ stdout-stream@^1.4.0: dependencies: readable-stream "^2.0.1" +stealthy-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + stream-browserify@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" @@ -8345,13 +9226,13 @@ stream-each@^1.1.0: end-of-stream "^1.1.0" stream-shift "^1.0.0" -stream-http@^2.3.1, stream-http@^2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.2.tgz#40a050ec8dc3b53b33d9909415c02c0bf1abfbad" +stream-http@^2.7.2: + version "2.8.0" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.0.tgz#fd86546dac9b1c91aff8fc5d287b98fafb41bc10" dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.1" - readable-stream "^2.2.6" + readable-stream "^2.3.3" to-arraybuffer "^1.0.0" xtend "^4.0.0" @@ -8407,19 +9288,25 @@ string.prototype.repeat@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-0.2.0.tgz#aba36de08dcee6a5a337d49b2ea1da1b28fc0ecf" -string_decoder@^0.10.25, string_decoder@~0.10.x: +string_decoder@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.0.tgz#384f322ee8a848e500effde99901bba849c5d403" + dependencies: + safe-buffer "~5.1.0" + +string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" -string_decoder@^1.0.0, string_decoder@~1.0.3: +string_decoder@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" dependencies: safe-buffer "~5.1.0" -stringify-object@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.2.1.tgz#2720c2eff940854c819f6ee252aaeb581f30624d" +stringify-object@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.2.2.tgz#9853052e5a88fb605a44cd27445aa257ad7ffbcd" dependencies: get-own-enumerable-property-symbols "^2.0.1" is-obj "^1.0.1" @@ -8451,6 +9338,12 @@ strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" +strip-dirs@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5" + dependencies: + is-natural-number "^4.0.1" + strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" @@ -8469,12 +9362,12 @@ strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" -style-loader@^0.19.0: - version "0.19.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.19.0.tgz#7258e788f0fee6a42d710eaf7d6c2412a4c50759" +style-loader@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.20.2.tgz#851b373c187890331776e9cde359eea9c95ecd00" dependencies: - loader-utils "^1.0.2" - schema-utils "^0.3.0" + loader-utils "^1.1.0" + schema-utils "^0.4.3" sumchecker@^1.2.0: version "1.3.1" @@ -8505,6 +9398,12 @@ supports-color@^4.0.0, supports-color@^4.2.1, supports-color@^4.4.0: dependencies: has-flag "^2.0.0" +supports-color@^5.1.0, supports-color@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.3.0.tgz#5b24ac15db80fa927cf5227a4a33fd3c4c7676c0" + dependencies: + has-flag "^3.0.0" + svgo@^0.7.0: version "0.7.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" @@ -8529,7 +9428,11 @@ symbol-observable@^1.0.3: version "1.1.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.1.0.tgz#5c68fd8d54115d9dfb72a84720549222e8db9b32" -table@^4.0.1: +symbol-tree@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + +table@4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" dependencies: @@ -8540,6 +9443,17 @@ table@^4.0.1: slice-ansi "1.0.0" string-width "^2.1.1" +table@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc" + dependencies: + ajv "^6.0.1" + ajv-keywords "^3.0.0" + chalk "^2.1.0" + lodash "^4.17.4" + slice-ansi "1.0.0" + string-width "^2.1.1" + tapable@^0.1.8: version "0.1.10" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4" @@ -8570,7 +9484,7 @@ tar-pack@^3.4.0: tar "^2.2.1" uid-number "^0.0.6" -tar-stream@^1.1.2: +tar-stream@^1.1.2, tar-stream@^1.5.2: version "1.5.5" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.5.5.tgz#5cad84779f45c83b1f2508d96b09d88c7218af55" dependencies: @@ -8657,15 +9571,9 @@ timed-out@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" -timers-browserify@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" - dependencies: - process "~0.11.0" - timers-browserify@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.4.tgz#96ca53f4b794a5e7c0e1bd7cc88a372298fa01e6" + version "2.0.6" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.6.tgz#241e76927d9ca05f4d959819022f5b3664b64bae" dependencies: setimmediate "^1.0.4" @@ -8687,16 +9595,50 @@ to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + toposort@^1.0.0: version "1.0.6" resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.6.tgz#c31748e55d210effc00fdcdc7d6e68d7d7bb9cec" -tough-cookie@~2.3.0, tough-cookie@~2.3.3: +tough-cookie@>=2.3.3, tough-cookie@^2.3.3, tough-cookie@~2.3.0: + version "2.3.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" + dependencies: + punycode "^1.4.1" + +tough-cookie@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" dependencies: punycode "^1.4.1" +tr46@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + dependencies: + punycode "^2.1.0" + "traverse@>=0.3.0 <0.4": version "0.3.9" resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" @@ -8772,6 +9714,13 @@ ua-parser-js@^0.7.9: version "0.7.10" resolved "https://codeload.github.com/amplitude/ua-parser-js/tar.gz/ed538f16f5c6ecd8357da989b617d4f156dcf35d" +uglify-es@^3.3.4: + version "3.3.9" + resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" + dependencies: + commander "~2.13.0" + source-map "~0.6.1" + uglify-js@3.2.x: version "3.2.1" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.2.1.tgz#d6427fd45a25fefc5d196689c0c772a6915e10fe" @@ -8779,6 +9728,13 @@ uglify-js@3.2.x: commander "~2.12.1" source-map "~0.6.1" +uglify-js@3.3.x: + version "3.3.13" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.13.tgz#8a1a89eeb16e2d6a66b0db2b04cb871af3c669cf" + dependencies: + commander "~2.14.1" + source-map "~0.6.1" + uglify-js@^2.8.29: version "2.8.29" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" @@ -8800,6 +9756,19 @@ uglifyjs-webpack-plugin@^0.4.6: uglify-js "^2.8.29" webpack-sources "^1.0.1" +uglifyjs-webpack-plugin@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.2.tgz#e7516d4367afdb715c3847841eb46f94c45ca2b9" + dependencies: + cacache "^10.0.1" + find-cache-dir "^1.0.0" + schema-utils "^0.4.2" + serialize-javascript "^1.4.0" + source-map "^0.6.1" + uglify-es "^3.3.4" + webpack-sources "^1.1.0" + worker-farm "^1.5.2" + uid-number@0.0.6, uid-number@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" @@ -8812,6 +9781,13 @@ umask@^1.1.0, umask@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" +unbzip2-stream@^1.0.9: + version "1.2.5" + resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.2.5.tgz#73a033a567bbbde59654b193c44d48a7e4f43c47" + dependencies: + buffer "^3.0.1" + through "^2.3.6" + unc-path-regex@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" @@ -8820,6 +9796,15 @@ underscore@>1.4.4: version "1.8.3" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" +union-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^0.4.3" + uniq@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" @@ -8868,6 +9853,13 @@ unreachable-branch-transform@^0.3.0: recast "^0.10.1" through2 "^0.6.2" +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + unused-filename@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unused-filename/-/unused-filename-1.0.0.tgz#d340880f71ae2115ebaa1325bef05cc6684469c6" @@ -8894,6 +9886,10 @@ unzip@^0.1.11: readable-stream "~1.0.31" setimmediate ">= 1.0.1 < 2" +upath@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.4.tgz#ee2321ba0a786c50973db043a50b7bcba822361d" + update-notifier@^2.2.0, update-notifier@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.3.0.tgz#4e8827a6bb915140ab093559d7014e3ebb837451" @@ -8925,6 +9921,10 @@ upper-case@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + url-loader@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.6.2.tgz#a007a7109620e9d988d14bce677a1decb9a993f7" @@ -8971,6 +9971,14 @@ url@^0.11.0: punycode "1.3.2" querystring "0.2.0" +use@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/use/-/use-2.0.2.tgz#ae28a0d72f93bf22422a18a2e379993112dec8e8" + dependencies: + define-property "^0.2.5" + isobject "^3.0.0" + lazy-cache "^2.0.2" + utf8-byte-length@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" @@ -9001,24 +10009,20 @@ utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" -uuid@3.1.0, uuid@^3.0.0, uuid@~3.1.0: +uuid@3.1.0, uuid@~3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" -uuid@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" - -uuid@^3.1.0: +uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0: version "3.2.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" validate-npm-package-license@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + version "3.0.3" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338" dependencies: - spdx-correct "~1.0.0" - spdx-expression-parse "~1.0.0" + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0: version "3.0.0" @@ -9065,6 +10069,12 @@ vm-browserify@0.0.4: dependencies: indexof "0.0.1" +w3c-hr-time@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" + dependencies: + browser-process-hrtime "^0.1.2" + warning@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" @@ -9072,12 +10082,12 @@ warning@^3.0.0: loose-envify "^1.0.0" watchpack@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac" + version "1.5.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.5.0.tgz#231e783af830a22f8966f65c4c4bacc814072eed" dependencies: - async "^2.1.2" - chokidar "^1.7.0" + chokidar "^2.0.2" graceful-fs "^4.1.2" + neo-async "^2.5.0" wbuf@^1.1.0, wbuf@^1.7.2: version "1.7.2" @@ -9091,15 +10101,19 @@ wcwidth@^1.0.0: dependencies: defaults "^1.0.3" -webpack-build-notifier@^0.1.18: - version "0.1.18" - resolved "https://registry.yarnpkg.com/webpack-build-notifier/-/webpack-build-notifier-0.1.18.tgz#86bd787bd8156777cef11e48f1143ca33c3cf6d8" +webidl-conversions@^4.0.1, webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + +webpack-build-notifier@^0.1.23: + version "0.1.23" + resolved "https://registry.yarnpkg.com/webpack-build-notifier/-/webpack-build-notifier-0.1.23.tgz#7df405dfb77c5584c4e2e27b445f6aa0414ca384" dependencies: ansi-regex "^2.0.0" - node-notifier "^5.1.2" + node-notifier "5.1.2" strip-ansi "^3.0.1" -webpack-dev-middleware@^1.11.0: +webpack-dev-middleware@1.12.2: version "1.12.2" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e" dependencies: @@ -9109,14 +10123,14 @@ webpack-dev-middleware@^1.11.0: range-parser "^1.0.3" time-stamp "^2.0.0" -webpack-dev-server@^2.9.3: - version "2.9.7" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.9.7.tgz#100ad6a14775478924d417ca6dcfb9d52a98faed" +webpack-dev-server@^2.11.1: + version "2.11.2" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.11.2.tgz#1f4f4c78bf1895378f376815910812daf79a216f" dependencies: ansi-html "0.0.7" array-includes "^3.0.3" bonjour "^3.5.0" - chokidar "^1.6.0" + chokidar "^2.0.0" compression "^1.5.2" connect-history-api-fallback "^1.3.0" debug "^3.1.0" @@ -9124,7 +10138,7 @@ webpack-dev-server@^2.9.3: express "^4.16.2" html-entities "^1.2.0" http-proxy-middleware "~0.17.4" - import-local "^0.1.1" + import-local "^1.0.0" internal-ip "1.2.0" ip "^1.1.5" killable "^1.0.0" @@ -9133,35 +10147,35 @@ webpack-dev-server@^2.9.3: portfinder "^1.0.9" selfsigned "^1.9.1" serve-index "^1.7.2" - sockjs "0.3.18" + sockjs "0.3.19" sockjs-client "1.1.4" spdy "^3.4.1" - strip-ansi "^3.0.1" - supports-color "^4.2.1" - webpack-dev-middleware "^1.11.0" - yargs "^6.6.0" + strip-ansi "^3.0.0" + supports-color "^5.1.0" + webpack-dev-middleware "1.12.2" + yargs "6.6.0" -webpack-merge@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.1.tgz#f1197a0a973e69c6fbeeb6d658219aa8c0c13555" +webpack-merge@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.2.tgz#5d372dddd3e1e5f8874f5bf5a8e929db09feb216" dependencies: - lodash "^4.17.4" + lodash "^4.17.5" -webpack-sources@1.0.1, webpack-sources@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.0.1.tgz#c7356436a4d13123be2e2426a05d1dad9cbe65cf" +webpack-sources@^1.0.1, webpack-sources@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54" dependencies: source-list-map "^2.0.0" - source-map "~0.5.3" + source-map "~0.6.1" webpack@^3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.10.0.tgz#5291b875078cf2abf42bdd23afe3f8f96c17d725" + version "3.11.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.11.0.tgz#77da451b1d7b4b117adaf41a1a93b5742f24d894" dependencies: acorn "^5.0.0" acorn-dynamic-import "^2.0.0" - ajv "^5.1.5" - ajv-keywords "^2.0.0" + ajv "^6.1.0" + ajv-keywords "^3.1.0" async "^2.1.2" enhanced-resolve "^3.4.0" escope "^3.6.0" @@ -9192,6 +10206,12 @@ websocket-extensions@>=0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3" + dependencies: + iconv-lite "0.4.19" + whatwg-fetch@>=0.10.0: version "2.0.3" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" @@ -9200,6 +10220,14 @@ whatwg-fetch@^0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-0.9.0.tgz#0e3684c6cb9995b43efc9df03e4c365d95fd9cc0" +whatwg-url@^6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.4.0.tgz#08fdf2b9e872783a7a1f6216260a1d66cc722e08" + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.0" + webidl-conversions "^4.0.1" + whet.extend@~0.9.9: version "0.9.9" resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" @@ -9252,6 +10280,13 @@ wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" +worker-farm@^1.5.2: + version "1.5.4" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.4.tgz#4debbe46b40edefcc717ebde74a90b1ae1e909a1" + dependencies: + errno "~0.1.7" + xtend "~4.0.1" + worker-farm@~1.5.0: version "1.5.2" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.2.tgz#32b312e5dc3d5d45d79ef44acc2587491cd729ae" @@ -9292,6 +10327,13 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" +ws@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-4.1.0.tgz#a979b5d7d4da68bf54efe0408967c324869a7289" + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + xdg-basedir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" @@ -9309,6 +10351,10 @@ xml-char-classes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d" +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + xml2js@0.4.17: version "0.4.17" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.17.tgz#17be93eaae3f3b779359c795b419705a8817e868" @@ -9389,34 +10435,29 @@ yargs-parser@^7.0.0: dependencies: camelcase "^4.1.0" -yargs-parser@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.0.0.tgz#21d476330e5a82279a4b881345bf066102e219c6" - dependencies: - camelcase "^4.1.0" - yargs-parser@^9.0.2: version "9.0.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" dependencies: camelcase "^4.1.0" -yargs@^10.0.3: - version "10.0.3" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.0.3.tgz#6542debd9080ad517ec5048fb454efe9e4d4aaae" +yargs@6.6.0: + version "6.6.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" dependencies: + camelcase "^3.0.0" cliui "^3.2.0" decamelize "^1.1.1" - find-up "^2.1.0" get-caller-file "^1.0.1" - os-locale "^2.0.0" + 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 "^2.0.0" - which-module "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" y18n "^3.2.1" - yargs-parser "^8.0.0" + yargs-parser "^4.2.0" yargs@^11.0.0: version "11.0.0" @@ -9454,24 +10495,6 @@ yargs@^4.2.0: y18n "^3.2.1" yargs-parser "^2.4.1" -yargs@^6.6.0: - version "6.6.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - 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.0" - yargs@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" @@ -9522,3 +10545,10 @@ yauzl@2.4.1: resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" dependencies: fd-slicer "~1.0.1" + +yauzl@^2.4.2: + version "2.9.1" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.9.1.tgz#a81981ea70a57946133883f029c5821a89359a7f" + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.0.1" -- 2.45.3 From 77ae75a655cd9f3de617f43f405e691bea270b41 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Wed, 7 Mar 2018 18:26:35 -0500 Subject: [PATCH 014/192] chore: remove daemon download from build.sh Daemon is now being download when the command $ yarn install is used. --- build/build.sh | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/build/build.sh b/build/build.sh index 5d9edcc5a..8c47704b2 100755 --- a/build/build.sh +++ b/build/build.sh @@ -43,32 +43,6 @@ fi yarn install -#################### -# daemon and cli # -#################### -echo -e "\033[0;32mGrabbing Daemon and CLI\x1b[m" -if $OSX; then - OSNAME="macos" -else - OSNAME="linux" -fi -DAEMON_VER=$(node -e "console.log(require(\"$ROOT/package.json\").lbrySettings.lbrynetDaemonVersion)") -DAEMON_URL_TEMPLATE=$(node -e "console.log(require(\"$ROOT/package.json\").lbrySettings.lbrynetDaemonUrlTemplate)") -DAEMON_URL=$(echo ${DAEMON_URL_TEMPLATE//DAEMONVER/$DAEMON_VER} | sed "s/OSNAME/$OSNAME/g") -DAEMON_VER_PATH="$BUILD_DIR/daemon.ver" -echo "$DAEMON_VER_PATH" -if [[ ! -f $DAEMON_VER_PATH || ! -f $ROOT/static/daemon/lbrynet-daemon || "$(< "$DAEMON_VER_PATH")" != "$DAEMON_VER" ]]; then - curl -sL -o "$BUILD_DIR/daemon.zip" "$DAEMON_URL" - unzip -o "$BUILD_DIR/daemon.zip" -d "$ROOT/static/daemon/" - rm "$BUILD_DIR/daemon.zip" - echo "$DAEMON_VER" > "$DAEMON_VER_PATH" -else - echo -e "\033[4;31mAlready have daemon version $DAEMON_VER, skipping download\x1b[m" -fi - - - - ################### # Build the app # ################### -- 2.45.3 From a8ce782894bfa1a171b3ecf3c3398c7a88a5a51a Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Wed, 7 Mar 2018 19:56:58 -0800 Subject: [PATCH 015/192] Do not log to api when dianostic sharing is off --- src/renderer/analytics.js | 11 +++++++++++ src/renderer/redux/actions/content.js | 7 ++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/renderer/analytics.js b/src/renderer/analytics.js index c0fd82f13..b3456bf1d 100644 --- a/src/renderer/analytics.js +++ b/src/renderer/analytics.js @@ -1,5 +1,6 @@ // @flow import mixpanel from 'mixpanel-browser'; +import Lbryio from 'lbryio'; mixpanel.init('691723e855cabb9d27a7a79002216967'); @@ -7,6 +8,7 @@ type Analytics = { track: (string, ?Object) => void, setUser: Object => void, toggle: (boolean, ?boolean) => void, + apiLog: (string, string, string) => void, }; let analyticsEnabled: boolean = false; @@ -37,6 +39,15 @@ const analytics: Analytics = { } analyticsEnabled = enabled; }, + apiLog: (uri: string, outpoint: string, claim_id: string): void => { + if(analyticsEnabled) { + Lbryio.call('file', 'view', { + uri, + outpoint: outpoint, + claim_id: claim_id, + }).catch(() => {}); + } + } }; export default analytics; diff --git a/src/renderer/redux/actions/content.js b/src/renderer/redux/actions/content.js index 2ca2c4dbb..8231f41ab 100644 --- a/src/renderer/redux/actions/content.js +++ b/src/renderer/redux/actions/content.js @@ -21,6 +21,7 @@ import { selectBalance } from 'redux/selectors/wallet'; import batchActions from 'util/batchActions'; import setBadge from 'util/setBadge'; import setProgressBar from 'util/setProgressBar'; +import analytics from 'analytics'; const DOWNLOAD_POLL_INTERVAL = 250; @@ -226,11 +227,7 @@ export function doDownloadFile(uri, streamInfo) { return dispatch => { dispatch(doStartDownload(uri, streamInfo.outpoint)); - Lbryio.call('file', 'view', { - uri, - outpoint: streamInfo.outpoint, - claim_id: streamInfo.claim_id, - }).catch(() => {}); + analytics.apiLog(uri, streamInfo.output, streamInfo.claim_id); dispatch(doClaimEligiblePurchaseRewards()); }; -- 2.45.3 From 5d896124f4e87bd72641b8362dca385c8c6014c4 Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Wed, 7 Mar 2018 20:21:33 -0800 Subject: [PATCH 016/192] Improved messaging around analytics --- src/renderer/modal/modalEmailCollection/view.jsx | 9 ++++++++- src/renderer/page/auth/view.jsx | 2 +- src/renderer/page/settings/view.jsx | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/renderer/modal/modalEmailCollection/view.jsx b/src/renderer/modal/modalEmailCollection/view.jsx index a17ecf7df..8552dbc0a 100644 --- a/src/renderer/modal/modalEmailCollection/view.jsx +++ b/src/renderer/modal/modalEmailCollection/view.jsx @@ -30,7 +30,14 @@ class ModalEmailCollection extends React.PureComponent {

Can We Stay In Touch?

- {this.renderInner()} +
{this.renderInner()}
+
+
+ {`${__( + 'Your email may be used to sync usage data across devices.' + )} `} +
+
); diff --git a/src/renderer/page/auth/view.jsx b/src/renderer/page/auth/view.jsx index 423ce8597..6a7052343 100644 --- a/src/renderer/page/auth/view.jsx +++ b/src/renderer/page/auth/view.jsx @@ -68,7 +68,7 @@ export class AuthPage extends React.PureComponent {
{`${__( - 'This information is disclosed only to LBRY, Inc. and not to the LBRY network. It is only required to earn LBRY rewards.' + 'This information is disclosed only to LBRY, Inc. and not to the LBRY network. It is only required to earn LBRY rewards and may be used to sync usage data across devices.' )} `} navigate('/discover')} label={__('Return home')} />.
diff --git a/src/renderer/page/settings/view.jsx b/src/renderer/page/settings/view.jsx index d2a22db03..9dbc1a70a 100644 --- a/src/renderer/page/settings/view.jsx +++ b/src/renderer/page/settings/view.jsx @@ -308,7 +308,7 @@ class SettingsPage extends React.PureComponent { type="checkbox" onChange={this.onShareDataChange.bind(this)} defaultChecked={daemonSettings.share_usage_data} - label={__('Help make LBRY better by contributing diagnostic data about my usage')} + label={__('Help make LBRY better by contributing analytics and diagnostic data and about my usage')} />
-- 2.45.3 From 06c7572c8e2eb2073782b9aa1acd645c0865a025 Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Wed, 7 Mar 2018 21:07:42 -0800 Subject: [PATCH 017/192] Fixed formatting issues --- src/main/index.js | 4 ++-- src/renderer/analytics.js | 10 +++++----- src/renderer/component/fileList/view.jsx | 12 ++++++------ src/renderer/component/rewardSummary/view.jsx | 6 +++--- src/renderer/index.js | 2 +- src/renderer/modal/modalEmailCollection/view.jsx | 4 +--- src/renderer/page/settings/view.jsx | 4 +++- src/renderer/redux/actions/settings.js | 3 ++- 8 files changed, 23 insertions(+), 22 deletions(-) diff --git a/src/main/index.js b/src/main/index.js index d068e87e0..ec468ae70 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -64,8 +64,8 @@ app.on('ready', async () => { dialog.showErrorBox( 'Daemon has Exited', 'The daemon may have encountered an unexpected error, or another daemon instance is already running. \n\n' + - 'For more information please visit: \n' + - 'https://lbry.io/faq/startup-troubleshooting' + 'For more information please visit: \n' + + 'https://lbry.io/faq/startup-troubleshooting' ); app.quit(); } diff --git a/src/renderer/analytics.js b/src/renderer/analytics.js index b3456bf1d..a52b46651 100644 --- a/src/renderer/analytics.js +++ b/src/renderer/analytics.js @@ -39,15 +39,15 @@ const analytics: Analytics = { } analyticsEnabled = enabled; }, - apiLog: (uri: string, outpoint: string, claim_id: string): void => { - if(analyticsEnabled) { + apiLog: (uri: string, outpoint: string, claimId: string): void => { + if (analyticsEnabled) { Lbryio.call('file', 'view', { uri, - outpoint: outpoint, - claim_id: claim_id, + outpoint, + claim_id: claimId, }).catch(() => {}); } - } + }, }; export default analytics; diff --git a/src/renderer/component/fileList/view.jsx b/src/renderer/component/fileList/view.jsx index afb446323..eef0993c6 100644 --- a/src/renderer/component/fileList/view.jsx +++ b/src/renderer/component/fileList/view.jsx @@ -15,27 +15,27 @@ class FileList extends React.PureComponent { this._sortFunctions = { dateNew(fileInfos) { return fileInfos.slice().sort((fileInfo1, fileInfo2) => { - const height1 = fileInfo1.height - const height2 = fileInfo2.height + const height1 = fileInfo1.height; + const height2 = fileInfo2.height; if (height1 > height2) { return -1; } else if (height1 < height2) { return 1; } return 0; - }); + }); }, dateOld(fileInfos) { return fileInfos.slice().sort((fileInfo1, fileInfo2) => { - const height1 = fileInfo1.height - const height2 = fileInfo2.height + const height1 = fileInfo1.height; + const height2 = fileInfo2.height; if (height1 < height2) { return -1; } else if (height1 > height2) { return 1; } return 0; - }); + }); }, title(fileInfos) { return fileInfos.slice().sort((fileInfo1, fileInfo2) => { diff --git a/src/renderer/component/rewardSummary/view.jsx b/src/renderer/component/rewardSummary/view.jsx index 36507d535..9fa611902 100644 --- a/src/renderer/component/rewardSummary/view.jsx +++ b/src/renderer/component/rewardSummary/view.jsx @@ -15,9 +15,9 @@ const RewardSummary = (props: Props) => {

{__('Rewards')}

- {__('Read our')}{' '} - {__('FAQ')}{' '}{__('to learn more about LBRY Rewards')}. -

+ {__('Read our')} {__('FAQ')}{' '} + {__('to learn more about LBRY Rewards')}. +

{unclaimedRewardAmount > 0 ? ( diff --git a/src/renderer/index.js b/src/renderer/index.js index 822f0b153..c1edc1271 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -69,7 +69,7 @@ ipcRenderer.on('window-is-focused', () => { document.addEventListener('dragover', event => { event.preventDefault(); -}) +}); document.addEventListener('drop', event => { event.preventDefault(); }); diff --git a/src/renderer/modal/modalEmailCollection/view.jsx b/src/renderer/modal/modalEmailCollection/view.jsx index 8552dbc0a..1418114d3 100644 --- a/src/renderer/modal/modalEmailCollection/view.jsx +++ b/src/renderer/modal/modalEmailCollection/view.jsx @@ -33,9 +33,7 @@ class ModalEmailCollection extends React.PureComponent {
{this.renderInner()}
- {`${__( - 'Your email may be used to sync usage data across devices.' - )} `} + {`${__('Your email may be used to sync usage data across devices.')} `}
diff --git a/src/renderer/page/settings/view.jsx b/src/renderer/page/settings/view.jsx index 9dbc1a70a..fe704b906 100644 --- a/src/renderer/page/settings/view.jsx +++ b/src/renderer/page/settings/view.jsx @@ -308,7 +308,9 @@ class SettingsPage extends React.PureComponent { type="checkbox" onChange={this.onShareDataChange.bind(this)} defaultChecked={daemonSettings.share_usage_data} - label={__('Help make LBRY better by contributing analytics and diagnostic data and about my usage')} + label={__( + 'Help make LBRY better by contributing analytics and diagnostic data and about my usage' + )} />
diff --git a/src/renderer/redux/actions/settings.js b/src/renderer/redux/actions/settings.js index da4ed52a0..db3fa5020 100644 --- a/src/renderer/redux/actions/settings.js +++ b/src/renderer/redux/actions/settings.js @@ -70,7 +70,8 @@ export function doUpdateIsNight() { const momentNow = moment(); return { type: ACTIONS.UPDATE_IS_NIGHT, - data: { isNight: (() => { + data: { + isNight: (() => { const startNightMoment = moment('21:00', 'HH:mm'); const endNightMoment = moment('8:00', 'HH:mm'); return !(momentNow.isAfter(endNightMoment) && momentNow.isBefore(startNightMoment)); -- 2.45.3 From 42b45cea7da645601a34e5505692514486837324 Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Wed, 7 Mar 2018 21:44:03 -0800 Subject: [PATCH 018/192] Added production analytics key --- src/renderer/analytics.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/renderer/analytics.js b/src/renderer/analytics.js index a52b46651..57d053fc9 100644 --- a/src/renderer/analytics.js +++ b/src/renderer/analytics.js @@ -1,8 +1,13 @@ // @flow import mixpanel from 'mixpanel-browser'; import Lbryio from 'lbryio'; +import isDev from 'electron-is-dev'; -mixpanel.init('691723e855cabb9d27a7a79002216967'); +if (isDev) { + mixpanel.init('691723e855cabb9d27a7a79002216967'); +} else { + mixpanel.init('af5c6b8110068fa4f5c4600c81f05e60'); +} type Analytics = { track: (string, ?Object) => void, -- 2.45.3 From 906eb852fa1342ca6973baf331c316ddbb5d80cc Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Thu, 8 Mar 2018 09:29:26 -0500 Subject: [PATCH 019/192] chore: indicate paths for build artifacts to Travis --- .travis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 1e86c783d..a86e18737 100644 --- a/.travis.yml +++ b/.travis.yml @@ -42,4 +42,6 @@ branches: except: - "/^v\\d+\\.\\d+\\.\\d+$/" addons: - artifacts: true \ No newline at end of file + artifacts: + paths: + - $(git ls-files -o dist/{*.dmg,*.AppImage,*.exe} | tr "\n" ":") \ No newline at end of file -- 2.45.3 From 1fa8d4bcf7f83cd89ec774d54da6e70e0e0e3ff6 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Thu, 8 Mar 2018 09:33:24 -0500 Subject: [PATCH 020/192] chore: remove publishing from build.sh script --- build/build.sh | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/build/build.sh b/build/build.sh index 8c47704b2..7ce077b3d 100755 --- a/build/build.sh +++ b/build/build.sh @@ -53,23 +53,6 @@ if [ "$FULL_BUILD" == "true" ]; then yarn build - # Workaround: TeamCity expects the dmg to be in dist/mac, but in the new electron-builder - # it's put directly in dist/ (the right way to solve this is to update the TeamCity config) - if $OSX; then - cp dist/*.dmg dist/mac - fi - - # electron-build has a publish feature, but I had a hard time getting - # it to reliably work and it also seemed difficult to configure. Not proud of - # this, but it seemed better to write my own. - VENV="$BUILD_DIR/venv" - if [ -d "$VENV" ]; then - rm -rf "$VENV" - fi - virtualenv "$VENV" - "$VENV/bin/pip" install -r "$BUILD_DIR/requirements.txt" - "$VENV/bin/python" "$BUILD_DIR/upload_assets.py" - echo -e '\033[0;32mBuild and packaging complete.\x1b[m' else echo -e 'Build complete. Run \033[1;31myarn dev\x1b[m to launch the app' -- 2.45.3 From 4cb53869ac612e78a8baa715e2ea69207b001ed5 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Thu, 8 Mar 2018 10:30:57 -0500 Subject: [PATCH 021/192] chore: specify destination folder name for artifacts upload --- .travis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index a86e18737..2afbe30bb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -44,4 +44,6 @@ branches: addons: artifacts: paths: - - $(git ls-files -o dist/{*.dmg,*.AppImage,*.exe} | tr "\n" ":") \ No newline at end of file + - $(git ls-files -o dist/{*.dmg,*.AppImage,*.exe} | tr "\n" ":") + target_paths: + - /commit-${TRAVIS_COMMIT}_build-${TRAVIS_BUILD_NUMBER}_tag-${TRAVIS_TAG} \ No newline at end of file -- 2.45.3 From 06eb727daa7e0cb2d3413aeb1d1a9d6a3eba01dc Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Thu, 8 Mar 2018 10:45:40 -0500 Subject: [PATCH 022/192] Fix path for artifacts uploading --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 2afbe30bb..44c2b4eb1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -43,7 +43,8 @@ branches: - "/^v\\d+\\.\\d+\\.\\d+$/" addons: artifacts: + working_dir: dist paths: - $(git ls-files -o dist/{*.dmg,*.AppImage,*.exe} | tr "\n" ":") target_paths: - - /commit-${TRAVIS_COMMIT}_build-${TRAVIS_BUILD_NUMBER}_tag-${TRAVIS_TAG} \ No newline at end of file + - /commit-${TRAVIS_COMMIT:0:7}_build-${TRAVIS_BUILD_NUMBER}_tag-${TRAVIS_TAG} \ No newline at end of file -- 2.45.3 From aa11020029f2d1d9de06c130887eb0a3a2898f75 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Thu, 8 Mar 2018 11:03:07 -0500 Subject: [PATCH 023/192] Separate paths for artifacts uploading --- .travis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 44c2b4eb1..06ee6f30b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -45,6 +45,8 @@ addons: artifacts: working_dir: dist paths: - - $(git ls-files -o dist/{*.dmg,*.AppImage,*.exe} | tr "\n" ":") + - $(git ls-files -o *.dmg | tr "\n" ":" | cut -f 1 -d ":") + - $(git ls-files -o *.exe | tr "\n" ":" | cut -f 1 -d ":") + - $(git ls-files -o *.AppImage | tr "\n" ":" | cut -f 1 -d ":") target_paths: - /commit-${TRAVIS_COMMIT:0:7}_build-${TRAVIS_BUILD_NUMBER}_tag-${TRAVIS_TAG} \ No newline at end of file -- 2.45.3 From ccb12c5b4d7087263d8d37201c3e784318ed01bf Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Thu, 8 Mar 2018 11:30:37 -0500 Subject: [PATCH 024/192] Fix path parsing error --- .travis.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 06ee6f30b..8a1ca39f0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -45,8 +45,6 @@ addons: artifacts: working_dir: dist paths: - - $(git ls-files -o *.dmg | tr "\n" ":" | cut -f 1 -d ":") - - $(git ls-files -o *.exe | tr "\n" ":" | cut -f 1 -d ":") - - $(git ls-files -o *.AppImage | tr "\n" ":" | cut -f 1 -d ":") + - $(git ls-files -o {*.dmg,*.exe,*.AppImage} | tr '\n' ':') target_paths: - /commit-${TRAVIS_COMMIT:0:7}_build-${TRAVIS_BUILD_NUMBER}_tag-${TRAVIS_TAG} \ No newline at end of file -- 2.45.3 From 242bf9bdd483a00e67d8508d80e75fbb3933aa1e Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Thu, 8 Mar 2018 11:51:17 -0500 Subject: [PATCH 025/192] Test Travis build --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 8a1ca39f0..3c6c49a65 100644 --- a/.travis.yml +++ b/.travis.yml @@ -45,6 +45,6 @@ addons: artifacts: working_dir: dist paths: - - $(git ls-files -o {*.dmg,*.exe,*.AppImage} | tr '\n' ':') + - $(git ls-files -o dist/{*.dmg,*.exe,*.AppImage} | tr "\n" ":") target_paths: - /commit-${TRAVIS_COMMIT:0:7}_build-${TRAVIS_BUILD_NUMBER}_tag-${TRAVIS_TAG} \ No newline at end of file -- 2.45.3 From 1a9961a5d6447650294488589183cfdec7d0e975 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Thu, 8 Mar 2018 14:35:40 -0500 Subject: [PATCH 026/192] Fix Travis configuration --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 3c6c49a65..7b7e27669 100644 --- a/.travis.yml +++ b/.travis.yml @@ -43,8 +43,9 @@ branches: - "/^v\\d+\\.\\d+\\.\\d+$/" addons: artifacts: + s3_region: us-east-2 working_dir: dist paths: - $(git ls-files -o dist/{*.dmg,*.exe,*.AppImage} | tr "\n" ":") target_paths: - - /commit-${TRAVIS_COMMIT:0:7}_build-${TRAVIS_BUILD_NUMBER}_tag-${TRAVIS_TAG} \ No newline at end of file + - /app/commit-${TRAVIS_COMMIT:0:7}_build-${TRAVIS_BUILD_NUMBER}_tag-${TRAVIS_TAG} \ No newline at end of file -- 2.45.3 From da5021ad2770029a0d34123d133c381e5fd8610f Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Thu, 8 Mar 2018 16:08:50 -0500 Subject: [PATCH 027/192] Move S3 region to an env var on Travis --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 7b7e27669..65c1d914e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -43,7 +43,6 @@ branches: - "/^v\\d+\\.\\d+\\.\\d+$/" addons: artifacts: - s3_region: us-east-2 working_dir: dist paths: - $(git ls-files -o dist/{*.dmg,*.exe,*.AppImage} | tr "\n" ":") -- 2.45.3 From 371a254867fd5d094f5e1eca1e069eaa5139d045 Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Thu, 8 Mar 2018 15:59:26 -0800 Subject: [PATCH 028/192] RC37 --> 0.19.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 869f38c03..c1dcd0b99 100644 --- a/package.json +++ b/package.json @@ -116,7 +116,7 @@ }, "license": "MIT", "lbrySettings": { - "lbrynetDaemonVersion": "0.19.0rc37", + "lbrynetDaemonVersion": "0.19.0", "lbrynetDaemonUrlTemplate": "https://github.com/lbryio/lbry/releases/download/vDAEMONVER/lbrynet-daemon-vDAEMONVER-OSNAME.zip" } } -- 2.45.3 From 1cb122c839376d1fb002c1c9dd66c86e15b1a5cf Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Thu, 8 Mar 2018 17:56:48 -0800 Subject: [PATCH 029/192] Fix claim name undefined in buildURI bug --- .../internal/TransactionListItem.jsx | 2 +- src/renderer/lbryURI.js | 16 ++++++++-------- src/renderer/page/channel/view.jsx | 2 +- src/renderer/redux/actions/content.js | 2 +- src/renderer/redux/actions/search.js | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/renderer/component/transactionList/internal/TransactionListItem.jsx b/src/renderer/component/transactionList/internal/TransactionListItem.jsx index 0192e33d1..20d7e4bfd 100644 --- a/src/renderer/component/transactionList/internal/TransactionListItem.jsx +++ b/src/renderer/component/transactionList/internal/TransactionListItem.jsx @@ -74,7 +74,7 @@ class TransactionListItem extends React.PureComponent { {name} diff --git a/src/renderer/lbryURI.js b/src/renderer/lbryURI.js index ba0aff2ec..66a8ee834 100644 --- a/src/renderer/lbryURI.js +++ b/src/renderer/lbryURI.js @@ -148,13 +148,13 @@ export function parseURI(URI, requireProto = false) { export function buildURI(URIObj, includeProto = true) { const { claimId, claimSequence, bidPosition, contentName, channelName } = URIObj; - let { claim_name, path } = URIObj; + let { claimName, path } = URIObj; if (channelName) { const channelNameFormatted = channelName.startsWith('@') ? channelName : `@${channelName}`; - if (!claim_name) { - claim_name = channelNameFormatted; - } else if (claim_name !== channelNameFormatted) { + if (!claimName) { + claimName = channelNameFormatted; + } else if (claimName !== channelNameFormatted) { throw new Error( __( 'Received a channel content URI, but claim name and channelName do not match. "name" represents the value in the name position of the URI (lbry://name...), which for channel content will be the channel name. In most cases, to construct a channel URI you should just pass channelName and contentName.' @@ -164,8 +164,8 @@ export function buildURI(URIObj, includeProto = true) { } if (contentName) { - if (!claim_name) { - claim_name = contentName; + if (!claimName) { + claimName = contentName; } else if (!path) { path = contentName; } @@ -180,7 +180,7 @@ export function buildURI(URIObj, includeProto = true) { return ( (includeProto ? 'lbry://' : '') + - claim_name + + claimName + (claimId ? `#${claimId}` : '') + (claimSequence ? `:${claimSequence}` : '') + (bidPosition ? `${bidPosition}` : '') + @@ -193,7 +193,7 @@ export function normalizeURI(URI) { if (URI.match(/pending_claim/)) return URI; const { claim_name, path, bidPosition, claimSequence, claimId } = parseURI(URI); - return buildURI({ claim_name, path, claimSequence, bidPosition, claimId }); + return buildURI({ claimName: claim_name, path, claimSequence, bidPosition, claimId }); } export function isURIValid(URI) { diff --git a/src/renderer/page/channel/view.jsx b/src/renderer/page/channel/view.jsx index ae1f6b332..4614bb5c7 100644 --- a/src/renderer/page/channel/view.jsx +++ b/src/renderer/page/channel/view.jsx @@ -58,7 +58,7 @@ class ChannelPage extends React.PureComponent { { const uri = buildURI({ - name: result.name, + claimName: result.name, claimId: result.claimId, }); actions.push(doResolveUri(uri)); -- 2.45.3 From c199a2498669f6312c4b2e2f45c7e9d8222e08ac Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Thu, 8 Mar 2018 21:27:06 -0800 Subject: [PATCH 030/192] Catch undefined reference to anonymous upload names --- src/renderer/component/fileList/view.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/component/fileList/view.jsx b/src/renderer/component/fileList/view.jsx index 31b3efc37..5a8b9d38e 100644 --- a/src/renderer/component/fileList/view.jsx +++ b/src/renderer/component/fileList/view.jsx @@ -95,7 +95,7 @@ class FileList extends React.PureComponent { uriParams.claimId = this.getChannelSignature(fileInfo); } else { uriParams.claimId = fileInfo.claim_id; - uriParams.claimName = fileInfo.claim_name; + uriParams.claimName = fileInfo.claim_name || fileInfo.name; } const uri = buildURI(uriParams); -- 2.45.3 From bd785502f43c3d4116e170a586d424e223fc30fe Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Thu, 8 Mar 2018 22:25:55 -0800 Subject: [PATCH 031/192] Fix sorting on downloads/published pages --- src/renderer/component/fileList/index.js | 5 ++- src/renderer/component/fileList/view.jsx | 40 +++++++++++------------- 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/src/renderer/component/fileList/index.js b/src/renderer/component/fileList/index.js index 3b6ced934..bfaff712a 100644 --- a/src/renderer/component/fileList/index.js +++ b/src/renderer/component/fileList/index.js @@ -1,8 +1,11 @@ import React from 'react'; import { connect } from 'react-redux'; import FileList from './view'; +import { selectClaimsById } from 'redux/selectors/claims'; -const select = state => ({}); +const select = state => ({ + claimsById: selectClaimsById(state), +}); const perform = dispatch => ({}); diff --git a/src/renderer/component/fileList/view.jsx b/src/renderer/component/fileList/view.jsx index 5a8b9d38e..5cd65992b 100644 --- a/src/renderer/component/fileList/view.jsx +++ b/src/renderer/component/fileList/view.jsx @@ -13,32 +13,30 @@ class FileList extends React.PureComponent { }; this._sortFunctions = { - dateNew(fileInfos) { - return fileInfos.slice().sort((fileInfo1, fileInfo2) => { - const height1 = fileInfo1.height; - const height2 = fileInfo2.height; + dateNew: (fileInfos) => + fileInfos.slice().sort((fileInfo1, fileInfo2) => { + const height1 = this.props.claimsById[fileInfo1.claim_id].height; + const height2 = this.props.claimsById[fileInfo2.claim_id].height; if (height1 > height2) { return -1; } else if (height1 < height2) { return 1; } return 0; - }); - }, - dateOld(fileInfos) { - return fileInfos.slice().sort((fileInfo1, fileInfo2) => { - const height1 = fileInfo1.height; - const height2 = fileInfo2.height; + }), + dateOld: (fileInfos) => + fileInfos.slice().sort((fileInfo1, fileInfo2) => { + const height1 = this.props.claimsById[fileInfo1.claim_id].height; + const height2 = this.props.claimsById[fileInfo2.claim_id].height; if (height1 < height2) { return -1; } else if (height1 > height2) { return 1; } return 0; - }); - }, - title(fileInfos) { - return fileInfos.slice().sort((fileInfo1, fileInfo2) => { + }), + title: (fileInfos) => + fileInfos.slice().sort((fileInfo1, fileInfo2) => { const title1 = fileInfo1.value ? fileInfo1.value.stream.metadata.title.toLowerCase() : fileInfo1.claim_name; @@ -51,10 +49,9 @@ class FileList extends React.PureComponent { return 1; } return 0; - }); - }, - filename(fileInfos) { - return fileInfos.slice().sort(({ file_name: fileName1 }, { file_name: fileName2 }) => { + }), + filename: (fileInfos) => + fileInfos.slice().sort(({ file_name: fileName1 }, { file_name: fileName2 }) => { const fileName1Lower = fileName1.toLowerCase(); const fileName2Lower = fileName2.toLowerCase(); if (fileName1Lower < fileName2Lower) { @@ -63,10 +60,9 @@ class FileList extends React.PureComponent { return 1; } return 0; - }); - }, - }; - } + }), + }; + } getChannelSignature(fileInfo) { if (fileInfo.value) { -- 2.45.3 From abdc15989c1241cb9c57309a599614b76c46ab50 Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Thu, 8 Mar 2018 22:46:03 -0800 Subject: [PATCH 032/192] Fix search --- src/renderer/component/fileListSearch/view.jsx | 2 +- src/renderer/lbryURI.js | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/renderer/component/fileListSearch/view.jsx b/src/renderer/component/fileListSearch/view.jsx index d29e9d967..89e99ca65 100644 --- a/src/renderer/component/fileListSearch/view.jsx +++ b/src/renderer/component/fileListSearch/view.jsx @@ -45,7 +45,7 @@ class FileListSearch extends React.PureComponent { {uris && uris.length ? uris.map( uri => - parseURI(uri).name[0] === '@' ? ( + parseURI(uri).claimName[0] === '@' ? ( ) : ( diff --git a/src/renderer/lbryURI.js b/src/renderer/lbryURI.js index 66a8ee834..9fd136b92 100644 --- a/src/renderer/lbryURI.js +++ b/src/renderer/lbryURI.js @@ -128,7 +128,7 @@ export function parseURI(URI, requireProto = false) { } return { - claim_name: claimName, + claimName, path, isChannel, ...(contentName ? { contentName } : {}), @@ -192,8 +192,8 @@ export function buildURI(URIObj, includeProto = true) { export function normalizeURI(URI) { if (URI.match(/pending_claim/)) return URI; - const { claim_name, path, bidPosition, claimSequence, claimId } = parseURI(URI); - return buildURI({ claimName: claim_name, path, claimSequence, bidPosition, claimId }); + const { claimName, path, bidPosition, claimSequence, claimId } = parseURI(URI); + return buildURI({ claimName, path, claimSequence, bidPosition, claimId }); } export function isURIValid(URI) { @@ -203,12 +203,12 @@ export function isURIValid(URI) { } catch (error) { return false; } - return parts && parts.claim_name; + return parts && parts.claimName; } -export function isNameValid(claim_name, checkCase = true) { +export function isNameValid(claimName, checkCase = true) { const regexp = new RegExp('^[a-z0-9-]+$', checkCase ? '' : 'i'); - return regexp.test(claim_name); + return regexp.test(claimName); } export function isURIClaimable(URI) { @@ -220,7 +220,7 @@ export function isURIClaimable(URI) { } return ( parts && - parts.claim_name && + parts.claimName && !parts.claimId && !parts.bidPosition && !parts.claimSequence && -- 2.45.3 From 95848480775c316b9139bfed0951831d918446ec Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Thu, 8 Mar 2018 23:03:30 -0800 Subject: [PATCH 033/192] Remove channels from published page --- src/renderer/component/fileList/view.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/component/fileList/view.jsx b/src/renderer/component/fileList/view.jsx index 5cd65992b..22444077b 100644 --- a/src/renderer/component/fileList/view.jsx +++ b/src/renderer/component/fileList/view.jsx @@ -87,7 +87,7 @@ class FileList extends React.PureComponent { if (fileInfo.channel_name) { uriParams.channelName = fileInfo.channel_name; - uriParams.contentName = fileInfo.claim_name; + uriParams.contentName = fileInfo.claim_name || fileInfo.name; uriParams.claimId = this.getChannelSignature(fileInfo); } else { uriParams.claimId = fileInfo.claim_id; -- 2.45.3 From 0c833a727e6419fe56742c9aa119c18fc7448599 Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Thu, 8 Mar 2018 23:06:15 -0800 Subject: [PATCH 034/192] Formatted whole app --- src/renderer/component/fileList/view.jsx | 12 ++++++------ src/renderer/component/userPhoneVerify/view.jsx | 4 +--- src/renderer/redux/actions/content.js | 4 +--- src/renderer/scss/component/_checkbox.scss | 2 +- src/renderer/scss/component/_table.scss | 2 +- src/renderer/scss/component/_tooltip.scss | 4 ++-- 6 files changed, 12 insertions(+), 16 deletions(-) diff --git a/src/renderer/component/fileList/view.jsx b/src/renderer/component/fileList/view.jsx index 22444077b..800fda842 100644 --- a/src/renderer/component/fileList/view.jsx +++ b/src/renderer/component/fileList/view.jsx @@ -13,7 +13,7 @@ class FileList extends React.PureComponent { }; this._sortFunctions = { - dateNew: (fileInfos) => + dateNew: fileInfos => fileInfos.slice().sort((fileInfo1, fileInfo2) => { const height1 = this.props.claimsById[fileInfo1.claim_id].height; const height2 = this.props.claimsById[fileInfo2.claim_id].height; @@ -24,7 +24,7 @@ class FileList extends React.PureComponent { } return 0; }), - dateOld: (fileInfos) => + dateOld: fileInfos => fileInfos.slice().sort((fileInfo1, fileInfo2) => { const height1 = this.props.claimsById[fileInfo1.claim_id].height; const height2 = this.props.claimsById[fileInfo2.claim_id].height; @@ -35,7 +35,7 @@ class FileList extends React.PureComponent { } return 0; }), - title: (fileInfos) => + title: fileInfos => fileInfos.slice().sort((fileInfo1, fileInfo2) => { const title1 = fileInfo1.value ? fileInfo1.value.stream.metadata.title.toLowerCase() @@ -50,7 +50,7 @@ class FileList extends React.PureComponent { } return 0; }), - filename: (fileInfos) => + filename: fileInfos => fileInfos.slice().sort(({ file_name: fileName1 }, { file_name: fileName2 }) => { const fileName1Lower = fileName1.toLowerCase(); const fileName2Lower = fileName2.toLowerCase(); @@ -61,8 +61,8 @@ class FileList extends React.PureComponent { } return 0; }), - }; - } + }; + } getChannelSignature(fileInfo) { if (fileInfo.value) { diff --git a/src/renderer/component/userPhoneVerify/view.jsx b/src/renderer/component/userPhoneVerify/view.jsx index 2ee39c1e8..225fad5d1 100644 --- a/src/renderer/component/userPhoneVerify/view.jsx +++ b/src/renderer/component/userPhoneVerify/view.jsx @@ -33,9 +33,7 @@ class UserPhoneVerify extends React.PureComponent {

{__( - `Please enter the verification code sent to +${countryCode}${ - phone - }. Didn't receive it? ` + `Please enter the verification code sent to +${countryCode}${phone}. Didn't receive it? ` )}

diff --git a/src/renderer/redux/actions/content.js b/src/renderer/redux/actions/content.js index beece21ca..683aa3b32 100644 --- a/src/renderer/redux/actions/content.js +++ b/src/renderer/redux/actions/content.js @@ -277,9 +277,7 @@ export function doLoadVideo(uri) { }); dispatch( doAlertError( - `Failed to download ${ - uri - }, please try again. If this problem persists, visit https://lbry.io/faq/support for support.` + `Failed to download ${uri}, please try again. If this problem persists, visit https://lbry.io/faq/support for support.` ) ); }); diff --git a/src/renderer/scss/component/_checkbox.scss b/src/renderer/scss/component/_checkbox.scss index b72f7c896..d4796afe6 100644 --- a/src/renderer/scss/component/_checkbox.scss +++ b/src/renderer/scss/component/_checkbox.scss @@ -51,7 +51,7 @@ $md-checkmark-color: #fff; border: none; } + label:after { - $md-checkmark-size: $md-checkbox-size - 2*$md-checkbox-padding; + $md-checkmark-size: $md-checkbox-size - 2 * $md-checkbox-padding; transform: rotate(-45deg); diff --git a/src/renderer/scss/component/_table.scss b/src/renderer/scss/component/_table.scss index 1c6b17369..428c5d152 100644 --- a/src/renderer/scss/component/_table.scss +++ b/src/renderer/scss/component/_table.scss @@ -18,7 +18,7 @@ table.table-standard { vertical-align: bottom; font-weight: 500; font-size: 0.9em; - padding: $spacing-vertical/4+1 8px $spacing-vertical/4-2; + padding: $spacing-vertical/4 + 1 8px $spacing-vertical/4-2; text-align: left; border-bottom: var(--table-border); img { diff --git a/src/renderer/scss/component/_tooltip.scss b/src/renderer/scss/component/_tooltip.scss index d017996c1..91fbe3f2f 100644 --- a/src/renderer/scss/component/_tooltip.scss +++ b/src/renderer/scss/component/_tooltip.scss @@ -20,14 +20,14 @@ border: var(--tooltip-border); color: var(--tooltip-color); background-color: var(--tooltip-bg); - font-size: calc(var(--font-size) * 7/8); + font-size: calc(var(--font-size) * 7 / 8); line-height: var(--font-line-height); box-shadow: var(--box-shadow-layer); } .tooltip--header .tooltip__link { @include text-link(#aaa); - font-size: calc(var(--font-size) * 3/4); + font-size: calc(var(--font-size) * 3 / 4); margin-left: var(--button-padding); vertical-align: middle; } -- 2.45.3 From fa91f3cea5f5e5b495fecad54723ea8b84be5502 Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Thu, 8 Mar 2018 23:10:37 -0800 Subject: [PATCH 035/192] Fix abandon claim issue --- src/renderer/redux/actions/content.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/redux/actions/content.js b/src/renderer/redux/actions/content.js index 683aa3b32..d5671bba4 100644 --- a/src/renderer/redux/actions/content.js +++ b/src/renderer/redux/actions/content.js @@ -521,7 +521,7 @@ export function doAbandonClaim(txid, nout) { claimId, }, }); - dispatch(doResolveUri(buildURI({ claimName, claimId }))); + dispatch(doResolveUri(buildURI({ claimName: name, claimId }))); dispatch(doFetchClaimListMine()); } else { dispatch(doOpenModal(MODALS.TRANSACTION_FAILED)); -- 2.45.3 From c8cad17f9794d22f6a66916b133d3ed1e2c76e79 Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Thu, 8 Mar 2018 23:32:55 -0800 Subject: [PATCH 036/192] Fixed sort after abandoning claim --- src/renderer/component/fileList/view.jsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/renderer/component/fileList/view.jsx b/src/renderer/component/fileList/view.jsx index 800fda842..266f5bc58 100644 --- a/src/renderer/component/fileList/view.jsx +++ b/src/renderer/component/fileList/view.jsx @@ -15,8 +15,8 @@ class FileList extends React.PureComponent { this._sortFunctions = { dateNew: fileInfos => fileInfos.slice().sort((fileInfo1, fileInfo2) => { - const height1 = this.props.claimsById[fileInfo1.claim_id].height; - const height2 = this.props.claimsById[fileInfo2.claim_id].height; + const height1 = this.props.claimsById[fileInfo1.claim_id] ? this.props.claimsById[fileInfo1.claim_id].height : 0; + const height2 = this.props.claimsById[fileInfo2.claim_id] ? this.props.claimsById[fileInfo2.claim_id].height : 0; if (height1 > height2) { return -1; } else if (height1 < height2) { @@ -26,8 +26,8 @@ class FileList extends React.PureComponent { }), dateOld: fileInfos => fileInfos.slice().sort((fileInfo1, fileInfo2) => { - const height1 = this.props.claimsById[fileInfo1.claim_id].height; - const height2 = this.props.claimsById[fileInfo2.claim_id].height; + const height1 = this.props.claimsById[fileInfo1.claim_id] ? this.props.claimsById[fileInfo1.claim_id].height : 999999; + const height2 = this.props.claimsById[fileInfo2.claim_id] ? this.props.claimsById[fileInfo2.claim_id].height : 999999; if (height1 < height2) { return -1; } else if (height1 > height2) { -- 2.45.3 From a4faab5e86ee438149a09ba529522b34ebc01802 Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Thu, 8 Mar 2018 23:46:16 -0800 Subject: [PATCH 037/192] Refactor and reformat --- src/renderer/component/fileList/view.jsx | 16 ++++++++++++---- src/renderer/lbry.js | 6 +++--- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/renderer/component/fileList/view.jsx b/src/renderer/component/fileList/view.jsx index 266f5bc58..686665078 100644 --- a/src/renderer/component/fileList/view.jsx +++ b/src/renderer/component/fileList/view.jsx @@ -15,8 +15,12 @@ class FileList extends React.PureComponent { this._sortFunctions = { dateNew: fileInfos => fileInfos.slice().sort((fileInfo1, fileInfo2) => { - const height1 = this.props.claimsById[fileInfo1.claim_id] ? this.props.claimsById[fileInfo1.claim_id].height : 0; - const height2 = this.props.claimsById[fileInfo2.claim_id] ? this.props.claimsById[fileInfo2.claim_id].height : 0; + const height1 = this.props.claimsById[fileInfo1.claim_id] + ? this.props.claimsById[fileInfo1.claim_id].height + : 0; + const height2 = this.props.claimsById[fileInfo2.claim_id] + ? this.props.claimsById[fileInfo2.claim_id].height + : 0; if (height1 > height2) { return -1; } else if (height1 < height2) { @@ -26,8 +30,12 @@ class FileList extends React.PureComponent { }), dateOld: fileInfos => fileInfos.slice().sort((fileInfo1, fileInfo2) => { - const height1 = this.props.claimsById[fileInfo1.claim_id] ? this.props.claimsById[fileInfo1.claim_id].height : 999999; - const height2 = this.props.claimsById[fileInfo2.claim_id] ? this.props.claimsById[fileInfo2.claim_id].height : 999999; + const height1 = this.props.claimsById[fileInfo1.claim_id] + ? this.props.claimsById[fileInfo1.claim_id].height + : 999999; + const height2 = this.props.claimsById[fileInfo2.claim_id] + ? this.props.claimsById[fileInfo2.claim_id].height + : 999999; if (height1 < height2) { return -1; } else if (height1 > height2) { diff --git a/src/renderer/lbry.js b/src/renderer/lbry.js index 130403458..79855b4ce 100644 --- a/src/renderer/lbry.js +++ b/src/renderer/lbry.js @@ -215,7 +215,7 @@ Lbry.getAppVersionInfo = () => */ Lbry.file_list = (params = {}) => new Promise((resolve, reject) => { - const { claim_name, channel_name: channelName, outpoint } = params; + const { claim_name: claimName, channel_name: channelName, outpoint } = params; /** * If we're searching by outpoint, check first to see if there's a matching pending publish. @@ -234,10 +234,10 @@ Lbry.file_list = (params = {}) => 'file_list', params, fileInfos => { - removePendingPublishIfNeeded({ claim_name, channelName, outpoint }); + removePendingPublishIfNeeded({ name: claimName, channelName, outpoint }); // if a naked file_list call, append the pending file infos - if (!claim_name && !channelName && !outpoint) { + if (!claimName && !channelName && !outpoint) { const dummyFileInfos = Lbry.getPendingPublishes().map(pendingPublishToDummyFileInfo); resolve([...fileInfos, ...dummyFileInfos]); -- 2.45.3 From a8e0e112cfe111f87cd70641cac991556a085f7c Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Fri, 9 Mar 2018 10:26:34 -0500 Subject: [PATCH 038/192] Remove -tag from path if no tag for build directory --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 65c1d914e..169d565f5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -47,4 +47,4 @@ addons: paths: - $(git ls-files -o dist/{*.dmg,*.exe,*.AppImage} | tr "\n" ":") target_paths: - - /app/commit-${TRAVIS_COMMIT:0:7}_build-${TRAVIS_BUILD_NUMBER}_tag-${TRAVIS_TAG} \ No newline at end of file + - /app/commit-${TRAVIS_COMMIT:0:7}_build-${TRAVIS_BUILD_NUMBER}$(if env | grep -q ^TRAVIS_TAG=; then echo _tag-${TRAVIS_TAG}; fi) \ No newline at end of file -- 2.45.3 From a56b3b32cba2d20b56a9407c453a056fe2652a15 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Fri, 9 Mar 2018 10:26:57 -0500 Subject: [PATCH 039/192] Update AWS S3 bucket --- electron-builder.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/electron-builder.json b/electron-builder.json index 2d6386c11..b3026b0fb 100644 --- a/electron-builder.json +++ b/electron-builder.json @@ -3,8 +3,8 @@ "productName": "LBRY", "publish": [{ "provider": "s3", - "bucket": "releases.lbry.io", - "path": "app/latest" + "bucket": "build.lbry.io", + "path": "app/release" }, "github"], "mac": { "target": "dmg", -- 2.45.3 From 4d34256518a409894380004c53cbec0d2a4e1c0b Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Fri, 9 Mar 2018 11:25:59 -0500 Subject: [PATCH 040/192] Bump version to v0.21.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c1dcd0b99..58de2a117 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lbry-app", - "version": "0.20.0", + "version": "0.21.0", "description": "A browser for the LBRY network, a digital marketplace controlled by its users.", "homepage": "https://lbry.io/", "bugs": { -- 2.45.3 From 0ba48ab722bb31d3194adc6d222a1f0b5fc2c849 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Fri, 9 Mar 2018 11:59:55 -0500 Subject: [PATCH 041/192] Bump version to v0.21.0-rc.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 58de2a117..9174c2b65 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lbry-app", - "version": "0.21.0", + "version": "0.21.0-rc.1", "description": "A browser for the LBRY network, a digital marketplace controlled by its users.", "homepage": "https://lbry.io/", "bugs": { -- 2.45.3 From f5740704805cb53fec0ee18c9fb4d5cc294ac272 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Fri, 9 Mar 2018 15:18:08 -0500 Subject: [PATCH 042/192] Fix target paths for artifacts uploading --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 169d565f5..dc09d40a1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -47,4 +47,4 @@ addons: paths: - $(git ls-files -o dist/{*.dmg,*.exe,*.AppImage} | tr "\n" ":") target_paths: - - /app/commit-${TRAVIS_COMMIT:0:7}_build-${TRAVIS_BUILD_NUMBER}$(if env | grep -q ^TRAVIS_TAG=; then echo _tag-${TRAVIS_TAG}; fi) \ No newline at end of file + - /app/commit-${TRAVIS_COMMIT:0:7}_build-${TRAVIS_BUILD_NUMBER}$([ ! -z ${TRAVIS_TAG} ] && echo "_tag-${TRAVIS_TAG}") \ No newline at end of file -- 2.45.3 From c1e2e7df6aa45ea6f114bc5ec85ea15b2a4d260c Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Fri, 9 Mar 2018 15:35:43 -0500 Subject: [PATCH 043/192] Specify AWS S3 region --- electron-builder.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/electron-builder.json b/electron-builder.json index b3026b0fb..cfec13d6e 100644 --- a/electron-builder.json +++ b/electron-builder.json @@ -4,7 +4,8 @@ "publish": [{ "provider": "s3", "bucket": "build.lbry.io", - "path": "app/release" + "path": "app/release", + "region": "us-east-1" }, "github"], "mac": { "target": "dmg", -- 2.45.3 From 63548c88db05aefffaa0bd50a2ea793f05b3ad8c Mon Sep 17 00:00:00 2001 From: Liam Cardenas Date: Fri, 9 Mar 2018 13:45:45 -0800 Subject: [PATCH 044/192] Update CHANGELOG.md --- CHANGELOG.md | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8a32ffa47..b5339085e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,17 +12,34 @@ Web UI version numbers should always match the corresponding version of LBRY App * Added startup-troubleshooting FAQ URL to daemon error ([#1039](https://github.com/lbryio/lbry-app/pull/1039)) * Added ability to export wallet transactions to JSON and CSV format ([#976](https://github.com/lbryio/lbry-app/pull/976)) * Add Rewards FAQ to LBRY app ([#1041](https://github.com/lbryio/lbry-app/pull/1041)) - * + * Notifications when the channel a user subscribes to uploads new content ([#1066](https://github.com/lbryio/lbry-app/pull/1066)) + * Codacy support for Github contributions ([#1059](https://github.com/lbryio/lbry-app/pull/1059)) + * App category for Linux ([#877](https://github.com/lbryio/lbry-app/pull/877)) + * ### Changed - * - * - + * Improved privacy by allowing users to turn off the file view counter and better understand privacy settings ([#1074](https://github.com/lbryio/lbry-app/pull/1074)) + * Disabled auto dark mode if dark mode is selected ([#1006](https://github.com/lbryio/lbry-app/pull/1006)) + * AppImage support for Linux instead of .deb ([#1010](https://github.com/lbryio/lbry-app/pull/1010)) + * Refactor Electron's main process ([#951](https://github.com/lbryio/lbry-app/pull/951)) + * Refactor lbryuri.js into separate named exports ([#957](https://github.com/lbryio/lbry-app/pull/957)) + * Keep node_modules up-to-date when yarn.lock changes due to git ([#955](https://github.com/lbryio/lbry-app/pull/955)) + * Do not kill an existing daemon, instead check if one exists ([#973](https://github.com/lbryio/lbry-app/pull/973)) + * Enable play button immediately after user clicks download ([#987](https://github.com/lbryio/lbry-app/pull/987)) + * + ### Fixed * Fixed sort by date of published content ([#986](https://github.com/lbryio/lbry-app/issues/986)) * Fix night mode start time, set to 9PM (#1050) * Fix night mode start time, set to 9PM ([#1050](https://github.com/lbryio/lbry-app/issues/1050)) * Disable drag and drop of files into the app ([#1045](https://github.com/lbryio/lbry-app/pull/1045)) + * Fixed uninformative error message ([#1046](https://github.com/lbryio/lbry-app/pull/1046)) + * Update documentation for DevTools and fix some ESLint warnings ([#911](https://github.com/lbryio/lbry-app/pull/911)) + * Fix error wherein user cannot send tip because transaction fails ([#918](https://github.com/lbryio/lbry-app/pull/918)) + * Fix right click bug ([#928](https://github.com/lbryio/lbry-app/pull/928)) + * Fix Election linting errors ([#929](https://github.com/lbryio/lbry-app/pull/929)) + * App will no longer reset when minimizing to tray ([#1042](https://github.com/lbryio/lbry-app/pull/1042)) + * ### Deprecated * -- 2.45.3 From 91b75d889e60f7aa2769e6cb94f134fbdde8c53b Mon Sep 17 00:00:00 2001 From: Liam Cardenas Date: Fri, 9 Mar 2018 13:46:38 -0800 Subject: [PATCH 045/192] Update CHANGELOG.md --- CHANGELOG.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b5339085e..a27debdfb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,6 @@ Web UI version numbers should always match the corresponding version of LBRY App * Notifications when the channel a user subscribes to uploads new content ([#1066](https://github.com/lbryio/lbry-app/pull/1066)) * Codacy support for Github contributions ([#1059](https://github.com/lbryio/lbry-app/pull/1059)) * App category for Linux ([#877](https://github.com/lbryio/lbry-app/pull/877)) - * ### Changed * Improved privacy by allowing users to turn off the file view counter and better understand privacy settings ([#1074](https://github.com/lbryio/lbry-app/pull/1074)) @@ -26,7 +25,6 @@ Web UI version numbers should always match the corresponding version of LBRY App * Keep node_modules up-to-date when yarn.lock changes due to git ([#955](https://github.com/lbryio/lbry-app/pull/955)) * Do not kill an existing daemon, instead check if one exists ([#973](https://github.com/lbryio/lbry-app/pull/973)) * Enable play button immediately after user clicks download ([#987](https://github.com/lbryio/lbry-app/pull/987)) - * ### Fixed * Fixed sort by date of published content ([#986](https://github.com/lbryio/lbry-app/issues/986)) @@ -39,7 +37,6 @@ Web UI version numbers should always match the corresponding version of LBRY App * Fix right click bug ([#928](https://github.com/lbryio/lbry-app/pull/928)) * Fix Election linting errors ([#929](https://github.com/lbryio/lbry-app/pull/929)) * App will no longer reset when minimizing to tray ([#1042](https://github.com/lbryio/lbry-app/pull/1042)) - * ### Deprecated * -- 2.45.3 From 15b792211cdd5e49ebf3879d5242eab98ae56fbb Mon Sep 17 00:00:00 2001 From: Liam Cardenas Date: Sun, 11 Mar 2018 22:34:16 -0700 Subject: [PATCH 046/192] Update subscriptions.js --- src/renderer/redux/actions/subscriptions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/redux/actions/subscriptions.js b/src/renderer/redux/actions/subscriptions.js index 650f98a9b..7d2e40e5d 100644 --- a/src/renderer/redux/actions/subscriptions.js +++ b/src/renderer/redux/actions/subscriptions.js @@ -7,7 +7,7 @@ import { doPurchaseUri } from 'redux/actions/content'; import { doNavigate } from 'redux/actions/navigation'; import { buildURI } from 'lbryURI'; -const CHECK_SUBSCRIPTIONS_INTERVAL = 10 * 60 * 1000; +const CHECK_SUBSCRIPTIONS_INTERVAL = 60 * 60 * 1000; export const doChannelSubscribe = (subscription: Subscription) => (dispatch: Dispatch) => dispatch({ -- 2.45.3 From 032f112ae18ccf700089d58871dd8a9dfeeec210 Mon Sep 17 00:00:00 2001 From: travis Date: Mon, 12 Mar 2018 11:24:43 -0400 Subject: [PATCH 047/192] set interval for fetching featured uris --- src/renderer/redux/actions/content.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/renderer/redux/actions/content.js b/src/renderer/redux/actions/content.js index 2ca2c4dbb..2ae3d6ea5 100644 --- a/src/renderer/redux/actions/content.js +++ b/src/renderer/redux/actions/content.js @@ -70,6 +70,13 @@ export function doResolveUri(uri) { } export function doFetchFeaturedUris() { + return dispatch => { + dispatch(doFetchFeaturedUrisNow()); + setInterval(() => dispatch(doFetchFeaturedUrisNow()), 40000); + } +} + +export function doFetchFeaturedUrisNow() { return dispatch => { dispatch({ type: ACTIONS.FETCH_FEATURED_CONTENT_STARTED, -- 2.45.3 From 0ab89ebe52579af46195fce6c0b943ad8ab60e87 Mon Sep 17 00:00:00 2001 From: Liam Cardenas Date: Mon, 12 Mar 2018 08:29:30 -0700 Subject: [PATCH 048/192] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a27debdfb..f61c91b80 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ Web UI version numbers should always match the corresponding version of LBRY App * Keep node_modules up-to-date when yarn.lock changes due to git ([#955](https://github.com/lbryio/lbry-app/pull/955)) * Do not kill an existing daemon, instead check if one exists ([#973](https://github.com/lbryio/lbry-app/pull/973)) * Enable play button immediately after user clicks download ([#987](https://github.com/lbryio/lbry-app/pull/987)) + * Significantly improved search performance ([#1032](https://github.com/lbryio/lbry-app/pull/1032)) ### Fixed * Fixed sort by date of published content ([#986](https://github.com/lbryio/lbry-app/issues/986)) -- 2.45.3 From de922445a61f7128011118abfea55a5d60ac5f58 Mon Sep 17 00:00:00 2001 From: Jeremy Kauffman Date: Mon, 12 Mar 2018 16:24:50 -0400 Subject: [PATCH 049/192] remove youtube sync --- src/renderer/component/userVerify/view.jsx | 32 +--------------------- 1 file changed, 1 insertion(+), 31 deletions(-) diff --git a/src/renderer/component/userVerify/view.jsx b/src/renderer/component/userVerify/view.jsx index 581819293..bf7060e6a 100644 --- a/src/renderer/component/userVerify/view.jsx +++ b/src/renderer/component/userVerify/view.jsx @@ -92,37 +92,7 @@ class UserVerify extends React.PureComponent {
-

{__('3) Proof via YouTube')}

-
-
-

- {__( - 'If you have a YouTube account with subscribers and views, you can sync your account and content to be granted instant verification.' - )} -

-

- {__('Some account minimums apply.')}{' '} - -

-
-
- -
-
-
- This will not automatically refresh after approval. Once you have synced your account, - just navigate away or click . -
-
-
-
-
-

{__('4) Proof via Chat')}

+

{__('3) Proof via Chat')}

-- 2.45.3 From e634bd86799ae49361ddf22e445b6ce1834f41d8 Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Tue, 13 Mar 2018 22:33:43 -0700 Subject: [PATCH 050/192] Fix sort --- src/renderer/component/fileList/view.jsx | 32 ++---------------------- 1 file changed, 2 insertions(+), 30 deletions(-) diff --git a/src/renderer/component/fileList/view.jsx b/src/renderer/component/fileList/view.jsx index 686665078..7afe8998d 100644 --- a/src/renderer/component/fileList/view.jsx +++ b/src/renderer/component/fileList/view.jsx @@ -13,36 +13,8 @@ class FileList extends React.PureComponent { }; this._sortFunctions = { - dateNew: fileInfos => - fileInfos.slice().sort((fileInfo1, fileInfo2) => { - const height1 = this.props.claimsById[fileInfo1.claim_id] - ? this.props.claimsById[fileInfo1.claim_id].height - : 0; - const height2 = this.props.claimsById[fileInfo2.claim_id] - ? this.props.claimsById[fileInfo2.claim_id].height - : 0; - if (height1 > height2) { - return -1; - } else if (height1 < height2) { - return 1; - } - return 0; - }), - dateOld: fileInfos => - fileInfos.slice().sort((fileInfo1, fileInfo2) => { - const height1 = this.props.claimsById[fileInfo1.claim_id] - ? this.props.claimsById[fileInfo1.claim_id].height - : 999999; - const height2 = this.props.claimsById[fileInfo2.claim_id] - ? this.props.claimsById[fileInfo2.claim_id].height - : 999999; - if (height1 < height2) { - return -1; - } else if (height1 > height2) { - return 1; - } - return 0; - }), + dateNew: fileInfos => [...fileInfos].reverse(), + dateOld: fileInfos => fileInfos, title: fileInfos => fileInfos.slice().sort((fileInfo1, fileInfo2) => { const title1 = fileInfo1.value -- 2.45.3 From 2e91cd69b6d07464273485401bee1311df0e0ea6 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Wed, 14 Mar 2018 13:47:34 -0400 Subject: [PATCH 051/192] Rename build dst folders --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index dc09d40a1..bb43aad6c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -47,4 +47,4 @@ addons: paths: - $(git ls-files -o dist/{*.dmg,*.exe,*.AppImage} | tr "\n" ":") target_paths: - - /app/commit-${TRAVIS_COMMIT:0:7}_build-${TRAVIS_BUILD_NUMBER}$([ ! -z ${TRAVIS_TAG} ] && echo "_tag-${TRAVIS_TAG}") \ No newline at end of file + - /app/build-${TRAVIS_BUILD_NUMBER}_commit-${TRAVIS_COMMIT:0:7}$([ ! -z ${TRAVIS_TAG} ] && echo "_tag-${TRAVIS_TAG}") \ No newline at end of file -- 2.45.3 From c3469b3648926fba81f468808145f5d08adfe100 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Wed, 14 Mar 2018 16:38:55 -0400 Subject: [PATCH 052/192] fix: daemon not launching on Windows (#1101) * Rollback `keytar-prebuild` and `electron` to compatible versions. * Check if the targeted build platform is different from the platform that is building the app. If that's the case, download the appropriate daemon. --- build/checkDaemonPlatform.js | 29 +++++++++++ build/downloadDaemon.js | 97 ++++++++++++++++++++++-------------- electron-builder.json | 1 + package.json | 10 ++-- yarn.lock | 85 +++++++++++++++++-------------- 5 files changed, 145 insertions(+), 77 deletions(-) create mode 100644 build/checkDaemonPlatform.js diff --git a/build/checkDaemonPlatform.js b/build/checkDaemonPlatform.js new file mode 100644 index 000000000..4ae40a7c4 --- /dev/null +++ b/build/checkDaemonPlatform.js @@ -0,0 +1,29 @@ +/* eslint-disable no-console,import/no-extraneous-dependencies,import/no-commonjs */ + +/** + * This script is necessary for checking that the daemon that has been downloaded during the + * yarn installing process is the one for the building target. For example, on Travis the + * Windows package is built on Linux, thus yarn will download the daemon for Linux instead of + * Windows. The script will test that and then download the right daemon for the targeted platform. + */ +const os = require('os'); +const downloadDaemon = require('./downloadDaemon'); + +module.exports = context => { + + let currentPlatform = os.platform(); + if (currentPlatform === 'darwin') currentPlatform = 'macoss'; + if (currentPlatform === 'win32') currentPlatform = 'windows'; + + let buildingPlatformTarget = context.platform.toString(); + if (buildingPlatformTarget === 'mac') buildingPlatformTarget = 'macos'; + + if (buildingPlatformTarget !== currentPlatform) { + console.log( + "\x1b[34minfo\x1b[0m Daemon platform doesn't match target platform. Redownloading the daemon." + ); + + return downloadDaemon(buildingPlatformTarget); + } + return Promise.resolve(); +}; diff --git a/build/downloadDaemon.js b/build/downloadDaemon.js index 35620b620..6bf649544 100644 --- a/build/downloadDaemon.js +++ b/build/downloadDaemon.js @@ -1,47 +1,70 @@ -/* eslint-disable no-console,import/no-commonjs */ +/* eslint-disable no-console,import/no-extraneous-dependencies,import/no-commonjs */ const path = require('path'); const fs = require('fs'); const packageJSON = require('../package.json'); -// eslint-disable-next-line import/no-extraneous-dependencies const axios = require('axios'); -// eslint-disable-next-line import/no-extraneous-dependencies const decompress = require('decompress'); const os = require('os'); +const del = require('del'); -const daemonURLTemplate = packageJSON.lbrySettings.lbrynetDaemonUrlTemplate; -const daemonVersion = packageJSON.lbrySettings.lbrynetDaemonVersion; -let currentPlatform = os.platform(); -if (currentPlatform === 'darwin') currentPlatform = 'macos'; -if (currentPlatform === 'win32') currentPlatform = 'windows'; +const downloadDaemon = targetPlatform => + new Promise((resolve, reject) => { + const daemonURLTemplate = packageJSON.lbrySettings.lbrynetDaemonUrlTemplate; + const daemonVersion = packageJSON.lbrySettings.lbrynetDaemonVersion; + const daemonDir = packageJSON.lbrySettings.lbrynetDaemonDir; + const daemonFileName = packageJSON.lbrySettings.lbrynetDaemonFileName; -const daemonURL = daemonURLTemplate - .replace(/DAEMONVER/g, daemonVersion) - .replace(/OSNAME/g, currentPlatform); -const tmpZipPath = 'build/daemon.zip'; + let currentPlatform = os.platform(); + if (currentPlatform === 'darwin') currentPlatform = 'macos'; + if (currentPlatform === 'win32') currentPlatform = 'windows'; -console.log('\x1b[34minfo\x1b[0m Downloading daemon...'); -axios - .request({ - responseType: 'arraybuffer', - url: daemonURL, - method: 'get', - headers: { - 'Content-Type': 'application/zip', - }, - }) - .then(result => { - fs.writeFileSync(tmpZipPath, result.data); - return true; - }) - .then(() => { - decompress(tmpZipPath, 'static/daemon', { - filter: file => - path.basename(file.path).replace(path.extname(file.path), '') === 'lbrynet-daemon', - }); - }) - .then(() => { - console.log('\x1b[32msuccess\x1b[0m Daemon downloaded!'); - }) - .catch(error => { - console.error(`\x1b[31merror\x1b[0m Daemon download failed due to: \x1b[35m${error}\x1b[0m`); + const daemonPlatform = targetPlatform || currentPlatform; + + const daemonURL = daemonURLTemplate + .replace(/DAEMONVER/g, daemonVersion) + .replace(/OSNAME/g, daemonPlatform); + const tmpZipPath = 'build/daemon.zip'; + + console.log('\x1b[34minfo\x1b[0m Downloading daemon...'); + axios + .request({ + responseType: 'arraybuffer', + url: daemonURL, + method: 'get', + headers: { + 'Content-Type': 'application/zip', + }, + }) + .then( + result => + new Promise((newResolve, newReject) => { + fs.writeFile(tmpZipPath, result.data, error => { + if (error) return newReject(error); + return newResolve(); + }); + }) + ) + .then(() => del(`${daemonDir}/${daemonFileName}*`)) + .then(() => + decompress(tmpZipPath, daemonDir, { + filter: file => + path.basename(file.path).replace(path.extname(file.path), '') === daemonFileName, + }) + ) + .then(() => { + console.log('\x1b[32msuccess\x1b[0m Daemon downloaded!'); + resolve(true); + }) + .catch(error => { + console.error( + `\x1b[31merror\x1b[0m Daemon download failed due to: \x1b[35m${error}\x1b[0m` + ); + reject(error); + }); }); + +module.exports = downloadDaemon; + +require('make-runnable/custom')({ + printOutputFrame: false +}); diff --git a/electron-builder.json b/electron-builder.json index cfec13d6e..3d4ec527b 100644 --- a/electron-builder.json +++ b/electron-builder.json @@ -50,5 +50,6 @@ "nsis": { "perMachine": true }, + "beforeBuild": "./build/checkDaemonPlatform.js", "artifactName": "${productName}_${version}.${ext}" } diff --git a/package.json b/package.json index 9174c2b65..2da6506d5 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "install": "^0.10.2", "jayson": "^2.0.2", "jshashes": "^1.0.7", - "keytar-prebuild": "^4.1.1", + "keytar-prebuild": "4.0.4", "localforage": "^1.5.0", "mixpanel-browser": "^2.17.1", "moment": "^2.20.1", @@ -82,8 +82,9 @@ "babel-preset-react": "^6.24.1", "babel-preset-stage-2": "^6.18.0", "decompress": "^4.2.0", + "del": "^3.0.0", "devtron": "^1.4.0", - "electron": "^1.8.3", + "electron": "1.7.10", "electron-builder": "^20.3.1", "electron-devtools-installer": "^2.2.3", "electron-webpack": "^1.13.0", @@ -103,6 +104,7 @@ "i18n-extract": "^0.5.1", "json-loader": "^0.5.4", "lint-staged": "^7.0.0", + "make-runnable": "^1.3.6", "node-loader": "^0.6.0", "node-sass": "^4.7.2", "prettier": "^1.11.1", @@ -117,6 +119,8 @@ "license": "MIT", "lbrySettings": { "lbrynetDaemonVersion": "0.19.0", - "lbrynetDaemonUrlTemplate": "https://github.com/lbryio/lbry/releases/download/vDAEMONVER/lbrynet-daemon-vDAEMONVER-OSNAME.zip" + "lbrynetDaemonUrlTemplate": "https://github.com/lbryio/lbry/releases/download/vDAEMONVER/lbrynet-daemon-vDAEMONVER-OSNAME.zip", + "lbrynetDaemonDir": "static/daemon", + "lbrynetDaemonFileName": "lbrynet-daemon" } } diff --git a/yarn.lock b/yarn.lock index ef2ba3c1f..97abd2ded 100644 --- a/yarn.lock +++ b/yarn.lock @@ -110,9 +110,9 @@ lodash "^4.2.0" to-fast-properties "^2.0.0" -"@types/node@^8.0.24": - version "8.9.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-8.9.4.tgz#dfd327582a06c114eb6e0441fa3d6fab35edad48" +"@types/node@^7.0.18": + version "7.0.56" + resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.56.tgz#b6b659049191822be43c14610c1785d4b9cddecf" "@types/webpack-env@^1.13.5": version "1.13.5" @@ -2539,7 +2539,7 @@ decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" -decompress-response@^3.2.0: +decompress-response@^3.2.0, decompress-response@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" dependencies: @@ -3123,11 +3123,11 @@ electron-webpack@^1.13.0: webpack-merge "^4.1.1" yargs "^11.0.0" -electron@^1.8.3: - version "1.8.3" - resolved "https://registry.yarnpkg.com/electron/-/electron-1.8.3.tgz#001416ea3a25ce594e317cb5531bc41eadd22f7f" +electron@1.7.10: + version "1.7.10" + resolved "https://registry.yarnpkg.com/electron/-/electron-1.7.10.tgz#3a3e83d965fd7fafe473be8ddf8f472561b6253d" dependencies: - "@types/node" "^8.0.24" + "@types/node" "^7.0.18" electron-download "^3.0.1" extract-zip "^1.0.3" @@ -5718,12 +5718,12 @@ keypress@0.1.x: version "0.1.0" resolved "https://registry.yarnpkg.com/keypress/-/keypress-0.1.0.tgz#4a3188d4291b66b4f65edb99f806aa9ae293592a" -keytar-prebuild@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/keytar-prebuild/-/keytar-prebuild-4.1.1.tgz#f31cd3b2e5de743303f8c2f607f29f0117981295" +keytar-prebuild@4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/keytar-prebuild/-/keytar-prebuild-4.0.4.tgz#eb6354c68f2b3609dc325ef8709844632652d602" dependencies: - nan "2.8.0" - prebuild-install "^2.5.0" + nan "2.7.0" + prebuild-install "^2.2.2" killable@^1.0.0: version "1.0.0" @@ -6170,6 +6170,13 @@ make-fetch-happen@^2.4.13, make-fetch-happen@^2.5.0: socks-proxy-agent "^3.0.1" ssri "^5.0.0" +make-runnable@^1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-runnable/-/make-runnable-1.3.6.tgz#ca9b1d31b06f051e37570fb7ad98bc5369f982be" + dependencies: + bluebird "^3.5.0" + yargs "^4.7.1" + map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -6521,9 +6528,9 @@ mute-stream@0.0.7, mute-stream@~0.0.4: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" -nan@2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" +nan@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46" nan@^2.3.0: version "2.9.2" @@ -6582,9 +6589,9 @@ no-case@^2.2.0: dependencies: lower-case "^1.1.1" -node-abi@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.2.0.tgz#e802ac7a2408e2c0593fb3176ffdf8a99a9b4dec" +node-abi@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.3.0.tgz#f3d554d6ac72a9ee16f0f4dc9548db7c08de4986" dependencies: semver "^5.4.1" @@ -7677,25 +7684,25 @@ postcss@^6.0.1: source-map "^0.6.1" supports-color "^4.4.0" -prebuild-install@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.5.0.tgz#6fdd8436069971c76688071f4847d4c891a119f4" +prebuild-install@^2.2.2: + version "2.5.1" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.5.1.tgz#0f234140a73760813657c413cdccdda58296b1da" dependencies: detect-libc "^1.0.3" expand-template "^1.0.2" github-from-package "0.0.0" minimist "^1.2.0" mkdirp "^0.5.1" - node-abi "^2.1.1" + node-abi "^2.2.0" noop-logger "^0.1.1" npmlog "^4.0.1" os-homedir "^1.0.1" - pump "^1.0.1" + pump "^2.0.1" rc "^1.1.6" - simple-get "^1.4.2" + simple-get "^2.7.0" tar-fs "^1.13.0" tunnel-agent "^0.6.0" - xtend "4.0.1" + which-pm-runs "^1.0.0" prelude-ls@~1.1.2: version "1.1.2" @@ -8888,13 +8895,17 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" -simple-get@^1.4.2: - version "1.4.3" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-1.4.3.tgz#e9755eda407e96da40c5e5158c9ea37b33becbeb" +simple-concat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" + +simple-get@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.7.0.tgz#ad37f926d08129237ff08c4f2edfd6f10e0380b5" dependencies: + decompress-response "^3.3.0" once "^1.3.1" - unzip-response "^1.0.0" - xtend "^4.0.0" + simple-concat "^1.0.0" simplemde@^1.11.2: version "1.11.2" @@ -9867,10 +9878,6 @@ unused-filename@^1.0.0: modify-filename "^1.1.0" path-exists "^3.0.0" -unzip-response@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-1.0.2.tgz#b984f0877fc0a89c2c773cc1ef7b5b232b5b06fe" - unzip-response@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" @@ -10240,6 +10247,10 @@ which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" +which-pm-runs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" + which@1, which@^1.2.10, which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@~1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" @@ -10384,7 +10395,7 @@ xss-filters@^1.2.6: version "1.2.7" resolved "https://registry.yarnpkg.com/xss-filters/-/xss-filters-1.2.7.tgz#59fa1de201f36f2f3470dcac5f58ccc2830b0a9a" -xtend@4.0.1, "xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: +"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" @@ -10476,7 +10487,7 @@ yargs@^11.0.0: y18n "^3.2.1" yargs-parser "^9.0.2" -yargs@^4.2.0: +yargs@^4.2.0, yargs@^4.7.1: version "4.8.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" dependencies: -- 2.45.3 From 09194e72bdd885cb07c7af7745743ae25908d1f7 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Wed, 14 Mar 2018 16:43:17 -0400 Subject: [PATCH 053/192] chore: update electron to fix vulnerability --- package.json | 2 +- yarn.lock | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 9174c2b65..9db220112 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "babel-preset-stage-2": "^6.18.0", "decompress": "^4.2.0", "devtron": "^1.4.0", - "electron": "^1.8.3", + "electron": "1.7.11", "electron-builder": "^20.3.1", "electron-devtools-installer": "^2.2.3", "electron-webpack": "^1.13.0", diff --git a/yarn.lock b/yarn.lock index ef2ba3c1f..3b9d583f3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -110,9 +110,9 @@ lodash "^4.2.0" to-fast-properties "^2.0.0" -"@types/node@^8.0.24": - version "8.9.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-8.9.4.tgz#dfd327582a06c114eb6e0441fa3d6fab35edad48" +"@types/node@^7.0.18": + version "7.0.56" + resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.56.tgz#b6b659049191822be43c14610c1785d4b9cddecf" "@types/webpack-env@^1.13.5": version "1.13.5" @@ -3123,11 +3123,11 @@ electron-webpack@^1.13.0: webpack-merge "^4.1.1" yargs "^11.0.0" -electron@^1.8.3: - version "1.8.3" - resolved "https://registry.yarnpkg.com/electron/-/electron-1.8.3.tgz#001416ea3a25ce594e317cb5531bc41eadd22f7f" +electron@1.7.11: + version "1.7.11" + resolved "https://registry.yarnpkg.com/electron/-/electron-1.7.11.tgz#993b6aa79e0e79a7cfcc369f4c813fbd9a0b08d9" dependencies: - "@types/node" "^8.0.24" + "@types/node" "^7.0.18" electron-download "^3.0.1" extract-zip "^1.0.3" -- 2.45.3 From 6497b46344eb6ce79aa46a31dfccc27c21bc4320 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Wed, 14 Mar 2018 18:41:53 -0400 Subject: [PATCH 054/192] chore: update electron to 1.7.12 --- package.json | 2 +- yarn.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 5a1d62bad..33011fe16 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "decompress": "^4.2.0", "del": "^3.0.0", "devtron": "^1.4.0", - "electron": "1.7.11", + "electron": "1.7.12", "electron-builder": "^20.3.1", "electron-devtools-installer": "^2.2.3", "electron-webpack": "^1.13.0", diff --git a/yarn.lock b/yarn.lock index 59225d5d2..aca53a271 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3123,9 +3123,9 @@ electron-webpack@^1.13.0: webpack-merge "^4.1.1" yargs "^11.0.0" -electron@1.7.11: - version "1.7.11" - resolved "https://registry.yarnpkg.com/electron/-/electron-1.7.11.tgz#993b6aa79e0e79a7cfcc369f4c813fbd9a0b08d9" +electron@1.7.12: + version "1.7.12" + resolved "https://registry.yarnpkg.com/electron/-/electron-1.7.12.tgz#dcc61a2c1b0c3df25f68b3425379a01abd01190e" dependencies: "@types/node" "^7.0.18" electron-download "^3.0.1" -- 2.45.3 From 40ab6e1b3802a49fe33b0fb807ec9dfbebd3c25b Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Wed, 14 Mar 2018 20:22:54 -0400 Subject: [PATCH 055/192] chore: change building target to .deb for Linux (#1103) It was decided to rollback to Debian builds for Linux due to how inconvenient it is to launch an AppImage build. --- .travis.yml | 2 +- CHANGELOG.md | 1 - electron-builder.json | 28 ++++++-- src/renderer/index.js | 23 ++++--- src/renderer/redux/actions/app.js | 111 +++++++++++++++++++++--------- 5 files changed, 111 insertions(+), 54 deletions(-) diff --git a/.travis.yml b/.travis.yml index bb43aad6c..e723a675a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -45,6 +45,6 @@ addons: artifacts: working_dir: dist paths: - - $(git ls-files -o dist/{*.dmg,*.exe,*.AppImage} | tr "\n" ":") + - $(git ls-files -o dist/{*.dmg,*.exe,*.deb} | tr "\n" ":") target_paths: - /app/build-${TRAVIS_BUILD_NUMBER}_commit-${TRAVIS_COMMIT:0:7}$([ ! -z ${TRAVIS_TAG} ] && echo "_tag-${TRAVIS_TAG}") \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index f61c91b80..e4dbd468e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,7 +19,6 @@ Web UI version numbers should always match the corresponding version of LBRY App ### Changed * Improved privacy by allowing users to turn off the file view counter and better understand privacy settings ([#1074](https://github.com/lbryio/lbry-app/pull/1074)) * Disabled auto dark mode if dark mode is selected ([#1006](https://github.com/lbryio/lbry-app/pull/1006)) - * AppImage support for Linux instead of .deb ([#1010](https://github.com/lbryio/lbry-app/pull/1010)) * Refactor Electron's main process ([#951](https://github.com/lbryio/lbry-app/pull/951)) * Refactor lbryuri.js into separate named exports ([#957](https://github.com/lbryio/lbry-app/pull/957)) * Keep node_modules up-to-date when yarn.lock changes due to git ([#955](https://github.com/lbryio/lbry-app/pull/955)) diff --git a/electron-builder.json b/electron-builder.json index 3d4ec527b..3681e146d 100644 --- a/electron-builder.json +++ b/electron-builder.json @@ -1,12 +1,15 @@ { "appId": "io.lbry.LBRY", "productName": "LBRY", - "publish": [{ - "provider": "s3", - "bucket": "build.lbry.io", - "path": "app/release", - "region": "us-east-1" - }, "github"], + "publish": [ + { + "provider": "s3", + "bucket": "build.lbry.io", + "path": "app/release", + "region": "us-east-1" + }, + "github" + ], "mac": { "target": "dmg", "category": "public.app-category.entertainment" @@ -41,12 +44,23 @@ } ], "linux": { - "target": "AppImage", + "target": "deb", "category": "AudioVideo;Video", "desktop": { "MimeType": "x-scheme-handler/lbry;" } }, + "deb": { + "depends": [ + "gconf2", + "gconf-service", + "libnotify4", + "libappindicator1", + "libxtst6", + "libnss3", + "libsecret-1-0" + ] + }, "nsis": { "perMachine": true }, diff --git a/src/renderer/index.js b/src/renderer/index.js index b4225577a..d75505200 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -100,17 +100,18 @@ const init = () => { app.store.dispatch(doAutoUpdate()); }); - autoUpdater.on('update-available', () => { - console.log('Update available'); - }); - autoUpdater.on('update-not-available', () => { - console.log('Update not available'); - }); - autoUpdater.on('update-downloaded', () => { - console.log('Update downloaded'); - app.store.dispatch(doAutoUpdate()); - }); - + if (['win32', 'darwin'].includes(process.platform)) { + autoUpdater.on('update-available', () => { + console.log('Update available'); + }); + autoUpdater.on('update-not-available', () => { + console.log('Update not available'); + }); + autoUpdater.on('update-downloaded', () => { + console.log('Update downloaded'); + app.store.dispatch(doAutoUpdate()); + }); + } app.store.dispatch(doUpdateIsNightAsync()); app.store.dispatch(doDownloadLanguages()); diff --git a/src/renderer/redux/actions/app.js b/src/renderer/redux/actions/app.js index e67a5827e..6a1f138ba 100644 --- a/src/renderer/redux/actions/app.js +++ b/src/renderer/redux/actions/app.js @@ -21,6 +21,7 @@ import { selectUpgradeDownloadPath, selectUpgradeFilename, selectAutoUpdateDeclined, + selectRemoteVersion, } from 'redux/selectors/app'; import { lbrySettings as config } from 'package.json'; @@ -70,37 +71,6 @@ export function doStartUpgrade() { }; } -export function doDownloadUpgradeRequested() { - // This means the user requested an upgrade by clicking the "upgrade" button in the navbar. - // If on Mac and Windows, we do some new behavior for the auto-update system. - // This will probably be reorganized once we get auto-update going on Linux and remove - // the old logic. - - return (dispatch, getState) => { - const state = getState(); - - // Pause video if needed - dispatch(doPause()); - - const autoUpdateDeclined = selectAutoUpdateDeclined(state); - - if (autoUpdateDeclined) { - // The user declined an update before, so show the "confirm" dialog - dispatch({ - type: ACTIONS.OPEN_MODAL, - data: { modal: MODALS.AUTO_UPDATE_CONFIRM }, - }); - } else { - // The user was never shown the original update dialog (e.g. because they were - // watching a video). So show the initial "update downloaded" dialog. - dispatch({ - type: ACTIONS.OPEN_MODAL, - data: { modal: MODALS.AUTO_UPDATE_DOWNLOADED }, - }); - } - }; -} - export function doDownloadUpgrade() { return (dispatch, getState) => { const state = getState(); @@ -140,6 +110,43 @@ export function doDownloadUpgrade() { }; } +export function doDownloadUpgradeRequested() { + // This means the user requested an upgrade by clicking the "upgrade" button in the navbar. + // If on Mac and Windows, we do some new behavior for the auto-update system. + // This will probably be reorganized once we get auto-update going on Linux and remove + // the old logic. + + return (dispatch, getState) => { + const state = getState(); + + // Pause video if needed + dispatch(doPause()); + + const autoUpdateDeclined = selectAutoUpdateDeclined(state); + + if (['win32', 'darwin'].includes(process.platform)) { + // electron-updater behavior + if (autoUpdateDeclined) { + // The user declined an update before, so show the "confirm" dialog + dispatch({ + type: ACTIONS.OPEN_MODAL, + data: { modal: MODALS.AUTO_UPDATE_CONFIRM }, + }); + } else { + // The user was never shown the original update dialog (e.g. because they were + // watching a video). So show the inital "update downloaded" dialog. + dispatch({ + type: ACTIONS.OPEN_MODAL, + data: { modal: MODALS.AUTO_UPDATE_DOWNLOADED }, + }); + } + } else { + // Old behavior for Linux + dispatch(doDownloadUpgrade()); + } + }; +} + export function doAutoUpdate() { return dispatch => { dispatch({ @@ -192,11 +199,47 @@ export function doCheckUpgradeAvailable() { type: ACTIONS.CHECK_UPGRADE_START, }); - const autoUpdateDeclined = selectAutoUpdateDeclined(state); + if (['win32', 'darwin'].includes(process.platform)) { + // On Windows and Mac, updates happen silently through + // electron-updater. + const autoUpdateDeclined = selectAutoUpdateDeclined(state); - if (!autoUpdateDeclined && !isDev) { - autoUpdater.checkForUpdates(); + if (!autoUpdateDeclined && !isDev) { + autoUpdater.checkForUpdates(); + } + return; } + + const success = ({ remoteVersion, upgradeAvailable }) => { + dispatch({ + type: ACTIONS.CHECK_UPGRADE_SUCCESS, + data: { + upgradeAvailable, + remoteVersion, + }, + }); + + if ( + upgradeAvailable && + !selectCurrentModal(state) && + (!selectIsUpgradeSkipped(state) || remoteVersion !== selectRemoteVersion(state)) + ) { + dispatch({ + type: ACTIONS.OPEN_MODAL, + data: { + modal: MODALS.UPGRADE, + }, + }); + } + }; + + const fail = () => { + dispatch({ + type: ACTIONS.CHECK_UPGRADE_FAIL, + }); + }; + + Lbry.getAppVersionInfo().then(success, fail); }; } -- 2.45.3 From 2cf47f1bee492add0370009d98286ed569b864ee Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Wed, 14 Mar 2018 20:25:15 -0400 Subject: [PATCH 056/192] chore: upgrade electron-builder to 20.5.1 --- package.json | 2 +- yarn.lock | 141 +++++++++++++++++++++++---------------------------- 2 files changed, 65 insertions(+), 78 deletions(-) diff --git a/package.json b/package.json index 33011fe16..6e9b13d35 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "del": "^3.0.0", "devtron": "^1.4.0", "electron": "1.7.12", - "electron-builder": "^20.3.1", + "electron-builder": "^20.5.1", "electron-devtools-installer": "^2.2.3", "electron-webpack": "^1.13.0", "eslint": "^4.18.2", diff --git a/yarn.lock b/yarn.lock index aca53a271..f546b55ab 100644 --- a/yarn.lock +++ b/yarn.lock @@ -319,37 +319,29 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -app-builder-bin-linux@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/app-builder-bin-linux/-/app-builder-bin-linux-1.6.0.tgz#d7731d7988b8a740e74d591cbd565f168a266111" - app-builder-bin-linux@1.7.1: version "1.7.1" resolved "https://registry.yarnpkg.com/app-builder-bin-linux/-/app-builder-bin-linux-1.7.1.tgz#925967add77c13d387e3fe88359a4b4dce82c525" -app-builder-bin-mac@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/app-builder-bin-mac/-/app-builder-bin-mac-1.6.0.tgz#c976da70796d67aeb7134a57899636f2581d1c67" +app-builder-bin-linux@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/app-builder-bin-linux/-/app-builder-bin-linux-1.7.2.tgz#a764c8e52ecf1b5b068f32c820c6daf1ffed6a8f" app-builder-bin-mac@1.7.1: version "1.7.1" resolved "https://registry.yarnpkg.com/app-builder-bin-mac/-/app-builder-bin-mac-1.7.1.tgz#e5c2b49be82473a737e000cfccfc65a68f9cc62d" -app-builder-bin-win@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/app-builder-bin-win/-/app-builder-bin-win-1.6.0.tgz#528ef96430d519c270b4de260bea0ddc70df1733" +app-builder-bin-mac@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/app-builder-bin-mac/-/app-builder-bin-mac-1.7.2.tgz#c4ee0d950666c97c12a45ac74ec6396be3357644" app-builder-bin-win@1.7.1: version "1.7.1" resolved "https://registry.yarnpkg.com/app-builder-bin-win/-/app-builder-bin-win-1.7.1.tgz#e1ba3d6d645896552b28e4dd05525b39561b9b88" -app-builder-bin@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-1.6.0.tgz#c0e88a488d4c23c2e7fe0bbfb70c1d61165be206" - optionalDependencies: - app-builder-bin-linux "1.6.0" - app-builder-bin-mac "1.6.0" - app-builder-bin-win "1.6.0" +app-builder-bin-win@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/app-builder-bin-win/-/app-builder-bin-win-1.7.2.tgz#7acac890782f4118f09941b343ba06c56452a6f6" app-builder-bin@1.7.1: version "1.7.1" @@ -359,6 +351,14 @@ app-builder-bin@1.7.1: app-builder-bin-mac "1.7.1" app-builder-bin-win "1.7.1" +app-builder-bin@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-1.7.2.tgz#daf67060a6bad8f5f611a0d2876d9db897a83f06" + optionalDependencies: + app-builder-bin-linux "1.7.2" + app-builder-bin-mac "1.7.2" + app-builder-bin-win "1.7.2" + app-root-path@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46" @@ -1577,26 +1577,26 @@ builder-util-runtime@4.0.5, builder-util-runtime@^4.0.5, builder-util-runtime@~4 fs-extra-p "^4.5.0" sax "^1.2.4" -builder-util@5.6.1: - version "5.6.1" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.6.1.tgz#ab90845cb8949ea4ac81da0ce87b8ec3424cdbf9" +builder-util@5.6.5, builder-util@^5.6.5: + version "5.6.5" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.6.5.tgz#f2d156541b8df9599456848e057566443dc04c82" dependencies: "7zip-bin" "~3.1.0" - app-builder-bin "1.6.0" + app-builder-bin "1.7.2" bluebird-lst "^1.0.5" builder-util-runtime "^4.0.5" chalk "^2.3.2" debug "^3.1.0" fs-extra-p "^4.5.2" is-ci "^1.1.0" - js-yaml "^3.10.0" + js-yaml "^3.11.0" lazy-val "^1.0.3" semver "^5.5.0" source-map-support "^0.5.3" stat-mode "^0.2.2" temp-file "^3.1.1" -builder-util@5.6.3, builder-util@^5.6.0: +builder-util@^5.6.0: version "5.6.3" resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.6.3.tgz#194288b979958832e0592fe91c8306ce207a60f1" dependencies: @@ -2747,16 +2747,16 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" -dmg-builder@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-4.1.1.tgz#a12214eb3eb3cba0addccfd129f1981c9805045c" +dmg-builder@4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-4.1.2.tgz#b4d7245dc2e91812395b4268b12f888443ba5f30" dependencies: bluebird-lst "^1.0.5" - builder-util "^5.6.0" - electron-builder-lib "~20.2.0" + builder-util "^5.6.5" + electron-builder-lib "~20.5.0" fs-extra-p "^4.5.2" iconv-lite "^0.4.19" - js-yaml "^3.10.0" + js-yaml "^3.11.0" parse-color "^1.0.0" sanitize-filename "^1.6.1" @@ -2899,23 +2899,23 @@ ejs@^2.5.7: version "2.5.7" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.7.tgz#cc872c168880ae3c7189762fd5ffc00896c9518a" -electron-builder-lib@20.3.1: - version "20.3.1" - resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.3.1.tgz#b479a03a718fa443ff29e0623c1ec661199e3eae" +electron-builder-lib@20.5.1, electron-builder-lib@~20.5.0: + version "20.5.1" + resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.5.1.tgz#c155345c58d25580d316f6437c251a57e8e92d62" dependencies: "7zip-bin" "~3.1.0" - app-builder-bin "1.7.1" + app-builder-bin "1.7.2" async-exit-hook "^2.0.1" bluebird-lst "^1.0.5" - builder-util "5.6.3" + builder-util "5.6.5" builder-util-runtime "4.0.5" chromium-pickle-js "^0.2.0" debug "^3.1.0" ejs "^2.5.7" - electron-osx-sign "0.4.8" - electron-publish "20.2.0" + electron-osx-sign "0.4.10" + electron-publish "20.5.0" fs-extra-p "^4.5.2" - hosted-git-info "^2.5.0" + hosted-git-info "^2.6.0" is-ci "^1.1.0" isbinaryfile "^3.0.2" js-yaml "^3.11.0" @@ -2928,45 +2928,16 @@ electron-builder-lib@20.3.1: semver "^5.5.0" temp-file "^3.1.1" -electron-builder-lib@~20.2.0: - version "20.2.1" - resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.2.1.tgz#ff8dc6ac7f6f3c676fc370ddafb2aba464a17672" - dependencies: - "7zip-bin" "~3.1.0" - app-builder-bin "1.6.0" - async-exit-hook "^2.0.1" - bluebird-lst "^1.0.5" - builder-util "5.6.1" - builder-util-runtime "4.0.5" - chromium-pickle-js "^0.2.0" - debug "^3.1.0" - ejs "^2.5.7" - electron-osx-sign "0.4.8" - electron-publish "20.2.0" - fs-extra-p "^4.5.2" - hosted-git-info "^2.5.0" - is-ci "^1.1.0" - isbinaryfile "^3.0.2" - js-yaml "^3.10.0" - lazy-val "^1.0.3" - minimatch "^3.0.4" - normalize-package-data "^2.4.0" - plist "^2.1.0" - read-config-file "3.0.0" - sanitize-filename "^1.6.1" - semver "^5.5.0" - temp-file "^3.1.1" - -electron-builder@^20.3.1: - version "20.3.1" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-20.3.1.tgz#a05bc5cb729d416ee15122552dac3592f2ede4fd" +electron-builder@^20.5.1: + version "20.5.1" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-20.5.1.tgz#8e6fba76dcd65aeabab60f15bd46f294ee04dd11" dependencies: bluebird-lst "^1.0.5" - builder-util "5.6.3" + builder-util "5.6.5" builder-util-runtime "4.0.5" chalk "^2.3.2" - dmg-builder "4.1.1" - electron-builder-lib "20.3.1" + dmg-builder "4.1.2" + electron-builder-lib "20.5.1" electron-download-tf "4.3.4" fs-extra-p "^4.5.2" is-ci "^1.1.0" @@ -3029,9 +3000,9 @@ electron-log@^2.2.12: version "2.2.14" resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-2.2.14.tgz#2123319ccb8d70b0db07f0eda57d5823cb42b4b0" -electron-osx-sign@0.4.8: - version "0.4.8" - resolved "https://registry.yarnpkg.com/electron-osx-sign/-/electron-osx-sign-0.4.8.tgz#f0b9fadded9e1e54ec35fa89877b5c6c34c7bc40" +electron-osx-sign@0.4.10: + version "0.4.10" + resolved "https://registry.yarnpkg.com/electron-osx-sign/-/electron-osx-sign-0.4.10.tgz#be4f3b89b2a75a1dc5f1e7249081ab2929ca3a26" dependencies: bluebird "^3.5.0" compare-version "^0.1.2" @@ -3040,7 +3011,19 @@ electron-osx-sign@0.4.8: minimist "^1.2.0" plist "^2.1.0" -electron-publish@20.2.0, electron-publish@~20.2.0: +electron-publish@20.5.0: + version "20.5.0" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-20.5.0.tgz#bcef9949c63899d34680e89110e8d38d1016f1f6" + dependencies: + bluebird-lst "^1.0.5" + builder-util "^5.6.5" + builder-util-runtime "^4.0.5" + chalk "^2.3.2" + fs-extra-p "^4.5.2" + lazy-val "^1.0.3" + mime "^2.2.0" + +electron-publish@~20.2.0: version "20.2.0" resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-20.2.0.tgz#1812738c4a4e14a8e156a9a083424a6e4e8e8264" dependencies: @@ -4651,10 +4634,14 @@ home-path@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/home-path/-/home-path-1.0.5.tgz#788b29815b12d53bacf575648476e6f9041d133f" -hosted-git-info@^2.1.4, hosted-git-info@^2.4.2, hosted-git-info@^2.5.0, hosted-git-info@~2.5.0: +hosted-git-info@^2.1.4, hosted-git-info@^2.4.2, hosted-git-info@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" +hosted-git-info@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.0.tgz#23235b29ab230c576aab0d4f13fc046b0b038222" + hpack.js@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" -- 2.45.3 From 9a3e251359ac3f8bcbbc9e96128850bb865d8776 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Wed, 14 Mar 2018 20:34:43 -0400 Subject: [PATCH 057/192] chore: bump to 0.21.0-rc.2 --- CHANGELOG.md | 6 +----- package.json | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e4dbd468e..98703d571 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,9 +3,6 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/). -The LBRY Web UI comes bundled as part of [LBRYApp](https://github.com/lbryio/lbry-app). -Web UI version numbers should always match the corresponding version of LBRY App. - ## [Unreleased] ### Added * Save app state when closing to tray ([#968](https://github.com/lbryio/lbry-app/issues/968)) @@ -20,7 +17,7 @@ Web UI version numbers should always match the corresponding version of LBRY App * Improved privacy by allowing users to turn off the file view counter and better understand privacy settings ([#1074](https://github.com/lbryio/lbry-app/pull/1074)) * Disabled auto dark mode if dark mode is selected ([#1006](https://github.com/lbryio/lbry-app/pull/1006)) * Refactor Electron's main process ([#951](https://github.com/lbryio/lbry-app/pull/951)) - * Refactor lbryuri.js into separate named exports ([#957](https://github.com/lbryio/lbry-app/pull/957)) + * Refactor `lbryuri.js` into separate named exports ([#957](https://github.com/lbryio/lbry-app/pull/957)) * Keep node_modules up-to-date when yarn.lock changes due to git ([#955](https://github.com/lbryio/lbry-app/pull/955)) * Do not kill an existing daemon, instead check if one exists ([#973](https://github.com/lbryio/lbry-app/pull/973)) * Enable play button immediately after user clicks download ([#987](https://github.com/lbryio/lbry-app/pull/987)) @@ -28,7 +25,6 @@ Web UI version numbers should always match the corresponding version of LBRY App ### Fixed * Fixed sort by date of published content ([#986](https://github.com/lbryio/lbry-app/issues/986)) - * Fix night mode start time, set to 9PM (#1050) * Fix night mode start time, set to 9PM ([#1050](https://github.com/lbryio/lbry-app/issues/1050)) * Disable drag and drop of files into the app ([#1045](https://github.com/lbryio/lbry-app/pull/1045)) * Fixed uninformative error message ([#1046](https://github.com/lbryio/lbry-app/pull/1046)) diff --git a/package.json b/package.json index 6e9b13d35..a90afe2ea 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lbry-app", - "version": "0.21.0-rc.1", + "version": "0.21.0-rc.2", "description": "A browser for the LBRY network, a digital marketplace controlled by its users.", "homepage": "https://lbry.io/", "bugs": { -- 2.45.3 From 9bcb75e2343529439ede42861236df91382e461c Mon Sep 17 00:00:00 2001 From: Thomas Zarebczan Date: Thu, 15 Mar 2018 02:44:44 -0400 Subject: [PATCH 058/192] Add checks for 0 and exact balance Otherwise, you get an ugly "internal error" --- .../component/publishForm/internal/channelSection.jsx | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/renderer/component/publishForm/internal/channelSection.jsx b/src/renderer/component/publishForm/internal/channelSection.jsx index b36c1b317..32e390bdb 100644 --- a/src/renderer/component/publishForm/internal/channelSection.jsx +++ b/src/renderer/component/publishForm/internal/channelSection.jsx @@ -57,6 +57,16 @@ class ChannelSection extends React.PureComponent { return; } + if (newChannelBid == 0) { + this.refs.newChannelName.showError(__('Bid value must be greater than 0.')); + + return; + } + if (newChannelBid == balance) { + this.refs.newChannelName.showError(__('Please decrease your bid to account for transaction fees.')); + + return; + } this.setState({ creatingChannel: true, -- 2.45.3 From 34e971cd7f7d6f172069bacb565377c0d3a95af6 Mon Sep 17 00:00:00 2001 From: Thomas Zarebczan Date: Thu, 15 Mar 2018 02:46:50 -0400 Subject: [PATCH 059/192] remove check for balance during publish This is being correctly done on the daemon now and the app shows appropriate error --- src/renderer/component/publishForm/view.jsx | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/renderer/component/publishForm/view.jsx b/src/renderer/component/publishForm/view.jsx index 4f770a803..b07f6083f 100644 --- a/src/renderer/component/publishForm/view.jsx +++ b/src/renderer/component/publishForm/view.jsx @@ -61,15 +61,6 @@ class PublishForm extends React.PureComponent { } handleSubmit() { - const { balance } = this.props; - const { bid } = this.state; - - if (bid > balance) { - this.handlePublishError({ message: 'insufficient funds' }); - - return; - } - this.setState({ submitting: true, }); -- 2.45.3 From 7828753d494bb08ba45f41a726d91341ef902fa7 Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Thu, 15 Mar 2018 01:34:22 -0700 Subject: [PATCH 060/192] Fix recurring download problem, notification error and consolidate actions --- src/renderer/page/file/index.js | 6 ++-- src/renderer/page/file/view.jsx | 10 +++--- src/renderer/redux/actions/content.js | 2 +- src/renderer/redux/actions/subscriptions.js | 38 ++++++++------------- 4 files changed, 22 insertions(+), 34 deletions(-) diff --git a/src/renderer/page/file/index.js b/src/renderer/page/file/index.js index 37fb13c7f..5116ebd5b 100644 --- a/src/renderer/page/file/index.js +++ b/src/renderer/page/file/index.js @@ -4,7 +4,7 @@ import { doFetchFileInfo } from 'redux/actions/file_info'; import { makeSelectFileInfoForUri } from 'redux/selectors/file_info'; import { selectRewardContentClaimIds } from 'redux/selectors/content'; import { doFetchCostInfoForUri } from 'redux/actions/cost_info'; -import { checkSubscriptionLatest } from 'redux/actions/subscriptions'; +import { doCheckSubscription } from 'redux/actions/subscriptions'; import { makeSelectClaimForUri, makeSelectContentTypeForUri, @@ -32,8 +32,8 @@ const perform = dispatch => ({ navigate: (path, params) => dispatch(doNavigate(path, params)), fetchFileInfo: uri => dispatch(doFetchFileInfo(uri)), fetchCostInfo: uri => dispatch(doFetchCostInfoForUri(uri)), - checkSubscriptionLatest: (subscription, uri) => - dispatch(checkSubscriptionLatest(subscription, uri)), + checkSubscription: (subscription) => + dispatch(doCheckSubscription(subscription)), }); export default connect(select, perform)(FilePage); diff --git a/src/renderer/page/file/view.jsx b/src/renderer/page/file/view.jsx index 069a0dfdc..5ca16b600 100644 --- a/src/renderer/page/file/view.jsx +++ b/src/renderer/page/file/view.jsx @@ -17,7 +17,7 @@ class FilePage extends React.PureComponent { componentDidMount() { this.fetchFileInfo(this.props); this.fetchCostInfo(this.props); - this.checkSubscriptionLatest(this.props); + this.checkSubscription(this.props); } componentWillReceiveProps(nextProps) { @@ -36,13 +36,13 @@ class FilePage extends React.PureComponent { } } - checkSubscriptionLatest(props) { + checkSubscription(props) { if ( props.subscriptions .map(subscription => subscription.channelName) .indexOf(props.claim.channel_name) !== -1 ) { - props.checkSubscriptionLatest( + props.checkSubscription( { channelName: props.claim.channel_name, uri: buildURI( @@ -52,9 +52,7 @@ class FilePage extends React.PureComponent { }, false ), - }, - buildURI({ contentName: props.claim.name, claimId: props.claim.claim_id }, false) - ); + }); } } diff --git a/src/renderer/redux/actions/content.js b/src/renderer/redux/actions/content.js index d5671bba4..5fd99c23e 100644 --- a/src/renderer/redux/actions/content.js +++ b/src/renderer/redux/actions/content.js @@ -165,7 +165,7 @@ export function doUpdateLoadStatus(uri, outpoint) { setProgressBar(totalProgress); const notif = new window.Notification('LBRY Download Complete', { - body: fileInfo.metadata.stream.metadata.title, + body: fileInfo.metadata.title, silent: false, }); notif.onclick = () => { diff --git a/src/renderer/redux/actions/subscriptions.js b/src/renderer/redux/actions/subscriptions.js index 7d2e40e5d..2233363a1 100644 --- a/src/renderer/redux/actions/subscriptions.js +++ b/src/renderer/redux/actions/subscriptions.js @@ -28,7 +28,7 @@ export const doCheckSubscriptions = () => ( const checkSubscriptionsTimer = setInterval( () => selectSubscriptions(getState()).map((subscription: Subscription) => - dispatch(doCheckSubscription(subscription)) + dispatch(doCheckSubscription(subscription, true)) ), CHECK_SUBSCRIPTIONS_INTERVAL ); @@ -38,7 +38,7 @@ export const doCheckSubscriptions = () => ( }); }; -export const doCheckSubscription = (subscription: Subscription) => (dispatch: Dispatch) => { +export const doCheckSubscription = (subscription: Subscription, notify?: boolean) => (dispatch: Dispatch) => { dispatch({ type: ACTIONS.CHECK_SUBSCRIPTION_STARTED, data: subscription, @@ -59,7 +59,7 @@ export const doCheckSubscription = (subscription: Subscription) => (dispatch: Di ) : 1; - if (count !== 0) { + if (count !== 0 && notify) { if (!claimsInChannel[0].value.stream.metadata.fee) { dispatch( doPurchaseUri( @@ -90,7 +90,17 @@ export const doCheckSubscription = (subscription: Subscription) => (dispatch: Di }; } - //$FlowIssue + dispatch(setSubscriptionLatest({ + channelName: claimsInChannel[0].channel_name, + uri: buildURI( + { channelName: claimsInChannel[0].channel_name, claimId: claimsInChannel[0].claim_id }, + false + ) + }, buildURI( + { contentName: claimsInChannel[0].name, claimId: claimsInChannel[0].claim_id }, + false + ))); + dispatch({ type: ACTIONS.CHECK_SUBSCRIPTION_COMPLETED, data: subscription, @@ -98,26 +108,6 @@ export const doCheckSubscription = (subscription: Subscription) => (dispatch: Di }); }; -export const checkSubscriptionLatest = (channel: Subscription, uri: string) => ( - dispatch: Dispatch -) => { - Lbry.claim_list_by_channel({ uri: channel.uri, page: 1 }).then(result => { - const claimResult = result[channel.uri] || {}; - const { claims_in_channel: claimsInChannel } = claimResult; - - if ( - claimsInChannel && - claimsInChannel.length && - buildURI( - { contentName: claimsInChannel[0].name, claimId: claimsInChannel[0].claim_id }, - false - ) === uri - ) { - dispatch(setSubscriptionLatest(channel, uri)); - } - }); -}; - export const setSubscriptionLatest = (subscription: Subscription, uri: string) => ( dispatch: Dispatch ) => -- 2.45.3 From d8cd9497ccf1d6a5c2bdd2a80f61683940aa3304 Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Thu, 15 Mar 2018 01:35:47 -0700 Subject: [PATCH 061/192] Format changes with prettier --- src/renderer/page/file/index.js | 3 +-- src/renderer/page/file/view.jsx | 21 ++++++++-------- src/renderer/redux/actions/subscriptions.js | 27 +++++++++++++-------- 3 files changed, 28 insertions(+), 23 deletions(-) diff --git a/src/renderer/page/file/index.js b/src/renderer/page/file/index.js index 5116ebd5b..f8e515222 100644 --- a/src/renderer/page/file/index.js +++ b/src/renderer/page/file/index.js @@ -32,8 +32,7 @@ const perform = dispatch => ({ navigate: (path, params) => dispatch(doNavigate(path, params)), fetchFileInfo: uri => dispatch(doFetchFileInfo(uri)), fetchCostInfo: uri => dispatch(doFetchCostInfoForUri(uri)), - checkSubscription: (subscription) => - dispatch(doCheckSubscription(subscription)), + checkSubscription: subscription => dispatch(doCheckSubscription(subscription)), }); export default connect(select, perform)(FilePage); diff --git a/src/renderer/page/file/view.jsx b/src/renderer/page/file/view.jsx index 5ca16b600..c7c29c194 100644 --- a/src/renderer/page/file/view.jsx +++ b/src/renderer/page/file/view.jsx @@ -42,17 +42,16 @@ class FilePage extends React.PureComponent { .map(subscription => subscription.channelName) .indexOf(props.claim.channel_name) !== -1 ) { - props.checkSubscription( - { - channelName: props.claim.channel_name, - uri: buildURI( - { - contentName: props.claim.channel_name, - claimId: props.claim.value.publisherSignature.certificateId, - }, - false - ), - }); + props.checkSubscription({ + channelName: props.claim.channel_name, + uri: buildURI( + { + contentName: props.claim.channel_name, + claimId: props.claim.value.publisherSignature.certificateId, + }, + false + ), + }); } } diff --git a/src/renderer/redux/actions/subscriptions.js b/src/renderer/redux/actions/subscriptions.js index 2233363a1..8a390987b 100644 --- a/src/renderer/redux/actions/subscriptions.js +++ b/src/renderer/redux/actions/subscriptions.js @@ -38,7 +38,9 @@ export const doCheckSubscriptions = () => ( }); }; -export const doCheckSubscription = (subscription: Subscription, notify?: boolean) => (dispatch: Dispatch) => { +export const doCheckSubscription = (subscription: Subscription, notify?: boolean) => ( + dispatch: Dispatch +) => { dispatch({ type: ACTIONS.CHECK_SUBSCRIPTION_STARTED, data: subscription, @@ -90,16 +92,21 @@ export const doCheckSubscription = (subscription: Subscription, notify?: boolean }; } - dispatch(setSubscriptionLatest({ - channelName: claimsInChannel[0].channel_name, - uri: buildURI( - { channelName: claimsInChannel[0].channel_name, claimId: claimsInChannel[0].claim_id }, - false + dispatch( + setSubscriptionLatest( + { + channelName: claimsInChannel[0].channel_name, + uri: buildURI( + { channelName: claimsInChannel[0].channel_name, claimId: claimsInChannel[0].claim_id }, + false + ), + }, + buildURI( + { contentName: claimsInChannel[0].name, claimId: claimsInChannel[0].claim_id }, + false + ) ) - }, buildURI( - { contentName: claimsInChannel[0].name, claimId: claimsInChannel[0].claim_id }, - false - ))); + ); dispatch({ type: ACTIONS.CHECK_SUBSCRIPTION_COMPLETED, -- 2.45.3 From b3ccfc4f19608c55bf851edc8143663d418f3be2 Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Thu, 15 Mar 2018 11:26:09 -0700 Subject: [PATCH 062/192] Add height sorting back in where appropriate --- src/renderer/component/fileList/view.jsx | 30 ++++++++++++++++++-- src/renderer/page/fileListPublished/view.jsx | 1 + 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/renderer/component/fileList/view.jsx b/src/renderer/component/fileList/view.jsx index 7afe8998d..c52dd3fda 100644 --- a/src/renderer/component/fileList/view.jsx +++ b/src/renderer/component/fileList/view.jsx @@ -13,8 +13,34 @@ class FileList extends React.PureComponent { }; this._sortFunctions = { - dateNew: fileInfos => [...fileInfos].reverse(), - dateOld: fileInfos => fileInfos, + dateNew: fileInfos => this.props.sortByHeight ? fileInfos.slice().sort((fileInfo1, fileInfo2) => { + const height1 = this.props.claimsById[fileInfo1.claim_id] + ? this.props.claimsById[fileInfo1.claim_id].height + : 0; + const height2 = this.props.claimsById[fileInfo2.claim_id] + ? this.props.claimsById[fileInfo2.claim_id].height + : 0; + if (height1 > height2) { + return -1; + } else if (height1 < height2) { + return 1; + } + return 0; + }) : [...fileInfos].reverse(), + dateOld: fileInfos => this.props.sortByHeight ? fileInfos.slice().sort((fileInfo1, fileInfo2) => { + const height1 = this.props.claimsById[fileInfo1.claim_id] + ? this.props.claimsById[fileInfo1.claim_id].height + : 999999; + const height2 = this.props.claimsById[fileInfo2.claim_id] + ? this.props.claimsById[fileInfo2.claim_id].height + : 999999; + if (height1 < height2) { + return -1; + } else if (height1 > height2) { + return 1; + } + return 0; + }) : fileInfos, title: fileInfos => fileInfos.slice().sort((fileInfo1, fileInfo2) => { const title1 = fileInfo1.value diff --git a/src/renderer/page/fileListPublished/view.jsx b/src/renderer/page/fileListPublished/view.jsx index de19dd1dd..e7917f67d 100644 --- a/src/renderer/page/fileListPublished/view.jsx +++ b/src/renderer/page/fileListPublished/view.jsx @@ -25,6 +25,7 @@ class FileListPublished extends React.PureComponent { fileInfos={claims} fetching={isFetching} fileTileShowEmpty={FileTile.SHOW_EMPTY_PENDING} + sortByHeight /> ); } else if (isFetching) { -- 2.45.3 From a6ab95105a73885a3ba1a06ed65ff7998bc8b4e1 Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Thu, 15 Mar 2018 11:27:47 -0700 Subject: [PATCH 063/192] Formatted changes via prettier --- src/renderer/component/fileList/view.jsx | 62 +++++++++++++----------- 1 file changed, 34 insertions(+), 28 deletions(-) diff --git a/src/renderer/component/fileList/view.jsx b/src/renderer/component/fileList/view.jsx index c52dd3fda..9c926e825 100644 --- a/src/renderer/component/fileList/view.jsx +++ b/src/renderer/component/fileList/view.jsx @@ -13,34 +13,40 @@ class FileList extends React.PureComponent { }; this._sortFunctions = { - dateNew: fileInfos => this.props.sortByHeight ? fileInfos.slice().sort((fileInfo1, fileInfo2) => { - const height1 = this.props.claimsById[fileInfo1.claim_id] - ? this.props.claimsById[fileInfo1.claim_id].height - : 0; - const height2 = this.props.claimsById[fileInfo2.claim_id] - ? this.props.claimsById[fileInfo2.claim_id].height - : 0; - if (height1 > height2) { - return -1; - } else if (height1 < height2) { - return 1; - } - return 0; - }) : [...fileInfos].reverse(), - dateOld: fileInfos => this.props.sortByHeight ? fileInfos.slice().sort((fileInfo1, fileInfo2) => { - const height1 = this.props.claimsById[fileInfo1.claim_id] - ? this.props.claimsById[fileInfo1.claim_id].height - : 999999; - const height2 = this.props.claimsById[fileInfo2.claim_id] - ? this.props.claimsById[fileInfo2.claim_id].height - : 999999; - if (height1 < height2) { - return -1; - } else if (height1 > height2) { - return 1; - } - return 0; - }) : fileInfos, + dateNew: fileInfos => + this.props.sortByHeight + ? fileInfos.slice().sort((fileInfo1, fileInfo2) => { + const height1 = this.props.claimsById[fileInfo1.claim_id] + ? this.props.claimsById[fileInfo1.claim_id].height + : 0; + const height2 = this.props.claimsById[fileInfo2.claim_id] + ? this.props.claimsById[fileInfo2.claim_id].height + : 0; + if (height1 > height2) { + return -1; + } else if (height1 < height2) { + return 1; + } + return 0; + }) + : [...fileInfos].reverse(), + dateOld: fileInfos => + this.props.sortByHeight + ? fileInfos.slice().sort((fileInfo1, fileInfo2) => { + const height1 = this.props.claimsById[fileInfo1.claim_id] + ? this.props.claimsById[fileInfo1.claim_id].height + : 999999; + const height2 = this.props.claimsById[fileInfo2.claim_id] + ? this.props.claimsById[fileInfo2.claim_id].height + : 999999; + if (height1 < height2) { + return -1; + } else if (height1 > height2) { + return 1; + } + return 0; + }) + : fileInfos, title: fileInfos => fileInfos.slice().sort((fileInfo1, fileInfo2) => { const title1 = fileInfo1.value -- 2.45.3 From d8bc31847a2e620dd19529d853bd4d8ece692732 Mon Sep 17 00:00:00 2001 From: Thomas Zarebczan Date: Thu, 15 Mar 2018 18:00:11 -0400 Subject: [PATCH 064/192] change == to === --- .../component/publishForm/internal/channelSection.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/renderer/component/publishForm/internal/channelSection.jsx b/src/renderer/component/publishForm/internal/channelSection.jsx index 32e390bdb..db0b040b1 100644 --- a/src/renderer/component/publishForm/internal/channelSection.jsx +++ b/src/renderer/component/publishForm/internal/channelSection.jsx @@ -57,12 +57,12 @@ class ChannelSection extends React.PureComponent { return; } - if (newChannelBid == 0) { + if (newChannelBid === 0) { this.refs.newChannelName.showError(__('Bid value must be greater than 0.')); return; } - if (newChannelBid == balance) { + if (newChannelBid === balance) { this.refs.newChannelName.showError(__('Please decrease your bid to account for transaction fees.')); return; -- 2.45.3 From c226a1e6088be2b29c1958be8959f2c88a82a8a4 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Thu, 15 Mar 2018 19:01:01 -0400 Subject: [PATCH 065/192] chore: rename tagged builds destination folder on S3 --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index e723a675a..abe66f445 100644 --- a/.travis.yml +++ b/.travis.yml @@ -47,4 +47,4 @@ addons: paths: - $(git ls-files -o dist/{*.dmg,*.exe,*.deb} | tr "\n" ":") target_paths: - - /app/build-${TRAVIS_BUILD_NUMBER}_commit-${TRAVIS_COMMIT:0:7}$([ ! -z ${TRAVIS_TAG} ] && echo "_tag-${TRAVIS_TAG}") \ No newline at end of file + - /app/build-${TRAVIS_BUILD_NUMBER}_commit-${TRAVIS_COMMIT:0:7}$([ ! -z ${TRAVIS_TAG} ] && echo _tag-${TRAVIS_TAG}) \ No newline at end of file -- 2.45.3 From 98d733239933bc719dc266f749a29297c3be5172 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Thu, 15 Mar 2018 19:02:38 -0400 Subject: [PATCH 066/192] chore: rename name field on package.json back to LBRY --- package.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index a90afe2ea..9040dc8ad 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,11 @@ { - "name": "lbry-app", + "name": "LBRY", "version": "0.21.0-rc.2", "description": "A browser for the LBRY network, a digital marketplace controlled by its users.", + "keywords": [ + "lbry" + ], + "license": "MIT", "homepage": "https://lbry.io/", "bugs": { "url": "https://github.com/lbryio/lbry-app/issues" @@ -26,9 +30,6 @@ "lint": "eslint 'src/**/*.{js,jsx}' --fix", "format": "prettier 'src/**/*.{js,jsx,scss,json}' --write" }, - "keywords": [ - "lbry" - ], "dependencies": { "bluebird": "^3.5.1", "classnames": "^2.2.5", @@ -116,7 +117,6 @@ "node": ">=6", "yarn": "^1.3" }, - "license": "MIT", "lbrySettings": { "lbrynetDaemonVersion": "0.19.0", "lbrynetDaemonUrlTemplate": "https://github.com/lbryio/lbry/releases/download/vDAEMONVER/lbrynet-daemon-vDAEMONVER-OSNAME.zip", -- 2.45.3 From 7f7f09c20601b2f9888186e8499bcc7847ff612d Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Thu, 15 Mar 2018 19:04:15 -0400 Subject: [PATCH 067/192] fix: daemon not killed when migrating app architecture (#1109) Add an option to kill running daemon when it's incompatible with the app version. --- .../modal/modalIncompatibleDaemon/index.js | 8 +++----- .../modal/modalIncompatibleDaemon/view.jsx | 10 ++++++---- src/renderer/redux/actions/app.js | 17 +++++++++++++++++ 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/renderer/modal/modalIncompatibleDaemon/index.js b/src/renderer/modal/modalIncompatibleDaemon/index.js index fda1b57f9..8feed2ca7 100644 --- a/src/renderer/modal/modalIncompatibleDaemon/index.js +++ b/src/renderer/modal/modalIncompatibleDaemon/index.js @@ -1,12 +1,10 @@ -import React from 'react'; import { connect } from 'react-redux'; -import { doQuit, doSkipWrongDaemonNotice } from 'redux/actions/app'; +import { doQuit, doQuitAnyDaemon } from 'redux/actions/app'; import ModalIncompatibleDaemon from './view'; -const select = state => ({}); - const perform = dispatch => ({ quit: () => dispatch(doQuit()), + quitAnyDaemon: () => dispatch(doQuitAnyDaemon()), }); -export default connect(select, perform)(ModalIncompatibleDaemon); +export default connect(null, perform)(ModalIncompatibleDaemon); diff --git a/src/renderer/modal/modalIncompatibleDaemon/view.jsx b/src/renderer/modal/modalIncompatibleDaemon/view.jsx index cfab04ab1..3526ab4e9 100644 --- a/src/renderer/modal/modalIncompatibleDaemon/view.jsx +++ b/src/renderer/modal/modalIncompatibleDaemon/view.jsx @@ -4,15 +4,17 @@ import Link from 'component/link/index'; class ModalIncompatibleDaemon extends React.PureComponent { render() { - const { quit } = this.props; + const { quit, quitAnyDaemon } = this.props; return ( {__( 'This browser is running with an incompatible version of the LBRY protocol and your install must be repaired. ' diff --git a/src/renderer/redux/actions/app.js b/src/renderer/redux/actions/app.js index 6a1f138ba..f9c868baf 100644 --- a/src/renderer/redux/actions/app.js +++ b/src/renderer/redux/actions/app.js @@ -1,3 +1,4 @@ +import { execSync } from 'child_process'; import isDev from 'electron-is-dev'; import Lbry from 'lbry'; import path from 'path'; @@ -329,6 +330,22 @@ export function doQuit() { }; } +export function doQuitAnyDaemon() { + return dispatch => { + try { + if (process.platform === 'win32') { + execSync('taskkill /im lbrynet-daemon.exe /t /f'); + } else { + execSync('pkill lbrynet-daemon'); + } + } catch (error) { + dispatch(doAlertError(`Quitting daemon failed due to: ${error.message}`)); + } finally { + dispatch(doQuit()); + } + }; +} + export function doChangeVolume(volume) { return dispatch => { dispatch({ -- 2.45.3 From 92555e991d6266ddd8ea2e7d3f6fe81013971b7f Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Thu, 15 Mar 2018 19:08:12 -0400 Subject: [PATCH 068/192] chore: bump to 0.21.0-rc.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9040dc8ad..a3efb331b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "LBRY", - "version": "0.21.0-rc.2", + "version": "0.21.0-rc.3", "description": "A browser for the LBRY network, a digital marketplace controlled by its users.", "keywords": [ "lbry" -- 2.45.3 From 6b0249eda9d8933f05bb339b677a034172223e24 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Fri, 16 Mar 2018 11:47:16 -0400 Subject: [PATCH 069/192] fix: auto update on macOS --- electron-builder.json | 1 - 1 file changed, 1 deletion(-) diff --git a/electron-builder.json b/electron-builder.json index 3681e146d..a6a865171 100644 --- a/electron-builder.json +++ b/electron-builder.json @@ -11,7 +11,6 @@ "github" ], "mac": { - "target": "dmg", "category": "public.app-category.entertainment" }, "dmg": { -- 2.45.3 From e75a5581bea29f8598b33cd55521f24df5da70d2 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Fri, 16 Mar 2018 11:58:32 -0400 Subject: [PATCH 070/192] chore: bump to 0.21.0-rc.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a3efb331b..63463db7f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "LBRY", - "version": "0.21.0-rc.3", + "version": "0.21.0-rc.4", "description": "A browser for the LBRY network, a digital marketplace controlled by its users.", "keywords": [ "lbry" -- 2.45.3 From 861131fd774dda6344f607290efdd6bfdf66312d Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Fri, 16 Mar 2018 13:26:39 -0400 Subject: [PATCH 071/192] chore: remove custom artifact name --- electron-builder.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/electron-builder.json b/electron-builder.json index a6a865171..baecbb56e 100644 --- a/electron-builder.json +++ b/electron-builder.json @@ -63,6 +63,5 @@ "nsis": { "perMachine": true }, - "beforeBuild": "./build/checkDaemonPlatform.js", - "artifactName": "${productName}_${version}.${ext}" + "beforeBuild": "./build/checkDaemonPlatform.js" } -- 2.45.3 From 74bab48749783e7b7b287b62b406d1f33e13fb62 Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Fri, 16 Mar 2018 11:22:19 -0700 Subject: [PATCH 072/192] Added api sub logging, sub modal, and immediate download initiation --- src/renderer/analytics.js | 22 ++++++++++++++++-- .../component/subscribeButton/index.js | 2 ++ .../component/subscribeButton/view.jsx | 9 ++++++-- src/renderer/constants/modal_types.js | 1 + .../modal/modalFirstSubscription/index.js | 10 ++++++++ .../modal/modalFirstSubscription/view.jsx | 23 +++++++++++++++++++ src/renderer/modal/modalRouter/view.jsx | 7 ++++-- src/renderer/redux/actions/content.js | 2 +- src/renderer/redux/actions/subscriptions.js | 13 +++++++++-- 9 files changed, 80 insertions(+), 9 deletions(-) create mode 100644 src/renderer/modal/modalFirstSubscription/index.js create mode 100644 src/renderer/modal/modalFirstSubscription/view.jsx diff --git a/src/renderer/analytics.js b/src/renderer/analytics.js index 57d053fc9..f785b3906 100644 --- a/src/renderer/analytics.js +++ b/src/renderer/analytics.js @@ -2,6 +2,8 @@ import mixpanel from 'mixpanel-browser'; import Lbryio from 'lbryio'; import isDev from 'electron-is-dev'; +import type { Subscription } from 'redux/reducers/subscriptions'; + if (isDev) { mixpanel.init('691723e855cabb9d27a7a79002216967'); @@ -13,7 +15,9 @@ type Analytics = { track: (string, ?Object) => void, setUser: Object => void, toggle: (boolean, ?boolean) => void, - apiLog: (string, string, string) => void, + apiLogView: (string, string, string) => void, + apiLogSubscribe: (Subscription) => void, + apiLogUnsubscribe: (Subscription) => void, }; let analyticsEnabled: boolean = false; @@ -44,7 +48,7 @@ const analytics: Analytics = { } analyticsEnabled = enabled; }, - apiLog: (uri: string, outpoint: string, claimId: string): void => { + apiLogView: (uri: string, outpoint: string, claimId: string): void => { if (analyticsEnabled) { Lbryio.call('file', 'view', { uri, @@ -53,6 +57,20 @@ const analytics: Analytics = { }).catch(() => {}); } }, + apiLogSubscribe: (subscription: Subscription): void => { + if (analyticsEnabled) { + Lbryio.call('subscription', 'new', { + subscription + }).catch(() => {}); + } + }, + apiLogUnsubscribe: (subscription: Subscription): void => { + if (analyticsEnabled) { + Lbryio.call('subscription', 'delete', { + subscription + }).catch(() => {}); + } + }, }; export default analytics; diff --git a/src/renderer/component/subscribeButton/index.js b/src/renderer/component/subscribeButton/index.js index 2f5dceb30..6c93bbb65 100644 --- a/src/renderer/component/subscribeButton/index.js +++ b/src/renderer/component/subscribeButton/index.js @@ -1,5 +1,6 @@ import { connect } from 'react-redux'; import { doChannelSubscribe, doChannelUnsubscribe } from 'redux/actions/subscriptions'; +import { doOpenModal } from 'redux/actions/app'; import { selectSubscriptions } from 'redux/selectors/subscriptions'; import SubscribeButton from './view'; @@ -11,4 +12,5 @@ const select = (state, props) => ({ export default connect(select, { doChannelSubscribe, doChannelUnsubscribe, + doOpenModal, })(SubscribeButton); diff --git a/src/renderer/component/subscribeButton/view.jsx b/src/renderer/component/subscribeButton/view.jsx index 216b0bf72..819055eed 100644 --- a/src/renderer/component/subscribeButton/view.jsx +++ b/src/renderer/component/subscribeButton/view.jsx @@ -1,7 +1,8 @@ import React from 'react'; import Link from 'component/link'; +import * as modals from 'constants/modal_types'; -export default ({ channelName, uri, subscriptions, doChannelSubscribe, doChannelUnsubscribe }) => { +export default ({ channelName, uri, subscriptions, doChannelSubscribe, doChannelUnsubscribe, doOpenModal }) => { const isSubscribed = subscriptions.map(subscription => subscription.channelName).indexOf(channelName) !== -1; @@ -15,12 +16,16 @@ export default ({ channelName, uri, subscriptions, doChannelSubscribe, doChannel iconRight={isSubscribed ? '' : 'at'} button={isSubscribed ? 'alt' : 'primary'} label={subscriptionLabel} - onClick={() => + onClick={() => { + if(!subscriptions.length) { + doOpenModal(modals.FIRST_SUBSCRIPTION); + } subscriptionHandler({ channelName, uri, }) } + } />

) : null; diff --git a/src/renderer/constants/modal_types.js b/src/renderer/constants/modal_types.js index a0272b708..0c2e03da1 100644 --- a/src/renderer/constants/modal_types.js +++ b/src/renderer/constants/modal_types.js @@ -16,3 +16,4 @@ export const TRANSACTION_FAILED = 'transaction_failed'; export const REWARD_APPROVAL_REQUIRED = 'reward_approval_required'; export const AFFIRM_PURCHASE = 'affirm_purchase'; export const CONFIRM_CLAIM_REVOKE = 'confirmClaimRevoke'; +export const FIRST_SUBSCRIPTION = 'firstSubscription'; diff --git a/src/renderer/modal/modalFirstSubscription/index.js b/src/renderer/modal/modalFirstSubscription/index.js new file mode 100644 index 000000000..6ae41be50 --- /dev/null +++ b/src/renderer/modal/modalFirstSubscription/index.js @@ -0,0 +1,10 @@ +import React from 'react'; +import { connect } from 'react-redux'; +import { doCloseModal } from 'redux/actions/app'; +import ModalFirstSubscription from './view'; + +const perform = dispatch => () => ({ + closeModal: () => dispatch(doCloseModal()), +}); + +export default connect(null, perform)(ModalFirstSubscription); diff --git a/src/renderer/modal/modalFirstSubscription/view.jsx b/src/renderer/modal/modalFirstSubscription/view.jsx new file mode 100644 index 000000000..d2e17c38c --- /dev/null +++ b/src/renderer/modal/modalFirstSubscription/view.jsx @@ -0,0 +1,23 @@ +import React from 'react'; +import { Modal } from 'modal/modal'; +import Link from 'component/link/index'; + +const ModalFirstSubscription = props => { + const { closeModal } = props; + + return ( + +
+

{__('Your first subscription!')}

+

+ {__('When you subscribe to a channel, you will automatically download, and be notified of, all of its new content.')} +

+
+ +
+
+
+ ); +}; + +export default ModalFirstSubscription; diff --git a/src/renderer/modal/modalRouter/view.jsx b/src/renderer/modal/modalRouter/view.jsx index 341883171..510d49b9d 100644 --- a/src/renderer/modal/modalRouter/view.jsx +++ b/src/renderer/modal/modalRouter/view.jsx @@ -14,8 +14,9 @@ import ModalTransactionFailed from 'modal/modalTransactionFailed'; import ModalFileTimeout from 'modal/modalFileTimeout'; import ModalAffirmPurchase from 'modal/modalAffirmPurchase'; import ModalRevokeClaim from 'modal/modalRevokeClaim'; -import ModalEmailCollection from '../modalEmailCollection'; -import ModalPhoneCollection from '../modalPhoneCollection'; +import ModalEmailCollection from 'modal/modalEmailCollection'; +import ModalPhoneCollection from 'modal/modalPhoneCollection'; +import ModalFirstSubscription from 'modal/modalFirstSubscription'; import * as modals from 'constants/modal_types'; class ModalRouter extends React.PureComponent { @@ -135,6 +136,8 @@ class ModalRouter extends React.PureComponent { return ; case modals.EMAIL_COLLECTION: return ; + case modals.FIRST_SUBSCRIPTION: + return ; default: return null; } diff --git a/src/renderer/redux/actions/content.js b/src/renderer/redux/actions/content.js index 5fd99c23e..146b9b6d5 100644 --- a/src/renderer/redux/actions/content.js +++ b/src/renderer/redux/actions/content.js @@ -228,7 +228,7 @@ export function doDownloadFile(uri, streamInfo) { return dispatch => { dispatch(doStartDownload(uri, streamInfo.outpoint)); - analytics.apiLog(uri, streamInfo.output, streamInfo.claim_id); + analytics.apiLogView(uri, streamInfo.output, streamInfo.claim_id); dispatch(doClaimEligiblePurchaseRewards()); }; diff --git a/src/renderer/redux/actions/subscriptions.js b/src/renderer/redux/actions/subscriptions.js index 8a390987b..02d2b5ea6 100644 --- a/src/renderer/redux/actions/subscriptions.js +++ b/src/renderer/redux/actions/subscriptions.js @@ -6,21 +6,30 @@ import Lbry from 'lbry'; import { doPurchaseUri } from 'redux/actions/content'; import { doNavigate } from 'redux/actions/navigation'; import { buildURI } from 'lbryURI'; +import analytics from 'analytics'; const CHECK_SUBSCRIPTIONS_INTERVAL = 60 * 60 * 1000; -export const doChannelSubscribe = (subscription: Subscription) => (dispatch: Dispatch) => +export const doChannelSubscribe = (subscription: Subscription) => (dispatch: Dispatch) => { dispatch({ type: ACTIONS.CHANNEL_SUBSCRIBE, data: subscription, }); -export const doChannelUnsubscribe = (subscription: Subscription) => (dispatch: Dispatch) => + analytics.apiLogSubscribe(subscription); + + dispatch(doCheckSubscription(subscription, true)); +} + +export const doChannelUnsubscribe = (subscription: Subscription) => (dispatch: Dispatch) => { dispatch({ type: ACTIONS.CHANNEL_UNSUBSCRIBE, data: subscription, }); + analytics.apiLogUnsubscribe(subscription); +} + export const doCheckSubscriptions = () => ( dispatch: Dispatch, getState: () => SubscriptionState -- 2.45.3 From f2f316968bc1a04994a60914c218453bb73e9ddd Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Fri, 16 Mar 2018 11:26:44 -0700 Subject: [PATCH 073/192] Fixed formatting issues --- src/renderer/analytics.js | 9 ++++----- src/renderer/component/subscribeButton/view.jsx | 16 +++++++++++----- .../modal/modalFirstSubscription/view.jsx | 6 ++++-- src/renderer/redux/actions/subscriptions.js | 4 ++-- 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/renderer/analytics.js b/src/renderer/analytics.js index f785b3906..2a03b7428 100644 --- a/src/renderer/analytics.js +++ b/src/renderer/analytics.js @@ -4,7 +4,6 @@ import Lbryio from 'lbryio'; import isDev from 'electron-is-dev'; import type { Subscription } from 'redux/reducers/subscriptions'; - if (isDev) { mixpanel.init('691723e855cabb9d27a7a79002216967'); } else { @@ -16,8 +15,8 @@ type Analytics = { setUser: Object => void, toggle: (boolean, ?boolean) => void, apiLogView: (string, string, string) => void, - apiLogSubscribe: (Subscription) => void, - apiLogUnsubscribe: (Subscription) => void, + apiLogSubscribe: Subscription => void, + apiLogUnsubscribe: Subscription => void, }; let analyticsEnabled: boolean = false; @@ -60,14 +59,14 @@ const analytics: Analytics = { apiLogSubscribe: (subscription: Subscription): void => { if (analyticsEnabled) { Lbryio.call('subscription', 'new', { - subscription + subscription, }).catch(() => {}); } }, apiLogUnsubscribe: (subscription: Subscription): void => { if (analyticsEnabled) { Lbryio.call('subscription', 'delete', { - subscription + subscription, }).catch(() => {}); } }, diff --git a/src/renderer/component/subscribeButton/view.jsx b/src/renderer/component/subscribeButton/view.jsx index 819055eed..bb0d0c146 100644 --- a/src/renderer/component/subscribeButton/view.jsx +++ b/src/renderer/component/subscribeButton/view.jsx @@ -2,7 +2,14 @@ import React from 'react'; import Link from 'component/link'; import * as modals from 'constants/modal_types'; -export default ({ channelName, uri, subscriptions, doChannelSubscribe, doChannelUnsubscribe, doOpenModal }) => { +export default ({ + channelName, + uri, + subscriptions, + doChannelSubscribe, + doChannelUnsubscribe, + doOpenModal, +}) => { const isSubscribed = subscriptions.map(subscription => subscription.channelName).indexOf(channelName) !== -1; @@ -17,15 +24,14 @@ export default ({ channelName, uri, subscriptions, doChannelSubscribe, doChannel button={isSubscribed ? 'alt' : 'primary'} label={subscriptionLabel} onClick={() => { - if(!subscriptions.length) { + if (!subscriptions.length) { doOpenModal(modals.FIRST_SUBSCRIPTION); } subscriptionHandler({ channelName, uri, - }) - } - } + }); + }} />
) : null; diff --git a/src/renderer/modal/modalFirstSubscription/view.jsx b/src/renderer/modal/modalFirstSubscription/view.jsx index d2e17c38c..f489e6277 100644 --- a/src/renderer/modal/modalFirstSubscription/view.jsx +++ b/src/renderer/modal/modalFirstSubscription/view.jsx @@ -10,10 +10,12 @@ const ModalFirstSubscription = props => {

{__('Your first subscription!')}

- {__('When you subscribe to a channel, you will automatically download, and be notified of, all of its new content.')} + {__( + 'When you subscribe to a channel, you will automatically download, and be notified of, all of its new content.' + )}

- +
diff --git a/src/renderer/redux/actions/subscriptions.js b/src/renderer/redux/actions/subscriptions.js index 02d2b5ea6..58269ab40 100644 --- a/src/renderer/redux/actions/subscriptions.js +++ b/src/renderer/redux/actions/subscriptions.js @@ -19,7 +19,7 @@ export const doChannelSubscribe = (subscription: Subscription) => (dispatch: Dis analytics.apiLogSubscribe(subscription); dispatch(doCheckSubscription(subscription, true)); -} +}; export const doChannelUnsubscribe = (subscription: Subscription) => (dispatch: Dispatch) => { dispatch({ @@ -28,7 +28,7 @@ export const doChannelUnsubscribe = (subscription: Subscription) => (dispatch: D }); analytics.apiLogUnsubscribe(subscription); -} +}; export const doCheckSubscriptions = () => ( dispatch: Dispatch, -- 2.45.3 From f74f4fbc229d9bc765b71a82afe3217d62037441 Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Fri, 16 Mar 2018 12:04:22 -0700 Subject: [PATCH 074/192] Updated copy of subscriptions modal --- .../modal/modalFirstSubscription/index.js | 2 ++ .../modal/modalFirstSubscription/view.jsx | 28 +++++++++++++++---- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/renderer/modal/modalFirstSubscription/index.js b/src/renderer/modal/modalFirstSubscription/index.js index 6ae41be50..f507403d9 100644 --- a/src/renderer/modal/modalFirstSubscription/index.js +++ b/src/renderer/modal/modalFirstSubscription/index.js @@ -1,10 +1,12 @@ import React from 'react'; import { connect } from 'react-redux'; import { doCloseModal } from 'redux/actions/app'; +import { doNavigate } from 'redux/actions/navigation'; import ModalFirstSubscription from './view'; const perform = dispatch => () => ({ closeModal: () => dispatch(doCloseModal()), + navigate: path => dispatch(doNavigate(path)), }); export default connect(null, perform)(ModalFirstSubscription); diff --git a/src/renderer/modal/modalFirstSubscription/view.jsx b/src/renderer/modal/modalFirstSubscription/view.jsx index f489e6277..546819fbc 100644 --- a/src/renderer/modal/modalFirstSubscription/view.jsx +++ b/src/renderer/modal/modalFirstSubscription/view.jsx @@ -1,17 +1,35 @@ import React from 'react'; import { Modal } from 'modal/modal'; -import Link from 'component/link/index'; +import Link from 'component/link'; const ModalFirstSubscription = props => { - const { closeModal } = props; + const { closeModal, navigate } = props; return ( - +
-

{__('Your first subscription!')}

+

{__('Subscriptions 101')}

+

{__('You just subscribed to your first channel. Awesome!')}

+

{__('A few quick things to know:')}

+

+ {__('1) You can use the')}{' '} + { + navigate('/subscriptions'); + closeModal(); + }} + />{' '} + {__('to view content across all of your subscribed channels.')} +

{__( - 'When you subscribe to a channel, you will automatically download, and be notified of, all of its new content.' + '2) This app will automatically download new free content from channels you are subscribed to.' + )} +

+

+ {__( + '3) If we have your email address, we may send you notifications and rewards related to new content.' )}

-- 2.45.3 From 32943b667ea09338d440852f59d939a9d34cf826 Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Fri, 16 Mar 2018 12:07:31 -0700 Subject: [PATCH 075/192] Remove unused import --- src/renderer/modal/modalFirstSubscription/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/renderer/modal/modalFirstSubscription/index.js b/src/renderer/modal/modalFirstSubscription/index.js index f507403d9..6c669f79b 100644 --- a/src/renderer/modal/modalFirstSubscription/index.js +++ b/src/renderer/modal/modalFirstSubscription/index.js @@ -1,4 +1,3 @@ -import React from 'react'; import { connect } from 'react-redux'; import { doCloseModal } from 'redux/actions/app'; import { doNavigate } from 'redux/actions/navigation'; -- 2.45.3 From b56982d3b249443ab75843afe80ce90fd3c2cfa7 Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Fri, 16 Mar 2018 13:55:56 -0700 Subject: [PATCH 076/192] Disable rewards when diagnostics are off --- src/renderer/page/rewards/index.js | 2 ++ src/renderer/page/rewards/view.jsx | 18 ++++++++++++++---- src/renderer/page/settings/view.jsx | 5 ++++- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/renderer/page/rewards/index.js b/src/renderer/page/rewards/index.js index e456a1ca2..c0c7c6b64 100644 --- a/src/renderer/page/rewards/index.js +++ b/src/renderer/page/rewards/index.js @@ -4,9 +4,11 @@ import { selectFetchingRewards, selectUnclaimedRewards } from 'redux/selectors/r import { selectUser } from 'redux/selectors/user'; import { doAuthNavigate, doNavigate } from 'redux/actions/navigation'; import { doRewardList } from 'redux/actions/rewards'; +import { selectDaemonSettings } from 'redux/selectors/settings'; import RewardsPage from './view'; const select = (state, props) => ({ + daemonSettings: selectDaemonSettings(state), fetching: selectFetchingRewards(state), rewards: selectUnclaimedRewards(state), user: selectUser(state), diff --git a/src/renderer/page/rewards/view.jsx b/src/renderer/page/rewards/view.jsx index 258d76052..315b83f35 100644 --- a/src/renderer/page/rewards/view.jsx +++ b/src/renderer/page/rewards/view.jsx @@ -29,9 +29,9 @@ class RewardsPage extends React.PureComponent { // } renderPageHeader() { - const { doAuth, navigate, user } = this.props; + const { doAuth, navigate, user, daemonSettings } = this.props; - if (user && !user.is_reward_approved) { + if (user && !user.is_reward_approved && daemonSettings.share_usage_data) { if (!user.primary_email || !user.has_verified_email || !user.is_identity_verified) { return (
@@ -78,9 +78,19 @@ class RewardsPage extends React.PureComponent { } renderUnclaimedRewards() { - const { fetching, rewards, user } = this.props; + const { fetching, rewards, user, daemonSettings } = this.props; - if (fetching) { + if (!daemonSettings.share_usage_data) { + return ( +
+

+ {__( + 'Rewards are currently disabled for your account. Turn on diagnostic data sharing, in Settings, in order to re-enable them.' + )} +

+
+ ); + } else if (fetching) { return (
diff --git a/src/renderer/page/settings/view.jsx b/src/renderer/page/settings/view.jsx index fe704b906..51251311a 100644 --- a/src/renderer/page/settings/view.jsx +++ b/src/renderer/page/settings/view.jsx @@ -309,7 +309,10 @@ class SettingsPage extends React.PureComponent { onChange={this.onShareDataChange.bind(this)} defaultChecked={daemonSettings.share_usage_data} label={__( - 'Help make LBRY better by contributing analytics and diagnostic data and about my usage' + 'Help make LBRY better by contributing analytics and diagnostic data and about my usage.' + )} + helper={__( + 'You will be ineligble to earn rewards while diagnostics are not being shared.' )} />
-- 2.45.3 From 9e32f655b9a50e74f5221d9ad45f07337869e6a0 Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Fri, 16 Mar 2018 14:05:24 -0700 Subject: [PATCH 077/192] Add settings link --- src/renderer/page/rewards/view.jsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/renderer/page/rewards/view.jsx b/src/renderer/page/rewards/view.jsx index 315b83f35..99375faee 100644 --- a/src/renderer/page/rewards/view.jsx +++ b/src/renderer/page/rewards/view.jsx @@ -78,15 +78,17 @@ class RewardsPage extends React.PureComponent { } renderUnclaimedRewards() { - const { fetching, rewards, user, daemonSettings } = this.props; + const { fetching, rewards, user, daemonSettings, navigate } = this.props; if (!daemonSettings.share_usage_data) { return (

{__( - 'Rewards are currently disabled for your account. Turn on diagnostic data sharing, in Settings, in order to re-enable them.' - )} + 'Rewards are currently disabled for your account. Turn on diagnostic data sharing, in' + )}{' '} + navigate('/settings')} label="Settings" /> + {__(', in order to re-enable them.')}

); -- 2.45.3 From 7afe78e46f963e834013af8d62bf6e3af4298203 Mon Sep 17 00:00:00 2001 From: Thomas Zarebczan Date: Fri, 16 Mar 2018 17:13:43 -0400 Subject: [PATCH 078/192] spelling fixes --- src/renderer/page/settings/view.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/renderer/page/settings/view.jsx b/src/renderer/page/settings/view.jsx index 51251311a..f83fc9bc9 100644 --- a/src/renderer/page/settings/view.jsx +++ b/src/renderer/page/settings/view.jsx @@ -309,10 +309,10 @@ class SettingsPage extends React.PureComponent { onChange={this.onShareDataChange.bind(this)} defaultChecked={daemonSettings.share_usage_data} label={__( - 'Help make LBRY better by contributing analytics and diagnostic data and about my usage.' + 'Help make LBRY better by contributing analytics and diagnostic data about my usage.' )} helper={__( - 'You will be ineligble to earn rewards while diagnostics are not being shared.' + 'You will be ineligible to earn rewards while diagnostics are not being shared.' )} />
-- 2.45.3 From 88399957efc772d21e16b167b87da95aa09770bb Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Sat, 17 Mar 2018 16:44:46 -0400 Subject: [PATCH 079/192] fix: app quitting when accepting update (#1118) The app wouldn't completely quit after an update was downloaded and the user has pressed "USE IT NOW". --- src/main/createWindow.js | 2 +- src/main/index.js | 7 ++----- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/main/createWindow.js b/src/main/createWindow.js index ce54fe053..06d222e96 100644 --- a/src/main/createWindow.js +++ b/src/main/createWindow.js @@ -49,7 +49,7 @@ export default appState => { setupContextMenu(window); window.on('close', event => { - if (!appState.isQuitting) { + if (!appState.isQuitting && !appState.autoUpdateAccepted) { event.preventDefault(); window.hide(); } diff --git a/src/main/index.js b/src/main/index.js index 22875c708..a1947739d 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -19,9 +19,6 @@ autoUpdater.autoDownload = true; // it will still install on shutdown. let autoUpdateDownloaded = false; -// Keeps track of whether the user has accepted an auto-update through the interface. -let autoUpdateAccepted = false; - // This is used to keep track of whether we are showing the special dialog // that we show on Windows after you decline an upgrade and close the app later. let showingAutoUpdateCloseAlert = false; @@ -88,7 +85,7 @@ app.on('will-quit', event => { if ( process.platform === 'win32' && autoUpdateDownloaded && - !autoUpdateAccepted && + !appState.autoUpdateAccepted && !showingAutoUpdateCloseAlert ) { // We're on Win and have an update downloaded, but the user declined it (or closed @@ -152,7 +149,7 @@ autoUpdater.on('update-downloaded', () => { }); ipcMain.on('autoUpdateAccepted', () => { - autoUpdateAccepted = true; + appState.autoUpdateAccepted = true; autoUpdater.quitAndInstall(); }); -- 2.45.3 From f50a0b7644438b41ebcff002a1874c32da8b0347 Mon Sep 17 00:00:00 2001 From: Thomas Zarebczan Date: Mon, 19 Mar 2018 15:46:45 -0400 Subject: [PATCH 080/192] add #1105 to changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 98703d571..b1eae8352 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/). * Do not kill an existing daemon, instead check if one exists ([#973](https://github.com/lbryio/lbry-app/pull/973)) * Enable play button immediately after user clicks download ([#987](https://github.com/lbryio/lbry-app/pull/987)) * Significantly improved search performance ([#1032](https://github.com/lbryio/lbry-app/pull/1032)) + * Allow editing of claims when bid is greater than current balance ([1105](https://github.com/lbryio/lbry-app/pull/1105)) ### Fixed * Fixed sort by date of published content ([#986](https://github.com/lbryio/lbry-app/issues/986)) -- 2.45.3 From 034398859e2316d58648fc6a0073c22cd0144d25 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Mon, 19 Mar 2018 15:57:42 -0400 Subject: [PATCH 081/192] fix: daemon doesn't quit when quitting the app for an auto-update (https://github.com/lbryio/lbry-app/issues/1142) Fix https://github.com/lbryio/lbry-app/issues/1142 --- src/main/index.js | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/src/main/index.js b/src/main/index.js index a1947739d..d2c30e2b0 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -14,15 +14,6 @@ import createWindow from './createWindow'; autoUpdater.autoDownload = true; -// This is set to true if an auto update has been downloaded through the Electron -// auto-update system and is ready to install. If the user declined an update earlier, -// it will still install on shutdown. -let autoUpdateDownloaded = false; - -// This is used to keep track of whether we are showing the special dialog -// that we show on Windows after you decline an upgrade and close the app later. -let showingAutoUpdateCloseAlert = false; - // Keep a global reference, if you don't, they will be closed automatically when the JavaScript // object is garbage collected. let rendererWindow; @@ -84,16 +75,16 @@ app.on('activate', () => { app.on('will-quit', event => { if ( process.platform === 'win32' && - autoUpdateDownloaded && + appState.autoUpdateDownloaded && !appState.autoUpdateAccepted && - !showingAutoUpdateCloseAlert + !appState.showingAutoUpdateCloseAlert ) { - // We're on Win and have an update downloaded, but the user declined it (or closed + // We're on Win and have an update downloaded, but the user postponed it (or closed // the app without accepting it). Now the user is closing the app, so the new update // will install. On Mac this is silent, but on Windows they get a confusing permission // escalation dialog, so we show Windows users a warning dialog first. - showingAutoUpdateCloseAlert = true; + appState.showingAutoUpdateCloseAlert = true; dialog.showMessageBox( { type: 'info', @@ -126,6 +117,9 @@ app.on('will-finish-launching', () => { app.on('before-quit', () => { appState.isQuitting = true; + if (appState.autoUpdateAccepted) { + if (daemon) daemon.quit(); + } }); ipcMain.on('upgrade', (event, installerPath) => { @@ -145,7 +139,7 @@ ipcMain.on('upgrade', (event, installerPath) => { }); autoUpdater.on('update-downloaded', () => { - autoUpdateDownloaded = true; + appState.autoUpdateDownloaded = true; }); ipcMain.on('autoUpdateAccepted', () => { -- 2.45.3 From e6e82180954cd55371e50edac03c090cd0160d2a Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Mon, 19 Mar 2018 16:51:57 -0400 Subject: [PATCH 082/192] fix: error when clicking LBRY URL when app is closed (https://github.com/lbryio/lbry-app/issues/1119) Fix https://github.com/lbryio/lbry-app/issues/1119 --- src/main/createWindow.js | 2 ++ src/main/index.js | 9 +++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/createWindow.js b/src/main/createWindow.js index 06d222e96..57d459452 100644 --- a/src/main/createWindow.js +++ b/src/main/createWindow.js @@ -43,6 +43,8 @@ export default appState => { // - In a URI with a claim ID, like lbry://channel#claimid, Windows interprets the hash mark as // an anchor and converts it to lbry://channel/#claimid. We remove the slash here as well. deepLinkingURI = process.argv[1].replace(/\/$/, '').replace('/#', '#'); + } else if (process.platform === 'darwin') { + deepLinkingURI = appState.macDeepLinkingURI; } setupBarMenu(); diff --git a/src/main/index.js b/src/main/index.js index d2c30e2b0..13381fc1c 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -110,8 +110,13 @@ app.on('will-finish-launching', () => { // Protocol handler for macOS app.on('open-url', (event, URL) => { event.preventDefault(); - rendererWindow.webContents.send('open-uri-requested', URL); - rendererWindow.show(); + + if (rendererWindow) { + rendererWindow.webContents.send('open-uri-requested', URL); + rendererWindow.show(); + } else { + appState.macDeepLinkingURI = URL; + } }); }); -- 2.45.3 From bf3ed1f28ef22423375bed4dbafdb1cf3fd1a223 Mon Sep 17 00:00:00 2001 From: Thomas Zarebczan Date: Mon, 19 Mar 2018 18:48:22 -0400 Subject: [PATCH 083/192] Include updated channels in results Channels may be updated with new bids and will appear as "update" in channel_list. This would also occur if claims were sent from one user to another (i.e. us transferring a channel to a youtuber). --- src/renderer/redux/reducers/claims.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/redux/reducers/claims.js b/src/renderer/redux/reducers/claims.js index 5078bfccc..a96cec487 100644 --- a/src/renderer/redux/reducers/claims.js +++ b/src/renderer/redux/reducers/claims.js @@ -43,7 +43,7 @@ reducers[ACTIONS.FETCH_CLAIM_LIST_MINE_COMPLETED] = (state, action) => { const byId = Object.assign({}, state.byId); const pendingById = Object.assign({}, state.pendingById); - claims.filter(claim => claim.category && claim.category.match(/claim/)).forEach(claim => { + claims.filter(claim => claim.category && (claim.category.match(/claim/) || claim.category.match(/update/))).forEach(claim => { byId[claim.claim_id] = claim; const pending = Object.values(pendingById).find( -- 2.45.3 From 5579a12cf3de461850c50eac16fe99ed07be4dc5 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Mon, 19 Mar 2018 19:03:14 -0400 Subject: [PATCH 084/192] fix: opening LBRY hyperlinks broken on Linux (https://github.com/lbryio/lbry-app/issues/1120) This fixes https://github.com/lbryio/lbry-app/issues/1120 --- electron-builder.json | 3 ++- src/main/createWindow.js | 13 +++++++++---- src/main/index.js | 22 ++++++++++++++++------ 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/electron-builder.json b/electron-builder.json index baecbb56e..0addff49a 100644 --- a/electron-builder.json +++ b/electron-builder.json @@ -46,7 +46,8 @@ "target": "deb", "category": "AudioVideo;Video", "desktop": { - "MimeType": "x-scheme-handler/lbry;" + "MimeType": "x-scheme-handler/lbry", + "Exec": "/opt/LBRY/lbry %U" } }, "deb": { diff --git a/src/main/createWindow.js b/src/main/createWindow.js index 57d459452..27af06c38 100644 --- a/src/main/createWindow.js +++ b/src/main/createWindow.js @@ -33,8 +33,11 @@ export default appState => { window.loadURL(rendererURL); let deepLinkingURI; - // Protocol handler for win32 - if (process.platform === 'win32' && String(process.argv[1]).startsWith('lbry')) { + if ( + (process.platform === 'win32' || process.platform === 'linux') && + String(process.argv[1]).startsWith('lbry') + ) { + [, deepLinkingURI] = process.argv; // Keep only command line / deep linked arguments // Windows normalizes URIs when they're passed in from other apps. On Windows, this tries to // restore the original URI that was typed. @@ -42,8 +45,10 @@ export default appState => { // path, so we just strip it off. // - In a URI with a claim ID, like lbry://channel#claimid, Windows interprets the hash mark as // an anchor and converts it to lbry://channel/#claimid. We remove the slash here as well. - deepLinkingURI = process.argv[1].replace(/\/$/, '').replace('/#', '#'); - } else if (process.platform === 'darwin') { + if (process.platform === 'win32') { + deepLinkingURI = deepLinkingURI.replace(/\/$/, '').replace('/#', '#'); + } + } else { deepLinkingURI = appState.macDeepLinkingURI; } diff --git a/src/main/index.js b/src/main/index.js index 13381fc1c..8b125042c 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -218,16 +218,26 @@ process.on('uncaughtException', error => { // Force single instance application const isSecondInstance = app.makeSingleInstance(argv => { - // Protocol handler for win32 - // argv: An array of the second instance’s (command line / deep linked) arguments + if ( + (process.platform === 'win32' || process.platform === 'linux') && + String(argv[1]).startsWith('lbry') + ) { + let URI = argv[1]; - let URI; - if (process.platform === 'win32' && String(argv[1]).startsWith('lbry')) { // Keep only command line / deep linked arguments - URI = argv[1].replace(/\/$/, '').replace('/#', '#'); + // Windows normalizes URIs when they're passed in from other apps. On Windows, this tries to + // restore the original URI that was typed. + // - If the URI has no path, Windows adds a trailing slash. LBRY URIs can't have a slash with no + // path, so we just strip it off. + // - In a URI with a claim ID, like lbry://channel#claimid, Windows interprets the hash mark as + // an anchor and converts it to lbry://channel/#claimid. We remove the slash here as well. + if (process.platform === 'win32') { + URI = URI.replace(/\/$/, '').replace('/#', '#'); + } + + rendererWindow.webContents.send('open-uri-requested', URI); } - rendererWindow.webContents.send('open-uri-requested', URI); rendererWindow.show(); }); -- 2.45.3 From 0271311bca4f25204f1e1eee5737c9a1c6af811e Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Mon, 19 Mar 2018 21:09:36 -0400 Subject: [PATCH 085/192] feat: add error console logging for auto-update --- src/renderer/index.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/renderer/index.js b/src/renderer/index.js index d75505200..983f611ef 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -4,7 +4,6 @@ import SnackBar from 'component/snackBar'; import SplashScreen from 'component/splash'; import * as ACTIONS from 'constants/action_types'; import { ipcRenderer, remote, shell } from 'electron'; -import lbry from 'lbry'; import React from 'react'; import ReactDOM from 'react-dom'; import { Provider } from 'react-redux'; @@ -100,6 +99,10 @@ const init = () => { app.store.dispatch(doAutoUpdate()); }); + autoUpdater.on('error', (error) => { + console.error(error.message) + }); + if (['win32', 'darwin'].includes(process.platform)) { autoUpdater.on('update-available', () => { console.log('Update available'); -- 2.45.3 From 40a6ad0e1ca613b0273e588e83448fbd4a55244b Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Mon, 19 Mar 2018 21:09:48 -0400 Subject: [PATCH 086/192] Revert "fix: daemon doesn't quit when quitting the app for an auto-update (https://github.com/lbryio/lbry-app/issues/1142)" This reverts commit 034398859e2316d58648fc6a0073c22cd0144d25. --- src/main/index.js | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/main/index.js b/src/main/index.js index 8b125042c..4f7e9dcdf 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -14,6 +14,15 @@ import createWindow from './createWindow'; autoUpdater.autoDownload = true; +// This is set to true if an auto update has been downloaded through the Electron +// auto-update system and is ready to install. If the user declined an update earlier, +// it will still install on shutdown. +let autoUpdateDownloaded = false; + +// This is used to keep track of whether we are showing the special dialog +// that we show on Windows after you decline an upgrade and close the app later. +let showingAutoUpdateCloseAlert = false; + // Keep a global reference, if you don't, they will be closed automatically when the JavaScript // object is garbage collected. let rendererWindow; @@ -75,16 +84,16 @@ app.on('activate', () => { app.on('will-quit', event => { if ( process.platform === 'win32' && - appState.autoUpdateDownloaded && + autoUpdateDownloaded && !appState.autoUpdateAccepted && - !appState.showingAutoUpdateCloseAlert + !showingAutoUpdateCloseAlert ) { - // We're on Win and have an update downloaded, but the user postponed it (or closed + // We're on Win and have an update downloaded, but the user declined it (or closed // the app without accepting it). Now the user is closing the app, so the new update // will install. On Mac this is silent, but on Windows they get a confusing permission // escalation dialog, so we show Windows users a warning dialog first. - appState.showingAutoUpdateCloseAlert = true; + showingAutoUpdateCloseAlert = true; dialog.showMessageBox( { type: 'info', @@ -122,9 +131,6 @@ app.on('will-finish-launching', () => { app.on('before-quit', () => { appState.isQuitting = true; - if (appState.autoUpdateAccepted) { - if (daemon) daemon.quit(); - } }); ipcMain.on('upgrade', (event, installerPath) => { @@ -144,7 +150,7 @@ ipcMain.on('upgrade', (event, installerPath) => { }); autoUpdater.on('update-downloaded', () => { - appState.autoUpdateDownloaded = true; + autoUpdateDownloaded = true; }); ipcMain.on('autoUpdateAccepted', () => { -- 2.45.3 From 07ee6b95b1ce8f29fcdf7d3901971d3d07a4d119 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Tue, 20 Mar 2018 15:01:18 -0400 Subject: [PATCH 087/192] fix: daemon doesn't quit when quitting the app for an auto-update (https://github.com/lbryio/lbry-app/issues/1142) This fixes https://github.com/lbryio/lbry-app/issues/1142 --- src/main/index.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/index.js b/src/main/index.js index 4f7e9dcdf..a456fcd5a 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -65,8 +65,8 @@ app.on('ready', async () => { 'For more information please visit: \n' + 'https://lbry.io/faq/startup-troubleshooting' ); - app.quit(); } + app.quit(); }); daemon.launch(); } @@ -111,7 +111,10 @@ app.on('will-quit', event => { } appState.isQuitting = true; - if (daemon) daemon.quit(); + if (daemon) { + daemon.quit(); + event.preventDefault(); + } }); // https://electronjs.org/docs/api/app#event-will-finish-launching -- 2.45.3 From a15192db030a0ed209ae795392f9594dabfc9ced Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Tue, 20 Mar 2018 15:47:43 -0400 Subject: [PATCH 088/192] chore: add changelog entries --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 98703d571..e53c5892c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,6 +33,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/). * Fix right click bug ([#928](https://github.com/lbryio/lbry-app/pull/928)) * Fix Election linting errors ([#929](https://github.com/lbryio/lbry-app/pull/929)) * App will no longer reset when minimizing to tray ([#1042](https://github.com/lbryio/lbry-app/pull/1042)) + * Error when clicking LBRY URLs when app is closed on macOS ([#1119](https://github.com/lbryio/lbry-app/issues/1119)) + * LBRY URLs not working on Linux ([#1120](https://github.com/lbryio/lbry-app/issues/1120)) ### Deprecated * -- 2.45.3 From 8267a5caea027e4de08409a3ed457e9cbf302e21 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Tue, 20 Mar 2018 15:49:08 -0400 Subject: [PATCH 089/192] chore: suppress no-console ESLint rule Suppresses this rule until logging framework integrated. --- src/renderer/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/renderer/index.js b/src/renderer/index.js index 983f611ef..1b395f3ad 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -100,6 +100,7 @@ const init = () => { }); autoUpdater.on('error', (error) => { + // eslint-disable-next-line no-console console.error(error.message) }); -- 2.45.3 From f5a63479e3f47b0a4f4e2fca0d9ab1ec62d2bc1c Mon Sep 17 00:00:00 2001 From: Thomas Zarebczan Date: Tue, 20 Mar 2018 15:51:28 -0400 Subject: [PATCH 090/192] chore: fix Windows notifications (#1145) --- CHANGELOG.md | 1 + package.json | 3 +++ src/main/index.js | 1 + 3 files changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b1eae8352..ced873f51 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,6 +34,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/). * Fix right click bug ([#928](https://github.com/lbryio/lbry-app/pull/928)) * Fix Election linting errors ([#929](https://github.com/lbryio/lbry-app/pull/929)) * App will no longer reset when minimizing to tray ([#1042](https://github.com/lbryio/lbry-app/pull/1042)) + * Fix Windows notifications not showing ([1145](https://github.com/lbryio/lbry-app/pull/1145)) ### Deprecated * diff --git a/package.json b/package.json index 63463db7f..042a3175e 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,9 @@ "keywords": [ "lbry" ], + "build": { + "appId": "io.lbry.LBRY" + }, "license": "MIT", "homepage": "https://lbry.io/", "bugs": { diff --git a/src/main/index.js b/src/main/index.js index a1947739d..dc3c47201 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -50,6 +50,7 @@ const installExtensions = async () => { app.setAsDefaultProtocolClient('lbry'); app.setName('LBRY'); +app.setAppUserModelId('io.lbry.LBRY'); app.on('ready', async () => { const processList = await findProcess('name', 'lbrynet-daemon'); -- 2.45.3 From 8ad50d5165a27e3ca19f4cc3f69cf07586954c5f Mon Sep 17 00:00:00 2001 From: Thomas Zarebczan Date: Tue, 20 Mar 2018 16:07:27 -0400 Subject: [PATCH 091/192] chore: update app to use daemon 0.19.1 (#1146) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 042a3175e..932e73a11 100644 --- a/package.json +++ b/package.json @@ -121,7 +121,7 @@ "yarn": "^1.3" }, "lbrySettings": { - "lbrynetDaemonVersion": "0.19.0", + "lbrynetDaemonVersion": "0.19.1", "lbrynetDaemonUrlTemplate": "https://github.com/lbryio/lbry/releases/download/vDAEMONVER/lbrynet-daemon-vDAEMONVER-OSNAME.zip", "lbrynetDaemonDir": "static/daemon", "lbrynetDaemonFileName": "lbrynet-daemon" -- 2.45.3 From 01e6c297ff54c6a9b0767518b23aeb5696b00249 Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Tue, 20 Mar 2018 13:38:50 -0700 Subject: [PATCH 092/192] feat: add YouTube rewards (#1147) --- CHANGELOG.md | 1 + src/renderer/rewards.js | 3 +++ 2 files changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 309650b70..97fef3aaf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/). * Notifications when the channel a user subscribes to uploads new content ([#1066](https://github.com/lbryio/lbry-app/pull/1066)) * Codacy support for Github contributions ([#1059](https://github.com/lbryio/lbry-app/pull/1059)) * App category for Linux ([#877](https://github.com/lbryio/lbry-app/pull/877)) + * Add YouTube Sync reward ([1147](https://github.com/lbryio/lbry-app/pull/1147)) ### Changed * Improved privacy by allowing users to turn off the file view counter and better understand privacy settings ([#1074](https://github.com/lbryio/lbry-app/pull/1074)) diff --git a/src/renderer/rewards.js b/src/renderer/rewards.js index 84dde2477..5ab76455d 100644 --- a/src/renderer/rewards.js +++ b/src/renderer/rewards.js @@ -13,6 +13,7 @@ function rewardMessage(type, amount) { first_publish: __('You earned %s LBC for making your first publication.', amount), featured_download: __('You earned %s LBC for watching a featured download.', amount), referral: __('You earned %s LBC for referring someone.', amount), + youtube_creator: __('You earned %s LBC for syncing your YouTube channel.', amount), }[type]; } @@ -27,6 +28,7 @@ rewards.TYPE_MANY_DOWNLOADS = 'many_downloads'; rewards.TYPE_FIRST_PUBLISH = 'first_publish'; rewards.TYPE_FEATURED_DOWNLOAD = 'featured_download'; rewards.TYPE_REFERRAL = 'referral'; +rewards.YOUTUBE_CREATOR = 'youtube_creator'; rewards.SORT_ORDER = [ rewards.TYPE_NEW_USER, rewards.TYPE_CONFIRM_EMAIL, @@ -37,6 +39,7 @@ rewards.SORT_ORDER = [ rewards.TYPE_MANY_DOWNLOADS, rewards.TYPE_REFERRAL, rewards.TYPE_NEW_DEVELOPER, + rewards.YOUTUBE_CREATOR ]; rewards.claimReward = type => { -- 2.45.3 From 083150dd342b6583367e09b9af5a3c67ea523090 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Tue, 20 Mar 2018 16:47:12 -0400 Subject: [PATCH 093/192] chore: bump version to 0.21.1-rc.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 932e73a11..84f34260f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "LBRY", - "version": "0.21.0-rc.4", + "version": "0.21.1-rc.1", "description": "A browser for the LBRY network, a digital marketplace controlled by its users.", "keywords": [ "lbry" -- 2.45.3 From 5859ebf62d061311daa00a09b72b789d8dd50794 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Tue, 20 Mar 2018 17:08:13 -0400 Subject: [PATCH 094/192] chore: bump version to 0.21.1-rc.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 84f34260f..82b0f4469 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "LBRY", - "version": "0.21.1-rc.1", + "version": "0.21.1-rc.2", "description": "A browser for the LBRY network, a digital marketplace controlled by its users.", "keywords": [ "lbry" -- 2.45.3 From 07f87d67a9e6e0b565785d582b5b064a6ef00927 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Tue, 20 Mar 2018 17:36:28 -0400 Subject: [PATCH 095/192] fix: electron-builder configuration error --- package.json | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/package.json b/package.json index 82b0f4469..274b0e83a 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,10 @@ { "name": "LBRY", - "version": "0.21.1-rc.2", + "version": "0.21.1-rc.2", "description": "A browser for the LBRY network, a digital marketplace controlled by its users.", "keywords": [ "lbry" ], - "build": { - "appId": "io.lbry.LBRY" - }, "license": "MIT", "homepage": "https://lbry.io/", "bugs": { -- 2.45.3 From 57fb66b2c78ffac1d6438b02e7c92dd60b4a624c Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Tue, 20 Mar 2018 17:48:14 -0400 Subject: [PATCH 096/192] chore: bump version to 0.21.1-rc.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 274b0e83a..137cb6d82 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "LBRY", - "version": "0.21.1-rc.2", + "version": "0.21.1-rc.3", "description": "A browser for the LBRY network, a digital marketplace controlled by its users.", "keywords": [ "lbry" -- 2.45.3 From c1b690cdf9667bfe7024fd389260cc9411088527 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Tue, 20 Mar 2018 18:00:13 -0400 Subject: [PATCH 097/192] chore: bump version to 0.21.1-rc.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 137cb6d82..4bcbf6a9b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "LBRY", - "version": "0.21.1-rc.3", + "version": "0.21.1-rc.4", "description": "A browser for the LBRY network, a digital marketplace controlled by its users.", "keywords": [ "lbry" -- 2.45.3 From 8c0fdf2eef17bc6638cc569d6db36e8bb53f3344 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Tue, 20 Mar 2018 19:16:03 -0400 Subject: [PATCH 098/192] chore: use custom artifact name --- electron-builder.json | 1 + 1 file changed, 1 insertion(+) diff --git a/electron-builder.json b/electron-builder.json index 0addff49a..b7cfaa611 100644 --- a/electron-builder.json +++ b/electron-builder.json @@ -64,5 +64,6 @@ "nsis": { "perMachine": true }, + "artifactName": "${productName}_${version}", "beforeBuild": "./build/checkDaemonPlatform.js" } -- 2.45.3 From 262dd8f5a1889d7131438e068a0dbd28f7194f01 Mon Sep 17 00:00:00 2001 From: Thomas Zarebczan Date: Tue, 20 Mar 2018 20:41:02 -0400 Subject: [PATCH 099/192] add protocol update information --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 97fef3aaf..8990be581 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/). * Add YouTube Sync reward ([1147](https://github.com/lbryio/lbry-app/pull/1147)) ### Changed + * Update LBRY Protocol to 0.19.1 (See change log for [0.19.0](https://github.com/lbryio/lbry/releases/tag/v0.19.0) and [0.19.1](https://github.com/lbryio/lbry/releases/tag/v0.19.1)) * Improved privacy by allowing users to turn off the file view counter and better understand privacy settings ([#1074](https://github.com/lbryio/lbry-app/pull/1074)) * Disabled auto dark mode if dark mode is selected ([#1006](https://github.com/lbryio/lbry-app/pull/1006)) * Refactor Electron's main process ([#951](https://github.com/lbryio/lbry-app/pull/951)) -- 2.45.3 From b0cc40f0452b47dcb795bc273956389e4e7b1c6f Mon Sep 17 00:00:00 2001 From: miikkatu Date: Wed, 21 Mar 2018 15:29:51 +0200 Subject: [PATCH 100/192] feat: retain previous screen sizing on startup (#1057) --- CHANGELOG.md | 1 + package.json | 3 ++- src/main/createWindow.js | 24 ++++++++++++++++++++++-- yarn.lock | 10 +++++++++- 4 files changed, 34 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8990be581..cc52d8cff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/). * Codacy support for Github contributions ([#1059](https://github.com/lbryio/lbry-app/pull/1059)) * App category for Linux ([#877](https://github.com/lbryio/lbry-app/pull/877)) * Add YouTube Sync reward ([1147](https://github.com/lbryio/lbry-app/pull/1147)) + * Retain previous screen sizing on startup ([#338](https://github.com/lbryio/lbry-app/issues/338)) ### Changed * Update LBRY Protocol to 0.19.1 (See change log for [0.19.0](https://github.com/lbryio/lbry/releases/tag/v0.19.0) and [0.19.1](https://github.com/lbryio/lbry/releases/tag/v0.19.1)) diff --git a/package.json b/package.json index 4bcbf6a9b..52902273f 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "electron-log": "^2.2.12", "electron-publisher-s3": "^20.2.0", "electron-updater": "^2.21.0", + "electron-window-state": "^4.1.1", "find-process": "^1.1.0", "formik": "^0.10.4", "from2": "^2.3.0", @@ -123,4 +124,4 @@ "lbrynetDaemonDir": "static/daemon", "lbrynetDaemonFileName": "lbrynet-daemon" } -} +} \ No newline at end of file diff --git a/src/main/createWindow.js b/src/main/createWindow.js index 27af06c38..afdfe5d65 100644 --- a/src/main/createWindow.js +++ b/src/main/createWindow.js @@ -1,15 +1,32 @@ -import { app, BrowserWindow, dialog } from 'electron'; +import { app, BrowserWindow, dialog, screen } from 'electron'; import isDev from 'electron-is-dev'; +import windowStateKeeper from 'electron-window-state'; + import setupBarMenu from './menu/setupBarMenu'; import setupContextMenu from './menu/setupContextMenu'; export default appState => { + // Get primary display dimensions from Electron. + const { width, height } = screen.getPrimaryDisplay().workAreaSize; + + // Load the previous state with fallback to defaults. + const windowState = windowStateKeeper({ + defaultWidth: width, + defaultHeight: height, + }); + let windowConfiguration = { backgroundColor: '#155B4A', minWidth: 800, minHeight: 600, autoHideMenuBar: true, show: false, + // Create the window using the state information. + x: windowState.x, + y: windowState.y, + // If state is undefined, create window as maximized. + width: windowState.width === undefined ? width : windowState.width, + height: windowState.height === undefined ? height : windowState.height, }; // Disable renderer process's webSecurity on development to enable CORS. @@ -28,7 +45,10 @@ export default appState => { let window = new BrowserWindow(windowConfiguration); - window.maximize(); + // Let us register listeners on the window, so we can update the state + // automatically (the listeners will be removed when the window is closed) + // and restore the maximized or full screen state. + windowState.manage(window); window.loadURL(rendererURL); diff --git a/yarn.lock b/yarn.lock index f546b55ab..957d3991b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3106,6 +3106,14 @@ electron-webpack@^1.13.0: webpack-merge "^4.1.1" yargs "^11.0.0" +electron-window-state@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/electron-window-state/-/electron-window-state-4.1.1.tgz#6b34fdc31b38514dfec8b7c8f7b5d4addb67632d" + dependencies: + deep-equal "^1.0.1" + jsonfile "^2.2.3" + mkdirp "^0.5.1" + electron@1.7.12: version "1.7.12" resolved "https://registry.yarnpkg.com/electron/-/electron-1.7.12.tgz#dcc61a2c1b0c3df25f68b3425379a01abd01190e" @@ -5640,7 +5648,7 @@ json5@^0.5.0, json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" -jsonfile@^2.1.0: +jsonfile@^2.1.0, jsonfile@^2.2.3: version "2.4.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" optionalDependencies: -- 2.45.3 From cc62938e7b865c2baff954243a3fe5fa952aa91b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Wed, 21 Mar 2018 09:40:12 -0400 Subject: [PATCH 101/192] build: bump source-map-support from 0.5.0 to 0.5.4 (#1138) Bumps [source-map-support](https://github.com/evanw/node-source-map-support) from 0.5.0 to 0.5.4. - [Release notes](https://github.com/evanw/node-source-map-support/releases) - [Commits](https://github.com/evanw/node-source-map-support/compare/v0.5.0...v0.5.4) Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 23 ++++------------------- 2 files changed, 5 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index 52902273f..c9a0710c4 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "reselect": "^3.0.0", "semver": "^5.3.0", "shapeshift.io": "^1.3.1", - "source-map-support": "^0.5.0", + "source-map-support": "^0.5.4", "tree-kill": "^1.1.0", "y18n": "^4.0.0" }, diff --git a/yarn.lock b/yarn.lock index 957d3991b..9467075af 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7997,7 +7997,7 @@ rc-progress@^2.0.6: babel-runtime "6.x" prop-types "^15.5.8" -rc@^1.0.1, rc@^1.1.6, rc@^1.1.7, rc@^1.2.1: +rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@^1.1.7, rc@^1.2.1: version "1.2.5" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.5.tgz#275cd687f6e3b36cc756baa26dfee80a790301fd" dependencies: @@ -8006,15 +8006,6 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.1.7, rc@^1.2.1: minimist "^1.2.0" strip-json-comments "~2.0.1" -rc@^1.1.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077" - dependencies: - deep-extend "~0.4.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - react-addons-create-fragment@^15.0.0: version "15.6.2" resolved "https://registry.yarnpkg.com/react-addons-create-fragment/-/react-addons-create-fragment-15.6.2.tgz#a394de7c2c7becd6b5475ba1b97ac472ce7c74f8" @@ -9058,15 +9049,9 @@ source-map-support@^0.4.15: dependencies: source-map "^0.5.6" -source-map-support@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.0.tgz#2018a7ad2bdf8faf2691e5fddab26bed5a2bacab" - dependencies: - source-map "^0.6.0" - -source-map-support@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.3.tgz#2b3d5fff298cfa4d1afd7d4352d569e9a0158e76" +source-map-support@^0.5.0, source-map-support@^0.5.3, source-map-support@^0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.4.tgz#54456efa89caa9270af7cd624cc2f123e51fbae8" dependencies: source-map "^0.6.0" -- 2.45.3 From 931aa11606be88a479046888d7c53b47ece93234 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Wed, 21 Mar 2018 10:05:37 -0400 Subject: [PATCH 102/192] build: bump eslint from 4.18.2 to 4.19.0 (#1137) Bumps [eslint](https://github.com/eslint/eslint) from 4.18.2 to 4.19.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v4.18.2...v4.19.0) Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index c9a0710c4..762bdd98f 100644 --- a/package.json +++ b/package.json @@ -90,7 +90,7 @@ "electron-builder": "^20.5.1", "electron-devtools-installer": "^2.2.3", "electron-webpack": "^1.13.0", - "eslint": "^4.18.2", + "eslint": "^4.19.0", "eslint-config-airbnb": "^16.1.0", "eslint-config-prettier": "^2.9.0", "eslint-import-resolver-webpack": "^0.8.4", diff --git a/yarn.lock b/yarn.lock index 9467075af..f2d95dcc8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3465,9 +3465,9 @@ eslint-visitor-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" -eslint@^4.18.2: - version "4.18.2" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.18.2.tgz#0f81267ad1012e7d2051e186a9004cc2267b8d45" +eslint@^4.19.0: + version "4.19.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.0.tgz#9e900efb5506812ac374557034ef6f5c3642fc4c" dependencies: ajv "^5.3.0" babel-code-frame "^6.22.0" @@ -3478,7 +3478,7 @@ eslint@^4.18.2: doctrine "^2.1.0" eslint-scope "^3.7.1" eslint-visitor-keys "^1.0.0" - espree "^3.5.2" + espree "^3.5.4" esquery "^1.0.0" esutils "^2.0.2" file-entry-cache "^2.0.0" @@ -3500,6 +3500,7 @@ eslint@^4.18.2: path-is-inside "^1.0.2" pluralize "^7.0.0" progress "^2.0.0" + regexpp "^1.0.1" require-uncached "^1.0.3" semver "^5.3.0" strip-ansi "^4.0.0" @@ -3511,7 +3512,7 @@ esmangle-evaluator@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/esmangle-evaluator/-/esmangle-evaluator-1.0.1.tgz#620d866ef4861b3311f75766d52a8572bb3c6336" -espree@^3.5.2: +espree@^3.5.4: version "3.5.4" resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" dependencies: @@ -8352,6 +8353,10 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexpp@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.0.1.tgz#d857c3a741dce075c2848dcb019a0a975b190d43" + regexpu-core@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" -- 2.45.3 From 18fdd4f5194f68b7d7908c99089bc633319d39f0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Wed, 21 Mar 2018 12:47:00 -0400 Subject: [PATCH 103/192] build: bump react-paginate from 5.0.0 to 5.2.1 (#1155) Bumps [react-paginate](https://github.com/AdeleD/react-paginate) from 5.0.0 to 5.2.1. - [Release notes](https://github.com/AdeleD/react-paginate/releases) - [Changelog](https://github.com/AdeleD/react-paginate/blob/master/HISTORY.md) - [Commits](https://github.com/AdeleD/react-paginate/compare/v5.0.0...v5.2.1) Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 28 +++++++++++++--------------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index 762bdd98f..b46d34315 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "react-dom": "^16.2.0", "react-markdown": "^2.5.0", "react-modal": "^3.1.7", - "react-paginate": "^5.0.0", + "react-paginate": "^5.2.1", "react-redux": "^5.0.3", "react-simplemde-editor": "^3.6.11", "redux": "^3.6.0", diff --git a/yarn.lock b/yarn.lock index f2d95dcc8..7c7ddc55d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3839,7 +3839,7 @@ fbjs@^0.6.1: ua-parser-js "^0.7.9" whatwg-fetch "^0.9.0" -fbjs@^0.8.16, fbjs@^0.8.4: +fbjs@^0.8.16: version "0.8.16" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" dependencies: @@ -7799,6 +7799,14 @@ prop-types@^15.5.1, prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0: loose-envify "^1.3.1" object-assign "^4.1.1" +prop-types@^15.6.1: + version "15.6.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca" + dependencies: + fbjs "^0.8.16" + loose-envify "^1.3.1" + object-assign "^4.1.1" + proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" @@ -8007,14 +8015,6 @@ rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@^1.1.7, rc@^1.2.1: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-addons-create-fragment@^15.0.0: - version "15.6.2" - resolved "https://registry.yarnpkg.com/react-addons-create-fragment/-/react-addons-create-fragment-15.6.2.tgz#a394de7c2c7becd6b5475ba1b97ac472ce7c74f8" - dependencies: - fbjs "^0.8.4" - loose-envify "^1.3.1" - object-assign "^4.1.0" - react-dom@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044" @@ -8040,13 +8040,11 @@ react-modal@^3.1.7: prop-types "^15.5.10" warning "^3.0.0" -react-paginate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/react-paginate/-/react-paginate-5.0.0.tgz#b5c12191ea81adc6d4d1b339b805e81841eaa8ea" +react-paginate@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/react-paginate/-/react-paginate-5.2.1.tgz#92558e246b3046b85dceec330b17ddee9f24eca8" dependencies: - classnames "^2.2.5" - prop-types "^15.6.0" - react-addons-create-fragment "^15.0.0" + prop-types "^15.6.1" react-redux@^5.0.3: version "5.0.6" -- 2.45.3 From c8d18a43bd44331119014037d0211f4ad76db44a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Wed, 21 Mar 2018 13:03:52 -0400 Subject: [PATCH 104/192] build: bump render-media from 2.10.0 to 2.12.0 (#1129) Bumps [render-media](https://github.com/feross/render-media) from 2.10.0 to 2.12.0. - [Release notes](https://github.com/feross/render-media/releases) - [Commits](https://github.com/feross/render-media/compare/v2.10.0...v2.12.0) Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index b46d34315..6ae5767e0 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "redux-persist-transform-compress": "^4.2.0", "redux-persist-transform-filter": "0.0.10", "redux-thunk": "^2.2.0", - "render-media": "^2.10.0", + "render-media": "^2.12.0", "reselect": "^3.0.0", "semver": "^5.3.0", "shapeshift.io": "^1.3.1", diff --git a/yarn.lock b/yarn.lock index 7c7ddc55d..d2d431593 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8402,11 +8402,11 @@ remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" -render-media@^2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/render-media/-/render-media-2.10.0.tgz#57f39f8a0267e4a6795cfba19489982b4071745a" +render-media@^2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/render-media/-/render-media-2.12.0.tgz#e44714d5c9789ec6330ffcaf12c552837e3d80f9" dependencies: - debug "^2.2.0" + debug "^3.1.0" is-ascii "^1.0.0" mediasource "^2.1.0" stream-to-blob-url "^2.0.0" -- 2.45.3 From 5f9a0620c5696bc17d04bf97760434a8be8bb8b1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Wed, 21 Mar 2018 14:17:19 -0400 Subject: [PATCH 105/192] build: bump electron-dl from 1.10.0 to 1.11.0 (#1127) Bumps [electron-dl](https://github.com/sindresorhus/electron-dl) from 1.10.0 to 1.11.0. - [Release notes](https://github.com/sindresorhus/electron-dl/releases) - [Commits](https://github.com/sindresorhus/electron-dl/compare/v1.10.0...v1.11.0) Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 6ae5767e0..86c073ce2 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "bluebird": "^3.5.1", "classnames": "^2.2.5", "country-data": "^0.0.31", - "electron-dl": "^1.6.0", + "electron-dl": "^1.11.0", "electron-is-dev": "^0.3.0", "electron-log": "^2.2.12", "electron-publisher-s3": "^20.2.0", diff --git a/yarn.lock b/yarn.lock index d2d431593..baacf0370 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2956,9 +2956,9 @@ electron-devtools-installer@^2.2.3: rimraf "^2.5.2" semver "^5.3.0" -electron-dl@^1.6.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/electron-dl/-/electron-dl-1.10.0.tgz#f94416064056fc6f2a86ae498614c93526890af9" +electron-dl@^1.11.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/electron-dl/-/electron-dl-1.11.0.tgz#112851f3857bb1a556b5c736af06040bd40df850" dependencies: ext-name "^5.0.0" pupa "^1.0.0" -- 2.45.3 From 3200cfe25bd40892d621cc5d255de1793e4ba9aa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Wed, 21 Mar 2018 14:18:14 -0400 Subject: [PATCH 106/192] build: bump flow-bin from 0.66.0 to 0.68.0 (#1126) Bumps [flow-bin](https://github.com/flowtype/flow-bin) from 0.66.0 to 0.68.0. - [Release notes](https://github.com/flowtype/flow-bin/releases) - [Commits](https://github.com/flowtype/flow-bin/compare/v0.66.0...v0.68.0) Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 10 +++------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 86c073ce2..d139d25e3 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,7 @@ "eslint-plugin-prettier": "^2.6.0", "eslint-plugin-react": "^7.7.0", "flow-babel-webpack-plugin": "^1.1.1", - "flow-bin": "^0.66.0", + "flow-bin": "^0.68.0", "flow-typed": "^2.3.0", "husky": "^0.14.3", "i18n-extract": "^0.5.1", diff --git a/yarn.lock b/yarn.lock index baacf0370..cbd9a03c8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3996,13 +3996,9 @@ flow-babel-webpack-plugin@^1.1.1: flow-bin ">=0.44.2 <1" lodash.merge "^4.6.0" -"flow-bin@>=0.44.2 <1": - version "0.61.0" - resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.61.0.tgz#d0473a8c35dbbf4de573823f4932124397d32d35" - -flow-bin@^0.66.0: - version "0.66.0" - resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.66.0.tgz#a96dde7015dc3343fd552a7b4963c02be705ca26" +"flow-bin@>=0.44.2 <1", flow-bin@^0.68.0: + version "0.68.0" + resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.68.0.tgz#86c2d14857d306eb2e85e274f2eebf543564f623" flow-typed@^2.3.0: version "2.3.0" -- 2.45.3 From 3ae13fb494bb583757630ca56392e7555afd3c6c Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Wed, 21 Mar 2018 16:50:07 -0400 Subject: [PATCH 107/192] chore: remove unused dependency redux-action-buffer (#1158) --- package.json | 3 +-- yarn.lock | 4 ---- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/package.json b/package.json index d139d25e3..79526e9bd 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,6 @@ "react-redux": "^5.0.3", "react-simplemde-editor": "^3.6.11", "redux": "^3.6.0", - "redux-action-buffer": "^1.1.0", "redux-logger": "^3.0.1", "redux-persist": "^4.8.0", "redux-persist-transform-compress": "^4.2.0", @@ -124,4 +123,4 @@ "lbrynetDaemonDir": "static/daemon", "lbrynetDaemonFileName": "lbrynet-daemon" } -} \ No newline at end of file +} diff --git a/yarn.lock b/yarn.lock index cbd9a03c8..5ca39450e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8265,10 +8265,6 @@ reduce-function-call@^1.0.1: dependencies: balanced-match "^0.4.2" -redux-action-buffer@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/redux-action-buffer/-/redux-action-buffer-1.1.0.tgz#9c692ab6532b042d0d43a9f01a48ada120fc941a" - redux-logger@^3.0.1: version "3.0.6" resolved "https://registry.yarnpkg.com/redux-logger/-/redux-logger-3.0.6.tgz#f7555966f3098f3c88604c449cf0baf5778274bf" -- 2.45.3 From c95d9ebbf03f9409e718316f437166b038bc17e2 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Thu, 22 Mar 2018 09:45:24 -0400 Subject: [PATCH 108/192] fix: artifact extension missing --- electron-builder.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/electron-builder.json b/electron-builder.json index b7cfaa611..0f63137e9 100644 --- a/electron-builder.json +++ b/electron-builder.json @@ -64,6 +64,6 @@ "nsis": { "perMachine": true }, - "artifactName": "${productName}_${version}", + "artifactName": "${productName}_${version}.${ext}", "beforeBuild": "./build/checkDaemonPlatform.js" } -- 2.45.3 From d32c5fa224d5a92e18c979da1472ec636066634d Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Thu, 22 Mar 2018 10:47:44 -0400 Subject: [PATCH 109/192] chore: remove unused dependency jayson (#1160) --- package.json | 1 - yarn.lock | 52 +--------------------------------------------------- 2 files changed, 1 insertion(+), 52 deletions(-) diff --git a/package.json b/package.json index 79526e9bd..0a0e4924c 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,6 @@ "formik": "^0.10.4", "from2": "^2.3.0", "install": "^0.10.2", - "jayson": "^2.0.2", "jshashes": "^1.0.7", "keytar-prebuild": "4.0.4", "localforage": "^1.5.0", diff --git a/yarn.lock b/yarn.lock index 5ca39450e..ab67766e6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -118,13 +118,6 @@ version "1.13.5" resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.13.5.tgz#ca854e9fbdbcdf45d7376882875f28e2c60593f8" -JSONStream@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.0.3.tgz#728544189438b7b9dd2184392581861ebabd9621" - dependencies: - jsonparse "~1.0.0" - through ">=2.2.7 <3" - JSONStream@~1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.1.tgz#707f761e01dae9e16f1bcf93703b78c70966579a" @@ -2061,12 +2054,6 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" -commander@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/commander/-/commander-1.3.2.tgz#8a8f30ec670a6fdd64af52f1914b907d79ead5b5" - dependencies: - keypress "0.1.x" - commander@2.12.x, commander@^2.11.0, commander@^2.5.0, commander@^2.9.0, commander@~2.12.1: version "2.12.2" resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555" @@ -3268,10 +3255,6 @@ es6-map@^0.1.3: es6-symbol "~3.1.1" event-emitter "~0.3.5" -es6-promise@^3.0.2: - version "3.3.1" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" - es6-promise@^4.0.3: version "4.1.0" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.1.0.tgz#dda03ca8f9f89bc597e689842929de7ba8cebdf0" @@ -3280,12 +3263,6 @@ es6-promise@^4.0.5: version "4.2.2" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.2.tgz#f722d7769af88bd33bc13ec6605e1f92966b82d9" -es6-promisify@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-3.0.0.tgz#22226b92957317f965247edfde9295f83efebe86" - dependencies: - es6-promise "^3.0.2" - es6-promisify@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" @@ -3784,10 +3761,6 @@ extsprintf@^1.2.0: version "1.4.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" -eyes@0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" - falafel@^1.0.1: version "1.2.0" resolved "https://registry.yarnpkg.com/falafel/-/falafel-1.2.0.tgz#c18d24ef5091174a497f318cd24b026a25cddab4" @@ -5382,17 +5355,6 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" -jayson@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/jayson/-/jayson-2.0.4.tgz#c20122d8d2d0512d41635db4bcf3785bbe4ff685" - dependencies: - JSONStream "1.0.3" - commander "1.3.2" - es6-promisify "3.0.0" - eyes "0.1.8" - json-stringify-safe "5.0.1" - lodash "3.6.0" - jest-config@^22.4.2: version "22.4.2" resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.4.2.tgz#580ba5819bf81a5e48f4fd470e8b81834f45c855" @@ -5633,7 +5595,7 @@ json-stable-stringify@^1.0.1: dependencies: jsonify "~0.0.0" -json-stringify-safe@5.0.1, json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -5665,10 +5627,6 @@ jsonparse@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" -jsonparse@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.0.0.tgz#2622f4e66c08e1aac7edbeb76053c9b7e1211f76" - jsonpointer@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" @@ -5706,10 +5664,6 @@ jsx-ast-utils@^2.0.0, jsx-ast-utils@^2.0.1: dependencies: array-includes "^3.0.3" -keypress@0.1.x: - version "0.1.0" - resolved "https://registry.yarnpkg.com/keypress/-/keypress-0.1.0.tgz#4a3188d4291b66b4f65edb99f806aa9ae293592a" - keytar-prebuild@4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/keytar-prebuild/-/keytar-prebuild-4.0.4.tgz#eb6354c68f2b3609dc325ef8709844632652d602" @@ -6061,10 +6015,6 @@ lodash.without@~4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.without/-/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac" -lodash@3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.6.0.tgz#5266a8f49dd989be4f9f681b6f2a0c55285d0d9a" - lodash@^3.10.1: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" -- 2.45.3 From b6351a367a16d4469e6191a594baa06d7db1a649 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Thu, 22 Mar 2018 10:52:58 -0400 Subject: [PATCH 110/192] chore: remove unused dependency npm (#1159) --- package.json | 1 - yarn.lock | 2327 +++++++++++++++----------------------------------- 2 files changed, 705 insertions(+), 1623 deletions(-) diff --git a/package.json b/package.json index 0a0e4924c..fc12681ac 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,6 @@ "localforage": "^1.5.0", "mixpanel-browser": "^2.17.1", "moment": "^2.20.1", - "npm": "^5.5.1", "qrcode.react": "^0.7.2", "rc-progress": "^2.0.6", "react": "^16.2.0", diff --git a/yarn.lock b/yarn.lock index ab67766e6..cc7b2e0c0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -26,35 +26,35 @@ version "0.0.6" resolved "https://registry.yarnpkg.com/7zip/-/7zip-0.0.6.tgz#9cafb171af82329490353b4816f03347aa150a30" -"@babel/code-frame@7.0.0-beta.40", "@babel/code-frame@^7.0.0-beta.35", "@babel/code-frame@^7.0.0-beta.40": - version "7.0.0-beta.40" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.40.tgz#37e2b0cf7c56026b4b21d3927cadf81adec32ac6" +"@babel/code-frame@7.0.0-beta.42", "@babel/code-frame@^7.0.0-beta.35", "@babel/code-frame@^7.0.0-beta.40": + version "7.0.0-beta.42" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.42.tgz#a9c83233fa7cd06b39dc77adbb908616ff4f1962" dependencies: - "@babel/highlight" "7.0.0-beta.40" + "@babel/highlight" "7.0.0-beta.42" -"@babel/generator@7.0.0-beta.40": - version "7.0.0-beta.40" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.40.tgz#ab61f9556f4f71dbd1138949c795bb9a21e302ea" +"@babel/generator@7.0.0-beta.42": + version "7.0.0-beta.42" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.42.tgz#777bb50f39c94a7e57f73202d833141f8159af33" dependencies: - "@babel/types" "7.0.0-beta.40" + "@babel/types" "7.0.0-beta.42" jsesc "^2.5.1" lodash "^4.2.0" source-map "^0.5.0" trim-right "^1.0.1" -"@babel/helper-function-name@7.0.0-beta.40": - version "7.0.0-beta.40" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.40.tgz#9d033341ab16517f40d43a73f2d81fc431ccd7b6" +"@babel/helper-function-name@7.0.0-beta.42": + version "7.0.0-beta.42" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.42.tgz#b38b8f4f85168d1812c543dd700b5d549b0c4658" dependencies: - "@babel/helper-get-function-arity" "7.0.0-beta.40" - "@babel/template" "7.0.0-beta.40" - "@babel/types" "7.0.0-beta.40" + "@babel/helper-get-function-arity" "7.0.0-beta.42" + "@babel/template" "7.0.0-beta.42" + "@babel/types" "7.0.0-beta.42" -"@babel/helper-get-function-arity@7.0.0-beta.40": - version "7.0.0-beta.40" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.40.tgz#ac0419cf067b0ec16453e1274f03878195791c6e" +"@babel/helper-get-function-arity@7.0.0-beta.42": + version "7.0.0-beta.42" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.42.tgz#ad072e32f912c033053fc80478169aeadc22191e" dependencies: - "@babel/types" "7.0.0-beta.40" + "@babel/types" "7.0.0-beta.42" "@babel/helper-module-imports@7.0.0-beta.35": version "7.0.0-beta.35" @@ -63,33 +63,40 @@ "@babel/types" "7.0.0-beta.35" lodash "^4.2.0" -"@babel/highlight@7.0.0-beta.40": - version "7.0.0-beta.40" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.40.tgz#b43d67d76bf46e1d10d227f68cddcd263786b255" +"@babel/helper-split-export-declaration@7.0.0-beta.42": + version "7.0.0-beta.42" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.42.tgz#0d0d5254220a9cc4e7e226240306b939dc210ee7" + dependencies: + "@babel/types" "7.0.0-beta.42" + +"@babel/highlight@7.0.0-beta.42": + version "7.0.0-beta.42" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.42.tgz#a502a1c0d6f99b2b0e81d468a1b0c0e81e3f3623" dependencies: chalk "^2.0.0" esutils "^2.0.2" js-tokens "^3.0.0" -"@babel/template@7.0.0-beta.40": - version "7.0.0-beta.40" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.40.tgz#034988c6424eb5c3268fe6a608626de1f4410fc8" +"@babel/template@7.0.0-beta.42": + version "7.0.0-beta.42" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.42.tgz#7186d4e70d44cdec975049ba0a73bdaf5cdee052" dependencies: - "@babel/code-frame" "7.0.0-beta.40" - "@babel/types" "7.0.0-beta.40" - babylon "7.0.0-beta.40" + "@babel/code-frame" "7.0.0-beta.42" + "@babel/types" "7.0.0-beta.42" + babylon "7.0.0-beta.42" lodash "^4.2.0" "@babel/traverse@^7.0.0-beta.40": - version "7.0.0-beta.40" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.40.tgz#d140e449b2e093ef9fe1a2eecc28421ffb4e521e" + version "7.0.0-beta.42" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.42.tgz#f4bf4d1e33d41baf45205e2d0463591d57326285" dependencies: - "@babel/code-frame" "7.0.0-beta.40" - "@babel/generator" "7.0.0-beta.40" - "@babel/helper-function-name" "7.0.0-beta.40" - "@babel/types" "7.0.0-beta.40" - babylon "7.0.0-beta.40" - debug "^3.0.1" + "@babel/code-frame" "7.0.0-beta.42" + "@babel/generator" "7.0.0-beta.42" + "@babel/helper-function-name" "7.0.0-beta.42" + "@babel/helper-split-export-declaration" "7.0.0-beta.42" + "@babel/types" "7.0.0-beta.42" + babylon "7.0.0-beta.42" + debug "^3.1.0" globals "^11.1.0" invariant "^2.2.0" lodash "^4.2.0" @@ -102,9 +109,9 @@ lodash "^4.2.0" to-fast-properties "^2.0.0" -"@babel/types@7.0.0-beta.40", "@babel/types@^7.0.0-beta.40": - version "7.0.0-beta.40" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.40.tgz#25c3d7aae14126abe05fcb098c65a66b6d6b8c14" +"@babel/types@7.0.0-beta.42", "@babel/types@^7.0.0-beta.40": + version "7.0.0-beta.42" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.42.tgz#1e2118767684880f6963801b272fd2b3348efacc" dependencies: esutils "^2.0.2" lodash "^4.2.0" @@ -118,26 +125,19 @@ version "1.13.5" resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.13.5.tgz#ca854e9fbdbcdf45d7376882875f28e2c60593f8" -JSONStream@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.1.tgz#707f761e01dae9e16f1bcf93703b78c70966579a" - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - abab@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" -abbrev@1, abbrev@~1.1.1: +abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" -accepts@~1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f" +accepts@~1.3.4, accepts@~1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" dependencies: - mime-types "~2.1.16" + mime-types "~2.1.18" negotiator "0.6.1" accessibility-developer-tools@^2.11.0: @@ -162,10 +162,6 @@ acorn-jsx@^3.0.0: dependencies: acorn "^3.0.4" -acorn@^1.0.3: - version "1.2.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-1.2.2.tgz#c8ce27de0acc76d896d2b1fad3df588d9e82f014" - acorn@^3.0.4: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" @@ -174,25 +170,9 @@ acorn@^4.0.3: version "4.0.13" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" -acorn@^5.0.0, acorn@^5.3.0, acorn@^5.5.0: - version "5.5.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.1.tgz#84e05a9ea0acbe131227da50301e62464dc9c1d8" - -acorn@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7" - -agent-base@4, agent-base@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.1.2.tgz#80fa6cde440f4dcf9af2617cf246099b5d99f0c8" - dependencies: - es6-promisify "^5.0.0" - -agentkeepalive@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.3.0.tgz#6d5de5829afd3be2712201a39275fd11c651857c" - dependencies: - humanize-ms "^1.2.1" +acorn@^5.0.0, acorn@^5.2.1, acorn@^5.3.0, acorn@^5.5.0: + version "5.5.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9" ajv-keywords@^2.1.0: version "2.1.1" @@ -209,16 +189,7 @@ ajv@^4.9.1: co "^4.6.0" json-stable-stringify "^1.0.1" -ajv@^5.0.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.0.tgz#eb2840746e9dc48bd5e063a36e3fd400c5eab5a9" - dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" - -ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0: +ajv@^5.0.0, ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" dependencies: @@ -228,8 +199,8 @@ ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0: json-schema-traverse "^0.3.0" ajv@^6.0.1, ajv@^6.1.0, ajv@^6.1.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.2.1.tgz#28a6abc493a2abe0fb4c8507acaedb43fa550671" + version "6.3.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.3.0.tgz#1650a41114ef00574cac10b8032d8f4c14812da7" dependencies: fast-deep-equal "^1.0.0" fast-json-stable-stringify "^2.0.0" @@ -273,7 +244,7 @@ ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" -ansi-regex@^3.0.0, ansi-regex@~3.0.0: +ansi-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" @@ -281,26 +252,12 @@ ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" -ansi-styles@^3.1.0, ansi-styles@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" - dependencies: - color-convert "^1.9.0" - -ansi-styles@^3.2.1: +ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" dependencies: color-convert "^1.9.0" -ansicolors@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" - -ansistyles@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" - any-observable@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.2.0.tgz#c67870058003579009083f54ac0abafb5c33d242" @@ -312,37 +269,29 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -app-builder-bin-linux@1.7.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/app-builder-bin-linux/-/app-builder-bin-linux-1.7.1.tgz#925967add77c13d387e3fe88359a4b4dce82c525" - app-builder-bin-linux@1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/app-builder-bin-linux/-/app-builder-bin-linux-1.7.2.tgz#a764c8e52ecf1b5b068f32c820c6daf1ffed6a8f" -app-builder-bin-mac@1.7.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/app-builder-bin-mac/-/app-builder-bin-mac-1.7.1.tgz#e5c2b49be82473a737e000cfccfc65a68f9cc62d" +app-builder-bin-linux@1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/app-builder-bin-linux/-/app-builder-bin-linux-1.8.1.tgz#10e9d344ff8019dbc708e11eca13db91f36607e2" app-builder-bin-mac@1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/app-builder-bin-mac/-/app-builder-bin-mac-1.7.2.tgz#c4ee0d950666c97c12a45ac74ec6396be3357644" -app-builder-bin-win@1.7.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/app-builder-bin-win/-/app-builder-bin-win-1.7.1.tgz#e1ba3d6d645896552b28e4dd05525b39561b9b88" +app-builder-bin-mac@1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/app-builder-bin-mac/-/app-builder-bin-mac-1.8.1.tgz#0f3d8ddb3b502cadeebc6db24593a74cd87138d0" app-builder-bin-win@1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/app-builder-bin-win/-/app-builder-bin-win-1.7.2.tgz#7acac890782f4118f09941b343ba06c56452a6f6" -app-builder-bin@1.7.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-1.7.1.tgz#c2540eb8b164c91c30bc8cf3f16b5c181f3f5c31" - optionalDependencies: - app-builder-bin-linux "1.7.1" - app-builder-bin-mac "1.7.1" - app-builder-bin-win "1.7.1" +app-builder-bin-win@1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/app-builder-bin-win/-/app-builder-bin-win-1.8.1.tgz#866ebd5f724143b8f55d365f88c22e221425fa1d" app-builder-bin@1.7.2: version "1.7.2" @@ -352,18 +301,22 @@ app-builder-bin@1.7.2: app-builder-bin-mac "1.7.2" app-builder-bin-win "1.7.2" +app-builder-bin@1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-1.8.1.tgz#12c795c5203e59c6927816b2429b340667f634e8" + optionalDependencies: + app-builder-bin-linux "1.8.1" + app-builder-bin-mac "1.8.1" + app-builder-bin-win "1.8.1" + app-root-path@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46" -aproba@^1.0.3, aproba@^1.1.1, aproba@^1.1.2, aproba@~1.2.0: +aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" -archy@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" - are-we-there-yet@~1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" @@ -372,16 +325,17 @@ are-we-there-yet@~1.1.2: readable-stream "^2.0.6" argparse@^1.0.7: - version "1.0.9" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" dependencies: sprintf-js "~1.0.2" aria-query@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.7.0.tgz#4af10a1e61573ddea0cf3b99b51c52c05b424d24" + version "0.7.1" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.7.1.tgz#26cbb5aff64144b0a825be1846e0b16cfa00b11e" dependencies: ast-types-flow "0.0.7" + commander "^2.11.0" arr-diff@^2.0.0: version "2.0.0" @@ -450,7 +404,7 @@ arrify@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" -asap@^2.0.0, asap@~2.0.3: +asap@~2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" @@ -488,10 +442,6 @@ ast-types-flow@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" -ast-types@0.8.15: - version "0.8.15" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.8.15.tgz#8eef0827f04dff0ec8857ba925abe3fea6194e52" - ast-types@0.9.6: version "0.9.6" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" @@ -541,12 +491,13 @@ autoprefixer@^6.3.1: postcss "^5.2.16" postcss-value-parser "^3.2.3" -aws-sdk@^2.202.0: - version "2.205.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.205.0.tgz#1a93730253e2be027a4bd3af9248cbda0573de80" +aws-sdk@^2.212.1: + version "2.212.1" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.212.1.tgz#833dbe8d837d46058a3772ac9bb73b69113136e4" dependencies: buffer "4.9.1" - events "^1.1.1" + events "1.1.1" + ieee754 "1.1.8" jmespath "0.15.0" querystring "0.2.0" sax "1.2.1" @@ -614,7 +565,7 @@ babel-core@^6.26.0: babel-eslint@^8.2.2: version "8.2.2" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.2.tgz#1102273354c6f0b29b4ea28a65f97d122296b68b" + resolved "http://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.2.tgz#1102273354c6f0b29b4ea28a65f97d122296b68b" dependencies: "@babel/code-frame" "^7.0.0-beta.40" "@babel/traverse" "^7.0.0-beta.40" @@ -624,8 +575,8 @@ babel-eslint@^8.2.2: eslint-visitor-keys "^1.0.0" babel-generator@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5" + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" dependencies: babel-messages "^6.23.0" babel-runtime "^6.26.0" @@ -633,7 +584,7 @@ babel-generator@^6.26.0: detect-indent "^4.0.0" jsesc "^1.3.0" lodash "^4.17.4" - source-map "^0.5.6" + source-map "^0.5.7" trim-right "^1.0.1" babel-helper-bindify-decorators@^6.24.1: @@ -763,8 +714,8 @@ babel-helpers@^6.24.1: babel-template "^6.24.1" babel-loader@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.2.tgz#f6cbe122710f1aa2af4d881c6d5b54358ca24126" + version "7.1.4" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.4.tgz#e3463938bd4e6d55d1c174c5485d406a188ed015" dependencies: find-cache-dir "^1.0.0" loader-utils "^1.0.2" @@ -1242,9 +1193,9 @@ babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: lodash "^4.17.4" to-fast-properties "^1.0.3" -babylon@7.0.0-beta.40, babylon@^7.0.0-beta.40: - version "7.0.0-beta.40" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.40.tgz#91fc8cd56d5eb98b28e6fde41045f2957779940a" +babylon@7.0.0-beta.42, babylon@^7.0.0-beta.40: + version "7.0.0-beta.42" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.42.tgz#67cfabcd4f3ec82999d29031ccdea89d0ba99657" babylon@^6.18.0: version "6.18.0" @@ -1258,13 +1209,9 @@ balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" -base62@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/base62/-/base62-0.1.1.tgz#7b4174c2f94449753b11c2651c083da841a7b084" - base62@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/base62/-/base62-1.2.1.tgz#95a5a22350b0a557f3f081247fc2c398803ecb0c" + version "1.2.7" + resolved "https://registry.yarnpkg.com/base62/-/base62-1.2.7.tgz#5c01aad73c0124f9535cff1bdb9c4e6ccf838cfb" base64-js@0.0.8: version "0.0.8" @@ -1300,6 +1247,10 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +big-integer@^1.6.17: + version "1.6.27" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.27.tgz#8e56c6f8b2dd6c4fe8d32102b83d4f25868e4b3a" + big.js@^3.1.3: version "3.2.0" resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" @@ -1309,10 +1260,10 @@ binary-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" binary-search@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/binary-search/-/binary-search-1.3.2.tgz#88c9b7bd2b7221d352da78ec887f5af2549e4de2" + version "1.3.3" + resolved "https://registry.yarnpkg.com/binary-search/-/binary-search-1.3.3.tgz#b5adb6fb279a197be51b1ee8b0fb76fcdc61b429" -"binary@>= 0.3.0 < 1": +binary@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" dependencies: @@ -1320,10 +1271,11 @@ binary-search@^1.2.0: chainsaw "~0.1.0" bl@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.1.tgz#cac328f7bee45730d404b692203fcb590e172d5e" + version "1.2.2" + resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" dependencies: - readable-stream "^2.0.5" + readable-stream "^2.3.5" + safe-buffer "^5.1.1" block-stream@*: version "0.0.9" @@ -1337,10 +1289,14 @@ bluebird-lst@^1.0.5: dependencies: bluebird "^3.5.1" -bluebird@^3.4.7, bluebird@^3.5.0, bluebird@^3.5.1, bluebird@~3.5.0: +bluebird@^3.4.7, bluebird@^3.5.0, bluebird@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" +bluebird@~3.4.1: + version "3.4.7" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" + bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" @@ -1393,18 +1349,6 @@ boom@5.x.x: dependencies: hoek "4.x.x" -boxen@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.2.2.tgz#3f1d4032c30ffea9d4b02c322eaf2ea741dcbce5" - dependencies: - ansi-align "^2.0.0" - camelcase "^4.0.0" - chalk "^2.0.1" - cli-boxes "^1.0.0" - string-width "^2.0.0" - term-size "^1.2.0" - widest-line "^1.0.0" - boxen@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" @@ -1523,20 +1467,32 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: electron-to-chromium "^1.2.7" browserslist@^2.1.2: - version "2.9.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.9.1.tgz#b72d3982ab01b5cd24da62ff6d45573886aff275" + version "2.11.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.3.tgz#fe36167aed1bbcde4827ebfe71347a2cc70b99b2" dependencies: - caniuse-lite "^1.0.30000770" - electron-to-chromium "^1.3.27" + caniuse-lite "^1.0.30000792" + electron-to-chromium "^1.3.30" buffer-crc32@~0.2.3: version "0.2.13" resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" +buffer-from@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531" + +buffer-indexof-polyfill@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz#a9fb806ce8145d5428510ce72f278bb363a638bf" + buffer-indexof@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" +buffer-shims@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" + buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" @@ -1561,7 +1517,7 @@ buffers@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" -builder-util-runtime@4.0.5, builder-util-runtime@^4.0.5, builder-util-runtime@~4.0.5: +builder-util-runtime@4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-4.0.5.tgz#5340cf9886b9283ea6e5b20dc09b5e3e461aef62" dependencies: @@ -1570,7 +1526,25 @@ builder-util-runtime@4.0.5, builder-util-runtime@^4.0.5, builder-util-runtime@~4 fs-extra-p "^4.5.0" sax "^1.2.4" -builder-util@5.6.5, builder-util@^5.6.5: +builder-util-runtime@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-4.1.0.tgz#7dcd042d555d2f161a5538d7a0ea8c292daa0683" + dependencies: + bluebird-lst "^1.0.5" + debug "^3.1.0" + fs-extra-p "^4.5.2" + sax "^1.2.4" + +builder-util-runtime@^4.0.5, builder-util-runtime@^4.1.0, builder-util-runtime@^4.2.0, builder-util-runtime@~4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-4.2.0.tgz#c56aa18d34390143da031c418c9d3a055fbd3522" + dependencies: + bluebird-lst "^1.0.5" + debug "^3.1.0" + fs-extra-p "^4.5.2" + sax "^1.2.4" + +builder-util@5.6.5: version "5.6.5" resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.6.5.tgz#f2d156541b8df9599456848e057566443dc04c82" dependencies: @@ -1589,14 +1563,14 @@ builder-util@5.6.5, builder-util@^5.6.5: stat-mode "^0.2.2" temp-file "^3.1.1" -builder-util@^5.6.0: - version "5.6.3" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.6.3.tgz#194288b979958832e0592fe91c8306ce207a60f1" +builder-util@5.6.7: + version "5.6.7" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.6.7.tgz#662ff2ba4f70416ee0c085126f16af48fbf97900" dependencies: "7zip-bin" "~3.1.0" - app-builder-bin "1.7.1" + app-builder-bin "1.7.2" bluebird-lst "^1.0.5" - builder-util-runtime "^4.0.5" + builder-util-runtime "^4.1.0" chalk "^2.3.2" debug "^3.1.0" fs-extra-p "^4.5.2" @@ -1604,7 +1578,26 @@ builder-util@^5.6.0: js-yaml "^3.11.0" lazy-val "^1.0.3" semver "^5.5.0" - source-map-support "^0.5.3" + source-map-support "^0.5.4" + stat-mode "^0.2.2" + temp-file "^3.1.1" + +builder-util@^5.6.5, builder-util@^5.6.7, builder-util@^5.7.1: + version "5.7.2" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.7.2.tgz#049b4365993f34519c9d56589494cda2257b24d3" + dependencies: + "7zip-bin" "~3.1.0" + app-builder-bin "1.8.1" + bluebird-lst "^1.0.5" + builder-util-runtime "^4.2.0" + chalk "^2.3.2" + debug "^3.1.0" + fs-extra-p "^4.5.2" + is-ci "^1.1.0" + js-yaml "^3.11.0" + lazy-val "^1.0.3" + semver "^5.5.0" + source-map-support "^0.5.4" stat-mode "^0.2.2" temp-file "^3.1.1" @@ -1616,33 +1609,11 @@ builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" -builtins@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" - bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" -cacache@^10.0.0: - version "10.0.1" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.1.tgz#3e05f6e616117d9b54665b1b20c8aeb93ea5d36f" - dependencies: - bluebird "^3.5.0" - chownr "^1.0.1" - glob "^7.1.2" - graceful-fs "^4.1.11" - lru-cache "^4.1.1" - mississippi "^1.3.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.1" - ssri "^5.0.0" - unique-filename "^1.1.0" - y18n "^3.2.1" - -cacache@^10.0.1: +cacache@^10.0.4: version "10.0.4" resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460" dependencies: @@ -1660,24 +1631,6 @@ cacache@^10.0.1: unique-filename "^1.1.0" y18n "^4.0.0" -cacache@^9.2.9, cacache@~9.2.9: - version "9.2.9" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-9.2.9.tgz#f9d7ffe039851ec94c28290662afa4dd4bb9e8dd" - dependencies: - bluebird "^3.5.0" - chownr "^1.0.1" - glob "^7.1.2" - graceful-fs "^4.1.11" - lru-cache "^4.1.1" - mississippi "^1.3.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.1" - ssri "^4.1.6" - unique-filename "^1.1.0" - y18n "^3.2.1" - cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -1692,10 +1645,6 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -call-limit@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/call-limit/-/call-limit-1.1.0.tgz#6fd61b03f3da42a2cd0ec2b60f02bd0e71991fea" - caller-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" @@ -1750,12 +1699,12 @@ caniuse-api@^1.5.2: lodash.uniq "^4.5.0" caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000772" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000772.tgz#51aae891768286eade4a3d8319ea76d6a01b512b" + version "1.0.30000819" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000819.tgz#c3b7dd559e5e6d63d5dcaa62bac6bd04c7619709" -caniuse-lite@^1.0.30000770: - version "1.0.30000778" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000778.tgz#f1e7cb8b13b1f6744402291d75f0bcd4c3160369" +caniuse-lite@^1.0.30000792: + version "1.0.30000819" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000819.tgz#aabee5fd15a080febab6ae5d30c9ea15f4c6d4e2" capture-stack-trace@^1.0.0: version "1.0.0" @@ -1792,15 +1741,7 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" - dependencies: - ansi-styles "^3.1.0" - escape-string-regexp "^1.0.5" - supports-color "^4.0.0" - -chalk@^2.3.1, chalk@^2.3.2: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1, chalk@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65" dependencies: @@ -1834,7 +1775,7 @@ chokidar@^2.0.0, chokidar@^2.0.2: optionalDependencies: fsevents "^1.0.0" -chownr@^1.0.1, chownr@~1.0.1: +chownr@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" @@ -1843,12 +1784,8 @@ chromium-pickle-js@^0.2.0: resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205" ci-info@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.2.tgz#03561259db48d0474c8bdc90f5b47b068b6bbfb4" - -cidr-regex@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-1.0.6.tgz#74abfd619df370b9d54ab14475568e97dd64c0c1" + version "1.1.3" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.3.tgz#710193264bb05c77b8c90d02f5aaf22216a667b2" cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" @@ -1881,8 +1818,8 @@ classnames@^2.2.5: resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" clean-css@4.1.x: - version "4.1.9" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.9.tgz#35cee8ae7687a49b98034f70de00c4edd3826301" + version "4.1.11" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.11.tgz#2ecdf145aba38f54740f26cefd0ff3e03e125d6a" dependencies: source-map "0.5.x" @@ -1906,15 +1843,6 @@ cli-spinners@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" -cli-table2@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/cli-table2/-/cli-table2-0.2.0.tgz#2d1ef7f218a0e786e214540562d4bd177fe32d97" - dependencies: - lodash "^3.10.1" - string-width "^1.0.1" - optionalDependencies: - colors "^1.1.2" - cli-truncate@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" @@ -1960,15 +1888,8 @@ clone-deep@^2.0.1: shallow-clone "^1.0.0" clone@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f" - -cmd-shim@~2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-2.0.2.tgz#6fcbda99483a8fd15d7d30a196ca69d688a2efdb" - dependencies: - graceful-fs "^4.1.2" - mkdirp "~0.5.0" + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" co@^4.6.0: version "4.6.0" @@ -1991,8 +1912,8 @@ codemirror-spell-checker@*: typo-js "*" codemirror@*: - version "5.32.0" - resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.32.0.tgz#cb6ff5d8ef36d0b10f031130e2d9ebeee92c902e" + version "5.36.0" + resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.36.0.tgz#1172ad9dc298056c06e0b34e5ccd23825ca15b40" collection-visit@^1.0.0: version "1.0.0" @@ -2037,30 +1958,23 @@ colormin@^1.0.5: css-color-names "0.0.4" has "^1.0.1" -colors@^1.1.2, colors@~1.1.2: +colors@^1.1.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.2.1.tgz#f4a3d302976aaf042356ba1ade3b1a2c62d9d794" + +colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" -columnify@~1.5.4: - version "1.5.4" - resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" - dependencies: - strip-ansi "^3.0.0" - wcwidth "^1.0.0" - -combined-stream@^1.0.5, combined-stream@~1.0.5: +combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" dependencies: delayed-stream "~1.0.0" -commander@2.12.x, commander@^2.11.0, commander@^2.5.0, commander@^2.9.0, commander@~2.12.1: - version "2.12.2" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555" - -commander@2.14.x, commander@^2.14.1, commander@~2.14.1: - version "2.14.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa" +commander@2.15.x, commander@^2.11.0, commander@^2.14.1, commander@^2.5.0, commander@^2.9.0, commander@~2.15.0: + version "2.15.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" commander@~2.13.0: version "2.13.0" @@ -2115,19 +2029,19 @@ component-emitter@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" -compressible@~2.0.11: - version "2.0.12" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.12.tgz#c59a5c99db76767e9876500e271ef63b3493bd66" +compressible@~2.0.13: + version "2.0.13" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.13.tgz#0d1020ab924b2fdb4d6279875c7d6daba6baa7a9" dependencies: - mime-db ">= 1.30.0 < 2" + mime-db ">= 1.33.0 < 2" compression@^1.5.2: - version "1.7.1" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.1.tgz#eff2603efc2e22cf86f35d2eb93589f9875373db" + version "1.7.2" + resolved "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz#aaffbcd6aaf854b44ebb280353d5ad1651f59a69" dependencies: accepts "~1.3.4" bytes "3.0.0" - compressible "~2.0.11" + compressible "~2.0.13" debug "2.6.9" on-headers "~1.0.1" safe-buffer "5.1.1" @@ -2137,7 +2051,7 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -concat-stream@1.6.0, concat-stream@^1.5.0, concat-stream@^1.5.2: +concat-stream@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" dependencies: @@ -2145,21 +2059,15 @@ concat-stream@1.6.0, concat-stream@^1.5.0, concat-stream@^1.5.2: readable-stream "^2.2.2" typedarray "^0.0.6" -concat-stream@^1.6.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.1.tgz#261b8f518301f1d834e36342b9fea095d2620a26" +concat-stream@^1.5.0, concat-stream@^1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" dependencies: + buffer-from "^1.0.0" inherits "^2.0.3" readable-stream "^2.2.2" typedarray "^0.0.6" -config-chain@~1.1.11: - version "1.1.11" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.11.tgz#aba09747dfbe4c3e70e766a6e41586e1859fc6f2" - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - configstore@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.1.tgz#094ee662ab83fad9917678de114faaea8fcdca90" @@ -2237,8 +2145,8 @@ core-js@^1.0.0: resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" core-js@^2.4.0, core-js@^2.5.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b" + version "2.5.3" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e" core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -2367,8 +2275,8 @@ css-hot-loader@^1.3.7: normalize-url "^1.9.1" css-loader@^0.28.9: - version "0.28.10" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.10.tgz#40282e79230f7bcb4e483efa631d670b735ebf42" + version "0.28.11" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.11.tgz#c3f9864a700be2711bb5a2462b2389b1a392dab7" dependencies: babel-code-frame "^6.26.0" css-selector-tokenizer "^0.7.0" @@ -2502,22 +2410,18 @@ date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" -debug@2, debug@2.6.9, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8: +debug@2.6.9, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: ms "2.0.0" -debug@^3.0.0, debug@^3.0.1, debug@^3.1.0: +debug@^3.0.0, debug@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: ms "2.0.0" -debuglog@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" - decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -2600,12 +2504,6 @@ deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - dependencies: - clone "^1.0.2" - define-properties@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" @@ -2667,10 +2565,14 @@ delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" -depd@1.1.1, depd@~1.1.1: +depd@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" +depd@~1.1.1, depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + des.js@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" @@ -2688,10 +2590,6 @@ detect-indent@^4.0.0: dependencies: repeating "^2.0.0" -detect-indent@~5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - detect-libc@^1.0.2, detect-libc@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" @@ -2701,8 +2599,8 @@ detect-node@^2.0.3: resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127" detective@^4.3.1: - version "4.6.0" - resolved "https://registry.yarnpkg.com/detective/-/detective-4.6.0.tgz#d1a793ad0bcc829fa225465061096b7bca040527" + version "4.7.1" + resolved "https://registry.yarnpkg.com/detective/-/detective-4.7.1.tgz#0eca7314338442febb6d65da54c10bb1c82b246e" dependencies: acorn "^5.2.1" defined "^1.0.0" @@ -2715,13 +2613,6 @@ devtron@^1.4.0: highlight.js "^9.3.0" humanize-plus "^1.8.1" -dezalgo@^1.0.0, dezalgo@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" - dependencies: - asap "^2.0.0" - wrappy "1" - diff@^3.2.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" @@ -2751,9 +2642,9 @@ dns-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" -dns-packet@^1.0.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.2.2.tgz#a8a26bec7646438963fc86e06f8f8b16d6c8bf7a" +dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" dependencies: ip "^1.1.0" safe-buffer "^5.0.1" @@ -2771,13 +2662,7 @@ doctrine@1.5.0: esutils "^2.0.2" isarray "^1.0.0" -doctrine@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.2.tgz#68f96ce8efc56cc42651f1faadb4f175273b0075" - dependencies: - esutils "^2.0.2" - -doctrine@^2.1.0: +doctrine@^2.0.2, doctrine@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" dependencies: @@ -2844,24 +2729,26 @@ dot-prop@^4.1.0: is-obj "^1.0.0" dotenv-expand@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-4.0.1.tgz#68fddc1561814e0a10964111057ff138ced7d7a8" - -dotenv@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-4.0.0.tgz#864ef1379aced55ce6f95debecdce179f7a0cd1d" + version "4.2.0" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-4.2.0.tgz#def1f1ca5d6059d24a766e587942c21106ce1275" dotenv@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" +duplexer2@~0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + dependencies: + readable-stream "^2.0.2" + duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" -duplexify@^3.1.2, duplexify@^3.4.2: - version "3.5.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.1.tgz#4e1516be68838bc90a49994f0b39a6e5960befcd" +duplexify@^3.4.2, duplexify@^3.5.3: + version "3.5.4" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.4.tgz#4bb46c1796eabebeec4ca9a2e66b808cb7a3d8b4" dependencies: end-of-stream "^1.0.0" inherits "^2.0.1" @@ -2874,10 +2761,6 @@ ecc-jsbn@~0.1.1: dependencies: jsbn "~0.1.0" -editor@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/editor/-/editor-1.0.0.tgz#60c7f87bd62bcc6a894fa8ccd6afb7823a24f742" - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -2886,7 +2769,36 @@ ejs@^2.5.7: version "2.5.7" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.7.tgz#cc872c168880ae3c7189762fd5ffc00896c9518a" -electron-builder-lib@20.5.1, electron-builder-lib@~20.5.0: +electron-builder-lib@20.6.2: + version "20.6.2" + resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.6.2.tgz#34f38b6172c05f90d34b6b5ed2f2b6922e731a39" + dependencies: + "7zip-bin" "~3.1.0" + app-builder-bin "1.7.2" + async-exit-hook "^2.0.1" + bluebird-lst "^1.0.5" + builder-util "5.6.7" + builder-util-runtime "4.1.0" + chromium-pickle-js "^0.2.0" + debug "^3.1.0" + ejs "^2.5.7" + electron-osx-sign "0.4.10" + electron-publish "20.6.1" + fs-extra-p "^4.5.2" + hosted-git-info "^2.6.0" + is-ci "^1.1.0" + isbinaryfile "^3.0.2" + js-yaml "^3.11.0" + lazy-val "^1.0.3" + minimatch "^3.0.4" + normalize-package-data "^2.4.0" + plist "^2.1.0" + read-config-file "3.0.0" + sanitize-filename "^1.6.1" + semver "^5.5.0" + temp-file "^3.1.1" + +electron-builder-lib@~20.5.0: version "20.5.1" resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.5.1.tgz#c155345c58d25580d316f6437c251a57e8e92d62" dependencies: @@ -2916,15 +2828,15 @@ electron-builder-lib@20.5.1, electron-builder-lib@~20.5.0: temp-file "^3.1.1" electron-builder@^20.5.1: - version "20.5.1" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-20.5.1.tgz#8e6fba76dcd65aeabab60f15bd46f294ee04dd11" + version "20.6.2" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-20.6.2.tgz#40e1d44910ce99c4c0e9200f0b4a18d15d0d00a4" dependencies: bluebird-lst "^1.0.5" - builder-util "5.6.5" - builder-util-runtime "4.0.5" + builder-util "5.6.7" + builder-util-runtime "4.1.0" chalk "^2.3.2" dmg-builder "4.1.2" - electron-builder-lib "20.5.1" + electron-builder-lib "20.6.2" electron-download-tf "4.3.4" fs-extra-p "^4.5.2" is-ci "^1.1.0" @@ -3010,46 +2922,58 @@ electron-publish@20.5.0: lazy-val "^1.0.3" mime "^2.2.0" -electron-publish@~20.2.0: - version "20.2.0" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-20.2.0.tgz#1812738c4a4e14a8e156a9a083424a6e4e8e8264" +electron-publish@20.6.1: + version "20.6.1" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-20.6.1.tgz#1bc8497fc9370f8e39c9212ce0b5857ef1d666fd" dependencies: bluebird-lst "^1.0.5" - builder-util "^5.6.0" - builder-util-runtime "^4.0.5" - chalk "^2.3.0" + builder-util "^5.6.7" + builder-util-runtime "^4.1.0" + chalk "^2.3.2" + fs-extra-p "^4.5.2" + lazy-val "^1.0.3" + mime "^2.2.0" + +electron-publish@~20.7.0: + version "20.7.0" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-20.7.0.tgz#1bdc02365b199cd817e635bcd251670a39e014ce" + dependencies: + bluebird-lst "^1.0.5" + builder-util "^5.7.1" + builder-util-runtime "^4.2.0" + chalk "^2.3.2" fs-extra-p "^4.5.2" lazy-val "^1.0.3" mime "^2.2.0" electron-publisher-s3@^20.2.0: - version "20.2.0" - resolved "https://registry.yarnpkg.com/electron-publisher-s3/-/electron-publisher-s3-20.2.0.tgz#6c2963adb1f33bdd0f4ce273988e2f74fc5c53b7" + version "20.7.0" + resolved "https://registry.yarnpkg.com/electron-publisher-s3/-/electron-publisher-s3-20.7.0.tgz#3c2cc2f8b5959258883d646996e88c276224cb33" dependencies: - aws-sdk "^2.202.0" + aws-sdk "^2.212.1" bluebird-lst "^1.0.5" - builder-util "^5.6.0" - electron-publish "~20.2.0" + builder-util "^5.7.1" + electron-publish "~20.7.0" fs-extra-p "^4.5.2" mime "^2.2.0" -electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.27: - version "1.3.27" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz#78ecb8a399066187bb374eede35d9c70565a803d" +electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30: + version "1.3.40" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.40.tgz#1fbd6d97befd72b8a6f921dc38d22413d2f6fddf" electron-updater@^2.21.0: - version "2.21.0" - resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-2.21.0.tgz#3c8765af946090100f7df982127e4c3412cbc1af" + version "2.21.3" + resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-2.21.3.tgz#767bfe6a2a5513cb11c79f94efef6d1ff01fb058" dependencies: bluebird-lst "^1.0.5" - builder-util-runtime "~4.0.5" + builder-util-runtime "~4.2.0" electron-is-dev "^0.3.0" fs-extra-p "^4.5.2" - js-yaml "^3.10.0" + js-yaml "^3.11.0" lazy-val "^1.0.3" lodash.isequal "^4.5.0" semver "^5.5.0" - source-map-support "^0.5.3" + source-map-support "^0.5.4" electron-webpack-js@~1.2.0: version "1.2.0" @@ -3133,9 +3057,9 @@ emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" -encodeurl@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" encoding@^0.1.11, encoding@^0.1.12: version "0.1.12" @@ -3181,22 +3105,12 @@ envify@^3.0.0: jstransform "^11.0.3" through "~2.3.4" -err-code@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" - errno@^0.1.3, errno@~0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" dependencies: prr "~1.0.1" -errno@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" - dependencies: - prr "~0.0.0" - error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" @@ -3204,8 +3118,8 @@ error-ex@^1.2.0, error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.7.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" + version "1.11.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.11.0.tgz#cce87d518f0496893b1a30cd8461835535480681" dependencies: es-to-primitive "^1.1.1" function-bind "^1.1.1" @@ -3221,20 +3135,13 @@ es-to-primitive@^1.1.1: is-date-object "^1.0.1" is-symbol "^1.0.1" -es3ify@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/es3ify/-/es3ify-0.1.4.tgz#ad9fa5df1ae34f3f31e1211b5818b2d51078dfd1" - dependencies: - esprima-fb "~3001.0001.0000-dev-harmony-fb" - jstransform "~3.0.0" - through "~2.3.4" - es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.39" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.39.tgz#fca21b67559277ca4ac1a1ed7048b107b6f76d87" + version "0.10.41" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.41.tgz#bab3e982d750f0112f0cb9e6abed72c59eb33eb2" dependencies: es6-iterator "~2.0.3" es6-symbol "~3.1.1" + next-tick "1" es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3: version "2.0.3" @@ -3255,19 +3162,9 @@ es6-map@^0.1.3: es6-symbol "~3.1.1" event-emitter "~0.3.5" -es6-promise@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.1.0.tgz#dda03ca8f9f89bc597e689842929de7ba8cebdf0" - es6-promise@^4.0.5: - version "4.2.2" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.2.tgz#f722d7769af88bd33bc13ec6605e1f92966b82d9" - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - dependencies: - es6-promise "^4.0.3" + version "4.2.4" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29" es6-set@~0.1.5: version "0.1.5" @@ -3349,11 +3246,11 @@ eslint-config-prettier@^2.9.0: get-stdin "^5.0.1" eslint-import-resolver-node@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz#4422574cde66a9a7b099938ee4d508a199e0e3cc" + version "0.3.2" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" dependencies: - debug "^2.6.8" - resolve "^1.2.0" + debug "^2.6.9" + resolve "^1.5.0" eslint-import-resolver-webpack@^0.8.4: version "0.8.4" @@ -3443,8 +3340,8 @@ eslint-visitor-keys@^1.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" eslint@^4.19.0: - version "4.19.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.0.tgz#9e900efb5506812ac374557034ef6f5c3642fc4c" + version "4.19.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" dependencies: ajv "^5.3.0" babel-code-frame "^6.22.0" @@ -3485,10 +3382,6 @@ eslint@^4.19.0: table "4.0.2" text-table "~0.2.0" -esmangle-evaluator@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/esmangle-evaluator/-/esmangle-evaluator-1.0.1.tgz#620d866ef4861b3311f75766d52a8572bb3c6336" - espree@^3.5.4: version "3.5.4" resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" @@ -3500,14 +3393,6 @@ esprima-fb@^15001.1.0-dev-harmony-fb: version "15001.1.0-dev-harmony-fb" resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz#30a947303c6b8d5e955bee2b99b1d233206a6901" -esprima-fb@~15001.1001.0-dev-harmony-fb: - version "15001.1001.0-dev-harmony-fb" - resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz#43beb57ec26e8cf237d3dd8b33e42533577f2659" - -esprima-fb@~3001.0001.0000-dev-harmony-fb, esprima-fb@~3001.1.0-dev-harmony-fb: - version "3001.1.0-dev-harmony-fb" - resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz#b77d37abcd38ea0b77426bb8bc2922ce6b426411" - esprima@^2.6.0: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" @@ -3555,7 +3440,7 @@ eventemitter3@1.x.x: version "1.2.0" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" -events@^1.0.0, events@^1.1.1: +events@1.1.1, events@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" @@ -3632,22 +3517,22 @@ expand-template@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-1.1.0.tgz#e09efba977bf98f9ee0ed25abd0c692e02aec3fc" -expect@^22.4.0: - version "22.4.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-22.4.0.tgz#371edf1ae15b83b5bf5ec34b42f1584660a36c16" +expect@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/expect/-/expect-22.4.3.tgz#d5a29d0a0e1fb2153557caef2674d4547e914674" dependencies: ansi-styles "^3.2.0" - jest-diff "^22.4.0" - jest-get-type "^22.1.0" - jest-matcher-utils "^22.4.0" - jest-message-util "^22.4.0" - jest-regex-util "^22.1.0" + jest-diff "^22.4.3" + jest-get-type "^22.4.3" + jest-matcher-utils "^22.4.3" + jest-message-util "^22.4.3" + jest-regex-util "^22.4.3" express@^4.16.2: - version "4.16.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c" + version "4.16.3" + resolved "https://registry.yarnpkg.com/express/-/express-4.16.3.tgz#6af8a502350db3246ecc4becf6b5a34d22f7ed53" dependencies: - accepts "~1.3.4" + accepts "~1.3.5" array-flatten "1.1.1" body-parser "1.18.2" content-disposition "0.5.2" @@ -3655,26 +3540,26 @@ express@^4.16.2: cookie "0.3.1" cookie-signature "1.0.6" debug "2.6.9" - depd "~1.1.1" - encodeurl "~1.0.1" + depd "~1.1.2" + encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" - finalhandler "1.1.0" + finalhandler "1.1.1" fresh "0.5.2" merge-descriptors "1.0.1" methods "~1.1.2" on-finished "~2.3.0" parseurl "~1.3.2" path-to-regexp "0.1.7" - proxy-addr "~2.0.2" + proxy-addr "~2.0.3" qs "6.5.1" range-parser "~1.2.0" safe-buffer "5.1.1" - send "0.16.1" - serve-static "1.13.1" + send "0.16.2" + serve-static "1.13.2" setprototypeof "1.1.0" - statuses "~1.3.1" - type-is "~1.6.15" + statuses "~1.4.0" + type-is "~1.6.16" utils-merge "1.0.1" vary "~1.1.2" @@ -3761,15 +3646,6 @@ extsprintf@^1.2.0: version "1.4.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" -falafel@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/falafel/-/falafel-1.2.0.tgz#c18d24ef5091174a497f318cd24b026a25cddab4" - dependencies: - acorn "^1.0.3" - foreach "^2.0.5" - isarray "0.0.1" - object-keys "^1.0.6" - fast-deep-equal@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" @@ -3892,16 +3768,16 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" -finalhandler@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" +finalhandler@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" dependencies: debug "2.6.9" - encodeurl "~1.0.1" + encodeurl "~1.0.2" escape-html "~1.0.3" on-finished "~2.3.0" parseurl "~1.3.2" - statuses "~1.3.1" + statuses "~1.4.0" unpipe "~1.0.0" find-babel-config@^1.1.0: @@ -3974,8 +3850,8 @@ flow-babel-webpack-plugin@^1.1.1: resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.68.0.tgz#86c2d14857d306eb2e85e274f2eebf543564f623" flow-typed@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/flow-typed/-/flow-typed-2.3.0.tgz#0f8604faab60691b885024e16ec0e3256e3b680e" + version "2.4.0" + resolved "https://registry.yarnpkg.com/flow-typed/-/flow-typed-2.4.0.tgz#3d2f48cf85df29df3bca6745b623726496ff4788" dependencies: babel-polyfill "^6.26.0" colors "^1.1.2" @@ -3989,13 +3865,13 @@ flow-typed@^2.3.0: semver "^5.5.0" table "^4.0.2" through "^2.3.8" - unzip "^0.1.11" + unzipper "^0.8.11" which "^1.3.0" yargs "^4.2.0" flush-write-stream@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.2.tgz#c81b90d8746766f1a609a46809946c45dd8ae417" + version "1.0.3" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd" dependencies: inherits "^2.0.1" readable-stream "^2.0.4" @@ -4049,11 +3925,11 @@ form-data@~2.1.1: mime-types "^2.1.12" form-data@~2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf" + version "2.3.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" dependencies: asynckit "^0.4.0" - combined-stream "^1.0.5" + combined-stream "1.0.6" mime-types "^2.1.12" formik@^0.10.4: @@ -4078,13 +3954,6 @@ fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" -from2@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-1.3.0.tgz#88413baaa5f9a597cfde9221d86986cd3c061dfd" - dependencies: - inherits "~2.0.1" - readable-stream "~1.1.10" - from2@^2.1.0, from2@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" @@ -4092,14 +3961,7 @@ from2@^2.1.0, from2@^2.3.0: inherits "^2.0.1" readable-stream "^2.0.0" -fs-extra-p@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/fs-extra-p/-/fs-extra-p-4.5.0.tgz#b79f3f3fcc0b5e57b7e7caeb06159f958ef15fe8" - dependencies: - bluebird-lst "^1.0.5" - fs-extra "^5.0.0" - -fs-extra-p@^4.5.2: +fs-extra-p@^4.5.0, fs-extra-p@^4.5.2: version "4.5.2" resolved "https://registry.yarnpkg.com/fs-extra-p/-/fs-extra-p-4.5.2.tgz#0a22aba489284d17f375d5dc5139aa777fe2df51" dependencies: @@ -4132,15 +3994,7 @@ fs-extra@^5.0.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-vacuum@~1.2.10: - version "1.2.10" - resolved "https://registry.yarnpkg.com/fs-vacuum/-/fs-vacuum-1.2.10.tgz#b7629bec07a4031a2548fdf99f5ecf1cc8b31e36" - dependencies: - graceful-fs "^4.1.2" - path-is-inside "^1.0.1" - rimraf "^2.5.2" - -fs-write-stream-atomic@^1.0.8, fs-write-stream-atomic@~1.0.10: +fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" dependencies: @@ -4168,16 +4022,7 @@ fstream-ignore@^1.0.5: inherits "2" minimatch "^3.0.0" -"fstream@>= 0.1.30 < 1": - version "0.1.31" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-0.1.31.tgz#7337f058fbbbbefa8c9f561a28cab0849202c988" - dependencies: - graceful-fs "~3.0.2" - inherits "~2.0.0" - mkdirp "0.5" - rimraf "2" - -fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: +fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2, fstream@~1.0.10: version "1.0.11" resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" dependencies: @@ -4223,10 +4068,6 @@ generate-object-property@^1.1.0: dependencies: is-property "^1.0.0" -genfun@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/genfun/-/genfun-4.0.1.tgz#ed10041f2e4a7f1b0a38466d17a5c3e27df1dfc1" - get-caller-file@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" @@ -4265,8 +4106,8 @@ getpass@^0.1.1: assert-plus "^1.0.0" gettext-parser@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/gettext-parser/-/gettext-parser-1.3.0.tgz#61465851c266f8521ba69e61ef505aa54f635d0a" + version "1.3.1" + resolved "https://registry.yarnpkg.com/gettext-parser/-/gettext-parser-1.3.1.tgz#74b7a99e4b5fa8daab11fa515e8a582480448a12" dependencies: encoding "^0.1.12" safe-buffer "^5.1.1" @@ -4321,7 +4162,7 @@ glob@^6.0.4: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1, glob@~7.1.2: +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: @@ -4417,16 +4258,10 @@ got@^7.1.0: url-parse-lax "^1.0.0" url-to-options "^1.0.1" -graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@~4.1.11: +graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" -graceful-fs@~3.0.2: - version "3.0.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818" - dependencies: - natives "^1.1.0" - "graceful-readlink@>= 1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" @@ -4489,8 +4324,8 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" has-symbol-support-x@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.1.tgz#66ec2e377e0c7d7ccedb07a3a84d77510ff1bc4c" + version "1.4.2" + resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" has-to-string-tag-x@^1.2.0: version "1.4.1" @@ -4498,7 +4333,7 @@ has-to-string-tag-x@^1.2.0: dependencies: has-symbol-support-x "^1.4.1" -has-unicode@^2.0.0, has-unicode@~2.0.1: +has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -4594,12 +4429,12 @@ hoek@2.x.x: resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" hoek@4.x.x: - version "4.2.0" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" + version "4.2.1" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" -hoist-non-react-statics@^2.2.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz#343db84c6018c650778898240135a1420ee22ce0" +hoist-non-react-statics@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz#d2ca2dfc19c5a91c5a6615ce8e564ef0347e2a40" home-or-tmp@^2.0.0: version "2.0.0" @@ -4612,11 +4447,7 @@ home-path@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/home-path/-/home-path-1.0.5.tgz#788b29815b12d53bacf575648476e6f9041d133f" -hosted-git-info@^2.1.4, hosted-git-info@^2.4.2, hosted-git-info@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" - -hosted-git-info@^2.6.0: +hosted-git-info@^2.1.4, hosted-git-info@^2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.0.tgz#23235b29ab230c576aab0d4f13fc046b0b038222" @@ -4653,26 +4484,13 @@ html-loader@^0.5.5: loader-utils "^1.1.0" object-assign "^4.1.1" -html-minifier@^3.2.3: - version "3.5.7" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.7.tgz#511e69bb5a8e7677d1012ebe03819aa02ca06208" +html-minifier@^3.2.3, html-minifier@^3.5.8: + version "3.5.12" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.12.tgz#6bfad4d0327f5b8d2b62f5854654ac3703b9b031" dependencies: camel-case "3.0.x" clean-css "4.1.x" - commander "2.12.x" - he "1.1.x" - ncname "1.0.x" - param-case "2.1.x" - relateurl "0.2.x" - uglify-js "3.2.x" - -html-minifier@^3.5.8: - version "3.5.10" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.10.tgz#8522c772c388db81aa5c26f62033302d906ea1c7" - dependencies: - camel-case "3.0.x" - clean-css "4.1.x" - commander "2.14.x" + commander "2.15.x" he "1.1.x" ncname "1.0.x" param-case "2.1.x" @@ -4699,10 +4517,6 @@ htmlparser2@~3.3.0: domutils "1.1" readable-stream "1.0" -http-cache-semantics@^3.8.0: - version "3.8.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" - http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" @@ -4717,15 +4531,8 @@ http-errors@1.6.2, http-errors@~1.6.2: statuses ">= 1.3.1 < 2" http-parser-js@>=0.4.0: - version "0.4.9" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.9.tgz#ea1a04fb64adff0242e9974f297dd4c3cad271e1" - -http-proxy-agent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.0.0.tgz#46482a2f0523a4d6082551709f469cb3e4a85ff4" - dependencies: - agent-base "4" - debug "2" + version "0.4.11" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.11.tgz#5b720849c650903c27e521633d94696ee95f3529" http-proxy-middleware@~0.17.4: version "0.17.4" @@ -4763,19 +4570,6 @@ https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" -https-proxy-agent@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.1.1.tgz#a7ce4382a1ba8266ee848578778122d491260fd9" - dependencies: - agent-base "^4.1.0" - debug "^3.1.0" - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - dependencies: - ms "^2.0.0" - humanize-plus@^1.8.1: version "1.8.2" resolved "https://registry.yarnpkg.com/humanize-plus/-/humanize-plus-1.8.2.tgz#a65b34459ad6367adbb3707a82a3c9f916167030" @@ -4811,20 +4605,18 @@ icss-utils@^2.1.0: dependencies: postcss "^6.0.1" -ieee754@^1.1.4: +ieee754@1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" -iferr@^0.1.5, iferr@~0.1.5: +ieee754@^1.1.4: + version "1.1.10" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.10.tgz#719a6f7b026831e64bdb838b0de1bb0029bbf716" + +iferr@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" -ignore-walk@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" - dependencies: - minimatch "^3.0.4" - ignore@^3.3.3: version "3.3.7" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" @@ -4870,7 +4662,7 @@ indexof@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" -inflight@^1.0.4, inflight@~1.0.6: +inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" dependencies: @@ -4885,30 +4677,10 @@ inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" -ini@^1.3.4, ini@~1.3.0, ini@~1.3.4: +ini@^1.3.4, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" -init-package-json@~1.10.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.1.tgz#cd873a167796befb99612b28762a0b6393fd8f6a" - dependencies: - glob "^7.1.1" - npm-package-arg "^4.0.0 || ^5.0.0" - promzard "^0.3.0" - read "~1.0.1" - read-package-json "1 || 2" - semver "2.x || 3.x || 4 || 5" - validate-npm-package-license "^3.0.1" - validate-npm-package-name "^3.0.0" - -inline-process-browser@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/inline-process-browser/-/inline-process-browser-1.0.0.tgz#46a61b153dd3c9b1624b1a00626edb4f7f414f22" - dependencies: - falafel "^1.0.1" - through2 "^0.6.5" - inquirer@^3.0.6: version "3.3.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" @@ -4929,8 +4701,8 @@ inquirer@^3.0.6: through "^2.3.6" install@^0.10.2: - version "0.10.2" - resolved "https://registry.yarnpkg.com/install/-/install-0.10.2.tgz#f1f71902797e5a900069fb9ab80c94055025ffdc" + version "0.10.4" + resolved "https://registry.yarnpkg.com/install/-/install-0.10.4.tgz#9cb09115768b93a582d1450a6ba3f275975b49aa" internal-ip@1.2.0: version "1.2.0" @@ -4942,15 +4714,9 @@ interpret@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" -invariant@^2.0.0, invariant@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" - dependencies: - loose-envify "^1.0.0" - -invariant@^2.2.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.3.tgz#1a827dfde7dcbd7c323f0ca826be8fa7c5e9d688" +invariant@^2.0.0, invariant@^2.2.0, invariant@^2.2.2: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" dependencies: loose-envify "^1.0.0" @@ -4958,13 +4724,13 @@ invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" -ip@^1.1.0, ip@^1.1.4, ip@^1.1.5: +ip@^1.1.0, ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" -ipaddr.js@1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.5.2.tgz#d4b505bde9946987ccf0fc58d9010ff9607e3fa0" +ipaddr.js@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.6.0.tgz#e3fa357b773da619f26e95f049d055c72796f86b" is-absolute-url@^2.0.0: version "2.1.0" @@ -5017,24 +4783,12 @@ is-callable@^1.1.1, is-callable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" -is-ci@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" - dependencies: - ci-info "^1.0.0" - -is-ci@^1.1.0: +is-ci@^1.0.10, is-ci@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" dependencies: ci-info "^1.0.0" -is-cidr@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-1.0.0.tgz#fb5aacf659255310359da32cae03e40c6a1c2afc" - dependencies: - cidr-regex "1.0.6" - is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -5148,12 +4902,17 @@ is-installed-globally@^0.1.0: global-dirs "^0.1.0" is-path-inside "^1.0.0" +is-my-ip-valid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" + is-my-json-valid@^2.12.4: - version "2.16.1" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz#5a846777e2c2620d1e69104e5d3a03b1f6088f11" + version "2.17.2" + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz#6b2103a288e94ef3de5cf15d29dd85fc4b78d65c" dependencies: generate-function "^2.0.0" generate-object-property "^1.1.0" + is-my-ip-valid "^1.0.0" jsonpointer "^4.0.0" xtend "^4.0.0" @@ -5355,81 +5114,81 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" -jest-config@^22.4.2: - version "22.4.2" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.4.2.tgz#580ba5819bf81a5e48f4fd470e8b81834f45c855" +jest-config@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.4.3.tgz#0e9d57db267839ea31309119b41dc2fa31b76403" dependencies: chalk "^2.0.1" glob "^7.1.1" - jest-environment-jsdom "^22.4.1" - jest-environment-node "^22.4.1" - jest-get-type "^22.1.0" - jest-jasmine2 "^22.4.2" - jest-regex-util "^22.1.0" - jest-resolve "^22.4.2" - jest-util "^22.4.1" - jest-validate "^22.4.2" - pretty-format "^22.4.0" + jest-environment-jsdom "^22.4.3" + jest-environment-node "^22.4.3" + jest-get-type "^22.4.3" + jest-jasmine2 "^22.4.3" + jest-regex-util "^22.4.3" + jest-resolve "^22.4.3" + jest-util "^22.4.3" + jest-validate "^22.4.3" + pretty-format "^22.4.3" -jest-diff@^22.4.0: - version "22.4.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.4.0.tgz#384c2b78519ca44ca126382df53f134289232525" +jest-diff@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.4.3.tgz#e18cc3feff0aeef159d02310f2686d4065378030" dependencies: chalk "^2.0.1" diff "^3.2.0" - jest-get-type "^22.1.0" - pretty-format "^22.4.0" + jest-get-type "^22.4.3" + pretty-format "^22.4.3" jest-docblock@^21.0.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" -jest-environment-jsdom@^22.4.1: - version "22.4.1" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.4.1.tgz#754f408872441740100d3917e5ec40c74de6447f" +jest-environment-jsdom@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz#d67daa4155e33516aecdd35afd82d4abf0fa8a1e" dependencies: - jest-mock "^22.2.0" - jest-util "^22.4.1" + jest-mock "^22.4.3" + jest-util "^22.4.3" jsdom "^11.5.1" -jest-environment-node@^22.4.1: - version "22.4.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.4.1.tgz#418850eb654596b8d6e36c2021cbedbc23df8e16" +jest-environment-node@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.4.3.tgz#54c4eaa374c83dd52a9da8759be14ebe1d0b9129" dependencies: - jest-mock "^22.2.0" - jest-util "^22.4.1" + jest-mock "^22.4.3" + jest-util "^22.4.3" -jest-get-type@^22.1.0: - version "22.1.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.1.0.tgz#4e90af298ed6181edc85d2da500dbd2753e0d5a9" +jest-get-type@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" -jest-jasmine2@^22.4.2: - version "22.4.2" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.4.2.tgz#dfd3d259579ed6f52510d8f1ab692808f0d40691" +jest-jasmine2@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.4.3.tgz#4daf64cd14c793da9db34a7c7b8dcfe52a745965" dependencies: chalk "^2.0.1" co "^4.6.0" - expect "^22.4.0" + expect "^22.4.3" graceful-fs "^4.1.11" is-generator-fn "^1.0.0" - jest-diff "^22.4.0" - jest-matcher-utils "^22.4.0" - jest-message-util "^22.4.0" - jest-snapshot "^22.4.0" - jest-util "^22.4.1" + jest-diff "^22.4.3" + jest-matcher-utils "^22.4.3" + jest-message-util "^22.4.3" + jest-snapshot "^22.4.3" + jest-util "^22.4.3" source-map-support "^0.5.0" -jest-matcher-utils@^22.4.0: - version "22.4.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.4.0.tgz#d55f5faf2270462736bdf7c7485ee931c9d4b6a1" +jest-matcher-utils@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz#4632fe428ebc73ebc194d3c7b65d37b161f710ff" dependencies: chalk "^2.0.1" - jest-get-type "^22.1.0" - pretty-format "^22.4.0" + jest-get-type "^22.4.3" + pretty-format "^22.4.3" -jest-message-util@^22.4.0: - version "22.4.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.4.0.tgz#e3d861df16d2fee60cb2bc8feac2188a42579642" +jest-message-util@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.4.3.tgz#cf3d38aafe4befddbfc455e57d65d5239e399eb7" dependencies: "@babel/code-frame" "^7.0.0-beta.35" chalk "^2.0.1" @@ -5437,74 +5196,67 @@ jest-message-util@^22.4.0: slash "^1.0.0" stack-utils "^1.0.1" -jest-mock@^22.2.0: - version "22.2.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.2.0.tgz#444b3f9488a7473adae09bc8a77294afded397a7" +jest-mock@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.4.3.tgz#f63ba2f07a1511772cdc7979733397df770aabc7" -jest-regex-util@^22.1.0: - version "22.1.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.1.0.tgz#5daf2fe270074b6da63e5d85f1c9acc866768f53" +jest-regex-util@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.4.3.tgz#a826eb191cdf22502198c5401a1fc04de9cef5af" -jest-resolve@^22.4.2: - version "22.4.2" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.4.2.tgz#25d88aa4147462c9c1c6a1ba16250d3794c24d00" +jest-resolve@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.4.3.tgz#0ce9d438c8438229aa9b916968ec6b05c1abb4ea" dependencies: browser-resolve "^1.11.2" chalk "^2.0.1" -jest-snapshot@^22.4.0: - version "22.4.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.4.0.tgz#03d3ce63f8fa7352388afc6a3c8b5ccc3a180ed7" +jest-snapshot@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.4.3.tgz#b5c9b42846ffb9faccb76b841315ba67887362d2" dependencies: chalk "^2.0.1" - jest-diff "^22.4.0" - jest-matcher-utils "^22.4.0" + jest-diff "^22.4.3" + jest-matcher-utils "^22.4.3" mkdirp "^0.5.1" natural-compare "^1.4.0" - pretty-format "^22.4.0" + pretty-format "^22.4.3" -jest-util@^22.4.1: - version "22.4.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.4.1.tgz#dd17c3bdb067f8e90591563ec0c42bf847dc249f" +jest-util@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.4.3.tgz#c70fec8eec487c37b10b0809dc064a7ecf6aafac" dependencies: callsites "^2.0.0" chalk "^2.0.1" graceful-fs "^4.1.11" is-ci "^1.0.10" - jest-message-util "^22.4.0" + jest-message-util "^22.4.3" mkdirp "^0.5.1" source-map "^0.6.0" -jest-validate@^22.4.0, jest-validate@^22.4.2: - version "22.4.2" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.4.2.tgz#e789a4e056173bf97fe797a2df2d52105c57d4f4" +jest-validate@^22.4.0, jest-validate@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.4.3.tgz#0780954a5a7daaeec8d3c10834b9280865976b30" dependencies: chalk "^2.0.1" - jest-config "^22.4.2" - jest-get-type "^22.1.0" + jest-config "^22.4.3" + jest-get-type "^22.4.3" leven "^2.1.0" - pretty-format "^22.4.0" + pretty-format "^22.4.3" jmespath@0.15.0: version "0.15.0" resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" js-base64@^2.1.8, js-base64@^2.1.9: - version "2.3.2" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.3.2.tgz#a79a923666372b580f8e27f51845c6f7e8fbfbaf" + version "2.4.3" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.3.tgz#2e545ec2b0f2957f41356510205214e98fad6582" js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -js-yaml@^3.10.0, js-yaml@^3.9.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@^3.11.0, js-yaml@^3.9.1: +js-yaml@^3.10.0, js-yaml@^3.11.0, js-yaml@^3.9.0, js-yaml@^3.9.1: version "3.11.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" dependencies: @@ -5573,7 +5325,7 @@ json-loader@^0.5.4: version "0.5.7" resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" -json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1: +json-parse-better-errors@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz#50183cd1b2d25275de069e9e71b467ac9eab973a" @@ -5623,10 +5375,6 @@ jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" -jsonparse@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - jsonpointer@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" @@ -5650,14 +5398,6 @@ jstransform@^11.0.3: object-assign "^2.0.0" source-map "^0.4.2" -jstransform@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/jstransform/-/jstransform-3.0.0.tgz#a2591ab6cee8d97bf3be830dbfa2313b87cd640b" - dependencies: - base62 "0.1.1" - esprima-fb "~3001.1.0-dev-harmony-fb" - source-map "0.1.31" - jsx-ast-utils@^2.0.0, jsx-ast-utils@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" @@ -5711,16 +5451,6 @@ lazy-cache@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" -lazy-cache@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-2.0.2.tgz#b9190a4f913354694840859f8a8f7084d8822264" - dependencies: - set-getter "^0.1.0" - -lazy-property@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lazy-property/-/lazy-property-1.0.0.tgz#84ddc4b370679ba8bd4cdcfa4c06b43d57111147" - lazy-val@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.3.tgz#bb97b200ef00801d94c317e29dc6ed39e31c5edc" @@ -5746,27 +5476,11 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -libnpx@~9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/libnpx/-/libnpx-9.6.0.tgz#c441ddd698b043bd8e8dc78384fa8eb7d77991e5" +lie@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e" dependencies: - dotenv "^4.0.0" - npm-package-arg "^5.1.2" - rimraf "^2.6.1" - safe-buffer "^5.1.0" - update-notifier "^2.2.0" - which "^1.2.14" - y18n "^3.2.1" - yargs "^8.0.2" - -lie@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/lie/-/lie-3.0.2.tgz#ffda21d7bba26f377cad865d3649b2fc8ce39fea" - dependencies: - es3ify "^0.1.3" immediate "~3.0.5" - inline-process-browser "^1.0.0" - unreachable-branch-transform "^0.3.0" lint-staged@^7.0.0: version "7.0.0" @@ -5794,6 +5508,10 @@ lint-staged@^7.0.0: staged-git-files "1.1.0" stringify-object "^3.2.2" +listenercount@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" + listr-silent-renderer@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" @@ -5883,10 +5601,10 @@ loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0: json5 "^0.5.0" localforage@^1.5.0: - version "1.5.4" - resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.5.4.tgz#2d5cd0f1e0cf0d344c24324acc5bab6c82cd2f6f" + version "1.6.0" + resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.6.0.tgz#8b0059beeb3875c48124286ca7fdbf23d52b8c97" dependencies: - lie "3.0.2" + lie "3.1.1" locate-path@^2.0.0: version "2.0.0" @@ -5895,33 +5613,14 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" -lockfile@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.3.tgz#2638fc39a0331e9cac1a04b71799931c9c50df79" - -lodash-es@^4.17.4, lodash-es@^4.2.0, lodash-es@^4.2.1: - version "4.17.4" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7" +lodash-es@^4.17.4, lodash-es@^4.17.5, lodash-es@^4.2.1: + version "4.17.7" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.7.tgz#db240a3252c3dd8360201ac9feef91ac977ea856" lodash._baseget@^3.0.0: version "3.7.2" resolved "https://registry.yarnpkg.com/lodash._baseget/-/lodash._baseget-3.7.2.tgz#1b6ae1d5facf3c25532350a13c1197cb8bb674f4" -lodash._baseuniq@~4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" - dependencies: - lodash._createset "~4.0.0" - lodash._root "~3.0.0" - -lodash._createset@~4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" - -lodash._root@~3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" - lodash._topath@^3.0.0: version "3.8.1" resolved "https://registry.yarnpkg.com/lodash._topath/-/lodash._topath-3.8.1.tgz#3ec5e2606014f4cb97f755fe6914edd8bfc00eac" @@ -5936,7 +5635,7 @@ lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" -lodash.clonedeep@^4.3.2, lodash.clonedeep@~4.5.0: +lodash.clonedeep@^4.3.2: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" @@ -5976,12 +5675,12 @@ lodash.memoize@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" lodash.merge@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5" + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.1.tgz#adc25d9cb99b9391c59624f379fbba60d7111d54" lodash.mergewith@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55" + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927" lodash.pickby@^4.6.0: version "4.6.0" @@ -5999,11 +5698,7 @@ lodash.tail@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664" -lodash.union@~4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" - -lodash.uniq@^4.5.0, lodash.uniq@~4.5.0: +lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" @@ -6011,19 +5706,7 @@ lodash.unset@^4.5.2: version "4.5.2" resolved "https://registry.yarnpkg.com/lodash.unset/-/lodash.unset-4.5.2.tgz#370d1d3e85b72a7e1b0cdf2d272121306f23e4ed" -lodash.without@~4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.without/-/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac" - -lodash@^3.10.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" - -lodash@^4.0.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@~4.17.4: - version "4.17.4" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" - -lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.5, lodash@^4.3.0: +lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@~4.17.4: version "4.17.5" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" @@ -6047,8 +5730,8 @@ log-update@^1.0.2: cli-cursor "^1.0.2" loglevel@^1.4.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.0.tgz#ae0caa561111498c5ba13723d6fb631d24003934" + version "1.6.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa" longest@^1.0.1: version "1.0.1" @@ -6075,9 +5758,9 @@ lowercase-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" -lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@~4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" +lru-cache@^4.0.1, lru-cache@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.2.tgz#45234b2e6e2f2b33da125624c4664929a0224c3f" dependencies: pseudomap "^1.0.2" yallist "^2.1.2" @@ -6091,27 +5774,11 @@ macaddress@^0.2.8: resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" make-dir@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.1.0.tgz#19b4369fe48c116f53c2af95ad102c0e39e85d51" + version "1.2.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.2.0.tgz#6d6a49eead4aae296c53bbf3a1a008bd6c89469b" dependencies: pify "^3.0.0" -make-fetch-happen@^2.4.13, make-fetch-happen@^2.5.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-2.6.0.tgz#8474aa52198f6b1ae4f3094c04e8370d35ea8a38" - dependencies: - agentkeepalive "^3.3.0" - cacache "^10.0.0" - http-cache-semantics "^3.8.0" - http-proxy-agent "^2.0.0" - https-proxy-agent "^2.1.0" - lru-cache "^4.1.1" - mississippi "^1.2.0" - node-fetch-npm "^2.0.2" - promise-retry "^1.1.1" - socks-proxy-agent "^3.0.1" - ssri "^5.0.0" - make-runnable@^1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/make-runnable/-/make-runnable-1.3.6.tgz#ca9b1d31b06f051e37570fb7ad98bc5369f982be" @@ -6134,15 +5801,8 @@ map-visit@^1.0.0: object-visit "^1.0.0" marked@*: - version "0.3.6" - resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" - -"match-stream@>= 0.0.2 < 1": - version "0.0.2" - resolved "https://registry.yarnpkg.com/match-stream/-/match-stream-0.0.2.tgz#99eb050093b34dffade421b9ac0b410a9cfa17cf" - dependencies: - buffers "~0.1.1" - readable-stream "~1.0.0" + version "0.3.17" + resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.17.tgz#607f06668b3c6b1246b28f13da76116ac1aa2d2b" math-expression-evaluator@^1.2.14: version "1.2.17" @@ -6167,10 +5827,6 @@ md5@^2.1.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" -meant@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/meant/-/meant-1.0.1.tgz#66044fea2f23230ec806fb515efea29c44d2115d" - media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -6266,30 +5922,16 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -"mime-db@>= 1.30.0 < 2", mime-db@^1.28.0: - version "1.31.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.31.0.tgz#a49cd8f3ebf3ed1a482b60561d9105ad40ca74cb" - -mime-db@~1.30.0: - version "1.30.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" - -mime-db@~1.33.0: +"mime-db@>= 1.33.0 < 2", mime-db@^1.28.0, mime-db@~1.33.0: version "1.33.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" -mime-types@^2.1.12, mime-types@~2.1.7: +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.7: version "2.1.18" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" dependencies: mime-db "~1.33.0" -mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.17: - version "2.1.17" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" - dependencies: - mime-db "~1.30.0" - mime@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" @@ -6338,33 +5980,6 @@ minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" -minipass@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.2.1.tgz#5ada97538b1027b4cf7213432428578cb564011f" - dependencies: - yallist "^3.0.0" - -minizlib@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.0.4.tgz#8ebb51dd8bbe40b0126b5633dbb36b284a2f523c" - dependencies: - minipass "^2.2.1" - -mississippi@^1.2.0, mississippi@^1.3.0, mississippi@~1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-1.3.0.tgz#d201583eb12327e3c5c1642a404a9cacf94e34f5" - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^1.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - mississippi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f" @@ -6395,14 +6010,8 @@ mixin-object@^2.0.1: is-extendable "^0.1.1" mixpanel-browser@^2.17.1: - version "2.17.1" - resolved "https://registry.yarnpkg.com/mixpanel-browser/-/mixpanel-browser-2.17.1.tgz#1b90a0478ec912f35f761c52e08d4228fc37867f" - -mkdirp@0.5, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - dependencies: - minimist "0.0.8" + version "2.19.0" + resolved "https://registry.yarnpkg.com/mixpanel-browser/-/mixpanel-browser-2.19.0.tgz#425a5c29f621b2050d2aa4ee121b73a4ccd6c3aa" mkdirp@0.5.0: version "0.5.0" @@ -6410,15 +6019,21 @@ mkdirp@0.5.0: dependencies: minimist "0.0.8" +mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + modify-filename@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/modify-filename/-/modify-filename-1.1.0.tgz#9a2dec83806fbb2d975f22beec859ca26b393aa1" moment@^2.20.1: - version "2.20.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.20.1.tgz#d6eb1a46cbcc14a2b2f9434112c1ff8907f313fd" + version "2.21.0" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.21.0.tgz#2a114b51d2a6ec9e6d83cf803f838a878d8a023a" -move-concurrently@^1.0.1, move-concurrently@~1.0.1: +move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" dependencies: @@ -6444,7 +6059,7 @@ mp4-stream@^2.0.0: next-event "^1.0.0" readable-stream "^2.0.3" -ms@2.0.0, ms@^2.0.0: +ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -6453,11 +6068,11 @@ multicast-dns-service-types@^1.1.0: resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" multicast-dns@^6.0.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.1.tgz#c5035defa9219d30640558a49298067352098060" + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" dependencies: - dns-packet "^1.0.1" - thunky "^0.1.0" + dns-packet "^1.3.1" + thunky "^1.0.2" multistream@^2.0.2: version "2.1.0" @@ -6466,7 +6081,7 @@ multistream@^2.0.2: inherits "^2.0.1" readable-stream "^2.0.5" -mute-stream@0.0.7, mute-stream@~0.0.4: +mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" @@ -6474,13 +6089,9 @@ nan@2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46" -nan@^2.3.0: - version "2.9.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.9.2.tgz#f564d75f5f8f36a6d9456cca7a6c4fe488ab7866" - -nan@^2.3.2: - version "2.5.1" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.1.tgz#d5b01691253326a97a2bbee9e61c55d8d60351e2" +nan@^2.3.0, nan@^2.3.2: + version "2.10.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" nanomatch@^1.2.9: version "1.2.9" @@ -6499,10 +6110,6 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" -natives@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.1.tgz#011acce1f7cbd87f7ba6b3093d6cd9392be1c574" - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -6525,6 +6132,10 @@ next-event@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/next-event/-/next-event-1.0.0.tgz#e7778acde2e55802e0ad1879c39cf6f75eda61d8" +next-tick@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + no-case@^2.2.0: version "2.3.2" resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" @@ -6537,14 +6148,6 @@ node-abi@^2.2.0: dependencies: semver "^5.4.1" -node-fetch-npm@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz#7258c9046182dca345b4208eda918daf33697ff7" - dependencies: - encoding "^0.1.11" - json-parse-better-errors "^1.0.0" - safe-buffer "^5.1.1" - node-fetch@^1.0.1: version "1.7.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" @@ -6552,11 +6155,11 @@ node-fetch@^1.0.1: encoding "^0.1.11" is-stream "^1.0.1" -node-forge@0.6.33: - version "0.6.33" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.33.tgz#463811879f573d45155ad6a9f43dc296e8e85ebc" +node-forge@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.1.tgz#9da611ea08982f4b94206b3beb4cc9665f20c300" -node-gyp@^3.3.1, node-gyp@~3.6.2: +node-gyp@^3.3.1: version "3.6.2" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60" dependencies: @@ -6665,14 +6268,14 @@ noop-logger@^0.1.1: dependencies: abbrev "1" -nopt@^4.0.1, nopt@~4.0.1: +nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" dependencies: abbrev "1" osenv "^0.1.4" -normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.4.0, "normalize-package-data@~1.0.1 || ^2.0.0", normalize-package-data@~2.4.0: +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" dependencies: @@ -6704,93 +6307,18 @@ normalize-url@^1.4.0, normalize-url@^1.9.1: query-string "^4.1.0" sort-keys "^1.0.0" -npm-bundled@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.3.tgz#7e71703d973af3370a9591bafe3a63aca0be2308" - -npm-cache-filename@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz#ded306c5b0bfc870a9e9faf823bc5f283e05ae11" - -npm-install-checks@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-3.0.0.tgz#d4aecdfd51a53e3723b7b2f93b2ee28e307bc0d7" - dependencies: - semver "^2.3.0 || 3.x || 4 || 5" - -npm-lifecycle@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-1.0.3.tgz#4cd60543247dbba631281e48ce665ffd52380cce" - dependencies: - graceful-fs "^4.1.11" - slide "^1.1.6" - uid-number "0.0.6" - umask "^1.1.0" - which "^1.3.0" - -"npm-package-arg@^3.0.0 || ^4.0.0 || ^5.0.0", "npm-package-arg@^4.0.0 || ^5.0.0", npm-package-arg@^5.1.2, npm-package-arg@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-5.1.2.tgz#fb18d17bb61e60900d6312619919bd753755ab37" - dependencies: - hosted-git-info "^2.4.2" - osenv "^0.1.4" - semver "^5.1.0" - validate-npm-package-name "^3.0.0" - -npm-packlist@^1.1.6, npm-packlist@~1.1.9: - version "1.1.10" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.10.tgz#1039db9e985727e464df066f4cf0ab6ef85c398a" - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - npm-path@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.3.tgz#15cff4e1c89a38da77f56f6055b24f975dfb2bbe" + version "2.0.4" + resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" dependencies: which "^1.2.10" -npm-pick-manifest@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-1.0.4.tgz#a5ee6510c1fe7221c0bc0414e70924c14045f7e8" - dependencies: - npm-package-arg "^5.1.2" - semver "^5.3.0" - -npm-profile@~2.0.4: - version "2.0.5" - resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-2.0.5.tgz#0e61b8f1611bd19d1eeff5e3d5c82e557da3b9d7" - dependencies: - aproba "^1.1.2" - make-fetch-happen "^2.5.0" - -npm-registry-client@~8.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/npm-registry-client/-/npm-registry-client-8.5.0.tgz#4878fb6fa1f18a5dc08ae83acf94d0d0112d7ed0" - dependencies: - concat-stream "^1.5.2" - graceful-fs "^4.1.6" - normalize-package-data "~1.0.1 || ^2.0.0" - npm-package-arg "^3.0.0 || ^4.0.0 || ^5.0.0" - once "^1.3.3" - request "^2.74.0" - retry "^0.10.0" - semver "2 >=2.2.1 || 3.x || 4 || 5" - slide "^1.1.3" - ssri "^4.1.2" - optionalDependencies: - npmlog "2 || ^3.1.0 || ^4.0.0" - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" dependencies: path-key "^2.0.0" -npm-user-validate@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.0.tgz#8ceca0f5cea04d4e93519ef72d0557a75122e951" - npm-which@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" @@ -6799,106 +6327,7 @@ npm-which@^3.0.1: npm-path "^2.0.2" which "^1.2.10" -npm@^5.5.1: - version "5.5.1" - resolved "https://registry.yarnpkg.com/npm/-/npm-5.5.1.tgz#5bef2b01c51c8144412d5873caf83e22f1ec6b84" - dependencies: - JSONStream "~1.3.1" - abbrev "~1.1.1" - ansi-regex "~3.0.0" - ansicolors "~0.3.2" - ansistyles "~0.1.3" - aproba "~1.2.0" - archy "~1.0.0" - bluebird "~3.5.0" - cacache "~9.2.9" - call-limit "~1.1.0" - chownr "~1.0.1" - cli-table2 "~0.2.0" - cmd-shim "~2.0.2" - columnify "~1.5.4" - config-chain "~1.1.11" - detect-indent "~5.0.0" - dezalgo "~1.0.3" - editor "~1.0.0" - fs-vacuum "~1.2.10" - fs-write-stream-atomic "~1.0.10" - glob "~7.1.2" - graceful-fs "~4.1.11" - has-unicode "~2.0.1" - hosted-git-info "~2.5.0" - iferr "~0.1.5" - inflight "~1.0.6" - inherits "~2.0.3" - ini "~1.3.4" - init-package-json "~1.10.1" - is-cidr "~1.0.0" - lazy-property "~1.0.0" - libnpx "~9.6.0" - lockfile "~1.0.3" - lodash._baseuniq "~4.6.0" - lodash.clonedeep "~4.5.0" - lodash.union "~4.6.0" - lodash.uniq "~4.5.0" - lodash.without "~4.4.0" - lru-cache "~4.1.1" - meant "~1.0.1" - mississippi "~1.3.0" - mkdirp "~0.5.1" - move-concurrently "~1.0.1" - node-gyp "~3.6.2" - nopt "~4.0.1" - normalize-package-data "~2.4.0" - npm-cache-filename "~1.0.2" - npm-install-checks "~3.0.0" - npm-lifecycle "~1.0.3" - npm-package-arg "~5.1.2" - npm-packlist "~1.1.9" - npm-profile "~2.0.4" - npm-registry-client "~8.5.0" - npm-user-validate "~1.0.0" - npmlog "~4.1.2" - once "~1.4.0" - opener "~1.4.3" - osenv "~0.1.4" - pacote "~6.0.2" - path-is-inside "~1.0.2" - promise-inflight "~1.0.1" - qrcode-terminal "~0.11.0" - query-string "~5.0.0" - qw "~1.0.1" - read "~1.0.7" - read-cmd-shim "~1.0.1" - read-installed "~4.0.3" - read-package-json "~2.0.12" - read-package-tree "~5.1.6" - readable-stream "~2.3.3" - request "~2.83.0" - retry "~0.10.1" - rimraf "~2.6.2" - safe-buffer "~5.1.1" - semver "~5.4.1" - sha "~2.0.1" - slide "~1.1.6" - sorted-object "~2.0.1" - sorted-union-stream "~2.1.3" - ssri "~4.1.6" - strip-ansi "~4.0.0" - tar "~4.0.1" - text-table "~0.2.0" - uid-number "0.0.6" - umask "~1.1.0" - unique-filename "~1.1.0" - unpipe "~1.0.0" - update-notifier "~2.2.0" - uuid "~3.1.0" - validate-npm-package-name "~3.0.0" - which "~1.3.0" - worker-farm "~1.5.0" - wrappy "~1.0.2" - write-file-atomic "~2.1.0" - -"npmlog@0 || 1 || 2 || 3 || 4", "npmlog@2 || ^3.1.0 || ^4.0.0", npmlog@^4.0.0, npmlog@^4.0.1, npmlog@^4.0.2, npmlog@~4.1.2: +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.1, npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" dependencies: @@ -6934,8 +6363,8 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" nwmatcher@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.3.tgz#64348e3b3d80f035b40ac11563d278f8b72db89c" + version "1.4.4" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.4.tgz#2285631f34a95f0d0395cd900c96ed39b58f346e" oauth-sign@~0.8.1, oauth-sign@~0.8.2: version "0.8.2" @@ -6957,7 +6386,7 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-keys@^1.0.6, object-keys@^1.0.8: +object-keys@^1.0.8: version "1.0.11" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" @@ -6985,8 +6414,8 @@ object.pick@^1.3.0: isobject "^3.0.1" obuf@^1.0.0, obuf@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.1.tgz#104124b6c602c6796881a042541d36db43a5264e" + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" on-finished@~2.3.0: version "2.3.0" @@ -6998,7 +6427,7 @@ on-headers@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" -once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0, once@~1.4.0: +once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: @@ -7006,7 +6435,7 @@ once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0, once@~1.4.0: onetime@^1.0.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + resolved "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" onetime@^2.0.0: version "2.0.1" @@ -7014,13 +6443,9 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" -opener@~1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8" - opn@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.1.0.tgz#72ce2306a17dbea58ff1041853352b4a8fc77519" + version "5.3.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.3.0.tgz#64871565c863875f052cfdf53d3e3cb5adb53b1c" dependencies: is-wsl "^1.1.0" @@ -7076,24 +6501,13 @@ os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" -osenv@0, osenv@~0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -osenv@^0.1.4: +osenv@0, osenv@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -"over@>= 0.0.5 < 1": - version "0.0.5" - resolved "https://registry.yarnpkg.com/over/-/over-0.0.5.tgz#f29852e70fd7e25f360e013a8ec44c82aedb5708" - p-cancelable@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" @@ -7137,32 +6551,6 @@ package-json@^4.0.0: registry-url "^3.0.3" semver "^5.1.0" -pacote@~6.0.2: - version "6.0.4" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-6.0.4.tgz#9384c4ca9a9dbbaa625bfbe653e0330eeaa1427b" - dependencies: - bluebird "^3.5.0" - cacache "^9.2.9" - glob "^7.1.2" - lru-cache "^4.1.1" - make-fetch-happen "^2.4.13" - minimatch "^3.0.4" - mississippi "^1.2.0" - normalize-package-data "^2.4.0" - npm-package-arg "^5.1.2" - npm-packlist "^1.1.6" - npm-pick-manifest "^1.0.4" - osenv "^0.1.4" - promise-inflight "^1.0.1" - promise-retry "^1.1.1" - protoduck "^4.0.0" - safe-buffer "^5.1.1" - semver "^5.4.1" - ssri "^4.1.6" - tar "^4.0.0" - unique-filename "^1.1.0" - which "^1.3.0" - pako@~1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" @@ -7260,7 +6648,7 @@ path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" -path-is-inside@^1.0.1, path-is-inside@^1.0.2, path-is-inside@~1.0.2: +path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" @@ -7619,12 +7007,12 @@ postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0 supports-color "^3.2.3" postcss@^6.0.1: - version "6.0.14" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.14.tgz#5534c72114739e75d0afcf017db853099f562885" + version "6.0.20" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.20.tgz#686107e743a12d5530cb68438c590d5b2bf72c3c" dependencies: - chalk "^2.3.0" + chalk "^2.3.2" source-map "^0.6.1" - supports-color "^4.4.0" + supports-color "^5.3.0" prebuild-install@^2.2.2: version "2.5.1" @@ -7676,9 +7064,9 @@ pretty-error@^2.0.2: renderkid "^2.0.1" utila "~0.4" -pretty-format@^22.4.0: - version "22.4.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.4.0.tgz#237b1f7e1c50ed03bc65c03ccc29d7c8bb7beb94" +pretty-format@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.4.3.tgz#f873d780839a9c02e9664c8a082e9ee79eaac16f" dependencies: ansi-regex "^3.0.0" ansi-styles "^3.2.0" @@ -7714,38 +7102,17 @@ progress@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" -promise-inflight@^1.0.1, promise-inflight@~1.0.1: +promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" -promise-retry@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" - dependencies: - err-code "^1.0.0" - retry "^0.10.0" - promise@^7.0.3, promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" dependencies: asap "~2.0.3" -promzard@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" - dependencies: - read "1" - -prop-types@^15.5.1, prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0: - version "15.6.0" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856" - dependencies: - fbjs "^0.8.16" - loose-envify "^1.3.1" - object-assign "^4.1.1" - -prop-types@^15.6.1: +prop-types@^15.5.1, prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1: version "15.6.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca" dependencies: @@ -7753,26 +7120,12 @@ prop-types@^15.6.1: loose-envify "^1.3.1" object-assign "^4.1.1" -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - -protoduck@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-4.0.0.tgz#fe4874d8c7913366cfd9ead12453a22cd3657f8e" - dependencies: - genfun "^4.0.1" - -proxy-addr@~2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.2.tgz#6571504f47bb988ec8180253f85dd7e14952bdec" +proxy-addr@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341" dependencies: forwarded "~0.1.2" - ipaddr.js "1.5.2" - -prr@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" + ipaddr.js "1.6.0" prr@~1.0.1: version "1.0.1" @@ -7792,15 +7145,6 @@ public-encrypt@^4.0.0: parse-asn1 "^5.0.0" randombytes "^2.0.1" -"pullstream@>= 0.4.1 < 1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/pullstream/-/pullstream-0.4.1.tgz#d6fb3bf5aed697e831150eb1002c25a3f8ae1314" - dependencies: - over ">= 0.0.5 < 1" - readable-stream "~1.0.31" - setimmediate ">= 1.0.2 < 2" - slice-stream ">= 1.0.0 < 2" - pump@^1.0.0, pump@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" @@ -7808,7 +7152,7 @@ pump@^1.0.0, pump@^1.0.1: end-of-stream "^1.1.0" once "^1.3.1" -pump@^2.0.1: +pump@^2.0.0, pump@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" dependencies: @@ -7816,12 +7160,12 @@ pump@^2.0.1: once "^1.3.1" pumpify@^1.3.3: - version "1.3.5" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.3.5.tgz#1b671c619940abcaeac0ad0e3a3c164be760993b" + version "1.4.0" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.4.0.tgz#80b7c5df7e24153d03f0e7ac8a05a5d068bd07fb" dependencies: - duplexify "^3.1.2" - inherits "^2.0.1" - pump "^1.0.0" + duplexify "^3.5.3" + inherits "^2.0.3" + pump "^2.0.0" punycode@1.3.2: version "1.3.2" @@ -7847,10 +7191,6 @@ qr.js@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/qr.js/-/qr.js-0.0.0.tgz#cace86386f59a0db8050fa90d9b6b0e88a1e364f" -qrcode-terminal@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz#ffc6c28a2fc0bfb47052b47e23f4f446a5fbdb9e" - qrcode.react@^0.7.2: version "0.7.2" resolved "https://registry.yarnpkg.com/qrcode.react/-/qrcode.react-0.7.2.tgz#72a5718fd56baafe15c2c153fe436628d83aa286" @@ -7877,14 +7217,6 @@ query-string@^4.1.0: object-assign "^4.1.0" strict-uri-encode "^1.0.0" -query-string@~5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.0.1.tgz#6e2b86fe0e08aef682ecbe86e85834765402bd88" - dependencies: - decode-uri-component "^0.2.0" - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -7901,10 +7233,6 @@ querystringify@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb" -qw@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/qw/-/qw-1.0.1.tgz#efbfdc740f9ad054304426acb183412cc8b996d4" - randomatic@^1.1.3: version "1.1.7" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" @@ -7953,8 +7281,8 @@ rc-progress@^2.0.6: prop-types "^15.5.8" rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@^1.1.7, rc@^1.2.1: - version "1.2.5" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.5.tgz#275cd687f6e3b36cc756baa26dfee80a790301fd" + version "1.2.6" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.6.tgz#eb18989c6d4f4f162c399f79ddd29f3835568092" dependencies: deep-extend "~0.4.0" ini "~1.3.0" @@ -7979,29 +7307,29 @@ react-markdown@^2.5.0: prop-types "^15.5.1" react-modal@^3.1.7: - version "3.1.7" - resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.1.7.tgz#21feb937c95cd722bf2d375cada751fdc8189c0e" + version "3.3.2" + resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.3.2.tgz#b13da9490653a7c76bc0e9600323eb1079c620e7" dependencies: exenv "^1.2.0" prop-types "^15.5.10" warning "^3.0.0" react-paginate@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/react-paginate/-/react-paginate-5.2.1.tgz#92558e246b3046b85dceec330b17ddee9f24eca8" + version "5.2.2" + resolved "https://registry.yarnpkg.com/react-paginate/-/react-paginate-5.2.2.tgz#c407d325e3073e39e49739ab5095a829000a1c46" dependencies: prop-types "^15.6.1" react-redux@^5.0.3: - version "5.0.6" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.6.tgz#23ed3a4f986359d68b5212eaaa681e60d6574946" + version "5.0.7" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.7.tgz#0dc1076d9afb4670f993ffaef44b8f8c1155a4c8" dependencies: - hoist-non-react-statics "^2.2.1" + hoist-non-react-statics "^2.5.0" invariant "^2.0.0" - lodash "^4.2.0" - lodash-es "^4.2.0" + lodash "^4.17.5" + lodash-es "^4.17.5" loose-envify "^1.1.0" - prop-types "^15.5.10" + prop-types "^15.6.0" react-simplemde-editor@^3.6.11: version "3.6.11" @@ -8026,12 +7354,6 @@ react@^16.2.0: object-assign "^4.1.1" prop-types "^15.6.0" -read-cmd-shim@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz#2d5d157786a37c055d22077c32c53f8329e91c7b" - dependencies: - graceful-fs "^4.1.2" - read-config-file@3.0.0, read-config-file@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-3.0.0.tgz#771def5184a7f76abaf6b2c82f20cb983775b8ea" @@ -8046,40 +7368,6 @@ read-config-file@3.0.0, read-config-file@^3.0.0: json5 "^0.5.1" lazy-val "^1.0.3" -read-installed@~4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/read-installed/-/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067" - dependencies: - debuglog "^1.0.1" - read-package-json "^2.0.0" - readdir-scoped-modules "^1.0.0" - semver "2 || 3 || 4 || 5" - slide "~1.1.3" - util-extend "^1.0.1" - optionalDependencies: - graceful-fs "^4.1.2" - -"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@~2.0.12: - version "2.0.12" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.0.12.tgz#68ea45f98b3741cb6e10ae3bbd42a605026a6951" - dependencies: - glob "^7.1.1" - json-parse-better-errors "^1.0.0" - normalize-package-data "^2.0.0" - slash "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.2" - -read-package-tree@~5.1.6: - version "5.1.6" - resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.1.6.tgz#4f03e83d0486856fb60d97c94882841c2a7b1b7a" - dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - once "^1.3.0" - read-package-json "^2.0.0" - readdir-scoped-modules "^1.0.0" - read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -8110,34 +7398,7 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" -read@1, read@~1.0.1, read@~1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - dependencies: - mute-stream "~0.0.4" - -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.3, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@~2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - safe-buffer "~5.1.1" - string_decoder "~1.0.3" - util-deprecate "~1.0.1" - -readable-stream@1.0, "readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.0, readable-stream@~1.0.31: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.3.3: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.3, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.3, readable-stream@^2.3.5: version "2.3.5" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.5.tgz#b4f85003a938cbb6ecbce2a124fb1012bd1a838d" dependencies: @@ -8149,7 +7410,16 @@ readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable string_decoder "~1.0.3" util-deprecate "~1.0.1" -readable-stream@~1.1.10, readable-stream@~1.1.9: +readable-stream@1.0: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@~1.1.9: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" dependencies: @@ -8158,14 +7428,17 @@ readable-stream@~1.1.10, readable-stream@~1.1.9: isarray "0.0.1" string_decoder "~0.10.x" -readdir-scoped-modules@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747" +readable-stream@~2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - graceful-fs "^4.1.2" - once "^1.3.0" + buffer-shims "^1.0.0" + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~0.10.x" + util-deprecate "~1.0.1" readdirp@^2.0.0: version "2.1.0" @@ -8176,15 +7449,6 @@ readdirp@^2.0.0: readable-stream "^2.0.2" set-immediate-shim "^1.0.1" -recast@^0.10.1: - version "0.10.43" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.10.43.tgz#b95d50f6d60761a5f6252e15d80678168491ce7f" - dependencies: - ast-types "0.8.15" - esprima-fb "~15001.1001.0-dev-harmony-fb" - private "~0.1.5" - source-map "~0.5.0" - recast@^0.11.17, recast@~0.11.12: version "0.11.23" resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" @@ -8269,8 +7533,8 @@ regenerator-runtime@^0.10.5: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" regenerator-runtime@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1" + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" regenerator-transform@^0.10.0: version "0.10.1" @@ -8392,9 +7656,9 @@ request-promise-native@^1.0.5: stealthy-require "^1.1.0" tough-cookie ">=2.3.3" -request@2, request@^2.45.0, request@^2.55.0, request@^2.74.0, request@^2.83.0, request@~2.83.0: - version "2.83.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" +request@2, request@^2.45.0, request@^2.55.0, request@^2.83.0: + version "2.85.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.85.0.tgz#5a03615a47c61420b3eb99b7dba204f83603e1fa" dependencies: aws-sign2 "~0.7.0" aws4 "^1.6.0" @@ -8520,9 +7784,9 @@ resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.2.0, resolve@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" +resolve@^1.2.0, resolve@^1.4.0, resolve@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.6.0.tgz#0fbd21278b27b4004481c395349e7aba60a9ff5c" dependencies: path-parse "^1.0.5" @@ -8544,17 +7808,13 @@ ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" -retry@^0.10.0, retry@~0.10.1: - version "0.10.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" - right-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@~2.6.2: +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: @@ -8590,8 +7850,8 @@ rx-lite@*, rx-lite@^4.0.8: resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" rxjs@^5.4.2: - version "5.5.5" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.5.tgz#e164f11d38eaf29f56f08c3447f74ff02dd84e97" + version "5.5.7" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.7.tgz#afb3d1642b069b2fbf203903d6501d1acb4cda27" dependencies: symbol-observable "1.0.1" @@ -8644,7 +7904,7 @@ schema-utils@^0.3.0: dependencies: ajv "^5.0.0" -schema-utils@^0.4.2, schema-utils@^0.4.3, schema-utils@^0.4.5: +schema-utils@^0.4.5: version "0.4.5" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.5.tgz#21836f0608aac17b78f9e3e24daff14a5ca13a3e" dependencies: @@ -8669,10 +7929,10 @@ select-hose@^2.0.0: resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" selfsigned@^1.9.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.1.tgz#bf8cb7b83256c4551e31347c6311778db99eec52" + version "1.10.2" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.2.tgz#b4449580d99929b65b10a48389301a6592088758" dependencies: - node-forge "0.6.33" + node-forge "0.7.1" semver-diff@^2.0.0: version "2.1.0" @@ -8680,26 +7940,22 @@ semver-diff@^2.0.0: dependencies: semver "^5.0.3" -"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@~5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" - -"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.4.1, semver@^5.5.0: +"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" -semver@^5.3.0, semver@~5.3.0: +semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" -send@0.16.1: - version "0.16.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3" +send@0.16.2: + version "0.16.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" dependencies: debug "2.6.9" - depd "~1.1.1" + depd "~1.1.2" destroy "~1.0.4" - encodeurl "~1.0.1" + encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" fresh "0.5.2" @@ -8708,7 +7964,7 @@ send@0.16.1: ms "2.0.0" on-finished "~2.3.0" range-parser "~1.2.0" - statuses "~1.3.1" + statuses "~1.4.0" serialize-javascript@^1.4.0: version "1.4.0" @@ -8726,25 +7982,19 @@ serve-index@^1.7.2: mime-types "~2.1.17" parseurl "~1.3.2" -serve-static@1.13.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.1.tgz#4c57d53404a761d8f2e7c1e8a18a47dbf278a719" +serve-static@1.13.2: + version "1.13.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" dependencies: - encodeurl "~1.0.1" + encodeurl "~1.0.2" escape-html "~1.0.3" parseurl "~1.3.2" - send "0.16.1" + send "0.16.2" set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" -set-getter@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/set-getter/-/set-getter-0.1.0.tgz#d769c182c9d5a51f409145f2fba82e5e86e80376" - dependencies: - to-object-path "^0.3.0" - set-immediate-shim@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" @@ -8767,7 +8017,7 @@ set-value@^2.0.0: is-plain-object "^2.0.3" split-string "^3.0.1" -"setimmediate@>= 1.0.1 < 2", "setimmediate@>= 1.0.2 < 2", setimmediate@^1.0.4, setimmediate@^1.0.5: +setimmediate@^1.0.4, setimmediate@^1.0.5, setimmediate@~1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -8780,19 +8030,12 @@ setprototypeof@1.1.0: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.10" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.10.tgz#b1fde5cd7d11a5626638a07c604ab909cfa31f9b" + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" -sha@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/sha/-/sha-2.0.1.tgz#6030822fbd2c9823949f8f72ed6411ee5cf25aae" - dependencies: - graceful-fs "^4.1.2" - readable-stream "^2.0.2" - shallow-clone@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-1.0.0.tgz#4480cd06e882ef68b2ad88a3ea54832e2c48b571" @@ -8866,20 +8109,6 @@ slice-ansi@1.0.0: dependencies: is-fullwidth-code-point "^2.0.0" -"slice-stream@>= 1.0.0 < 2": - version "1.0.0" - resolved "https://registry.yarnpkg.com/slice-stream/-/slice-stream-1.0.0.tgz#5b33bd66f013b1a7f86460b03d463dec39ad3ea0" - dependencies: - readable-stream "~1.0.31" - -slide@^1.1.3, slide@^1.1.5, slide@^1.1.6, slide@~1.1.3, slide@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" - -smart-buffer@^1.0.13: - version "1.1.15" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-1.1.15.tgz#7f114b5b65fab3e2a35aa775bb12f0d1c649bf16" - snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -8895,8 +8124,8 @@ snapdragon-util@^3.0.1: kind-of "^3.2.0" snapdragon@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.1.tgz#e12b5487faded3e3dea0ac91e9400bf75b401370" + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" dependencies: base "^0.11.1" debug "^2.2.0" @@ -8905,7 +8134,7 @@ snapdragon@^0.8.1: map-cache "^0.2.2" source-map "^0.5.6" source-map-resolve "^0.5.0" - use "^2.0.0" + use "^3.1.0" sntp@1.x.x: version "1.0.9" @@ -8937,20 +8166,6 @@ sockjs@0.3.19: faye-websocket "^0.10.0" uuid "^3.0.1" -socks-proxy-agent@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-3.0.1.tgz#2eae7cf8e2a82d34565761539a7f9718c5617659" - dependencies: - agent-base "^4.1.0" - socks "^1.1.10" - -socks@^1.1.10: - version "1.1.10" - resolved "https://registry.yarnpkg.com/socks/-/socks-1.1.10.tgz#5b8b7fc7c8f341c53ed056e929b7bf4de8ba7b5a" - dependencies: - ip "^1.1.4" - smart-buffer "^1.0.13" - sort-keys-length@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188" @@ -8963,17 +8178,6 @@ sort-keys@^1.0.0: dependencies: is-plain-obj "^1.0.0" -sorted-object@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/sorted-object/-/sorted-object-2.0.1.tgz#7d631f4bd3a798a24af1dffcfbfe83337a5df5fc" - -sorted-union-stream@~2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/sorted-union-stream/-/sorted-union-stream-2.1.3.tgz#c7794c7e077880052ff71a8d4a2dbb4a9a638ac7" - dependencies: - from2 "^1.3.0" - stream-iterate "^1.1.0" - source-list-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" @@ -9004,13 +8208,7 @@ source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" -source-map@0.1.31: - version "0.1.31" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.31.tgz#9f704d0d69d9e138a81badf6ebb4fde33d151c61" - dependencies: - amdefine ">=0.0.4" - -source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.0, source-map@~0.5.1: +source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.0, source-map@~0.5.1: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" @@ -9047,8 +8245,8 @@ spdx-license-ids@^3.0.0: resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" spdy-transport@^2.0.18: - version "2.0.20" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.0.20.tgz#735e72054c486b2354fe89e702256004a39ace4d" + version "2.1.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.1.0.tgz#4bbb15aaffed0beefdd56ad61dbdc8ba3e2cb7a1" dependencies: debug "^2.6.8" detect-node "^2.0.3" @@ -9084,8 +8282,8 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" sshpk@^1.7.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" + version "1.14.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.1.tgz#130f5975eddad963f1d56f92b9ac6c51fa9f83eb" dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -9097,21 +8295,9 @@ sshpk@^1.7.0: jsbn "~0.1.0" tweetnacl "~0.14.0" -ssri@^4.1.2, ssri@^4.1.6, ssri@~4.1.6: - version "4.1.6" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-4.1.6.tgz#0cb49b6ac84457e7bdd466cb730c3cb623e9a25b" - dependencies: - safe-buffer "^5.1.0" - -ssri@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.0.0.tgz#13c19390b606c821f2a10d02b351c1729b94d8cf" - dependencies: - safe-buffer "^5.1.0" - ssri@^5.2.4: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.2.4.tgz#9985e14041e65fc397af96542be35724ac11da52" + version "5.3.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06" dependencies: safe-buffer "^5.1.1" @@ -9134,9 +8320,9 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" -"statuses@>= 1.3.1 < 2", statuses@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" +"statuses@>= 1.3.1 < 2", statuses@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" stdout-stream@^1.4.0: version "1.4.0" @@ -9163,8 +8349,8 @@ stream-each@^1.1.0: stream-shift "^1.0.0" stream-http@^2.7.2: - version "2.8.0" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.0.tgz#fd86546dac9b1c91aff8fc5d287b98fafb41bc10" + version "2.8.1" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.1.tgz#d0441be1a457a73a733a8a7b53570bebd9ef66a4" dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.1" @@ -9172,13 +8358,6 @@ stream-http@^2.7.2: to-arraybuffer "^1.0.0" xtend "^4.0.0" -stream-iterate@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/stream-iterate/-/stream-iterate-1.2.0.tgz#2bd7c77296c1702a46488b8ad41f79865eecd4e1" - dependencies: - readable-stream "^2.1.5" - stream-shift "^1.0.0" - stream-shift@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" @@ -9258,7 +8437,7 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" -strip-ansi@^4.0.0, strip-ansi@~4.0.0: +strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" dependencies: @@ -9299,11 +8478,11 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" style-loader@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.20.2.tgz#851b373c187890331776e9cde359eea9c95ecd00" + version "0.20.3" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.20.3.tgz#ebef06b89dec491bcb1fdb3452e913a6fd1c10c4" dependencies: loader-utils "^1.1.0" - schema-utils "^0.4.3" + schema-utils "^0.4.5" sumchecker@^1.2.0: version "1.3.1" @@ -9328,7 +8507,7 @@ supports-color@^3.2.3: dependencies: has-flag "^1.0.0" -supports-color@^4.0.0, supports-color@^4.2.1, supports-color@^4.4.0: +supports-color@^4.2.1: version "4.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" dependencies: @@ -9361,8 +8540,8 @@ symbol-observable@^0.2.2: resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40" symbol-observable@^1.0.3: - version "1.1.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.1.0.tgz#5c68fd8d54115d9dfb72a84720549222e8db9b32" + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" symbol-tree@^3.2.2: version "3.2.2" @@ -9437,16 +8616,6 @@ tar@^2.0.0, tar@^2.2.1: fstream "^1.0.2" inherits "2" -tar@^4.0.0, tar@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.0.2.tgz#e8e22bf3eec330e5c616d415a698395e294e8fad" - dependencies: - chownr "^1.0.1" - minipass "^2.2.1" - minizlib "^1.0.4" - mkdirp "^0.5.0" - yallist "^3.0.2" - temp-file@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.1.1.tgz#8823649aa4e8a6e419eb71b601a2e4d472b0f24f" @@ -9470,13 +8639,6 @@ throttleit@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-0.0.2.tgz#cfedf88e60c00dd9697b61fdd2a8343a9b680eaf" -through2@^0.6.2, through2@^0.6.5: - version "0.6.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" - dependencies: - readable-stream ">=1.0.33-1 <1.1.0-0" - xtend ">=4.0.0 <4.1.0-0" - through2@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" @@ -9491,13 +8653,13 @@ through2@~0.2.3: readable-stream "~1.1.9" xtend "~2.1.1" -"through@>=2.2.7 <3", through@^2.3.6, through@^2.3.8, through@~2.3.4, through@~2.3.6: +through@^2.3.6, through@^2.3.8, through@~2.3.4, through@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" -thunky@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-0.1.0.tgz#bf30146824e2b6e67b0f2d7a4ac8beb26908684e" +thunky@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.2.tgz#a862e018e3fb1ea2ec3fce5d55605cf57f247371" time-stamp@^2.0.0: version "2.0.0" @@ -9557,18 +8719,12 @@ toposort@^1.0.0: version "1.0.6" resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.6.tgz#c31748e55d210effc00fdcdc7d6e68d7d7bb9cec" -tough-cookie@>=2.3.3, tough-cookie@^2.3.3, tough-cookie@~2.3.0: +tough-cookie@>=2.3.3, tough-cookie@^2.3.3, tough-cookie@~2.3.0, tough-cookie@~2.3.3: version "2.3.4" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" dependencies: punycode "^1.4.1" -tough-cookie@~2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" - dependencies: - punycode "^1.4.1" - tr46@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" @@ -9631,12 +8787,12 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-is@~1.6.15: - version "1.6.15" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" +type-is@~1.6.15, type-is@~1.6.16: + version "1.6.16" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" dependencies: media-typer "0.3.0" - mime-types "~2.1.15" + mime-types "~2.1.18" typedarray@^0.0.6: version "0.0.6" @@ -9647,8 +8803,8 @@ typo-js@*: resolved "https://registry.yarnpkg.com/typo-js/-/typo-js-1.0.3.tgz#54d8ebc7949f1a7810908b6002c6841526c99d5a" ua-parser-js@^0.7.9: - version "0.7.10" - resolved "https://codeload.github.com/amplitude/ua-parser-js/tar.gz/ed538f16f5c6ecd8357da989b617d4f156dcf35d" + version "0.7.17" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" uglify-es@^3.3.4: version "3.3.9" @@ -9657,18 +8813,11 @@ uglify-es@^3.3.4: commander "~2.13.0" source-map "~0.6.1" -uglify-js@3.2.x: - version "3.2.1" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.2.1.tgz#d6427fd45a25fefc5d196689c0c772a6915e10fe" - dependencies: - commander "~2.12.1" - source-map "~0.6.1" - uglify-js@3.3.x: - version "3.3.13" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.13.tgz#8a1a89eeb16e2d6a66b0db2b04cb871af3c669cf" + version "3.3.16" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.16.tgz#23ba13efa27aa00885be7417819e8a9787f94028" dependencies: - commander "~2.14.1" + commander "~2.15.0" source-map "~0.6.1" uglify-js@^2.8.29: @@ -9693,19 +8842,19 @@ uglifyjs-webpack-plugin@^0.4.6: webpack-sources "^1.0.1" uglifyjs-webpack-plugin@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.2.tgz#e7516d4367afdb715c3847841eb46f94c45ca2b9" + version "1.2.4" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.4.tgz#5eec941b2e9b8538be0a20fc6eda25b14c7c1043" dependencies: - cacache "^10.0.1" + cacache "^10.0.4" find-cache-dir "^1.0.0" - schema-utils "^0.4.2" + schema-utils "^0.4.5" serialize-javascript "^1.4.0" source-map "^0.6.1" uglify-es "^3.3.4" webpack-sources "^1.1.0" worker-farm "^1.5.2" -uid-number@0.0.6, uid-number@^0.0.6: +uid-number@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" @@ -9713,10 +8862,6 @@ uint64be@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/uint64be/-/uint64be-1.0.1.tgz#1f7154202f2a1b8af353871dda651bf34ce93e95" -umask@^1.1.0, umask@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" - unbzip2-stream@^1.0.9: version "1.2.5" resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.2.5.tgz#73a033a567bbbde59654b193c44d48a7e4f43c47" @@ -9755,7 +8900,7 @@ uniqs@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" -unique-filename@^1.1.0, unique-filename@~1.1.0: +unique-filename@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.0.tgz#d05f2fe4032560871f30e93cbe735eea201514f3" dependencies: @@ -9781,14 +8926,6 @@ unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" -unreachable-branch-transform@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/unreachable-branch-transform/-/unreachable-branch-transform-0.3.0.tgz#d99cc4c6e746d264928845b611db54b0f3474caa" - dependencies: - esmangle-evaluator "^1.0.0" - recast "^0.10.1" - through2 "^0.6.2" - unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -9807,22 +8944,25 @@ unzip-response@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" -unzip@^0.1.11: - version "0.1.11" - resolved "https://registry.yarnpkg.com/unzip/-/unzip-0.1.11.tgz#89749c63b058d7d90d619f86b98aa1535d3b97f0" +unzipper@^0.8.11: + version "0.8.11" + resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.8.11.tgz#894383dc6b4bdab944e446f665a82d40d167fbd4" dependencies: - binary ">= 0.3.0 < 1" - fstream ">= 0.1.30 < 1" - match-stream ">= 0.0.2 < 1" - pullstream ">= 0.4.1 < 1" - readable-stream "~1.0.31" - setimmediate ">= 1.0.1 < 2" + big-integer "^1.6.17" + binary "~0.3.0" + bluebird "~3.4.1" + buffer-indexof-polyfill "~1.0.0" + duplexer2 "~0.1.4" + fstream "~1.0.10" + listenercount "~1.0.1" + readable-stream "~2.1.5" + setimmediate "~1.0.4" upath@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.4.tgz#ee2321ba0a786c50973db043a50b7bcba822361d" -update-notifier@^2.2.0, update-notifier@^2.3.0: +update-notifier@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.3.0.tgz#4e8827a6bb915140ab093559d7014e3ebb837451" dependencies: @@ -9836,19 +8976,6 @@ update-notifier@^2.2.0, update-notifier@^2.3.0: semver-diff "^2.0.0" xdg-basedir "^3.0.0" -update-notifier@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.2.0.tgz#1b5837cf90c0736d88627732b661c138f86de72f" - dependencies: - boxen "^1.0.0" - chalk "^1.0.0" - configstore "^3.0.0" - import-lazy "^2.1.0" - is-npm "^1.0.0" - latest-version "^3.0.0" - semver-diff "^2.0.0" - xdg-basedir "^3.0.0" - upper-case@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" @@ -9903,13 +9030,11 @@ url@^0.11.0: punycode "1.3.2" querystring "0.2.0" -use@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/use/-/use-2.0.2.tgz#ae28a0d72f93bf22422a18a2e379993112dec8e8" +use@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.0.tgz#14716bf03fdfefd03040aef58d8b4b85f3a7c544" dependencies: - define-property "^0.2.5" - isobject "^3.0.0" - lazy-cache "^2.0.2" + kind-of "^6.0.2" utf8-byte-length@^1.0.1: version "1.0.4" @@ -9919,10 +9044,6 @@ util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" -util-extend@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" - util@0.10.3, util@^0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" @@ -9941,7 +9062,7 @@ utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" -uuid@3.1.0, uuid@~3.1.0: +uuid@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" @@ -9956,12 +9077,6 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" - dependencies: - builtins "^1.0.3" - vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -10022,17 +9137,11 @@ watchpack@^1.4.0: neo-async "^2.5.0" wbuf@^1.1.0, wbuf@^1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.2.tgz#d697b99f1f59512df2751be42769c1580b5801fe" + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" dependencies: minimalistic-assert "^1.0.0" -wcwidth@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - dependencies: - defaults "^1.0.3" - webidl-conversions@^4.0.1, webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" @@ -10176,7 +9285,7 @@ which-pm-runs@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" -which@1, which@^1.2.10, which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@~1.3.0: +which@1, which@^1.2.10, which@^1.2.12, which@^1.2.9, which@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" dependencies: @@ -10188,12 +9297,6 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2" -widest-line@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c" - dependencies: - string-width "^1.0.1" - widest-line@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.0.tgz#0142a4e8a243f8882c0233aa0e0281aa76152273" @@ -10217,18 +9320,10 @@ wordwrap@~1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" worker-farm@^1.5.2: - version "1.5.4" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.4.tgz#4debbe46b40edefcc717ebde74a90b1ae1e909a1" + version "1.6.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" dependencies: errno "~0.1.7" - xtend "~4.0.1" - -worker-farm@~1.5.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.2.tgz#32b312e5dc3d5d45d79ef44acc2587491cd729ae" - dependencies: - errno "^0.1.4" - xtend "^4.0.1" wrap-ansi@^2.0.0: version "2.1.0" @@ -10237,7 +9332,7 @@ wrap-ansi@^2.0.0: string-width "^1.0.1" strip-ansi "^3.0.1" -wrappy@1, wrappy@~1.0.2: +wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -10249,14 +9344,6 @@ write-file-atomic@^2.0.0: imurmurhash "^0.1.4" signal-exit "^3.0.2" -write-file-atomic@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.1.0.tgz#1769f4b551eedce419f0505deae2e26763542d37" - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - slide "^1.1.5" - write@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" @@ -10275,8 +9362,8 @@ xdg-basedir@^3.0.0: resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" xhr@^2.0.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.4.0.tgz#e16e66a45f869861eeefab416d5eff722dc40993" + version "2.4.1" + resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.4.1.tgz#ba982cced205ae5eec387169ac9dc77ca4853d38" dependencies: global "~4.3.0" is-function "^1.0.1" @@ -10320,7 +9407,7 @@ xss-filters@^1.2.6: version "1.2.7" resolved "https://registry.yarnpkg.com/xss-filters/-/xss-filters-1.2.7.tgz#59fa1de201f36f2f3470dcac5f58ccc2830b0a9a" -"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: +xtend@^4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" @@ -10342,10 +9429,6 @@ yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" -yallist@^3.0.0, yallist@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" - yargs-parser@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" -- 2.45.3 From 4b41c6335d69f669b8dc26d49b91f6aaffceea29 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Thu, 22 Mar 2018 10:53:24 -0400 Subject: [PATCH 111/192] fix: __static path not resolving on development environment (#1165) This fixes https://github.com/electron-userland/electron-webpack/issues/52 --- .eslintrc.json | 1 - CHANGELOG.md | 1 + src/renderer/app.js | 10 ---------- src/renderer/lbry.js | 2 +- src/renderer/redux/selectors/settings.js | 2 +- 5 files changed, 3 insertions(+), 13 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index f7dd140c7..64d9f5c30 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -20,7 +20,6 @@ }, "globals": { "__static": true, - "staticResourcesPath": true, "__": true, "__n": true, "app": true diff --git a/CHANGELOG.md b/CHANGELOG.md index cc52d8cff..adc7c6c1f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,6 +40,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/). * Error when clicking LBRY URLs when app is closed on macOS ([#1119](https://github.com/lbryio/lbry-app/issues/1119)) * LBRY URLs not working on Linux ([#1120](https://github.com/lbryio/lbry-app/issues/1120)) * Fix Windows notifications not showing ([1145](https://github.com/lbryio/lbry-app/pull/1145)) + * Fix __static path not resolving on development environment ### Deprecated * diff --git a/src/renderer/app.js b/src/renderer/app.js index 9933b47eb..9a49e51d7 100644 --- a/src/renderer/app.js +++ b/src/renderer/app.js @@ -22,16 +22,6 @@ const app = { }, }; -// Workaround for https://github.com/electron-userland/electron-webpack/issues/52 -if (!isDev) { - window.staticResourcesPath = Path.join(remote.app.getAppPath(), '../static').replace( - /\\/g, - '\\\\' - ); -} else { - window.staticResourcesPath = ''; -} - // eslint-disable-next-line no-underscore-dangle global.__ = i18n.__; // eslint-disable-next-line no-underscore-dangle diff --git a/src/renderer/lbry.js b/src/renderer/lbry.js index 79855b4ce..3505f1c84 100644 --- a/src/renderer/lbry.js +++ b/src/renderer/lbry.js @@ -172,7 +172,7 @@ Lbry.publishDeprecated = (params, fileListedCallback, publishedCallback, errorCa ); }; -Lbry.imagePath = file => `${staticResourcesPath}/img/${file}`; +Lbry.imagePath = file => `file://${__static}/img/${file}`; Lbry.getMediaType = (contentType, fileName) => { if (contentType) { diff --git a/src/renderer/redux/selectors/settings.js b/src/renderer/redux/selectors/settings.js index 9c90cfac2..348df4b2e 100644 --- a/src/renderer/redux/selectors/settings.js +++ b/src/renderer/redux/selectors/settings.js @@ -30,6 +30,6 @@ export const selectThemePath = createSelector( selectIsNight, (theme, automaticDarkModeEnabled, isNight) => { const dynamicTheme = automaticDarkModeEnabled && isNight ? 'dark' : theme; - return `${staticResourcesPath}/themes/${dynamicTheme || 'light'}.css`; + return `file://${__static}/themes/${dynamicTheme || 'light'}.css`; } ); -- 2.45.3 From de2cbe5f77355a838588b9e52fce610bf67788fa Mon Sep 17 00:00:00 2001 From: Thomas Zarebczan Date: Thu, 22 Mar 2018 11:07:39 -0400 Subject: [PATCH 112/192] fix: app shortcut not created on install/reinstall (#1164) This fixes https://github.com/electron-userland/electron-builder/issues/2725 --- electron-builder.json | 3 +- package.json | 2 +- yarn.lock | 144 +++++++++++++++++------------------------- 3 files changed, 61 insertions(+), 88 deletions(-) diff --git a/electron-builder.json b/electron-builder.json index 0f63137e9..54d148d12 100644 --- a/electron-builder.json +++ b/electron-builder.json @@ -62,7 +62,8 @@ ] }, "nsis": { - "perMachine": true + "perMachine": true, + "createDesktopShortcut": "always" }, "artifactName": "${productName}_${version}.${ext}", "beforeBuild": "./build/checkDaemonPlatform.js" diff --git a/package.json b/package.json index fc12681ac..08c7c5c4a 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "del": "^3.0.0", "devtron": "^1.4.0", "electron": "1.7.12", - "electron-builder": "^20.5.1", + "electron-builder": "^20.7.1", "electron-devtools-installer": "^2.2.3", "electron-webpack": "^1.13.0", "eslint": "^4.19.0", diff --git a/yarn.lock b/yarn.lock index cc7b2e0c0..7106dad4a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1221,7 +1221,7 @@ base64-js@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" -base64-js@^1.0.2: +base64-js@^1.0.2, base64-js@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.3.tgz#fb13668233d9614cf5fb4bce95a9ba4096cdf801" @@ -1517,15 +1517,6 @@ buffers@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" -builder-util-runtime@4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-4.0.5.tgz#5340cf9886b9283ea6e5b20dc09b5e3e461aef62" - dependencies: - bluebird-lst "^1.0.5" - debug "^3.1.0" - fs-extra-p "^4.5.0" - sax "^1.2.4" - builder-util-runtime@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-4.1.0.tgz#7dcd042d555d2f161a5538d7a0ea8c292daa0683" @@ -1535,7 +1526,7 @@ builder-util-runtime@4.1.0: fs-extra-p "^4.5.2" sax "^1.2.4" -builder-util-runtime@^4.0.5, builder-util-runtime@^4.1.0, builder-util-runtime@^4.2.0, builder-util-runtime@~4.2.0: +builder-util-runtime@4.2.0, builder-util-runtime@^4.1.0, builder-util-runtime@^4.2.0, builder-util-runtime@~4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-4.2.0.tgz#c56aa18d34390143da031c418c9d3a055fbd3522" dependencies: @@ -1544,25 +1535,6 @@ builder-util-runtime@^4.0.5, builder-util-runtime@^4.1.0, builder-util-runtime@^ fs-extra-p "^4.5.2" sax "^1.2.4" -builder-util@5.6.5: - version "5.6.5" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.6.5.tgz#f2d156541b8df9599456848e057566443dc04c82" - dependencies: - "7zip-bin" "~3.1.0" - app-builder-bin "1.7.2" - bluebird-lst "^1.0.5" - builder-util-runtime "^4.0.5" - chalk "^2.3.2" - debug "^3.1.0" - fs-extra-p "^4.5.2" - is-ci "^1.1.0" - js-yaml "^3.11.0" - lazy-val "^1.0.3" - semver "^5.5.0" - source-map-support "^0.5.3" - stat-mode "^0.2.2" - temp-file "^3.1.1" - builder-util@5.6.7: version "5.6.7" resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.6.7.tgz#662ff2ba4f70416ee0c085126f16af48fbf97900" @@ -1582,7 +1554,7 @@ builder-util@5.6.7: stat-mode "^0.2.2" temp-file "^3.1.1" -builder-util@^5.6.5, builder-util@^5.6.7, builder-util@^5.7.1: +builder-util@5.7.2, builder-util@^5.6.7, builder-util@^5.7.0, builder-util@^5.7.1: version "5.7.2" resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.7.2.tgz#049b4365993f34519c9d56589494cda2257b24d3" dependencies: @@ -2625,13 +2597,13 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" -dmg-builder@4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-4.1.2.tgz#b4d7245dc2e91812395b4268b12f888443ba5f30" +dmg-builder@4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-4.1.3.tgz#d336cf398fd331b2dedd7efae4b51b9bfe00aa1c" dependencies: bluebird-lst "^1.0.5" - builder-util "^5.6.5" - electron-builder-lib "~20.5.0" + builder-util "^5.7.0" + electron-builder-lib "~20.6.2" fs-extra-p "^4.5.2" iconv-lite "^0.4.19" js-yaml "^3.11.0" @@ -2769,7 +2741,36 @@ ejs@^2.5.7: version "2.5.7" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.7.tgz#cc872c168880ae3c7189762fd5ffc00896c9518a" -electron-builder-lib@20.6.2: +electron-builder-lib@20.7.1: + version "20.7.1" + resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.7.1.tgz#c1d5abe0ed42606dcf92e46d4fdedc09f6d21ee3" + dependencies: + "7zip-bin" "~3.1.0" + app-builder-bin "1.8.1" + async-exit-hook "^2.0.1" + bluebird-lst "^1.0.5" + builder-util "5.7.2" + builder-util-runtime "4.2.0" + chromium-pickle-js "^0.2.0" + debug "^3.1.0" + ejs "^2.5.7" + electron-osx-sign "0.4.10" + electron-publish "20.7.0" + fs-extra-p "^4.5.2" + hosted-git-info "^2.6.0" + is-ci "^1.1.0" + isbinaryfile "^3.0.2" + js-yaml "^3.11.0" + lazy-val "^1.0.3" + minimatch "^3.0.4" + normalize-package-data "^2.4.0" + plist "^3.0.1" + read-config-file "3.0.0" + sanitize-filename "^1.6.1" + semver "^5.5.0" + temp-file "^3.1.1" + +electron-builder-lib@~20.6.2: version "20.6.2" resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.6.2.tgz#34f38b6172c05f90d34b6b5ed2f2b6922e731a39" dependencies: @@ -2798,45 +2799,16 @@ electron-builder-lib@20.6.2: semver "^5.5.0" temp-file "^3.1.1" -electron-builder-lib@~20.5.0: - version "20.5.1" - resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.5.1.tgz#c155345c58d25580d316f6437c251a57e8e92d62" - dependencies: - "7zip-bin" "~3.1.0" - app-builder-bin "1.7.2" - async-exit-hook "^2.0.1" - bluebird-lst "^1.0.5" - builder-util "5.6.5" - builder-util-runtime "4.0.5" - chromium-pickle-js "^0.2.0" - debug "^3.1.0" - ejs "^2.5.7" - electron-osx-sign "0.4.10" - electron-publish "20.5.0" - fs-extra-p "^4.5.2" - hosted-git-info "^2.6.0" - is-ci "^1.1.0" - isbinaryfile "^3.0.2" - js-yaml "^3.11.0" - lazy-val "^1.0.3" - minimatch "^3.0.4" - normalize-package-data "^2.4.0" - plist "^2.1.0" - read-config-file "3.0.0" - sanitize-filename "^1.6.1" - semver "^5.5.0" - temp-file "^3.1.1" - -electron-builder@^20.5.1: - version "20.6.2" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-20.6.2.tgz#40e1d44910ce99c4c0e9200f0b4a18d15d0d00a4" +electron-builder@^20.7.1: + version "20.7.1" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-20.7.1.tgz#209eac9892a8f97e9e0ec312e9c50c4e7c0b4758" dependencies: bluebird-lst "^1.0.5" - builder-util "5.6.7" - builder-util-runtime "4.1.0" + builder-util "5.7.2" + builder-util-runtime "4.2.0" chalk "^2.3.2" - dmg-builder "4.1.2" - electron-builder-lib "20.6.2" + dmg-builder "4.1.3" + electron-builder-lib "20.7.1" electron-download-tf "4.3.4" fs-extra-p "^4.5.2" is-ci "^1.1.0" @@ -2910,18 +2882,6 @@ electron-osx-sign@0.4.10: minimist "^1.2.0" plist "^2.1.0" -electron-publish@20.5.0: - version "20.5.0" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-20.5.0.tgz#bcef9949c63899d34680e89110e8d38d1016f1f6" - dependencies: - bluebird-lst "^1.0.5" - builder-util "^5.6.5" - builder-util-runtime "^4.0.5" - chalk "^2.3.2" - fs-extra-p "^4.5.2" - lazy-val "^1.0.3" - mime "^2.2.0" - electron-publish@20.6.1: version "20.6.1" resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-20.6.1.tgz#1bc8497fc9370f8e39c9212ce0b5857ef1d666fd" @@ -2934,7 +2894,7 @@ electron-publish@20.6.1: lazy-val "^1.0.3" mime "^2.2.0" -electron-publish@~20.7.0: +electron-publish@20.7.0, electron-publish@~20.7.0: version "20.7.0" resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-20.7.0.tgz#1bdc02365b199cd817e635bcd251670a39e014ce" dependencies: @@ -6748,6 +6708,14 @@ plist@^2.1.0: xmlbuilder "8.2.2" xmldom "0.1.x" +plist@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.1.tgz#a9b931d17c304e8912ef0ba3bdd6182baf2e1f8c" + dependencies: + base64-js "^1.2.3" + xmlbuilder "^9.0.7" + xmldom "0.1.x" + pluralize@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" @@ -9395,6 +9363,10 @@ xmlbuilder@8.2.2: version "8.2.2" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773" +xmlbuilder@^9.0.7: + version "9.0.7" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" + xmldom@0.1.x: version "0.1.27" resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" -- 2.45.3 From fcdb935687daa8c9ce7bac5f67c14b061781d933 Mon Sep 17 00:00:00 2001 From: Baltazar Gomez Date: Thu, 22 Mar 2018 08:43:35 -0700 Subject: [PATCH 113/192] fix: exporting issues (#1163) --- CHANGELOG.md | 9 ++-- src/renderer/component/file-exporter.js | 20 ++++++-- .../publishForm/internal/channelSection.jsx | 6 ++- .../component/transactionList/view.jsx | 4 +- src/renderer/index.js | 4 +- src/renderer/redux/reducers/claims.js | 24 +++++---- src/renderer/rewards.js | 2 +- src/renderer/util/parseData.js | 51 ++++++++++++++----- 8 files changed, 83 insertions(+), 37 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index adc7c6c1f..86a3b1086 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/). * Notifications when the channel a user subscribes to uploads new content ([#1066](https://github.com/lbryio/lbry-app/pull/1066)) * Codacy support for Github contributions ([#1059](https://github.com/lbryio/lbry-app/pull/1059)) * App category for Linux ([#877](https://github.com/lbryio/lbry-app/pull/877)) - * Add YouTube Sync reward ([1147](https://github.com/lbryio/lbry-app/pull/1147)) + * Add YouTube Sync reward ([#1147](https://github.com/lbryio/lbry-app/pull/1147)) * Retain previous screen sizing on startup ([#338](https://github.com/lbryio/lbry-app/issues/338)) ### Changed @@ -25,8 +25,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/). * Do not kill an existing daemon, instead check if one exists ([#973](https://github.com/lbryio/lbry-app/pull/973)) * Enable play button immediately after user clicks download ([#987](https://github.com/lbryio/lbry-app/pull/987)) * Significantly improved search performance ([#1032](https://github.com/lbryio/lbry-app/pull/1032)) - * Allow editing of claims when bid is greater than current balance ([1105](https://github.com/lbryio/lbry-app/pull/1105)) - + * Allow editing of claims when bid is greater than current balance ([#1105](https://github.com/lbryio/lbry-app/pull/1105)) + ### Fixed * Fixed sort by date of published content ([#986](https://github.com/lbryio/lbry-app/issues/986)) * Fix night mode start time, set to 9PM ([#1050](https://github.com/lbryio/lbry-app/issues/1050)) @@ -39,7 +39,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/). * App will no longer reset when minimizing to tray ([#1042](https://github.com/lbryio/lbry-app/pull/1042)) * Error when clicking LBRY URLs when app is closed on macOS ([#1119](https://github.com/lbryio/lbry-app/issues/1119)) * LBRY URLs not working on Linux ([#1120](https://github.com/lbryio/lbry-app/issues/1120)) - * Fix Windows notifications not showing ([1145](https://github.com/lbryio/lbry-app/pull/1145)) + * Fix Windows notifications not showing ([#1145](https://github.com/lbryio/lbry-app/pull/1145)) + * Fix export issues ([#1163](https://github.com/lbryio/lbry-app/pull/1163)) * Fix __static path not resolving on development environment ### Deprecated diff --git a/src/renderer/component/file-exporter.js b/src/renderer/component/file-exporter.js index 703d565ab..7c9fed011 100644 --- a/src/renderer/component/file-exporter.js +++ b/src/renderer/component/file-exporter.js @@ -12,10 +12,15 @@ class FileExporter extends React.PureComponent { data: PropTypes.array, title: PropTypes.string, label: PropTypes.string, + filters: PropTypes.arrayOf(PropTypes.string), defaultPath: PropTypes.string, onFileCreated: PropTypes.func, }; + static defaultProps = { + filters: [], + }; + constructor(props) { super(props); } @@ -30,12 +35,21 @@ class FileExporter extends React.PureComponent { } handleButtonClick() { - const { title, defaultPath, data } = this.props; + const { title, data, defaultPath, filters } = this.props; const options = { title, defaultPath, - filters: [{ name: 'JSON', extensions: ['json'] }, { name: 'CSV', extensions: ['csv'] }], + filters: [ + { + name: 'CSV', + extensions: ['csv'], + }, + { + name: 'JSON', + extensions: ['json'], + }, + ], }; remote.dialog.showSaveDialog(options, filename => { @@ -44,7 +58,7 @@ class FileExporter extends React.PureComponent { // Get extension and remove initial dot const format = path.extname(filename).replace(/\./g, ''); // Parse data to string with the chosen format - const parsed = parseData(data, format); + const parsed = parseData(data, format, filters); // Write file parsed && this.handleFileCreation(filename, parsed); }); diff --git a/src/renderer/component/publishForm/internal/channelSection.jsx b/src/renderer/component/publishForm/internal/channelSection.jsx index db0b040b1..156e2f063 100644 --- a/src/renderer/component/publishForm/internal/channelSection.jsx +++ b/src/renderer/component/publishForm/internal/channelSection.jsx @@ -62,8 +62,10 @@ class ChannelSection extends React.PureComponent { return; } - if (newChannelBid === balance) { - this.refs.newChannelName.showError(__('Please decrease your bid to account for transaction fees.')); + if (newChannelBid === balance) { + this.refs.newChannelName.showError( + __('Please decrease your bid to account for transaction fees.') + ); return; } diff --git a/src/renderer/component/transactionList/view.jsx b/src/renderer/component/transactionList/view.jsx index df1be4813..335e0d525 100644 --- a/src/renderer/component/transactionList/view.jsx +++ b/src/renderer/component/transactionList/view.jsx @@ -47,8 +47,10 @@ class TransactionList extends React.PureComponent { {Boolean(transactionList.length) && ( )} {(transactionList.length || this.state.filter) && ( diff --git a/src/renderer/index.js b/src/renderer/index.js index 1b395f3ad..b81edfd2c 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -99,9 +99,9 @@ const init = () => { app.store.dispatch(doAutoUpdate()); }); - autoUpdater.on('error', (error) => { + autoUpdater.on('error', error => { // eslint-disable-next-line no-console - console.error(error.message) + console.error(error.message); }); if (['win32', 'darwin'].includes(process.platform)) { diff --git a/src/renderer/redux/reducers/claims.js b/src/renderer/redux/reducers/claims.js index a96cec487..f7c06f293 100644 --- a/src/renderer/redux/reducers/claims.js +++ b/src/renderer/redux/reducers/claims.js @@ -43,18 +43,22 @@ reducers[ACTIONS.FETCH_CLAIM_LIST_MINE_COMPLETED] = (state, action) => { const byId = Object.assign({}, state.byId); const pendingById = Object.assign({}, state.pendingById); - claims.filter(claim => claim.category && (claim.category.match(/claim/) || claim.category.match(/update/))).forEach(claim => { - byId[claim.claim_id] = claim; + claims + .filter( + claim => claim.category && (claim.category.match(/claim/) || claim.category.match(/update/)) + ) + .forEach(claim => { + byId[claim.claim_id] = claim; - const pending = Object.values(pendingById).find( - pendingClaim => - pendingClaim.name === claim.name && pendingClaim.channel_name === claim.channel_name - ); + const pending = Object.values(pendingById).find( + pendingClaim => + pendingClaim.name === claim.name && pendingClaim.channel_name === claim.channel_name + ); - if (pending) { - delete pendingById[pending.claim_id]; - } - }); + if (pending) { + delete pendingById[pending.claim_id]; + } + }); // Remove old timed out pending publishes Object.values(pendingById) diff --git a/src/renderer/rewards.js b/src/renderer/rewards.js index 5ab76455d..8d218c471 100644 --- a/src/renderer/rewards.js +++ b/src/renderer/rewards.js @@ -39,7 +39,7 @@ rewards.SORT_ORDER = [ rewards.TYPE_MANY_DOWNLOADS, rewards.TYPE_REFERRAL, rewards.TYPE_NEW_DEVELOPER, - rewards.YOUTUBE_CREATOR + rewards.YOUTUBE_CREATOR, ]; rewards.claimReward = type => { diff --git a/src/renderer/util/parseData.js b/src/renderer/util/parseData.js index 559809883..83f9a1c5c 100644 --- a/src/renderer/util/parseData.js +++ b/src/renderer/util/parseData.js @@ -1,36 +1,59 @@ -// Beautify JSON -const parseJson = data => JSON.stringify(data, null, '\t'); +// JSON parser +const parseJson = (data, filters = []) => { + const list = data.map(item => { + const temp = {}; + // Apply filters + Object.entries(item).forEach(([key, value]) => { + if (!filters.includes(key)) temp[key] = value; + }); + return temp; + }); + // Beautify JSON + return JSON.stringify(list, null, '\t'); +}; +// CSV Parser // No need for an external module: // https://gist.github.com/btzr-io/55c3450ea3d709fc57540e762899fb85 -const parseCsv = data => { +const parseCsv = (data, filters = []) => { // Get items for header - const getHeaders = temp => - Object.entries(temp) - .map(([key]) => key) - .join(','); + const getHeaders = item => { + const list = []; + // Apply filters + Object.entries(item).forEach(([key]) => { + if (!filters.includes(key)) list.push(key); + }); + // return headers + return list.join(','); + }; + // Get rows content const getData = list => list .map(item => { - const row = Object.entries(item) - .map(([key, value]) => value) - .join(','); - return row; + const row = []; + // Apply filters + Object.entries(item).forEach(([key, value]) => { + if (!filters.includes(key)) row.push(value); + }); + // return rows + return row.join(','); }) .join('\n'); + // Return CSV string return `${getHeaders(data[0])} \n ${getData(data)}`; }; -const parseData = (data, format) => { +const parseData = (data, format, filters = []) => { // Check for validation const valid = data && data[0] && format; // Pick a format const formats = { - csv: list => parseCsv(list), - json: list => parseJson(list), + csv: list => parseCsv(list, filters), + json: list => parseJson(list, filters), }; + // Return parsed data: JSON || CSV return valid && formats[format] ? formats[format](data) : undefined; }; -- 2.45.3 From 99828d048e075e69f1b86058c376559cc654911d Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Thu, 22 Mar 2018 11:55:11 -0400 Subject: [PATCH 114/192] fix: issue with second instance startup --- src/main/index.js | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/src/main/index.js b/src/main/index.js index efd917060..851922dca 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -228,27 +228,29 @@ process.on('uncaughtException', error => { // Force single instance application const isSecondInstance = app.makeSingleInstance(argv => { - if ( - (process.platform === 'win32' || process.platform === 'linux') && - String(argv[1]).startsWith('lbry') - ) { - let URI = argv[1]; + if (rendererWindow) { + if ( + (process.platform === 'win32' || process.platform === 'linux') && + String(argv[1]).startsWith('lbry') + ) { + let URI = argv[1]; - // Keep only command line / deep linked arguments - // Windows normalizes URIs when they're passed in from other apps. On Windows, this tries to - // restore the original URI that was typed. - // - If the URI has no path, Windows adds a trailing slash. LBRY URIs can't have a slash with no - // path, so we just strip it off. - // - In a URI with a claim ID, like lbry://channel#claimid, Windows interprets the hash mark as - // an anchor and converts it to lbry://channel/#claimid. We remove the slash here as well. - if (process.platform === 'win32') { - URI = URI.replace(/\/$/, '').replace('/#', '#'); + // Keep only command line / deep linked arguments + // Windows normalizes URIs when they're passed in from other apps. On Windows, this tries to + // restore the original URI that was typed. + // - If the URI has no path, Windows adds a trailing slash. LBRY URIs can't have a slash with no + // path, so we just strip it off. + // - In a URI with a claim ID, like lbry://channel#claimid, Windows interprets the hash mark as + // an anchor and converts it to lbry://channel/#claimid. We remove the slash here as well. + if (process.platform === 'win32') { + URI = URI.replace(/\/$/, '').replace('/#', '#'); + } + + rendererWindow.webContents.send('open-uri-requested', URI); } - rendererWindow.webContents.send('open-uri-requested', URI); + rendererWindow.show(); } - - rendererWindow.show(); }); if (isSecondInstance) { -- 2.45.3 From 306a6eefffc51d219f3d4c2f0cddbaeef5137b8e Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Thu, 22 Mar 2018 12:33:44 -0400 Subject: [PATCH 115/192] chore: bump version to 0.21.2-rc.1 --- CHANGELOG.md | 12 +++++------- package.json | 2 +- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 86a3b1086..0380d2aeb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,9 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/). -## [Unreleased] +## [0.21.2] - 2018-03-22 + + ### Added * Save app state when closing to tray ([#968](https://github.com/lbryio/lbry-app/issues/968)) * Added startup-troubleshooting FAQ URL to daemon error ([#1039](https://github.com/lbryio/lbry-app/pull/1039)) @@ -15,6 +17,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/). * Add YouTube Sync reward ([#1147](https://github.com/lbryio/lbry-app/pull/1147)) * Retain previous screen sizing on startup ([#338](https://github.com/lbryio/lbry-app/issues/338)) + ### Changed * Update LBRY Protocol to 0.19.1 (See change log for [0.19.0](https://github.com/lbryio/lbry/releases/tag/v0.19.0) and [0.19.1](https://github.com/lbryio/lbry/releases/tag/v0.19.1)) * Improved privacy by allowing users to turn off the file view counter and better understand privacy settings ([#1074](https://github.com/lbryio/lbry-app/pull/1074)) @@ -27,6 +30,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/). * Significantly improved search performance ([#1032](https://github.com/lbryio/lbry-app/pull/1032)) * Allow editing of claims when bid is greater than current balance ([#1105](https://github.com/lbryio/lbry-app/pull/1105)) + ### Fixed * Fixed sort by date of published content ([#986](https://github.com/lbryio/lbry-app/issues/986)) * Fix night mode start time, set to 9PM ([#1050](https://github.com/lbryio/lbry-app/issues/1050)) @@ -43,13 +47,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/). * Fix export issues ([#1163](https://github.com/lbryio/lbry-app/pull/1163)) * Fix __static path not resolving on development environment -### Deprecated - * - * -### Removed - * - * ## [0.20.0] - 2018-01-30 diff --git a/package.json b/package.json index 08c7c5c4a..38c7c4b51 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "LBRY", - "version": "0.21.1-rc.4", + "version": "0.21.2-rc.1", "description": "A browser for the LBRY network, a digital marketplace controlled by its users.", "keywords": [ "lbry" -- 2.45.3 From 797d3b5f321a155552a9bc1e067385d77d86e645 Mon Sep 17 00:00:00 2001 From: Thomas Zarebczan Date: Thu, 22 Mar 2018 14:10:26 -0400 Subject: [PATCH 116/192] clean up --- CHANGELOG.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0380d2aeb..d19be69cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,7 +20,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/). ### Changed * Update LBRY Protocol to 0.19.1 (See change log for [0.19.0](https://github.com/lbryio/lbry/releases/tag/v0.19.0) and [0.19.1](https://github.com/lbryio/lbry/releases/tag/v0.19.1)) - * Improved privacy by allowing users to turn off the file view counter and better understand privacy settings ([#1074](https://github.com/lbryio/lbry-app/pull/1074)) + * Improved privacy by allowing users to turn off the file view counter and better understand privacy settings ([#1074](https://github.com/lbryio/lbry-app/pull/1074) / [#1116](https://github.com/lbryio/lbry-app/pull/1116)) * Disabled auto dark mode if dark mode is selected ([#1006](https://github.com/lbryio/lbry-app/pull/1006)) * Refactor Electron's main process ([#951](https://github.com/lbryio/lbry-app/pull/951)) * Refactor `lbryuri.js` into separate named exports ([#957](https://github.com/lbryio/lbry-app/pull/957)) @@ -37,7 +37,6 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/). * Disable drag and drop of files into the app ([#1045](https://github.com/lbryio/lbry-app/pull/1045)) * Fixed uninformative error message ([#1046](https://github.com/lbryio/lbry-app/pull/1046)) * Update documentation for DevTools and fix some ESLint warnings ([#911](https://github.com/lbryio/lbry-app/pull/911)) - * Fix error wherein user cannot send tip because transaction fails ([#918](https://github.com/lbryio/lbry-app/pull/918)) * Fix right click bug ([#928](https://github.com/lbryio/lbry-app/pull/928)) * Fix Election linting errors ([#929](https://github.com/lbryio/lbry-app/pull/929)) * App will no longer reset when minimizing to tray ([#1042](https://github.com/lbryio/lbry-app/pull/1042)) -- 2.45.3 From 0c6d4b59c009ee472c0fd4c177e604a64d720fad Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Thu, 22 Mar 2018 14:52:07 -0400 Subject: [PATCH 117/192] Revert "fix: __static path not resolving on development environment (#1165)" This reverts commit 4b41c6335d69f669b8dc26d49b91f6aaffceea29. --- .eslintrc.json | 1 + CHANGELOG.md | 1 - src/renderer/app.js | 10 ++++++++++ src/renderer/lbry.js | 2 +- src/renderer/redux/selectors/settings.js | 2 +- 5 files changed, 13 insertions(+), 3 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 64d9f5c30..f7dd140c7 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -20,6 +20,7 @@ }, "globals": { "__static": true, + "staticResourcesPath": true, "__": true, "__n": true, "app": true diff --git a/CHANGELOG.md b/CHANGELOG.md index d19be69cb..f689a27b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,7 +44,6 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/). * LBRY URLs not working on Linux ([#1120](https://github.com/lbryio/lbry-app/issues/1120)) * Fix Windows notifications not showing ([#1145](https://github.com/lbryio/lbry-app/pull/1145)) * Fix export issues ([#1163](https://github.com/lbryio/lbry-app/pull/1163)) - * Fix __static path not resolving on development environment diff --git a/src/renderer/app.js b/src/renderer/app.js index 9a49e51d7..9933b47eb 100644 --- a/src/renderer/app.js +++ b/src/renderer/app.js @@ -22,6 +22,16 @@ const app = { }, }; +// Workaround for https://github.com/electron-userland/electron-webpack/issues/52 +if (!isDev) { + window.staticResourcesPath = Path.join(remote.app.getAppPath(), '../static').replace( + /\\/g, + '\\\\' + ); +} else { + window.staticResourcesPath = ''; +} + // eslint-disable-next-line no-underscore-dangle global.__ = i18n.__; // eslint-disable-next-line no-underscore-dangle diff --git a/src/renderer/lbry.js b/src/renderer/lbry.js index 3505f1c84..79855b4ce 100644 --- a/src/renderer/lbry.js +++ b/src/renderer/lbry.js @@ -172,7 +172,7 @@ Lbry.publishDeprecated = (params, fileListedCallback, publishedCallback, errorCa ); }; -Lbry.imagePath = file => `file://${__static}/img/${file}`; +Lbry.imagePath = file => `${staticResourcesPath}/img/${file}`; Lbry.getMediaType = (contentType, fileName) => { if (contentType) { diff --git a/src/renderer/redux/selectors/settings.js b/src/renderer/redux/selectors/settings.js index 348df4b2e..9c90cfac2 100644 --- a/src/renderer/redux/selectors/settings.js +++ b/src/renderer/redux/selectors/settings.js @@ -30,6 +30,6 @@ export const selectThemePath = createSelector( selectIsNight, (theme, automaticDarkModeEnabled, isNight) => { const dynamicTheme = automaticDarkModeEnabled && isNight ? 'dark' : theme; - return `file://${__static}/themes/${dynamicTheme || 'light'}.css`; + return `${staticResourcesPath}/themes/${dynamicTheme || 'light'}.css`; } ); -- 2.45.3 From 8c4f6eb46e1c74d1dd00671297d369a29d4909b9 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Thu, 22 Mar 2018 15:07:32 -0400 Subject: [PATCH 118/192] chore: bump version to 0.21.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 38c7c4b51..e240f5b23 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "LBRY", - "version": "0.21.2-rc.1", + "version": "0.21.2", "description": "A browser for the LBRY network, a digital marketplace controlled by its users.", "keywords": [ "lbry" -- 2.45.3 From 63b496f7cab8a2022639023afc67c8e025bc9937 Mon Sep 17 00:00:00 2001 From: btzr-io Date: Thu, 22 Mar 2018 18:20:00 -0700 Subject: [PATCH 119/192] implement lbry.getFileTitle function fix sort by title on download / publish page --- src/renderer/component/fileList/view.jsx | 9 +++------ src/renderer/lbry.js | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/renderer/component/fileList/view.jsx b/src/renderer/component/fileList/view.jsx index 9c926e825..1af98000b 100644 --- a/src/renderer/component/fileList/view.jsx +++ b/src/renderer/component/fileList/view.jsx @@ -1,4 +1,5 @@ import React from 'react'; +import lbry from 'lbry.js'; import { buildURI } from 'lbryURI'; import FormField from 'component/formField'; import FileTile from 'component/fileTile'; @@ -49,12 +50,8 @@ class FileList extends React.PureComponent { : fileInfos, title: fileInfos => fileInfos.slice().sort((fileInfo1, fileInfo2) => { - const title1 = fileInfo1.value - ? fileInfo1.value.stream.metadata.title.toLowerCase() - : fileInfo1.claim_name; - const title2 = fileInfo2.value - ? fileInfo2.value.stream.metadata.title.toLowerCase() - : fileInfo2.claim_name; + const title1 = lbry.getFileTitle(fileInfo1).toLowerCase(); + const title2 = lbry.getFileTitle(fileInfo2).toLowerCase(); if (title1 < title2) { return -1; } else if (title1 > title2) { diff --git a/src/renderer/lbry.js b/src/renderer/lbry.js index 79855b4ce..f6887be1e 100644 --- a/src/renderer/lbry.js +++ b/src/renderer/lbry.js @@ -204,6 +204,20 @@ Lbry.getAppVersionInfo = () => ipcRenderer.send('version-info-requested'); }); +Lbry.getFileTitle = fileInfo => { + const { value, metadata, claim_name, name } = fileInfo; + if (metadata) { + // downloaded claim + return metadata.title || claim_name; + } else if (value) { + // published claim + const { title } = value.stream.metadata; + return title || name; + } + // Invalid claim + return ''; +}; + /** * Wrappers for API methods to simulate missing or future behavior. Unlike the old-style stubs, * these are designed to be transparent wrappers around the corresponding API methods. -- 2.45.3 From 088550df4ce24f46ef159eb6ad54e83dcf64af21 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Fri, 23 Mar 2018 09:57:51 -0400 Subject: [PATCH 120/192] build: bump qrcode.react from 0.7.2 to 0.8.0 (#1084) Bumps [qrcode.react](https://github.com/zpao/qrcode.react) from 0.7.2 to 0.8.0. - [Changelog](https://github.com/zpao/qrcode.react/blob/master/CHANGELOG.md) - [Commits](https://github.com/zpao/qrcode.react/commits) Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index e240f5b23..947d9d2bf 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "localforage": "^1.5.0", "mixpanel-browser": "^2.17.1", "moment": "^2.20.1", - "qrcode.react": "^0.7.2", + "qrcode.react": "^0.8.0", "rc-progress": "^2.0.6", "react": "^16.2.0", "react-dom": "^16.2.0", diff --git a/yarn.lock b/yarn.lock index 7106dad4a..5afcf9a51 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7159,11 +7159,11 @@ qr.js@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/qr.js/-/qr.js-0.0.0.tgz#cace86386f59a0db8050fa90d9b6b0e88a1e364f" -qrcode.react@^0.7.2: - version "0.7.2" - resolved "https://registry.yarnpkg.com/qrcode.react/-/qrcode.react-0.7.2.tgz#72a5718fd56baafe15c2c153fe436628d83aa286" +qrcode.react@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/qrcode.react/-/qrcode.react-0.8.0.tgz#413b31cc3b62910e39513f7bead945e01c4c34fb" dependencies: - prop-types "^15.5.8" + prop-types "^15.6.0" qr.js "0.0.0" qs@6.5.1, qs@~6.5.1: -- 2.45.3 From 1eb9705a5e8739a72dee4c90adcea1c4789e3b03 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Fri, 23 Mar 2018 10:03:48 -0400 Subject: [PATCH 121/192] build: bump redux-persist-transform-filter from 0.0.10 to 0.0.16 (#1083) Bumps [redux-persist-transform-filter](https://github.com/edy/redux-persist-transform-filter) from 0.0.10 to 0.0.16. - [Commits](https://github.com/edy/redux-persist-transform-filter/compare/0.0.10...0.0.16) Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 947d9d2bf..fb0a1e405 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "redux-logger": "^3.0.1", "redux-persist": "^4.8.0", "redux-persist-transform-compress": "^4.2.0", - "redux-persist-transform-filter": "0.0.10", + "redux-persist-transform-filter": "0.0.16", "redux-thunk": "^2.2.0", "render-media": "^2.12.0", "reselect": "^3.0.0", diff --git a/yarn.lock b/yarn.lock index 5afcf9a51..dcd8918e8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7460,9 +7460,9 @@ redux-persist-transform-compress@^4.2.0: json-stringify-safe "^5.0.1" lz-string "^1.4.4" -redux-persist-transform-filter@0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/redux-persist-transform-filter/-/redux-persist-transform-filter-0.0.10.tgz#9a3b106ce8939d2cbbf5212c747ed177fff14280" +redux-persist-transform-filter@0.0.16: + version "0.0.16" + resolved "https://registry.yarnpkg.com/redux-persist-transform-filter/-/redux-persist-transform-filter-0.0.16.tgz#0c21dc166774c12fb3f090f7a2f5ea90f7ba0cea" dependencies: lodash.forin "^4.4.0" lodash.get "^4.4.2" -- 2.45.3 From 72b7a17a31ec343b43bbfa7f75c0d8dc81321afc Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Fri, 23 Mar 2018 10:12:27 -0400 Subject: [PATCH 122/192] docs: add build badge to README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 80fb06ec9..c338fa325 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,11 @@ # LBRY App +[![Build Status](https://travis-ci.org/lbryio/lbry-app.svg?branch=master)](https://travis-ci.org/lbryio/lbry-app) [![dependencies](https://david-dm.org/lbryio/lbry-app/status.svg)](https://david-dm.org/lbryio/lbry-app) The LBRY app is a graphical browser for the decentralized content marketplace provided by the [LBRY](https://lbry.io) protocol. It is essentially the -[lbry daemon](https://github.com/lbryio/lbry) bundled with a UI using +[lbry daemon](https://github.com/lbryio/lbry) bundled with an UI using [Electron](http://electron.atom.io/). ![App screenshot](https://lbry.io/img/lbry-ui.png) -- 2.45.3 From a77dd2b54a4c9f63be5f1d4fc827834e8d8a5ea3 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Fri, 23 Mar 2018 15:37:09 -0400 Subject: [PATCH 123/192] feat: enable githooks for commits --- .lintstagedrc => .lintstagedrc.json | 0 package.json | 1 + yarn-error.log | 9707 +++++++++++++++++++++++++++ 3 files changed, 9708 insertions(+) rename .lintstagedrc => .lintstagedrc.json (100%) create mode 100644 yarn-error.log diff --git a/.lintstagedrc b/.lintstagedrc.json similarity index 100% rename from .lintstagedrc rename to .lintstagedrc.json diff --git a/package.json b/package.json index fb0a1e405..ba0f37cfb 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "build": "yarn compile && electron-builder build", "build:dir": "yarn build -- --dir -c.compression=store -c.mac.identity=null", "release": "yarn compile && electron-builder build", + "precommit": "lint-staged", "postinstall": "electron-builder install-app-deps && node build/downloadDaemon.js", "lint": "eslint 'src/**/*.{js,jsx}' --fix", "format": "prettier 'src/**/*.{js,jsx,scss,json}' --write" diff --git a/yarn-error.log b/yarn-error.log new file mode 100644 index 000000000..fa6fe319d --- /dev/null +++ b/yarn-error.log @@ -0,0 +1,9707 @@ +Arguments: + /Users/IGassmann/.nvm/versions/node/v8.9.0/bin/node /usr/local/Cellar/yarn/1.5.1_1/libexec/bin/yarn.js lint-staged -D + +PATH: + /Users/IGassmann/.nvm/versions/node/v8.9.0/bin:/opt/X11/bin:/Applications/VMware Fusion.app/Contents/Public:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin + +Yarn version: + 1.5.1 + +Node version: + 8.9.0 + +Platform: + darwin x64 + +npm manifest: + { + "name": "LBRY", + "version": "0.21.2", + "description": "A browser for the LBRY network, a digital marketplace controlled by its users.", + "keywords": [ + "lbry" + ], + "license": "MIT", + "homepage": "https://lbry.io/", + "bugs": { + "url": "https://github.com/lbryio/lbry-app/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/lbryio/lbry-app" + }, + "author": { + "name": "LBRY Inc.", + "email": "hello@lbry.io" + }, + "main": "src/main/index.js", + "scripts": { + "extract-langs": "node build/extractLocals.js", + "dev": "electron-webpack dev", + "compile": "electron-webpack && yarn extract-langs", + "build": "yarn compile && electron-builder build", + "build:dir": "yarn build -- --dir -c.compression=store -c.mac.identity=null", + "release": "yarn compile && electron-builder build", + "precommit": "lint-staged", + "postinstall": "electron-builder install-app-deps && node build/downloadDaemon.js", + "lint": "eslint 'src/**/*.{js,jsx}' --fix", + "format": "prettier 'src/**/*.{js,jsx,scss,json}' --write" + }, + "dependencies": { + "bluebird": "^3.5.1", + "classnames": "^2.2.5", + "country-data": "^0.0.31", + "electron-dl": "^1.11.0", + "electron-is-dev": "^0.3.0", + "electron-log": "^2.2.12", + "electron-publisher-s3": "^20.2.0", + "electron-updater": "^2.21.0", + "electron-window-state": "^4.1.1", + "find-process": "^1.1.0", + "formik": "^0.10.4", + "from2": "^2.3.0", + "install": "^0.10.2", + "jshashes": "^1.0.7", + "keytar-prebuild": "4.0.4", + "localforage": "^1.5.0", + "mixpanel-browser": "^2.17.1", + "moment": "^2.20.1", + "qrcode.react": "^0.8.0", + "rc-progress": "^2.0.6", + "react": "^16.2.0", + "react-dom": "^16.2.0", + "react-markdown": "^2.5.0", + "react-modal": "^3.1.7", + "react-paginate": "^5.2.1", + "react-redux": "^5.0.3", + "react-simplemde-editor": "^3.6.11", + "redux": "^3.6.0", + "redux-logger": "^3.0.1", + "redux-persist": "^4.8.0", + "redux-persist-transform-compress": "^4.2.0", + "redux-persist-transform-filter": "0.0.16", + "redux-thunk": "^2.2.0", + "render-media": "^2.12.0", + "reselect": "^3.0.0", + "semver": "^5.3.0", + "shapeshift.io": "^1.3.1", + "source-map-support": "^0.5.4", + "tree-kill": "^1.1.0", + "y18n": "^4.0.0" + }, + "devDependencies": { + "axios": "^0.18.0", + "babel-eslint": "^8.2.2", + "babel-plugin-module-resolver": "^3.1.0", + "babel-polyfill": "^6.20.0", + "babel-preset-env": "^1.6.1", + "babel-preset-react": "^6.24.1", + "babel-preset-stage-2": "^6.18.0", + "decompress": "^4.2.0", + "del": "^3.0.0", + "devtron": "^1.4.0", + "electron": "1.7.12", + "electron-builder": "^20.7.1", + "electron-devtools-installer": "^2.2.3", + "electron-webpack": "^1.13.0", + "eslint": "^4.19.0", + "eslint-config-airbnb": "^16.1.0", + "eslint-config-prettier": "^2.9.0", + "eslint-import-resolver-webpack": "^0.8.4", + "eslint-plugin-flowtype": "^2.46.1", + "eslint-plugin-import": "^2.9.0", + "eslint-plugin-jsx-a11y": "^6.0.3", + "eslint-plugin-prettier": "^2.6.0", + "eslint-plugin-react": "^7.7.0", + "flow-babel-webpack-plugin": "^1.1.1", + "flow-bin": "^0.68.0", + "flow-typed": "^2.3.0", + "husky": "^0.14.3", + "i18n-extract": "^0.5.1", + "json-loader": "^0.5.4", + "lint-staged": "^7.0.0", + "make-runnable": "^1.3.6", + "node-loader": "^0.6.0", + "node-sass": "^4.7.2", + "prettier": "^1.11.1", + "sass-loader": "^6.0.7", + "webpack": "^3.10.0", + "webpack-build-notifier": "^0.1.23" + }, + "engines": { + "node": ">=6", + "yarn": "^1.3" + }, + "lbrySettings": { + "lbrynetDaemonVersion": "0.19.1", + "lbrynetDaemonUrlTemplate": "https://github.com/lbryio/lbry/releases/download/vDAEMONVER/lbrynet-daemon-vDAEMONVER-OSNAME.zip", + "lbrynetDaemonDir": "static/daemon", + "lbrynetDaemonFileName": "lbrynet-daemon" + } + } + +yarn manifest: + No manifest + +Lockfile: + # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. + # yarn lockfile v1 + + + "7zip-bin-linux@~1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/7zip-bin-linux/-/7zip-bin-linux-1.3.1.tgz#4856db1ab1bf5b6ee8444f93f5a8ad71446d00d5" + + "7zip-bin-mac@~1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/7zip-bin-mac/-/7zip-bin-mac-1.0.1.tgz#3e68778bbf0926adc68159427074505d47555c02" + + "7zip-bin-win@~2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/7zip-bin-win/-/7zip-bin-win-2.2.0.tgz#0b81c43e911100f3ece2ebac4f414ca95a572d5b" + + "7zip-bin@~3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-3.1.0.tgz#70814c6b6d44fef8b74be6fc64d3977a2eff59a5" + optionalDependencies: + "7zip-bin-linux" "~1.3.1" + "7zip-bin-mac" "~1.0.1" + "7zip-bin-win" "~2.2.0" + + "7zip@0.0.6": + version "0.0.6" + resolved "https://registry.yarnpkg.com/7zip/-/7zip-0.0.6.tgz#9cafb171af82329490353b4816f03347aa150a30" + + "@babel/code-frame@7.0.0-beta.42", "@babel/code-frame@^7.0.0-beta.35", "@babel/code-frame@^7.0.0-beta.40": + version "7.0.0-beta.42" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.42.tgz#a9c83233fa7cd06b39dc77adbb908616ff4f1962" + dependencies: + "@babel/highlight" "7.0.0-beta.42" + + "@babel/generator@7.0.0-beta.42": + version "7.0.0-beta.42" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.42.tgz#777bb50f39c94a7e57f73202d833141f8159af33" + dependencies: + "@babel/types" "7.0.0-beta.42" + jsesc "^2.5.1" + lodash "^4.2.0" + source-map "^0.5.0" + trim-right "^1.0.1" + + "@babel/helper-function-name@7.0.0-beta.42": + version "7.0.0-beta.42" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.42.tgz#b38b8f4f85168d1812c543dd700b5d549b0c4658" + dependencies: + "@babel/helper-get-function-arity" "7.0.0-beta.42" + "@babel/template" "7.0.0-beta.42" + "@babel/types" "7.0.0-beta.42" + + "@babel/helper-get-function-arity@7.0.0-beta.42": + version "7.0.0-beta.42" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.42.tgz#ad072e32f912c033053fc80478169aeadc22191e" + dependencies: + "@babel/types" "7.0.0-beta.42" + + "@babel/helper-module-imports@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.35.tgz#308e350e731752cdb4d0f058df1d704925c64e0a" + dependencies: + "@babel/types" "7.0.0-beta.35" + lodash "^4.2.0" + + "@babel/helper-split-export-declaration@7.0.0-beta.42": + version "7.0.0-beta.42" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.42.tgz#0d0d5254220a9cc4e7e226240306b939dc210ee7" + dependencies: + "@babel/types" "7.0.0-beta.42" + + "@babel/highlight@7.0.0-beta.42": + version "7.0.0-beta.42" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.42.tgz#a502a1c0d6f99b2b0e81d468a1b0c0e81e3f3623" + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + + "@babel/template@7.0.0-beta.42": + version "7.0.0-beta.42" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.42.tgz#7186d4e70d44cdec975049ba0a73bdaf5cdee052" + dependencies: + "@babel/code-frame" "7.0.0-beta.42" + "@babel/types" "7.0.0-beta.42" + babylon "7.0.0-beta.42" + lodash "^4.2.0" + + "@babel/traverse@^7.0.0-beta.40": + version "7.0.0-beta.42" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.42.tgz#f4bf4d1e33d41baf45205e2d0463591d57326285" + dependencies: + "@babel/code-frame" "7.0.0-beta.42" + "@babel/generator" "7.0.0-beta.42" + "@babel/helper-function-name" "7.0.0-beta.42" + "@babel/helper-split-export-declaration" "7.0.0-beta.42" + "@babel/types" "7.0.0-beta.42" + babylon "7.0.0-beta.42" + debug "^3.1.0" + globals "^11.1.0" + invariant "^2.2.0" + lodash "^4.2.0" + + "@babel/types@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.35.tgz#cf933a9a9a38484ca724b335b88d83726d5ab960" + dependencies: + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^2.0.0" + + "@babel/types@7.0.0-beta.42", "@babel/types@^7.0.0-beta.40": + version "7.0.0-beta.42" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.42.tgz#1e2118767684880f6963801b272fd2b3348efacc" + dependencies: + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^2.0.0" + + "@types/node@^7.0.18": + version "7.0.56" + resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.56.tgz#b6b659049191822be43c14610c1785d4b9cddecf" + + "@types/webpack-env@^1.13.5": + version "1.13.5" + resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.13.5.tgz#ca854e9fbdbcdf45d7376882875f28e2c60593f8" + + abab@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" + + abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + + accepts@~1.3.4, accepts@~1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" + dependencies: + mime-types "~2.1.18" + negotiator "0.6.1" + + accessibility-developer-tools@^2.11.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/accessibility-developer-tools/-/accessibility-developer-tools-2.12.0.tgz#3da0cce9d6ec6373964b84f35db7cfc3df7ab514" + + acorn-dynamic-import@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" + dependencies: + acorn "^4.0.3" + + acorn-globals@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538" + dependencies: + acorn "^5.0.0" + + acorn-jsx@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + dependencies: + acorn "^3.0.4" + + acorn@^3.0.4: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + + acorn@^4.0.3: + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + + acorn@^5.0.0, acorn@^5.2.1, acorn@^5.3.0, acorn@^5.5.0: + version "5.5.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9" + + ajv-keywords@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" + + ajv-keywords@^3.0.0, ajv-keywords@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.1.0.tgz#ac2b27939c543e95d2c06e7f7f5c27be4aa543be" + + ajv@^4.9.1: + version "4.11.8" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + + ajv@^5.0.0, ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0: + version "5.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + + ajv@^6.0.1, ajv@^6.1.0, ajv@^6.1.1: + version "6.3.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.3.0.tgz#1650a41114ef00574cac10b8032d8f4c14812da7" + dependencies: + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + + align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + + alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + + amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + + ansi-align@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" + dependencies: + string-width "^2.0.0" + + ansi-escapes@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" + + ansi-escapes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" + + ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + + ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + + ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + + ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + + ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + dependencies: + color-convert "^1.9.0" + + any-observable@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.2.0.tgz#c67870058003579009083f54ac0abafb5c33d242" + + anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + + app-builder-bin-linux@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/app-builder-bin-linux/-/app-builder-bin-linux-1.7.2.tgz#a764c8e52ecf1b5b068f32c820c6daf1ffed6a8f" + + app-builder-bin-linux@1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/app-builder-bin-linux/-/app-builder-bin-linux-1.8.1.tgz#10e9d344ff8019dbc708e11eca13db91f36607e2" + + app-builder-bin-mac@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/app-builder-bin-mac/-/app-builder-bin-mac-1.7.2.tgz#c4ee0d950666c97c12a45ac74ec6396be3357644" + + app-builder-bin-mac@1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/app-builder-bin-mac/-/app-builder-bin-mac-1.8.1.tgz#0f3d8ddb3b502cadeebc6db24593a74cd87138d0" + + app-builder-bin-win@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/app-builder-bin-win/-/app-builder-bin-win-1.7.2.tgz#7acac890782f4118f09941b343ba06c56452a6f6" + + app-builder-bin-win@1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/app-builder-bin-win/-/app-builder-bin-win-1.8.1.tgz#866ebd5f724143b8f55d365f88c22e221425fa1d" + + app-builder-bin@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-1.7.2.tgz#daf67060a6bad8f5f611a0d2876d9db897a83f06" + optionalDependencies: + app-builder-bin-linux "1.7.2" + app-builder-bin-mac "1.7.2" + app-builder-bin-win "1.7.2" + + app-builder-bin@1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-1.8.1.tgz#12c795c5203e59c6927816b2429b340667f634e8" + optionalDependencies: + app-builder-bin-linux "1.8.1" + app-builder-bin-mac "1.8.1" + app-builder-bin-win "1.8.1" + + app-root-path@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46" + + aproba@^1.0.3, aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + + are-we-there-yet@~1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + + argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + dependencies: + sprintf-js "~1.0.2" + + aria-query@^0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.7.1.tgz#26cbb5aff64144b0a825be1846e0b16cfa00b11e" + dependencies: + ast-types-flow "0.0.7" + commander "^2.11.0" + + arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + + arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + + arr-flatten@^1.0.1, arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + + arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + + array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + + array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + + array-find@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-find/-/array-find-1.0.0.tgz#6c8e286d11ed768327f8e62ecee87353ca3e78b8" + + array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + + array-flatten@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296" + + array-includes@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.7.0" + + array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + dependencies: + array-uniq "^1.0.1" + + array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + + array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + + array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + + arrify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + + asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + + asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + + asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + + assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + + assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + + assert@^1.1.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" + dependencies: + util "0.10.3" + + assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + + ast-types-flow@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + + ast-types@0.9.6: + version "0.9.6" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" + + async-each@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + + async-exit-hook@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/async-exit-hook/-/async-exit-hook-2.0.1.tgz#8bd8b024b0ec9b1c01cccb9af9db29bd717dfaf3" + + async-foreach@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" + + async-limiter@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + + async@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + + async@^2.1.2, async@^2.4.1: + version "2.6.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" + dependencies: + lodash "^4.14.0" + + asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + + atob@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.0.3.tgz#19c7a760473774468f20b2d2d03372ad7d4cbf5d" + + autoprefixer@^6.3.1: + version "6.7.7" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" + dependencies: + browserslist "^1.7.6" + caniuse-db "^1.0.30000634" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^5.2.16" + postcss-value-parser "^3.2.3" + + aws-sdk@^2.212.1: + version "2.212.1" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.212.1.tgz#833dbe8d837d46058a3772ac9bb73b69113136e4" + dependencies: + buffer "4.9.1" + events "1.1.1" + ieee754 "1.1.8" + jmespath "0.15.0" + querystring "0.2.0" + sax "1.2.1" + url "0.10.3" + uuid "3.1.0" + xml2js "0.4.17" + xmlbuilder "4.2.1" + + aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + + aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + + aws4@^1.2.1, aws4@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + + axios@^0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.0.tgz#32d53e4851efdc0a11993b6cd000789d70c05102" + dependencies: + follow-redirects "^1.3.0" + is-buffer "^1.1.5" + + axobject-query@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0" + dependencies: + ast-types-flow "0.0.7" + + babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + + babel-core@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.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@^8.2.2: + version "8.2.2" + resolved "http://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.2.tgz#1102273354c6f0b29b4ea28a65f97d122296b68b" + dependencies: + "@babel/code-frame" "^7.0.0-beta.40" + "@babel/traverse" "^7.0.0-beta.40" + "@babel/types" "^7.0.0-beta.40" + babylon "^7.0.0-beta.40" + eslint-scope "~3.7.1" + eslint-visitor-keys "^1.0.0" + + babel-generator@^6.26.0: + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" + + babel-helper-bindify-decorators@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + + babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + dependencies: + babel-helper-explode-assignable-expression "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + + babel-helper-builder-react-jsx@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + esutils "^2.0.2" + + babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + + babel-helper-define-map@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + + babel-helper-explode-assignable-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + + babel-helper-explode-class@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb" + dependencies: + babel-helper-bindify-decorators "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + + babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + dependencies: + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + + babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + + babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + + babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + + babel-helper-regex@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + + babel-helper-remap-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + + babel-helper-replace-supers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + dependencies: + babel-helper-optimise-call-expression "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + + babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + + babel-loader@^7.1.2: + version "7.1.4" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.4.tgz#e3463938bd4e6d55d1c174c5485d406a188ed015" + dependencies: + find-cache-dir "^1.0.0" + loader-utils "^1.0.2" + mkdirp "^0.5.1" + + babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + dependencies: + babel-runtime "^6.22.0" + + babel-plugin-check-es2015-constants@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + dependencies: + babel-runtime "^6.22.0" + + babel-plugin-component@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-component/-/babel-plugin-component-1.1.0.tgz#74fa3446814bca990f52bcad6700465361b011b7" + dependencies: + "@babel/helper-module-imports" "7.0.0-beta.35" + + babel-plugin-module-resolver@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.1.0.tgz#cf7868bd2c1818f855aede16141009b87dd1f95b" + dependencies: + find-babel-config "^1.1.0" + glob "^7.1.2" + pkg-up "^2.0.0" + reselect "^3.0.1" + resolve "^1.4.0" + + babel-plugin-syntax-async-functions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + + babel-plugin-syntax-async-generators@^6.5.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" + + babel-plugin-syntax-class-properties@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" + + babel-plugin-syntax-decorators@^6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" + + babel-plugin-syntax-dynamic-import@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" + + babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + + babel-plugin-syntax-flow@^6.18.0, babel-plugin-syntax-flow@^6.8.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" + + babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + + babel-plugin-syntax-object-rest-spread@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + + babel-plugin-syntax-trailing-function-commas@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + + babel-plugin-transform-async-generator-functions@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-generators "^6.5.0" + babel-runtime "^6.22.0" + + babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.22.0" + + babel-plugin-transform-class-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" + dependencies: + babel-helper-function-name "^6.24.1" + babel-plugin-syntax-class-properties "^6.8.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + + babel-plugin-transform-decorators@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" + dependencies: + babel-helper-explode-class "^6.24.1" + babel-plugin-syntax-decorators "^6.13.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-types "^6.24.1" + + babel-plugin-transform-es2015-arrow-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + dependencies: + babel-runtime "^6.22.0" + + babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + dependencies: + babel-runtime "^6.22.0" + + babel-plugin-transform-es2015-block-scoping@^6.23.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + dependencies: + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + + babel-plugin-transform-es2015-classes@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + dependencies: + 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.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + + babel-plugin-transform-es2015-computed-properties@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + + babel-plugin-transform-es2015-destructuring@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + dependencies: + babel-runtime "^6.22.0" + + babel-plugin-transform-es2015-duplicate-keys@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + + babel-plugin-transform-es2015-for-of@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + dependencies: + babel-runtime "^6.22.0" + + babel-plugin-transform-es2015-function-name@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + + babel-plugin-transform-es2015-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + dependencies: + babel-runtime "^6.22.0" + + babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + + babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" + + babel-plugin-transform-es2015-modules-systemjs@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + + babel-plugin-transform-es2015-modules-umd@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + + babel-plugin-transform-es2015-object-super@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + dependencies: + babel-helper-replace-supers "^6.24.1" + babel-runtime "^6.22.0" + + babel-plugin-transform-es2015-parameters@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + dependencies: + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + + babel-plugin-transform-es2015-shorthand-properties@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + + babel-plugin-transform-es2015-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + dependencies: + babel-runtime "^6.22.0" + + babel-plugin-transform-es2015-sticky-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + + babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + dependencies: + babel-runtime "^6.22.0" + + babel-plugin-transform-es2015-typeof-symbol@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + dependencies: + babel-runtime "^6.22.0" + + babel-plugin-transform-es2015-unicode-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + + babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-exponentiation-operator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.22.0" + + babel-plugin-transform-flow-comments@^6.17.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-comments/-/babel-plugin-transform-flow-comments-6.22.0.tgz#8d9491132f2b48abd0656f96c20f3bbd6fc17529" + dependencies: + babel-plugin-syntax-flow "^6.8.0" + babel-runtime "^6.22.0" + + babel-plugin-transform-flow-strip-types@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" + dependencies: + babel-plugin-syntax-flow "^6.18.0" + babel-runtime "^6.22.0" + + babel-plugin-transform-object-rest-spread@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.26.0" + + babel-plugin-transform-react-display-name@^6.23.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" + dependencies: + babel-runtime "^6.22.0" + + babel-plugin-transform-react-jsx-self@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e" + dependencies: + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + + babel-plugin-transform-react-jsx-source@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" + dependencies: + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + + babel-plugin-transform-react-jsx@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" + dependencies: + babel-helper-builder-react-jsx "^6.24.1" + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + + babel-plugin-transform-regenerator@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + dependencies: + regenerator-transform "^0.10.0" + + babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + + babel-polyfill@^6.20.0, babel-polyfill@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" + dependencies: + babel-runtime "^6.26.0" + core-js "^2.5.0" + regenerator-runtime "^0.10.5" + + babel-preset-env@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48" + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-to-generator "^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.23.0" + babel-plugin-transform-es2015-classes "^6.23.0" + babel-plugin-transform-es2015-computed-properties "^6.22.0" + babel-plugin-transform-es2015-destructuring "^6.23.0" + babel-plugin-transform-es2015-duplicate-keys "^6.22.0" + babel-plugin-transform-es2015-for-of "^6.23.0" + babel-plugin-transform-es2015-function-name "^6.22.0" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.22.0" + babel-plugin-transform-es2015-modules-commonjs "^6.23.0" + babel-plugin-transform-es2015-modules-systemjs "^6.23.0" + babel-plugin-transform-es2015-modules-umd "^6.23.0" + babel-plugin-transform-es2015-object-super "^6.22.0" + babel-plugin-transform-es2015-parameters "^6.23.0" + babel-plugin-transform-es2015-shorthand-properties "^6.22.0" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.22.0" + 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.22.0" + babel-plugin-transform-exponentiation-operator "^6.22.0" + babel-plugin-transform-regenerator "^6.22.0" + browserslist "^2.1.2" + invariant "^2.2.2" + semver "^5.3.0" + + babel-preset-flow@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d" + dependencies: + babel-plugin-transform-flow-strip-types "^6.22.0" + + babel-preset-react@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" + dependencies: + babel-plugin-syntax-jsx "^6.3.13" + babel-plugin-transform-react-display-name "^6.23.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-stage-2@^6.18.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1" + dependencies: + 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@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" + dependencies: + 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.22.0" + + babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + + babel-runtime@6.x, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + + babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + + babel-traverse@^6.24.1, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + + babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + + babylon@7.0.0-beta.42, babylon@^7.0.0-beta.40: + version "7.0.0-beta.42" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.42.tgz#67cfabcd4f3ec82999d29031ccdea89d0ba99657" + + babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + + balanced-match@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + + balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + + base62@^1.1.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/base62/-/base62-1.2.7.tgz#5c01aad73c0124f9535cff1bdb9c4e6ccf838cfb" + + base64-js@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978" + + base64-js@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" + + base64-js@^1.0.2, base64-js@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.3.tgz#fb13668233d9614cf5fb4bce95a9ba4096cdf801" + + base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + + batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + + bcrypt-pbkdf@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + dependencies: + tweetnacl "^0.14.3" + + big-integer@^1.6.17: + version "1.6.27" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.27.tgz#8e56c6f8b2dd6c4fe8d32102b83d4f25868e4b3a" + + big.js@^3.1.3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" + + binary-extensions@^1.0.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" + + binary-search@^1.2.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/binary-search/-/binary-search-1.3.3.tgz#b5adb6fb279a197be51b1ee8b0fb76fcdc61b429" + + binary@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" + dependencies: + buffers "~0.1.1" + chainsaw "~0.1.0" + + bl@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + + block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + dependencies: + inherits "~2.0.0" + + bluebird-lst@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/bluebird-lst/-/bluebird-lst-1.0.5.tgz#bebc83026b7e92a72871a3dc599e219cbfb002a9" + dependencies: + bluebird "^3.5.1" + + bluebird@^3.4.7, bluebird@^3.5.0, bluebird@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" + + bluebird@~3.4.1: + version "3.4.7" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" + + bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.8" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + + body-parser@1.18.2: + version "1.18.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" + dependencies: + bytes "3.0.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.1" + http-errors "~1.6.2" + iconv-lite "0.4.19" + on-finished "~2.3.0" + qs "6.5.1" + raw-body "2.3.2" + type-is "~1.6.15" + + bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + + boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + + boom@2.x.x: + version "2.10.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + dependencies: + hoek "2.x.x" + + boom@4.x.x: + version "4.3.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" + dependencies: + hoek "4.x.x" + + boom@5.x.x: + version "5.2.0" + resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" + dependencies: + hoek "4.x.x" + + boxen@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" + dependencies: + ansi-align "^2.0.0" + camelcase "^4.0.0" + chalk "^2.0.1" + cli-boxes "^1.0.0" + string-width "^2.0.0" + term-size "^1.2.0" + widest-line "^2.0.0" + + brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + + braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + + braces@^2.3.0, braces@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.1.tgz#7086c913b4e5a08dbe37ac0ee6a2500c4ba691bb" + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + define-property "^1.0.0" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + kind-of "^6.0.2" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + + brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + + browser-process-hrtime@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" + + browser-resolve@^1.11.2: + version "1.11.2" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + dependencies: + resolve "1.1.7" + + browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f" + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + + browserify-cipher@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + + browserify-des@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + + browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + + browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + + browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + dependencies: + pako "~1.0.5" + + browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: + version "1.7.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" + dependencies: + caniuse-db "^1.0.30000639" + electron-to-chromium "^1.2.7" + + browserslist@^2.1.2: + version "2.11.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.3.tgz#fe36167aed1bbcde4827ebfe71347a2cc70b99b2" + dependencies: + caniuse-lite "^1.0.30000792" + electron-to-chromium "^1.3.30" + + buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + + buffer-from@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531" + + buffer-indexof-polyfill@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz#a9fb806ce8145d5428510ce72f278bb363a638bf" + + buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + + buffer-shims@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" + + buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + + buffer@4.9.1, buffer@^4.3.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + + buffer@^3.0.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-3.6.0.tgz#a72c936f77b96bf52f5f7e7b467180628551defb" + dependencies: + base64-js "0.0.8" + ieee754 "^1.1.4" + isarray "^1.0.0" + + buffers@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" + + builder-util-runtime@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-4.1.0.tgz#7dcd042d555d2f161a5538d7a0ea8c292daa0683" + dependencies: + bluebird-lst "^1.0.5" + debug "^3.1.0" + fs-extra-p "^4.5.2" + sax "^1.2.4" + + builder-util-runtime@4.2.0, builder-util-runtime@^4.1.0, builder-util-runtime@^4.2.0, builder-util-runtime@~4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-4.2.0.tgz#c56aa18d34390143da031c418c9d3a055fbd3522" + dependencies: + bluebird-lst "^1.0.5" + debug "^3.1.0" + fs-extra-p "^4.5.2" + sax "^1.2.4" + + builder-util@5.6.7: + version "5.6.7" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.6.7.tgz#662ff2ba4f70416ee0c085126f16af48fbf97900" + dependencies: + "7zip-bin" "~3.1.0" + app-builder-bin "1.7.2" + bluebird-lst "^1.0.5" + builder-util-runtime "^4.1.0" + chalk "^2.3.2" + debug "^3.1.0" + fs-extra-p "^4.5.2" + is-ci "^1.1.0" + js-yaml "^3.11.0" + lazy-val "^1.0.3" + semver "^5.5.0" + source-map-support "^0.5.4" + stat-mode "^0.2.2" + temp-file "^3.1.1" + + builder-util@5.7.2, builder-util@^5.6.7, builder-util@^5.7.0, builder-util@^5.7.1: + version "5.7.2" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.7.2.tgz#049b4365993f34519c9d56589494cda2257b24d3" + dependencies: + "7zip-bin" "~3.1.0" + app-builder-bin "1.8.1" + bluebird-lst "^1.0.5" + builder-util-runtime "^4.2.0" + chalk "^2.3.2" + debug "^3.1.0" + fs-extra-p "^4.5.2" + is-ci "^1.1.0" + js-yaml "^3.11.0" + lazy-val "^1.0.3" + semver "^5.5.0" + source-map-support "^0.5.4" + stat-mode "^0.2.2" + temp-file "^3.1.1" + + builtin-modules@^1.0.0, builtin-modules@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + + builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + + bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + + cacache@^10.0.4: + version "10.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460" + dependencies: + bluebird "^3.5.1" + chownr "^1.0.1" + glob "^7.1.2" + graceful-fs "^4.1.11" + lru-cache "^4.1.1" + mississippi "^2.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.2" + ssri "^5.2.4" + unique-filename "^1.1.0" + y18n "^4.0.0" + + cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + + caller-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + dependencies: + callsites "^0.2.0" + + callsites@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + + callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + + camel-case@3.0.x: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" + dependencies: + no-case "^2.2.0" + upper-case "^1.1.1" + + camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + + camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + + camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + + camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + + camelcase@^4.0.0, camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + + caniuse-api@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" + dependencies: + browserslist "^1.3.6" + caniuse-db "^1.0.30000529" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + + caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: + version "1.0.30000819" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000819.tgz#c3b7dd559e5e6d63d5dcaa62bac6bd04c7619709" + + caniuse-lite@^1.0.30000792: + version "1.0.30000819" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000819.tgz#aabee5fd15a080febab6ae5d30c9ea15f4c6d4e2" + + capture-stack-trace@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" + + caseless@~0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" + + caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + + center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + + chainsaw@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" + dependencies: + traverse ">=0.3.0 <0.4" + + chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + + chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1, chalk@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + + chardet@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" + + charenc@~0.0.1: + version "0.0.2" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + + chokidar@^2.0.0, chokidar@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.2.tgz#4dc65139eeb2714977735b6a35d06e97b494dfd7" + dependencies: + anymatch "^2.0.0" + async-each "^1.0.0" + braces "^2.3.0" + glob-parent "^3.1.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^2.1.1" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + upath "^1.0.0" + optionalDependencies: + fsevents "^1.0.0" + + chownr@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" + + chromium-pickle-js@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205" + + ci-info@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.3.tgz#710193264bb05c77b8c90d02f5aaf22216a667b2" + + cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + + circular-json@^0.3.1: + version "0.3.3" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + + clap@^1.0.9: + version "1.2.3" + resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" + dependencies: + chalk "^1.1.3" + + class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + + classnames@^2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" + + clean-css@4.1.x: + version "4.1.11" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.11.tgz#2ecdf145aba38f54740f26cefd0ff3e03e125d6a" + dependencies: + source-map "0.5.x" + + cli-boxes@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + + cli-cursor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" + dependencies: + restore-cursor "^1.0.1" + + cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + dependencies: + restore-cursor "^2.0.0" + + cli-spinners@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" + + cli-truncate@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" + dependencies: + slice-ansi "0.0.4" + string-width "^1.0.1" + + cli-width@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + + cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + + cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + + cliui@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.0.0.tgz#743d4650e05f36d1ed2575b59638d87322bfbbcc" + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + + clone-deep@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-2.0.2.tgz#00db3a1e173656730d1188c3d6aced6d7ea97713" + dependencies: + for-own "^1.0.0" + is-plain-object "^2.0.4" + kind-of "^6.0.0" + shallow-clone "^1.0.0" + + clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + + co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + + coa@~1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" + dependencies: + q "^1.1.2" + + code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + + codemirror-spell-checker@*: + version "1.1.2" + resolved "https://registry.yarnpkg.com/codemirror-spell-checker/-/codemirror-spell-checker-1.1.2.tgz#1c660f9089483ccb5113b9ba9ca19c3f4993371e" + dependencies: + typo-js "*" + + codemirror@*: + version "5.36.0" + resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.36.0.tgz#1172ad9dc298056c06e0b34e5ccd23825ca15b40" + + collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + + color-convert@^1.3.0, color-convert@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" + dependencies: + color-name "^1.1.1" + + color-convert@~0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-0.5.3.tgz#bdb6c69ce660fadffe0b0007cc447e1b9f7282bd" + + color-name@^1.0.0, color-name@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + + color-string@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" + dependencies: + color-name "^1.0.0" + + color@^0.11.0: + version "0.11.4" + resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" + dependencies: + clone "^1.0.2" + color-convert "^1.3.0" + color-string "^0.3.0" + + colormin@^1.0.5: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" + dependencies: + color "^0.11.0" + css-color-names "0.0.4" + has "^1.0.1" + + colors@^1.1.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.2.1.tgz#f4a3d302976aaf042356ba1ade3b1a2c62d9d794" + + colors@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + + combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" + dependencies: + delayed-stream "~1.0.0" + + commander@2.15.x, commander@^2.11.0, commander@^2.14.1, commander@^2.5.0, commander@^2.9.0, commander@~2.15.0: + version "2.15.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" + + commander@~2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" + + commander@~2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" + dependencies: + graceful-readlink ">= 1.0.0" + + commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + + commoner@^0.10.1: + version "0.10.8" + resolved "https://registry.yarnpkg.com/commoner/-/commoner-0.10.8.tgz#34fc3672cd24393e8bb47e70caa0293811f4f2c5" + dependencies: + commander "^2.5.0" + detective "^4.3.1" + glob "^5.0.15" + graceful-fs "^4.1.2" + iconv-lite "^0.4.5" + mkdirp "^0.5.0" + private "^0.1.6" + q "^1.1.2" + recast "^0.11.17" + + commonmark-react-renderer@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/commonmark-react-renderer/-/commonmark-react-renderer-4.3.4.tgz#29f345357951ab36eb386d45ea6bc08006f3ff9b" + dependencies: + lodash.assign "^4.2.0" + lodash.isplainobject "^4.0.6" + pascalcase "^0.1.1" + xss-filters "^1.2.6" + + commonmark@^0.24.0: + version "0.24.0" + resolved "https://registry.yarnpkg.com/commonmark/-/commonmark-0.24.0.tgz#b80de0182c546355643aa15db12bfb282368278f" + dependencies: + entities "~ 1.1.1" + mdurl "~ 1.0.1" + string.prototype.repeat "^0.2.0" + + compare-version@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/compare-version/-/compare-version-0.1.2.tgz#0162ec2d9351f5ddd59a9202cba935366a725080" + + component-emitter@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + + compressible@~2.0.13: + version "2.0.13" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.13.tgz#0d1020ab924b2fdb4d6279875c7d6daba6baa7a9" + dependencies: + mime-db ">= 1.33.0 < 2" + + compression@^1.5.2: + version "1.7.2" + resolved "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz#aaffbcd6aaf854b44ebb280353d5ad1651f59a69" + dependencies: + accepts "~1.3.4" + bytes "3.0.0" + compressible "~2.0.13" + debug "2.6.9" + on-headers "~1.0.1" + safe-buffer "5.1.1" + vary "~1.1.2" + + concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + + concat-stream@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" + dependencies: + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + + concat-stream@^1.5.0, concat-stream@^1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + + configstore@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.1.tgz#094ee662ab83fad9917678de114faaea8fcdca90" + dependencies: + dot-prop "^4.1.0" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + unique-string "^1.0.0" + write-file-atomic "^2.0.0" + xdg-basedir "^3.0.0" + + connect-history-api-fallback@^1.3.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" + + console-browserify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + dependencies: + date-now "^0.1.4" + + console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + + constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + + contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + + content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + + content-type-parser@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7" + + content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + + convert-source-map@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" + + cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + + cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + + copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + + copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + + core-js@^1.0.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + + core-js@^2.4.0, core-js@^2.5.0: + version "2.5.3" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e" + + core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + + cosmiconfig@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc" + dependencies: + is-directory "^0.3.1" + js-yaml "^3.9.0" + parse-json "^4.0.0" + require-from-string "^2.0.1" + + country-data@^0.0.31: + version "0.0.31" + resolved "https://registry.yarnpkg.com/country-data/-/country-data-0.0.31.tgz#80966b8e1d147fa6d6a589d32933f8793774956d" + dependencies: + currency-symbol-map "~2" + underscore ">1.4.4" + + create-ecdh@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + + create-error-class@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + dependencies: + capture-stack-trace "^1.0.0" + + create-hash@^1.1.0, create-hash@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd" + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + ripemd160 "^2.0.0" + sha.js "^2.4.0" + + create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.6" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06" + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + + crocket@^0.9.11: + version "0.9.11" + resolved "https://registry.yarnpkg.com/crocket/-/crocket-0.9.11.tgz#288fca11ef0d3dd239b62c488265f30c8edfb0c5" + dependencies: + xpipe "*" + + cross-spawn@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" + dependencies: + lru-cache "^4.0.1" + which "^1.2.9" + + cross-spawn@^5.0.1, cross-spawn@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + + cross-unzip@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/cross-unzip/-/cross-unzip-0.0.2.tgz#5183bc47a09559befcf98cc4657964999359372f" + + crypt@~0.0.1: + version "0.0.2" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + + cryptiles@2.x.x: + version "2.0.5" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + dependencies: + boom "2.x.x" + + cryptiles@3.x.x: + version "3.1.2" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" + dependencies: + boom "5.x.x" + + crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + + crypto-random-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + + css-color-names@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + + css-hot-loader@^1.3.7: + version "1.3.8" + resolved "https://registry.yarnpkg.com/css-hot-loader/-/css-hot-loader-1.3.8.tgz#edc17f9a24c8e2254c1c570e3779257489aa53f6" + dependencies: + loader-utils "^1.1.0" + lodash "^4.17.5" + normalize-url "^1.9.1" + + css-loader@^0.28.9: + version "0.28.11" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.11.tgz#c3f9864a700be2711bb5a2462b2389b1a392dab7" + dependencies: + babel-code-frame "^6.26.0" + css-selector-tokenizer "^0.7.0" + cssnano "^3.10.0" + icss-utils "^2.1.0" + loader-utils "^1.0.2" + lodash.camelcase "^4.3.0" + object-assign "^4.1.1" + postcss "^5.0.6" + postcss-modules-extract-imports "^1.2.0" + postcss-modules-local-by-default "^1.2.0" + postcss-modules-scope "^1.1.0" + postcss-modules-values "^1.3.0" + postcss-value-parser "^3.3.0" + source-list-map "^2.0.0" + + css-select@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + + css-selector-tokenizer@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86" + dependencies: + cssesc "^0.1.0" + fastparse "^1.1.1" + regexpu-core "^1.0.0" + + css-what@2.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" + + cssesc@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" + + cssnano@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" + dependencies: + autoprefixer "^6.3.1" + decamelize "^1.1.2" + defined "^1.0.0" + has "^1.0.1" + object-assign "^4.0.1" + postcss "^5.0.14" + postcss-calc "^5.2.0" + postcss-colormin "^2.1.8" + postcss-convert-values "^2.3.4" + postcss-discard-comments "^2.0.4" + postcss-discard-duplicates "^2.0.1" + postcss-discard-empty "^2.0.1" + postcss-discard-overridden "^0.1.1" + postcss-discard-unused "^2.2.1" + postcss-filter-plugins "^2.0.0" + postcss-merge-idents "^2.1.5" + postcss-merge-longhand "^2.0.1" + postcss-merge-rules "^2.0.3" + postcss-minify-font-values "^1.0.2" + postcss-minify-gradients "^1.0.1" + postcss-minify-params "^1.0.4" + postcss-minify-selectors "^2.0.4" + postcss-normalize-charset "^1.1.0" + postcss-normalize-url "^3.0.7" + postcss-ordered-values "^2.1.0" + postcss-reduce-idents "^2.2.2" + postcss-reduce-initial "^1.0.0" + postcss-reduce-transforms "^1.0.3" + postcss-svgo "^2.1.1" + postcss-unique-selectors "^2.0.2" + postcss-value-parser "^3.2.3" + postcss-zindex "^2.0.1" + + csso@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" + dependencies: + clap "^1.0.9" + source-map "^0.5.3" + + cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" + + "cssstyle@>= 0.2.37 < 0.3.0": + version "0.2.37" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" + dependencies: + cssom "0.3.x" + + currency-symbol-map@~2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/currency-symbol-map/-/currency-symbol-map-2.2.0.tgz#2b3c1872ff1ac2ce595d8273e58e1fff0272aea2" + + currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + dependencies: + array-find-index "^1.0.1" + + cyclist@~0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" + + d@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" + dependencies: + es5-ext "^0.10.9" + + damerau-levenshtein@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" + + dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + + date-fns@^1.27.2: + version "1.29.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" + + date-now@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + + debug@2.6.9, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + + debug@^3.0.0, debug@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + dependencies: + ms "2.0.0" + + decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + + decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + + decompress-response@^3.2.0, decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + dependencies: + mimic-response "^1.0.0" + + decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1" + dependencies: + file-type "^5.2.0" + is-stream "^1.1.0" + tar-stream "^1.5.2" + + decompress-tarbz2@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz#3082a5b880ea4043816349f378b56c516be1a39b" + dependencies: + decompress-tar "^4.1.0" + file-type "^6.1.0" + is-stream "^1.1.0" + seek-bzip "^1.0.5" + unbzip2-stream "^1.0.9" + + decompress-targz@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/decompress-targz/-/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee" + dependencies: + decompress-tar "^4.1.1" + file-type "^5.2.0" + is-stream "^1.1.0" + + decompress-unzip@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/decompress-unzip/-/decompress-unzip-4.0.1.tgz#deaaccdfd14aeaf85578f733ae8210f9b4848f69" + dependencies: + file-type "^3.8.0" + get-stream "^2.2.0" + pify "^2.3.0" + yauzl "^2.4.2" + + decompress@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/decompress/-/decompress-4.2.0.tgz#7aedd85427e5a92dacfe55674a7c505e96d01f9d" + dependencies: + decompress-tar "^4.0.0" + decompress-tarbz2 "^4.0.0" + decompress-targz "^4.0.0" + decompress-unzip "^4.0.1" + graceful-fs "^4.1.10" + make-dir "^1.0.0" + pify "^2.3.0" + strip-dirs "^2.0.0" + + dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + + deep-diff@^0.3.5: + version "0.3.8" + resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.8.tgz#c01de63efb0eec9798801d40c7e0dae25b582c84" + + deep-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + + deep-extend@~0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" + + deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + + define-properties@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + dependencies: + foreach "^2.0.5" + object-keys "^1.0.8" + + define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + dependencies: + is-descriptor "^0.1.0" + + define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + dependencies: + is-descriptor "^1.0.0" + + define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + + defined@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + + del@^2.0.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + + del@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" + dependencies: + globby "^6.1.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + p-map "^1.1.1" + pify "^3.0.0" + rimraf "^2.2.8" + + delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + + delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + + depd@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" + + depd@~1.1.1, depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + + des.js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + + destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + + detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + dependencies: + repeating "^2.0.0" + + detect-libc@^1.0.2, detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + + detect-node@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127" + + detective@^4.3.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/detective/-/detective-4.7.1.tgz#0eca7314338442febb6d65da54c10bb1c82b246e" + dependencies: + acorn "^5.2.1" + defined "^1.0.0" + + devtron@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/devtron/-/devtron-1.4.0.tgz#b5e748bd6e95bbe70bfcc68aae6fe696119441e1" + dependencies: + accessibility-developer-tools "^2.11.0" + highlight.js "^9.3.0" + humanize-plus "^1.8.1" + + diff@^3.2.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + + diffie-hellman@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + + dmg-builder@4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-4.1.3.tgz#d336cf398fd331b2dedd7efae4b51b9bfe00aa1c" + dependencies: + bluebird-lst "^1.0.5" + builder-util "^5.7.0" + electron-builder-lib "~20.6.2" + fs-extra-p "^4.5.2" + iconv-lite "^0.4.19" + js-yaml "^3.11.0" + parse-color "^1.0.0" + sanitize-filename "^1.6.1" + + dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + + dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + + dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + dependencies: + buffer-indexof "^1.0.0" + + doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + + doctrine@^2.0.2, doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + dependencies: + esutils "^2.0.2" + + dom-converter@~0.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz#a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b" + dependencies: + utila "~0.3" + + dom-serializer@0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" + dependencies: + domelementtype "~1.1.1" + entities "~1.1.1" + + dom-walk@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" + + domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + + domelementtype@1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + + domelementtype@~1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + + domexception@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + dependencies: + webidl-conversions "^4.0.2" + + domhandler@2.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594" + dependencies: + domelementtype "1" + + domutils@1.1: + version "1.1.6" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" + dependencies: + domelementtype "1" + + domutils@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + dependencies: + dom-serializer "0" + domelementtype "1" + + dot-prop@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + dependencies: + is-obj "^1.0.0" + + dotenv-expand@^4.0.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-4.2.0.tgz#def1f1ca5d6059d24a766e587942c21106ce1275" + + dotenv@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" + + duplexer2@~0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + dependencies: + readable-stream "^2.0.2" + + duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + + duplexify@^3.4.2, duplexify@^3.5.3: + version "3.5.4" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.4.tgz#4bb46c1796eabebeec4ca9a2e66b808cb7a3d8b4" + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + + ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + + ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + + ejs@^2.5.7: + version "2.5.7" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.7.tgz#cc872c168880ae3c7189762fd5ffc00896c9518a" + + electron-builder-lib@20.7.1: + version "20.7.1" + resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.7.1.tgz#c1d5abe0ed42606dcf92e46d4fdedc09f6d21ee3" + dependencies: + "7zip-bin" "~3.1.0" + app-builder-bin "1.8.1" + async-exit-hook "^2.0.1" + bluebird-lst "^1.0.5" + builder-util "5.7.2" + builder-util-runtime "4.2.0" + chromium-pickle-js "^0.2.0" + debug "^3.1.0" + ejs "^2.5.7" + electron-osx-sign "0.4.10" + electron-publish "20.7.0" + fs-extra-p "^4.5.2" + hosted-git-info "^2.6.0" + is-ci "^1.1.0" + isbinaryfile "^3.0.2" + js-yaml "^3.11.0" + lazy-val "^1.0.3" + minimatch "^3.0.4" + normalize-package-data "^2.4.0" + plist "^3.0.1" + read-config-file "3.0.0" + sanitize-filename "^1.6.1" + semver "^5.5.0" + temp-file "^3.1.1" + + electron-builder-lib@~20.6.2: + version "20.6.2" + resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.6.2.tgz#34f38b6172c05f90d34b6b5ed2f2b6922e731a39" + dependencies: + "7zip-bin" "~3.1.0" + app-builder-bin "1.7.2" + async-exit-hook "^2.0.1" + bluebird-lst "^1.0.5" + builder-util "5.6.7" + builder-util-runtime "4.1.0" + chromium-pickle-js "^0.2.0" + debug "^3.1.0" + ejs "^2.5.7" + electron-osx-sign "0.4.10" + electron-publish "20.6.1" + fs-extra-p "^4.5.2" + hosted-git-info "^2.6.0" + is-ci "^1.1.0" + isbinaryfile "^3.0.2" + js-yaml "^3.11.0" + lazy-val "^1.0.3" + minimatch "^3.0.4" + normalize-package-data "^2.4.0" + plist "^2.1.0" + read-config-file "3.0.0" + sanitize-filename "^1.6.1" + semver "^5.5.0" + temp-file "^3.1.1" + + electron-builder@^20.7.1: + version "20.7.1" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-20.7.1.tgz#209eac9892a8f97e9e0ec312e9c50c4e7c0b4758" + dependencies: + bluebird-lst "^1.0.5" + builder-util "5.7.2" + builder-util-runtime "4.2.0" + chalk "^2.3.2" + dmg-builder "4.1.3" + electron-builder-lib "20.7.1" + electron-download-tf "4.3.4" + fs-extra-p "^4.5.2" + is-ci "^1.1.0" + lazy-val "^1.0.3" + read-config-file "3.0.0" + sanitize-filename "^1.6.1" + update-notifier "^2.3.0" + yargs "^11.0.0" + + electron-devtools-installer@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/electron-devtools-installer/-/electron-devtools-installer-2.2.3.tgz#58b9a4ec507377bc46e091cd43714188e0c369be" + dependencies: + "7zip" "0.0.6" + cross-unzip "0.0.2" + rimraf "^2.5.2" + semver "^5.3.0" + + electron-dl@^1.11.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/electron-dl/-/electron-dl-1.11.0.tgz#112851f3857bb1a556b5c736af06040bd40df850" + dependencies: + ext-name "^5.0.0" + pupa "^1.0.0" + unused-filename "^1.0.0" + + electron-download-tf@4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/electron-download-tf/-/electron-download-tf-4.3.4.tgz#b03740b2885aa2ad3f8784fae74df427f66d5165" + dependencies: + debug "^3.0.0" + env-paths "^1.0.0" + fs-extra "^4.0.1" + minimist "^1.2.0" + nugget "^2.0.1" + path-exists "^3.0.0" + rc "^1.2.1" + semver "^5.4.1" + sumchecker "^2.0.2" + + electron-download@^3.0.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/electron-download/-/electron-download-3.3.0.tgz#2cfd54d6966c019c4d49ad65fbe65cc9cdef68c8" + dependencies: + debug "^2.2.0" + fs-extra "^0.30.0" + home-path "^1.0.1" + minimist "^1.2.0" + nugget "^2.0.0" + path-exists "^2.1.0" + rc "^1.1.2" + semver "^5.3.0" + sumchecker "^1.2.0" + + electron-is-dev@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/electron-is-dev/-/electron-is-dev-0.3.0.tgz#14e6fda5c68e9e4ecbeff9ccf037cbd7c05c5afe" + + electron-log@^2.2.12: + version "2.2.14" + resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-2.2.14.tgz#2123319ccb8d70b0db07f0eda57d5823cb42b4b0" + + electron-osx-sign@0.4.10: + version "0.4.10" + resolved "https://registry.yarnpkg.com/electron-osx-sign/-/electron-osx-sign-0.4.10.tgz#be4f3b89b2a75a1dc5f1e7249081ab2929ca3a26" + dependencies: + 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@20.6.1: + version "20.6.1" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-20.6.1.tgz#1bc8497fc9370f8e39c9212ce0b5857ef1d666fd" + dependencies: + bluebird-lst "^1.0.5" + builder-util "^5.6.7" + builder-util-runtime "^4.1.0" + chalk "^2.3.2" + fs-extra-p "^4.5.2" + lazy-val "^1.0.3" + mime "^2.2.0" + + electron-publish@20.7.0, electron-publish@~20.7.0: + version "20.7.0" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-20.7.0.tgz#1bdc02365b199cd817e635bcd251670a39e014ce" + dependencies: + bluebird-lst "^1.0.5" + builder-util "^5.7.1" + builder-util-runtime "^4.2.0" + chalk "^2.3.2" + fs-extra-p "^4.5.2" + lazy-val "^1.0.3" + mime "^2.2.0" + + electron-publisher-s3@^20.2.0: + version "20.7.0" + resolved "https://registry.yarnpkg.com/electron-publisher-s3/-/electron-publisher-s3-20.7.0.tgz#3c2cc2f8b5959258883d646996e88c276224cb33" + dependencies: + aws-sdk "^2.212.1" + bluebird-lst "^1.0.5" + builder-util "^5.7.1" + electron-publish "~20.7.0" + fs-extra-p "^4.5.2" + mime "^2.2.0" + + electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30: + version "1.3.40" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.40.tgz#1fbd6d97befd72b8a6f921dc38d22413d2f6fddf" + + electron-updater@^2.21.0: + version "2.21.3" + resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-2.21.3.tgz#767bfe6a2a5513cb11c79f94efef6d1ff01fb058" + dependencies: + bluebird-lst "^1.0.5" + builder-util-runtime "~4.2.0" + electron-is-dev "^0.3.0" + fs-extra-p "^4.5.2" + js-yaml "^3.11.0" + lazy-val "^1.0.3" + lodash.isequal "^4.5.0" + semver "^5.5.0" + source-map-support "^0.5.4" + + electron-webpack-js@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/electron-webpack-js/-/electron-webpack-js-1.2.0.tgz#0d53038ba36dd9802df30647570957ec4347fe20" + dependencies: + babel-core "^6.26.0" + babel-loader "^7.1.2" + babel-plugin-component "^1.1.0" + babel-plugin-syntax-dynamic-import "^6.18.0" + babel-preset-env "^1.6.1" + + electron-webpack@^1.13.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/electron-webpack/-/electron-webpack-1.13.0.tgz#f123dd94e660d966cce45950bf39f8af10755e78" + dependencies: + "@types/webpack-env" "^1.13.5" + async-exit-hook "^2.0.1" + bluebird-lst "^1.0.5" + chalk "^2.3.1" + crocket "^0.9.11" + css-hot-loader "^1.3.7" + css-loader "^0.28.9" + debug "^3.1.0" + electron-devtools-installer "^2.2.3" + electron-webpack-js "~1.2.0" + extract-text-webpack-plugin "^3.0.2" + file-loader "^1.1.7" + fs-extra-p "^4.5.2" + html-loader "^0.5.5" + html-webpack-plugin "^2.30.1" + lazy-val "^1.0.3" + node-loader "^0.6.0" + read-config-file "^3.0.0" + semver "^5.5.0" + source-map-support "^0.5.3" + style-loader "^0.20.2" + uglifyjs-webpack-plugin "^1.2.0" + url-loader "^0.6.2" + virtual-module-webpack-plugin "^0.3.0" + webpack-dev-server "^2.11.1" + webpack-merge "^4.1.1" + yargs "^11.0.0" + + electron-window-state@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/electron-window-state/-/electron-window-state-4.1.1.tgz#6b34fdc31b38514dfec8b7c8f7b5d4addb67632d" + dependencies: + deep-equal "^1.0.1" + jsonfile "^2.2.3" + mkdirp "^0.5.1" + + electron@1.7.12: + version "1.7.12" + resolved "https://registry.yarnpkg.com/electron/-/electron-1.7.12.tgz#dcc61a2c1b0c3df25f68b3425379a01abd01190e" + dependencies: + "@types/node" "^7.0.18" + electron-download "^3.0.1" + extract-zip "^1.0.3" + + elegant-spinner@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" + + elliptic@^6.0.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + + emoji-regex@^6.1.0: + version "6.5.1" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2" + + emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + + encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + + encoding@^0.1.11, encoding@^0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + dependencies: + iconv-lite "~0.4.13" + + end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + dependencies: + once "^1.4.0" + + enhanced-resolve@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + object-assign "^4.0.1" + tapable "^0.2.7" + + enhanced-resolve@~0.9.0: + version "0.9.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e" + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.2.0" + tapable "^0.1.8" + + "entities@~ 1.1.1", entities@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" + + env-paths@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-1.0.0.tgz#4168133b42bb05c38a35b1ae4397c8298ab369e0" + + envify@^3.0.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/envify/-/envify-3.4.1.tgz#d7122329e8df1688ba771b12501917c9ce5cbce8" + dependencies: + jstransform "^11.0.3" + through "~2.3.4" + + errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + dependencies: + prr "~1.0.1" + + error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + dependencies: + is-arrayish "^0.2.1" + + es-abstract@^1.7.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.11.0.tgz#cce87d518f0496893b1a30cd8461835535480681" + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.1" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" + + es-to-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + dependencies: + is-callable "^1.1.1" + is-date-object "^1.0.1" + is-symbol "^1.0.1" + + es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: + version "0.10.41" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.41.tgz#bab3e982d750f0112f0cb9e6abed72c59eb33eb2" + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.1" + next-tick "1" + + es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + + es6-map@^0.1.3: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-set "~0.1.5" + es6-symbol "~3.1.1" + event-emitter "~0.3.5" + + es6-promise@^4.0.5: + version "4.2.4" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29" + + es6-set@~0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-symbol "3.1.1" + event-emitter "~0.3.5" + + es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" + dependencies: + d "1" + es5-ext "~0.10.14" + + es6-templates@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/es6-templates/-/es6-templates-0.2.3.tgz#5cb9ac9fb1ded6eb1239342b81d792bbb4078ee4" + dependencies: + recast "~0.11.12" + through "~2.3.6" + + es6-weak-map@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" + dependencies: + d "1" + es5-ext "^0.10.14" + es6-iterator "^2.0.1" + es6-symbol "^3.1.1" + + escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + + escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + + escodegen@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.1.tgz#dbae17ef96c8e4bedb1356f4504fa4cc2f7cb7e2" + dependencies: + esprima "^3.1.3" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + + escope@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" + dependencies: + es6-map "^0.1.3" + es6-weak-map "^2.0.1" + esrecurse "^4.1.0" + estraverse "^4.1.1" + + eslint-config-airbnb-base@^12.1.0: + version "12.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz#386441e54a12ccd957b0a92564a4bafebd747944" + dependencies: + eslint-restricted-globals "^0.1.1" + + eslint-config-airbnb@^16.1.0: + version "16.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-16.1.0.tgz#2546bfb02cc9fe92284bf1723ccf2e87bc45ca46" + dependencies: + eslint-config-airbnb-base "^12.1.0" + + eslint-config-prettier@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.9.0.tgz#5ecd65174d486c22dff389fe036febf502d468a3" + dependencies: + get-stdin "^5.0.1" + + eslint-import-resolver-node@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" + dependencies: + debug "^2.6.9" + resolve "^1.5.0" + + eslint-import-resolver-webpack@^0.8.4: + version "0.8.4" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.8.4.tgz#0f7cd74bc9d7fc1773e8d5fc25baf864b2f87a42" + dependencies: + array-find "^1.0.0" + debug "^2.6.8" + enhanced-resolve "~0.9.0" + find-root "^0.1.1" + has "^1.0.1" + interpret "^1.0.0" + is-absolute "^0.2.3" + lodash.get "^3.7.0" + node-libs-browser "^1.0.0 || ^2.0.0" + resolve "^1.2.0" + semver "^5.3.0" + + eslint-module-utils@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz#abaec824177613b8a95b299639e1b6facf473449" + dependencies: + debug "^2.6.8" + pkg-dir "^1.0.0" + + eslint-plugin-flowtype@^2.46.1: + version "2.46.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.46.1.tgz#c4f81d580cd89c82bc3a85a1ccf4ae3a915143a4" + dependencies: + lodash "^4.15.0" + + eslint-plugin-import@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.9.0.tgz#26002efbfca5989b7288ac047508bd24f217b169" + dependencies: + builtin-modules "^1.1.1" + contains-path "^0.1.0" + debug "^2.6.8" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.1" + eslint-module-utils "^2.1.1" + has "^1.0.1" + lodash "^4.17.4" + minimatch "^3.0.3" + read-pkg-up "^2.0.0" + + eslint-plugin-jsx-a11y@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.0.3.tgz#54583d1ae442483162e040e13cc31865465100e5" + dependencies: + aria-query "^0.7.0" + array-includes "^3.0.3" + ast-types-flow "0.0.7" + axobject-query "^0.1.0" + damerau-levenshtein "^1.0.0" + emoji-regex "^6.1.0" + jsx-ast-utils "^2.0.0" + + eslint-plugin-prettier@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.0.tgz#33e4e228bdb06142d03c560ce04ec23f6c767dd7" + dependencies: + fast-diff "^1.1.1" + jest-docblock "^21.0.0" + + eslint-plugin-react@^7.7.0: + version "7.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.7.0.tgz#f606c719dbd8a1a2b3d25c16299813878cca0160" + dependencies: + doctrine "^2.0.2" + has "^1.0.1" + jsx-ast-utils "^2.0.1" + prop-types "^15.6.0" + + eslint-restricted-globals@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" + + eslint-scope@^3.7.1, eslint-scope@~3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + + eslint-visitor-keys@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" + + eslint@^4.19.0: + version "4.19.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" + dependencies: + ajv "^5.3.0" + babel-code-frame "^6.22.0" + chalk "^2.1.0" + concat-stream "^1.6.0" + cross-spawn "^5.1.0" + debug "^3.1.0" + doctrine "^2.1.0" + eslint-scope "^3.7.1" + eslint-visitor-keys "^1.0.0" + espree "^3.5.4" + esquery "^1.0.0" + esutils "^2.0.2" + file-entry-cache "^2.0.0" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.0.1" + ignore "^3.3.3" + imurmurhash "^0.1.4" + inquirer "^3.0.6" + is-resolvable "^1.0.0" + js-yaml "^3.9.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.4" + minimatch "^3.0.2" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + pluralize "^7.0.0" + progress "^2.0.0" + regexpp "^1.0.1" + require-uncached "^1.0.3" + semver "^5.3.0" + strip-ansi "^4.0.0" + strip-json-comments "~2.0.1" + table "4.0.2" + text-table "~0.2.0" + + espree@^3.5.4: + version "3.5.4" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" + dependencies: + acorn "^5.5.0" + acorn-jsx "^3.0.0" + + esprima-fb@^15001.1.0-dev-harmony-fb: + version "15001.1.0-dev-harmony-fb" + resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz#30a947303c6b8d5e955bee2b99b1d233206a6901" + + esprima@^2.6.0: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + + esprima@^3.1.3, esprima@~3.1.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + + esprima@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + + esquery@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" + dependencies: + estraverse "^4.0.0" + + esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + dependencies: + estraverse "^4.1.0" + + estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + + esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + + etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + + event-emitter@~0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + dependencies: + d "1" + es5-ext "~0.10.14" + + eventemitter3@1.x.x: + version "1.2.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" + + events@1.1.1, events@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + + eventsource@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" + dependencies: + original ">=0.0.5" + + evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + + execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + + execa@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.9.0.tgz#adb7ce62cf985071f60580deb4a88b9e34712d01" + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + + exenv@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" + + exit-hook@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" + + expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + + expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + + expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + + expand-template@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-1.1.0.tgz#e09efba977bf98f9ee0ed25abd0c692e02aec3fc" + + expect@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/expect/-/expect-22.4.3.tgz#d5a29d0a0e1fb2153557caef2674d4547e914674" + dependencies: + ansi-styles "^3.2.0" + jest-diff "^22.4.3" + jest-get-type "^22.4.3" + jest-matcher-utils "^22.4.3" + jest-message-util "^22.4.3" + jest-regex-util "^22.4.3" + + express@^4.16.2: + version "4.16.3" + resolved "https://registry.yarnpkg.com/express/-/express-4.16.3.tgz#6af8a502350db3246ecc4becf6b5a34d22f7ed53" + dependencies: + accepts "~1.3.5" + array-flatten "1.1.1" + body-parser "1.18.2" + content-disposition "0.5.2" + content-type "~1.0.4" + cookie "0.3.1" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.1.1" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.2" + path-to-regexp "0.1.7" + proxy-addr "~2.0.3" + qs "6.5.1" + range-parser "~1.2.0" + safe-buffer "5.1.1" + send "0.16.2" + serve-static "1.13.2" + setprototypeof "1.1.0" + statuses "~1.4.0" + type-is "~1.6.16" + utils-merge "1.0.1" + vary "~1.1.2" + + ext-list@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37" + dependencies: + mime-db "^1.28.0" + + ext-name@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ext-name/-/ext-name-5.0.0.tgz#70781981d183ee15d13993c8822045c506c8f0a6" + dependencies: + ext-list "^2.0.0" + sort-keys-length "^1.0.0" + + extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + dependencies: + is-extendable "^0.1.0" + + extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + + extend@~3.0.0, extend@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + + external-editor@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48" + dependencies: + chardet "^0.4.0" + iconv-lite "^0.4.17" + tmp "^0.0.33" + + extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + + extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + + extract-text-webpack-plugin@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz#5f043eaa02f9750a9258b78c0a6e0dc1408fb2f7" + dependencies: + async "^2.4.1" + loader-utils "^1.1.0" + schema-utils "^0.3.0" + webpack-sources "^1.0.1" + + extract-zip@^1.0.3: + version "1.6.6" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.6.tgz#1290ede8d20d0872b429fd3f351ca128ec5ef85c" + dependencies: + concat-stream "1.6.0" + debug "2.6.9" + mkdirp "0.5.0" + yauzl "2.4.1" + + extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + + extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + + fast-deep-equal@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" + + fast-diff@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.1.2.tgz#4b62c42b8e03de3f848460b639079920695d0154" + + fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + + fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + + fastparse@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" + + faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + dependencies: + websocket-driver ">=0.5.1" + + faye-websocket@~0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" + dependencies: + websocket-driver ">=0.5.1" + + fbjs@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.6.1.tgz#9636b7705f5ba9684d44b72f78321254afc860f7" + dependencies: + core-js "^1.0.0" + loose-envify "^1.0.0" + promise "^7.0.3" + ua-parser-js "^0.7.9" + whatwg-fetch "^0.9.0" + + fbjs@^0.8.16: + version "0.8.16" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" + dependencies: + core-js "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.9" + + fd-slicer@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" + dependencies: + pend "~1.2.0" + + figures@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + + figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + dependencies: + escape-string-regexp "^1.0.5" + + file-entry-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + dependencies: + flat-cache "^1.2.1" + object-assign "^4.0.1" + + file-loader@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8" + dependencies: + loader-utils "^1.0.2" + schema-utils "^0.4.5" + + file-type@^3.8.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" + + file-type@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6" + + file-type@^6.1.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919" + + filename-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + + fill-range@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^1.1.3" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + + fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + + finalhandler@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.2" + statuses "~1.4.0" + unpipe "~1.0.0" + + find-babel-config@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.1.0.tgz#acc01043a6749fec34429be6b64f542ebb5d6355" + dependencies: + json5 "^0.5.1" + path-exists "^3.0.0" + + find-cache-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" + dependencies: + commondir "^1.0.1" + make-dir "^1.0.0" + pkg-dir "^2.0.0" + + find-parent-dir@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" + + find-process@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-process/-/find-process-1.1.0.tgz#f21fa08220fec972b471d92ae3cf0c62bebcd5bb" + dependencies: + chalk "^2.0.1" + commander "^2.11.0" + debug "^2.6.8" + + find-root@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/find-root/-/find-root-0.1.2.tgz#98d2267cff1916ccaf2743b3a0eea81d79d7dcd1" + + find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + + find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + dependencies: + locate-path "^2.0.0" + + flat-cache@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" + dependencies: + circular-json "^0.3.1" + del "^2.0.2" + graceful-fs "^4.1.2" + write "^0.2.1" + + flatten@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" + + flow-babel-webpack-plugin@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flow-babel-webpack-plugin/-/flow-babel-webpack-plugin-1.1.1.tgz#7dd41110b96045eab8d8af6df48883310de54e91" + dependencies: + babel-plugin-transform-flow-comments "^6.17.0" + flow-bin ">=0.44.2 <1" + lodash.merge "^4.6.0" + + "flow-bin@>=0.44.2 <1", flow-bin@^0.68.0: + version "0.68.0" + resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.68.0.tgz#86c2d14857d306eb2e85e274f2eebf543564f623" + + flow-typed@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/flow-typed/-/flow-typed-2.4.0.tgz#3d2f48cf85df29df3bca6745b623726496ff4788" + dependencies: + babel-polyfill "^6.26.0" + colors "^1.1.2" + fs-extra "^5.0.0" + github "0.2.4" + glob "^7.1.2" + got "^7.1.0" + md5 "^2.1.0" + mkdirp "^0.5.1" + rimraf "^2.6.2" + semver "^5.5.0" + table "^4.0.2" + through "^2.3.8" + unzipper "^0.8.11" + which "^1.3.0" + yargs "^4.2.0" + + flush-write-stream@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.4" + + follow-redirects@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.4.1.tgz#d8120f4518190f55aac65bb6fc7b85fcd666d6aa" + dependencies: + debug "^3.1.0" + + for-each@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.2.tgz#2c40450b9348e97f281322593ba96704b9abd4d4" + dependencies: + is-function "~1.0.0" + + for-in@^0.1.3: + version "0.1.8" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" + + for-in@^1.0.1, for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + + for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + dependencies: + for-in "^1.0.1" + + for-own@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" + dependencies: + for-in "^1.0.1" + + foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + + forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + + form-data@~2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + + form-data@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" + dependencies: + asynckit "^0.4.0" + combined-stream "1.0.6" + mime-types "^2.1.12" + + formik@^0.10.4: + version "0.10.5" + resolved "https://registry.yarnpkg.com/formik/-/formik-0.10.5.tgz#6984d2f22e918c6d2264a3cb86b8582f7277faca" + dependencies: + lodash.isequal "4.5.0" + prop-types "^15.5.10" + warning "^3.0.0" + + forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + + fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + dependencies: + map-cache "^0.2.2" + + fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + + from2@^2.1.0, from2@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + + fs-extra-p@^4.5.0, fs-extra-p@^4.5.2: + version "4.5.2" + resolved "https://registry.yarnpkg.com/fs-extra-p/-/fs-extra-p-4.5.2.tgz#0a22aba489284d17f375d5dc5139aa777fe2df51" + dependencies: + bluebird-lst "^1.0.5" + fs-extra "^5.0.0" + + fs-extra@^0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + path-is-absolute "^1.0.0" + rimraf "^2.2.8" + + fs-extra@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + + fs-extra@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + + fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + + fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + + fsevents@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" + dependencies: + nan "^2.3.0" + node-pre-gyp "^0.6.39" + + fstream-ignore@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" + dependencies: + fstream "^1.0.0" + inherits "2" + minimatch "^3.0.0" + + fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2, fstream@~1.0.10: + version "1.0.11" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + + function-bind@^1.0.2, function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + + functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + + gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + + gaze@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.2.tgz#847224677adb8870d679257ed3388fdb61e40105" + dependencies: + globule "^1.0.0" + + generate-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" + + generate-object-property@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" + dependencies: + is-property "^1.0.0" + + get-caller-file@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" + + get-own-enumerable-property-symbols@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-2.0.1.tgz#5c4ad87f2834c4b9b4e84549dc1e0650fb38c24b" + + get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + + get-stdin@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" + + get-stream@^2.2.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" + dependencies: + object-assign "^4.0.1" + pinkie-promise "^2.0.0" + + get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + + get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + + getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + + gettext-parser@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/gettext-parser/-/gettext-parser-1.3.1.tgz#74b7a99e4b5fa8daab11fa515e8a582480448a12" + dependencies: + encoding "^0.1.12" + safe-buffer "^5.1.1" + + github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + + github@0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/github/-/github-0.2.4.tgz#24fa7f0e13fa11b946af91134c51982a91ce538b" + dependencies: + mime "^1.2.11" + + glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + + glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + + glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + + glob@^5.0.15: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + + glob@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + + glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + + global-dirs@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + dependencies: + ini "^1.3.4" + + global@~4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" + dependencies: + min-document "^2.19.0" + process "~0.5.1" + + globals@^11.0.1, globals@^11.1.0: + version "11.3.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.3.0.tgz#e04fdb7b9796d8adac9c8f64c14837b2313378b0" + + globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + + globby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + + globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + + globule@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.0.tgz#1dc49c6822dd9e8a2fa00ba2a295006e8664bd09" + dependencies: + glob "~7.1.1" + lodash "~4.17.4" + minimatch "~3.0.2" + + got@^6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + dependencies: + create-error-class "^3.0.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + unzip-response "^2.0.1" + url-parse-lax "^1.0.0" + + got@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" + dependencies: + decompress-response "^3.2.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-plain-obj "^1.1.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + p-cancelable "^0.3.0" + p-timeout "^1.1.1" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + url-parse-lax "^1.0.0" + url-to-options "^1.0.1" + + graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + + "graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + + growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + + handle-thing@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" + + har-schema@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + + har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + + har-validator@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" + dependencies: + chalk "^1.1.1" + commander "^2.9.0" + is-my-json-valid "^2.12.4" + pinkie-promise "^2.0.0" + + har-validator@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + dependencies: + ajv "^4.9.1" + har-schema "^1.0.5" + + har-validator@~5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" + dependencies: + ajv "^5.1.0" + har-schema "^2.0.0" + + has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + + has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + + has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + + has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + + has-symbol-support-x@^1.4.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" + + has-to-string-tag-x@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" + dependencies: + has-symbol-support-x "^1.4.1" + + has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + + has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + + has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + + has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + + has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + + has@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + + hash-base@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" + dependencies: + inherits "^2.0.1" + + hash-base@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + + hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.0" + + hawk@3.1.3, hawk@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + + hawk@~6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" + dependencies: + boom "4.x.x" + cryptiles "3.x.x" + hoek "4.x.x" + sntp "2.x.x" + + he@1.1.x: + version "1.1.1" + resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + + highlight.js@^9.3.0: + version "9.12.0" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e" + + hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + + hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + + hoek@4.x.x: + version "4.2.1" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" + + hoist-non-react-statics@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz#d2ca2dfc19c5a91c5a6615ce8e564ef0347e2a40" + + home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + + home-path@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/home-path/-/home-path-1.0.5.tgz#788b29815b12d53bacf575648476e6f9041d133f" + + hosted-git-info@^2.1.4, hosted-git-info@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.0.tgz#23235b29ab230c576aab0d4f13fc046b0b038222" + + hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + + html-comment-regex@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" + + html-encoding-sniffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + dependencies: + whatwg-encoding "^1.0.1" + + html-entities@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" + + html-loader@^0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-0.5.5.tgz#6356dbeb0c49756d8ebd5ca327f16ff06ab5faea" + dependencies: + es6-templates "^0.2.3" + fastparse "^1.1.1" + html-minifier "^3.5.8" + loader-utils "^1.1.0" + object-assign "^4.1.1" + + html-minifier@^3.2.3, html-minifier@^3.5.8: + version "3.5.12" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.12.tgz#6bfad4d0327f5b8d2b62f5854654ac3703b9b031" + dependencies: + camel-case "3.0.x" + clean-css "4.1.x" + commander "2.15.x" + he "1.1.x" + ncname "1.0.x" + param-case "2.1.x" + relateurl "0.2.x" + uglify-js "3.3.x" + + html-webpack-plugin@^2.30.1: + version "2.30.1" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz#7f9c421b7ea91ec460f56527d78df484ee7537d5" + dependencies: + bluebird "^3.4.7" + html-minifier "^3.2.3" + loader-utils "^0.2.16" + lodash "^4.17.3" + pretty-error "^2.0.2" + toposort "^1.0.0" + + htmlparser2@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe" + dependencies: + domelementtype "1" + domhandler "2.1" + domutils "1.1" + readable-stream "1.0" + + http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + + http-errors@1.6.2, http-errors@~1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" + dependencies: + depd "1.1.1" + inherits "2.0.3" + setprototypeof "1.0.3" + statuses ">= 1.3.1 < 2" + + http-parser-js@>=0.4.0: + version "0.4.11" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.11.tgz#5b720849c650903c27e521633d94696ee95f3529" + + http-proxy-middleware@~0.17.4: + version "0.17.4" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz#642e8848851d66f09d4f124912846dbaeb41b833" + dependencies: + http-proxy "^1.16.2" + is-glob "^3.1.0" + lodash "^4.17.2" + micromatch "^2.3.11" + + http-proxy@^1.16.2: + version "1.16.2" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742" + dependencies: + eventemitter3 "1.x.x" + requires-port "1.x.x" + + http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + + http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + + https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + + humanize-plus@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/humanize-plus/-/humanize-plus-1.8.2.tgz#a65b34459ad6367adbb3707a82a3c9f916167030" + + husky@^0.14.3: + version "0.14.3" + resolved "https://registry.yarnpkg.com/husky/-/husky-0.14.3.tgz#c69ed74e2d2779769a17ba8399b54ce0b63c12c3" + dependencies: + is-ci "^1.0.10" + normalize-path "^1.0.0" + strip-indent "^2.0.0" + + i18n-extract@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/i18n-extract/-/i18n-extract-0.5.1.tgz#57517422ff589c86268eaf5f38718b9a82cd5090" + dependencies: + babel-traverse "^6.26.0" + babylon "^6.18.0" + gettext-parser "^1.2.0" + glob "^7.1.1" + + iconv-lite@0.4.19, iconv-lite@^0.4.17, iconv-lite@^0.4.19, iconv-lite@^0.4.5, iconv-lite@~0.4.13: + version "0.4.19" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" + + icss-replace-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" + + icss-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" + dependencies: + postcss "^6.0.1" + + ieee754@1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" + + ieee754@^1.1.4: + version "1.1.10" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.10.tgz#719a6f7b026831e64bdb838b0de1bb0029bbf716" + + iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + + ignore@^3.3.3: + version "3.3.7" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" + + immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + + import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + + import-local@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" + dependencies: + pkg-dir "^2.0.0" + resolve-cwd "^2.0.0" + + imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + + in-publish@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" + + indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + dependencies: + repeating "^2.0.0" + + indent-string@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + + indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + + indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + + inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + + inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + + inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + + ini@^1.3.4, ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + + inquirer@^3.0.6: + version "3.3.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.0.4" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rx-lite "^4.0.8" + rx-lite-aggregates "^4.0.8" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + + install@^0.10.2: + version "0.10.4" + resolved "https://registry.yarnpkg.com/install/-/install-0.10.4.tgz#9cb09115768b93a582d1450a6ba3f275975b49aa" + + internal-ip@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-1.2.0.tgz#ae9fbf93b984878785d50a8de1b356956058cf5c" + dependencies: + meow "^3.3.0" + + interpret@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" + + invariant@^2.0.0, invariant@^2.2.0, invariant@^2.2.2: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + dependencies: + loose-envify "^1.0.0" + + invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + + ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + + ipaddr.js@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.6.0.tgz#e3fa357b773da619f26e95f049d055c72796f86b" + + is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + + is-absolute@^0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.2.6.tgz#20de69f3db942ef2d87b9c2da36f172235b1b5eb" + dependencies: + is-relative "^0.2.1" + is-windows "^0.2.0" + + is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + dependencies: + kind-of "^3.0.2" + + is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + dependencies: + kind-of "^6.0.0" + + is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + + is-ascii@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-ascii/-/is-ascii-1.0.0.tgz#f02ad0259a0921cd199ff21ce1b09e0f6b4e3929" + + is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + + is-buffer@^1.1.5, is-buffer@~1.1.1: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + + is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + + is-callable@^1.1.1, is-callable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + + is-ci@^1.0.10, is-ci@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" + dependencies: + ci-info "^1.0.0" + + is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + dependencies: + kind-of "^3.0.2" + + is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + dependencies: + kind-of "^6.0.0" + + is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + + is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + + is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + + is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + + is-dotfile@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + + is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + + is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + + is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + dependencies: + is-plain-object "^2.0.4" + + is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + + is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + + is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + dependencies: + number-is-nan "^1.0.0" + + is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + + is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + + is-function@^1.0.1, is-function@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" + + is-generator-fn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" + + is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + + is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + dependencies: + is-extglob "^2.1.0" + + is-glob@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" + dependencies: + is-extglob "^2.1.1" + + is-installed-globally@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + dependencies: + global-dirs "^0.1.0" + is-path-inside "^1.0.0" + + is-my-ip-valid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" + + is-my-json-valid@^2.12.4: + version "2.17.2" + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz#6b2103a288e94ef3de5cf15d29dd85fc4b78d65c" + dependencies: + generate-function "^2.0.0" + generate-object-property "^1.1.0" + is-my-ip-valid "^1.0.0" + jsonpointer "^4.0.0" + xtend "^4.0.0" + + is-natural-number@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" + + is-npm@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" + + is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + + is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + + is-number@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + + is-obj@^1.0.0, is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + + is-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" + + is-observable@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-0.2.0.tgz#b361311d83c6e5d726cabf5e250b0237106f5ae2" + dependencies: + symbol-observable "^0.2.2" + + is-odd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24" + dependencies: + is-number "^4.0.0" + + is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + + is-path-in-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" + dependencies: + is-path-inside "^1.0.0" + + is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + dependencies: + path-is-inside "^1.0.1" + + is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + + is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + dependencies: + isobject "^3.0.1" + + is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + + is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + + is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + + is-property@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + + is-redirect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + + is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" + + is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + + is-relative@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5" + dependencies: + is-unc-path "^0.1.1" + + is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + + is-retry-allowed@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" + + is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + + is-svg@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" + dependencies: + html-comment-regex "^1.1.0" + + is-symbol@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" + + is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + + is-unc-path@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-0.1.2.tgz#6ab053a72573c10250ff416a3814c35178af39b9" + dependencies: + unc-path-regex "^0.1.0" + + is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + + is-windows@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" + + is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + + is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + + isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + + isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + + isbinaryfile@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.2.tgz#4a3e974ec0cba9004d3fc6cde7209ea69368a621" + + isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + + isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + + isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + + isomorphic-fetch@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + + isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + + isurl@^1.0.0-alpha5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" + dependencies: + has-to-string-tag-x "^1.2.0" + is-object "^1.0.1" + + jest-config@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.4.3.tgz#0e9d57db267839ea31309119b41dc2fa31b76403" + dependencies: + chalk "^2.0.1" + glob "^7.1.1" + jest-environment-jsdom "^22.4.3" + jest-environment-node "^22.4.3" + jest-get-type "^22.4.3" + jest-jasmine2 "^22.4.3" + jest-regex-util "^22.4.3" + jest-resolve "^22.4.3" + jest-util "^22.4.3" + jest-validate "^22.4.3" + pretty-format "^22.4.3" + + jest-diff@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.4.3.tgz#e18cc3feff0aeef159d02310f2686d4065378030" + dependencies: + chalk "^2.0.1" + diff "^3.2.0" + jest-get-type "^22.4.3" + pretty-format "^22.4.3" + + jest-docblock@^21.0.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" + + jest-environment-jsdom@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz#d67daa4155e33516aecdd35afd82d4abf0fa8a1e" + dependencies: + jest-mock "^22.4.3" + jest-util "^22.4.3" + jsdom "^11.5.1" + + jest-environment-node@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.4.3.tgz#54c4eaa374c83dd52a9da8759be14ebe1d0b9129" + dependencies: + jest-mock "^22.4.3" + jest-util "^22.4.3" + + jest-get-type@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" + + jest-jasmine2@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.4.3.tgz#4daf64cd14c793da9db34a7c7b8dcfe52a745965" + dependencies: + chalk "^2.0.1" + co "^4.6.0" + expect "^22.4.3" + graceful-fs "^4.1.11" + is-generator-fn "^1.0.0" + jest-diff "^22.4.3" + jest-matcher-utils "^22.4.3" + jest-message-util "^22.4.3" + jest-snapshot "^22.4.3" + jest-util "^22.4.3" + source-map-support "^0.5.0" + + jest-matcher-utils@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz#4632fe428ebc73ebc194d3c7b65d37b161f710ff" + dependencies: + chalk "^2.0.1" + jest-get-type "^22.4.3" + pretty-format "^22.4.3" + + jest-message-util@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.4.3.tgz#cf3d38aafe4befddbfc455e57d65d5239e399eb7" + dependencies: + "@babel/code-frame" "^7.0.0-beta.35" + chalk "^2.0.1" + micromatch "^2.3.11" + slash "^1.0.0" + stack-utils "^1.0.1" + + jest-mock@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.4.3.tgz#f63ba2f07a1511772cdc7979733397df770aabc7" + + jest-regex-util@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.4.3.tgz#a826eb191cdf22502198c5401a1fc04de9cef5af" + + jest-resolve@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.4.3.tgz#0ce9d438c8438229aa9b916968ec6b05c1abb4ea" + dependencies: + browser-resolve "^1.11.2" + chalk "^2.0.1" + + jest-snapshot@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.4.3.tgz#b5c9b42846ffb9faccb76b841315ba67887362d2" + dependencies: + chalk "^2.0.1" + jest-diff "^22.4.3" + jest-matcher-utils "^22.4.3" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + pretty-format "^22.4.3" + + jest-util@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.4.3.tgz#c70fec8eec487c37b10b0809dc064a7ecf6aafac" + dependencies: + callsites "^2.0.0" + chalk "^2.0.1" + graceful-fs "^4.1.11" + is-ci "^1.0.10" + jest-message-util "^22.4.3" + mkdirp "^0.5.1" + source-map "^0.6.0" + + jest-validate@^22.4.0, jest-validate@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.4.3.tgz#0780954a5a7daaeec8d3c10834b9280865976b30" + dependencies: + chalk "^2.0.1" + jest-config "^22.4.3" + jest-get-type "^22.4.3" + leven "^2.1.0" + pretty-format "^22.4.3" + + jmespath@0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" + + js-base64@^2.1.8, js-base64@^2.1.9: + version "2.4.3" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.3.tgz#2e545ec2b0f2957f41356510205214e98fad6582" + + js-tokens@^3.0.0, js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + + js-yaml@^3.10.0, js-yaml@^3.11.0, js-yaml@^3.9.0, js-yaml@^3.9.1: + version "3.11.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + + js-yaml@~3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" + dependencies: + argparse "^1.0.7" + esprima "^2.6.0" + + jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + + jsdom@^11.5.1: + version "11.6.2" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.6.2.tgz#25d1ef332d48adf77fc5221fe2619967923f16bb" + dependencies: + abab "^1.0.4" + acorn "^5.3.0" + acorn-globals "^4.1.0" + array-equal "^1.0.0" + browser-process-hrtime "^0.1.2" + content-type-parser "^1.0.2" + cssom ">= 0.3.2 < 0.4.0" + cssstyle ">= 0.2.37 < 0.3.0" + domexception "^1.0.0" + escodegen "^1.9.0" + html-encoding-sniffer "^1.0.2" + left-pad "^1.2.0" + nwmatcher "^1.4.3" + parse5 "4.0.0" + pn "^1.1.0" + request "^2.83.0" + request-promise-native "^1.0.5" + sax "^1.2.4" + symbol-tree "^3.2.2" + tough-cookie "^2.3.3" + w3c-hr-time "^1.0.1" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.3" + whatwg-url "^6.4.0" + ws "^4.0.0" + xml-name-validator "^3.0.0" + + jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + + jsesc@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe" + + jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + + jshashes@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/jshashes/-/jshashes-1.0.7.tgz#bed8c97a0e9632fd0513916f55f76dd5486be59f" + + json-loader@^0.5.4: + version "0.5.7" + resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" + + json-parse-better-errors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz#50183cd1b2d25275de069e9e71b467ac9eab973a" + + json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + + json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + + json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + + json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + dependencies: + jsonify "~0.0.0" + + json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + + json3@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + + json5@^0.5.0, json5@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + + jsonfile@^2.1.0, jsonfile@^2.2.3: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + optionalDependencies: + graceful-fs "^4.1.6" + + jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + optionalDependencies: + graceful-fs "^4.1.6" + + jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + + jsonpointer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" + + jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + + jstransform@^11.0.3: + version "11.0.3" + resolved "https://registry.yarnpkg.com/jstransform/-/jstransform-11.0.3.tgz#09a78993e0ae4d4ef4487f6155a91f6190cb4223" + dependencies: + base62 "^1.1.0" + commoner "^0.10.1" + esprima-fb "^15001.1.0-dev-harmony-fb" + object-assign "^2.0.0" + source-map "^0.4.2" + + jsx-ast-utils@^2.0.0, jsx-ast-utils@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" + dependencies: + array-includes "^3.0.3" + + keytar-prebuild@4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/keytar-prebuild/-/keytar-prebuild-4.0.4.tgz#eb6354c68f2b3609dc325ef8709844632652d602" + dependencies: + nan "2.7.0" + prebuild-install "^2.2.2" + + killable@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.0.tgz#da8b84bd47de5395878f95d64d02f2449fe05e6b" + + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + + kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + dependencies: + is-buffer "^1.1.5" + + kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + + kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + + klaw@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + optionalDependencies: + graceful-fs "^4.1.9" + + latest-version@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" + dependencies: + package-json "^4.0.0" + + lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + + lazy-val@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.3.tgz#bb97b200ef00801d94c317e29dc6ed39e31c5edc" + + lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + dependencies: + invert-kv "^1.0.0" + + left-pad@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.2.0.tgz#d30a73c6b8201d8f7d8e7956ba9616087a68e0ee" + + leven@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + + levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + + lie@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e" + dependencies: + immediate "~3.0.5" + + lint-staged@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-7.0.0.tgz#57926c63201e7bd38ca0576d74391efa699b4a9d" + dependencies: + app-root-path "^2.0.1" + chalk "^2.3.1" + commander "^2.14.1" + cosmiconfig "^4.0.0" + debug "^3.1.0" + dedent "^0.7.0" + execa "^0.9.0" + find-parent-dir "^0.3.0" + is-glob "^4.0.0" + jest-validate "^22.4.0" + listr "^0.13.0" + lodash "^4.17.5" + log-symbols "^2.2.0" + micromatch "^3.1.8" + npm-which "^3.0.1" + p-map "^1.1.1" + path-is-inside "^1.0.2" + pify "^3.0.0" + please-upgrade-node "^3.0.1" + staged-git-files "1.1.0" + stringify-object "^3.2.2" + + listenercount@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" + + listr-silent-renderer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" + + listr-update-renderer@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz#344d980da2ca2e8b145ba305908f32ae3f4cc8a7" + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + elegant-spinner "^1.0.1" + figures "^1.7.0" + indent-string "^3.0.0" + log-symbols "^1.0.2" + log-update "^1.0.2" + strip-ansi "^3.0.1" + + listr-verbose-renderer@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#8206f4cf6d52ddc5827e5fd14989e0e965933a35" + dependencies: + chalk "^1.1.3" + cli-cursor "^1.0.2" + date-fns "^1.27.2" + figures "^1.7.0" + + listr@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/listr/-/listr-0.13.0.tgz#20bb0ba30bae660ee84cc0503df4be3d5623887d" + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + figures "^1.7.0" + indent-string "^2.1.0" + is-observable "^0.2.0" + is-promise "^2.1.0" + is-stream "^1.1.0" + listr-silent-renderer "^1.1.1" + listr-update-renderer "^0.4.0" + listr-verbose-renderer "^0.4.0" + log-symbols "^1.0.2" + log-update "^1.0.2" + ora "^0.2.3" + p-map "^1.1.1" + rxjs "^5.4.2" + stream-to-observable "^0.2.0" + strip-ansi "^3.0.1" + + load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + + load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + + loader-runner@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" + + loader-utils@^0.2.16: + version "0.2.17" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + object-assign "^4.0.1" + + loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + + localforage@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.6.0.tgz#8b0059beeb3875c48124286ca7fdbf23d52b8c97" + dependencies: + lie "3.1.1" + + locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + + lodash-es@^4.17.4, lodash-es@^4.17.5, lodash-es@^4.2.1: + version "4.17.7" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.7.tgz#db240a3252c3dd8360201ac9feef91ac977ea856" + + lodash._baseget@^3.0.0: + version "3.7.2" + resolved "https://registry.yarnpkg.com/lodash._baseget/-/lodash._baseget-3.7.2.tgz#1b6ae1d5facf3c25532350a13c1197cb8bb674f4" + + lodash._topath@^3.0.0: + version "3.8.1" + resolved "https://registry.yarnpkg.com/lodash._topath/-/lodash._topath-3.8.1.tgz#3ec5e2606014f4cb97f755fe6914edd8bfc00eac" + dependencies: + lodash.isarray "^3.0.0" + + lodash.assign@^4.0.3, lodash.assign@^4.0.6, lodash.assign@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" + + lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + + lodash.clonedeep@^4.3.2: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + + lodash.forin@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.forin/-/lodash.forin-4.4.0.tgz#5d3f20ae564011fbe88381f7d98949c9c9519731" + + lodash.get@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-3.7.0.tgz#3ce68ae2c91683b281cc5394128303cbf75e691f" + dependencies: + lodash._baseget "^3.0.0" + lodash._topath "^3.0.0" + + lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + + lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + + lodash.isempty@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e" + + lodash.isequal@4.5.0, lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + + lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + + lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + + lodash.merge@^4.6.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.1.tgz#adc25d9cb99b9391c59624f379fbba60d7111d54" + + lodash.mergewith@^4.6.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927" + + lodash.pickby@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.pickby/-/lodash.pickby-4.6.0.tgz#7dea21d8c18d7703a27c704c15d3b84a67e33aff" + + lodash.set@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" + + lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + + lodash.tail@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664" + + lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + + lodash.unset@^4.5.2: + version "4.5.2" + resolved "https://registry.yarnpkg.com/lodash.unset/-/lodash.unset-4.5.2.tgz#370d1d3e85b72a7e1b0cdf2d272121306f23e4ed" + + lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@~4.17.4: + version "4.17.5" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" + + log-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" + dependencies: + chalk "^1.0.0" + + log-symbols@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + dependencies: + chalk "^2.0.1" + + log-update@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" + dependencies: + ansi-escapes "^1.0.0" + cli-cursor "^1.0.2" + + loglevel@^1.4.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa" + + longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + + loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + dependencies: + js-tokens "^3.0.0" + + loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + + lower-case@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" + + lowercase-keys@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" + + lru-cache@^4.0.1, lru-cache@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.2.tgz#45234b2e6e2f2b33da125624c4664929a0224c3f" + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + + lz-string@^1.4.4: + version "1.4.4" + resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" + + macaddress@^0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" + + make-dir@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.2.0.tgz#6d6a49eead4aae296c53bbf3a1a008bd6c89469b" + dependencies: + pify "^3.0.0" + + make-runnable@^1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-runnable/-/make-runnable-1.3.6.tgz#ca9b1d31b06f051e37570fb7ad98bc5369f982be" + dependencies: + bluebird "^3.5.0" + yargs "^4.7.1" + + map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + + map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + + map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + dependencies: + object-visit "^1.0.0" + + marked@*: + version "0.3.17" + resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.17.tgz#607f06668b3c6b1246b28f13da76116ac1aa2d2b" + + math-expression-evaluator@^1.2.14: + version "1.2.17" + resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" + + md5.js@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + + md5@^2.1.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9" + dependencies: + charenc "~0.0.1" + crypt "~0.0.1" + is-buffer "~1.1.1" + + "mdurl@~ 1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + + media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + + mediasource@^2.0.0, mediasource@^2.1.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/mediasource/-/mediasource-2.1.3.tgz#27a9c1aac51bfb6eba96af2d13a84d0b2a8eac68" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.5" + to-arraybuffer "^1.0.1" + + mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + dependencies: + mimic-fn "^1.0.0" + + memory-fs@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290" + + memory-fs@^0.4.0, memory-fs@~0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + + meow@^3.1.0, meow@^3.3.0, meow@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + + merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + + methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + + micromatch@^2.3.11: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + + micromatch@^3.1.4, micromatch@^3.1.8: + version "3.1.9" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.9.tgz#15dc93175ae39e52e93087847096effc73efcf89" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + + miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + + "mime-db@>= 1.33.0 < 2", mime-db@^1.28.0, mime-db@~1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" + + mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.7: + version "2.1.18" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + dependencies: + mime-db "~1.33.0" + + mime@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" + + mime@^1.2.11, mime@^1.4.1, mime@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + + mime@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.2.0.tgz#161e541965551d3b549fa1114391e3a3d55b923b" + + mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + + mimic-response@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.0.tgz#df3d3652a73fded6b9b0b24146e6fd052353458e" + + min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + dependencies: + dom-walk "^0.1.0" + + minimalistic-assert@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" + + minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + + "minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + + minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + + minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + + mississippi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f" + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^2.0.1" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + + mixin-deep@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + + mixin-object@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e" + dependencies: + for-in "^0.1.3" + is-extendable "^0.1.1" + + mixpanel-browser@^2.17.1: + version "2.19.0" + resolved "https://registry.yarnpkg.com/mixpanel-browser/-/mixpanel-browser-2.19.0.tgz#425a5c29f621b2050d2aa4ee121b73a4ccd6c3aa" + + mkdirp@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12" + dependencies: + minimist "0.0.8" + + mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + + modify-filename@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/modify-filename/-/modify-filename-1.1.0.tgz#9a2dec83806fbb2d975f22beec859ca26b393aa1" + + moment@^2.20.1: + version "2.21.0" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.21.0.tgz#2a114b51d2a6ec9e6d83cf803f838a878d8a023a" + + move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + + mp4-box-encoding@^1.1.0, mp4-box-encoding@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/mp4-box-encoding/-/mp4-box-encoding-1.1.2.tgz#39850ee05ba5370460070b3a2acbd07616e2d831" + dependencies: + uint64be "^1.0.1" + + mp4-stream@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/mp4-stream/-/mp4-stream-2.0.2.tgz#34161ba2d9b608733b4b2247edf3780ba2c47ec5" + dependencies: + inherits "^2.0.1" + mp4-box-encoding "^1.1.0" + next-event "^1.0.0" + readable-stream "^2.0.3" + + ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + + multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + + multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + + multistream@^2.0.2: + version "2.1.0" + resolved "https://registry.yarnpkg.com/multistream/-/multistream-2.1.0.tgz#625c267d5c44424ad6294788b5bb4da3dcb32f1d" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.5" + + mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + + nan@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46" + + nan@^2.3.0, nan@^2.3.2: + version "2.10.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" + + nanomatch@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-odd "^2.0.0" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + + natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + + ncname@1.0.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ncname/-/ncname-1.0.0.tgz#5b57ad18b1ca092864ef62b0b1ed8194f383b71c" + dependencies: + xml-char-classes "^1.0.0" + + negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + + neo-async@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.0.tgz#76b1c823130cca26acfbaccc8fbaf0a2fa33b18f" + + next-event@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-event/-/next-event-1.0.0.tgz#e7778acde2e55802e0ad1879c39cf6f75eda61d8" + + next-tick@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + + no-case@^2.2.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" + dependencies: + lower-case "^1.1.1" + + node-abi@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.3.0.tgz#f3d554d6ac72a9ee16f0f4dc9548db7c08de4986" + dependencies: + semver "^5.4.1" + + node-fetch@^1.0.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + + node-forge@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.1.tgz#9da611ea08982f4b94206b3beb4cc9665f20c300" + + node-gyp@^3.3.1: + version "3.6.2" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60" + dependencies: + fstream "^1.0.0" + glob "^7.0.3" + graceful-fs "^4.1.2" + minimatch "^3.0.2" + mkdirp "^0.5.0" + nopt "2 || 3" + npmlog "0 || 1 || 2 || 3 || 4" + osenv "0" + request "2" + rimraf "2" + semver "~5.3.0" + tar "^2.0.0" + which "1" + + "node-libs-browser@^1.0.0 || ^2.0.0", node-libs-browser@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^1.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.0" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.10.3" + vm-browserify "0.0.4" + + node-loader@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/node-loader/-/node-loader-0.6.0.tgz#c797ef51095ed5859902b157f6384f6361e05ae8" + + node-notifier@5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff" + dependencies: + growly "^1.3.0" + semver "^5.3.0" + shellwords "^0.1.0" + which "^1.2.12" + + node-pre-gyp@^0.6.39: + version "0.6.39" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" + dependencies: + detect-libc "^1.0.2" + hawk "3.1.3" + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.0.2" + rc "^1.1.7" + request "2.81.0" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^2.2.1" + tar-pack "^3.4.0" + + node-sass@^4.7.2: + version "4.7.2" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.7.2.tgz#9366778ba1469eb01438a9e8592f4262bcb6794e" + dependencies: + async-foreach "^0.1.3" + chalk "^1.1.1" + cross-spawn "^3.0.0" + gaze "^1.0.0" + get-stdin "^4.0.1" + glob "^7.0.3" + in-publish "^2.0.0" + lodash.assign "^4.2.0" + lodash.clonedeep "^4.3.2" + lodash.mergewith "^4.6.0" + meow "^3.7.0" + mkdirp "^0.5.1" + nan "^2.3.2" + node-gyp "^3.3.1" + npmlog "^4.0.0" + request "~2.79.0" + sass-graph "^2.2.4" + stdout-stream "^1.4.0" + "true-case-path" "^1.0.2" + + noop-logger@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" + + "nopt@2 || 3": + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + dependencies: + abbrev "1" + + nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + dependencies: + abbrev "1" + osenv "^0.1.4" + + normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + + normalize-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" + + normalize-path@^2.0.1, normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + + normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + + normalize-url@^1.4.0, normalize-url@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + + npm-path@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" + dependencies: + which "^1.2.10" + + npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + dependencies: + path-key "^2.0.0" + + npm-which@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" + dependencies: + commander "^2.9.0" + npm-path "^2.0.2" + which "^1.2.10" + + "npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.1, npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + + nth-check@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" + dependencies: + boolbase "~1.0.0" + + nugget@^2.0.0, nugget@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/nugget/-/nugget-2.0.1.tgz#201095a487e1ad36081b3432fa3cada4f8d071b0" + dependencies: + debug "^2.1.3" + minimist "^1.1.0" + pretty-bytes "^1.0.2" + progress-stream "^1.1.0" + request "^2.45.0" + single-line-log "^1.1.2" + throttleit "0.0.2" + + num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + + number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + + nwmatcher@^1.4.3: + version "1.4.4" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.4.tgz#2285631f34a95f0d0395cd900c96ed39b58f346e" + + oauth-sign@~0.8.1, oauth-sign@~0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + + object-assign@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa" + + object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + + object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + + object-keys@^1.0.8: + version "1.0.11" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" + + object-keys@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" + + object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + dependencies: + isobject "^3.0.0" + + object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + + object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + dependencies: + isobject "^3.0.1" + + obuf@^1.0.0, obuf@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + + on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + + on-headers@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + + once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + + onetime@^1.0.0: + version "1.1.0" + resolved "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + + onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + dependencies: + mimic-fn "^1.0.0" + + opn@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.3.0.tgz#64871565c863875f052cfdf53d3e3cb5adb53b1c" + dependencies: + is-wsl "^1.1.0" + + optionator@^0.8.1, optionator@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + + ora@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4" + dependencies: + chalk "^1.1.1" + cli-cursor "^1.0.2" + cli-spinners "^0.1.2" + object-assign "^4.0.1" + + original@>=0.0.5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.0.tgz#9147f93fa1696d04be61e01bd50baeaca656bd3b" + dependencies: + url-parse "1.0.x" + + os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + + os-homedir@^1.0.0, os-homedir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + + os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + dependencies: + lcid "^1.0.0" + + os-locale@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + dependencies: + execa "^0.7.0" + lcid "^1.0.0" + mem "^1.1.0" + + os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + + osenv@0, osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + + p-cancelable@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" + + p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + + p-limit@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c" + dependencies: + p-try "^1.0.0" + + p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + dependencies: + p-limit "^1.1.0" + + p-map@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + + p-timeout@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" + dependencies: + p-finally "^1.0.0" + + p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + + package-json@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" + dependencies: + got "^6.7.1" + registry-auth-token "^3.0.1" + registry-url "^3.0.3" + semver "^5.1.0" + + pako@~1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" + + parallel-transform@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" + dependencies: + cyclist "~0.2.2" + inherits "^2.0.3" + readable-stream "^2.1.5" + + param-case@2.1.x: + version "2.1.1" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" + dependencies: + no-case "^2.2.0" + + parse-asn1@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + + parse-color@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-color/-/parse-color-1.0.0.tgz#7b748b95a83f03f16a94f535e52d7f3d94658619" + dependencies: + color-convert "~0.5.0" + + parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + + parse-headers@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.1.tgz#6ae83a7aa25a9d9b700acc28698cd1f1ed7e9536" + dependencies: + for-each "^0.3.2" + trim "0.0.1" + + parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + dependencies: + error-ex "^1.2.0" + + parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + + parse5@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" + + parseurl@~1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + + pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + + path-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + + path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + + path-exists@^2.0.0, path-exists@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + dependencies: + pinkie-promise "^2.0.0" + + path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + + path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + + path-is-inside@^1.0.1, path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + + path-key@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + + path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + + path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + + path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + + path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + dependencies: + pify "^2.0.0" + + pbkdf2@^3.0.3: + version "3.0.14" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade" + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + + pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + + performance-now@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + + performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + + pify@^2.0.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + + pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + + pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + + pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + + pkg-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + dependencies: + find-up "^1.0.0" + + pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + dependencies: + find-up "^2.1.0" + + pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" + dependencies: + find-up "^2.1.0" + + please-upgrade-node@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.0.1.tgz#0a681f2c18915e5433a5ca2cd94e0b8206a782db" + + plist@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/plist/-/plist-2.1.0.tgz#57ccdb7a0821df21831217a3cad54e3e146a1025" + dependencies: + base64-js "1.2.0" + xmlbuilder "8.2.2" + xmldom "0.1.x" + + plist@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.1.tgz#a9b931d17c304e8912ef0ba3bdd6182baf2e1f8c" + dependencies: + base64-js "^1.2.3" + xmlbuilder "^9.0.7" + xmldom "0.1.x" + + pluralize@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" + + pn@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + + portfinder@^1.0.9: + version "1.0.13" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9" + dependencies: + async "^1.5.2" + debug "^2.2.0" + mkdirp "0.5.x" + + posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + + postcss-calc@^5.2.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" + dependencies: + postcss "^5.0.2" + postcss-message-helpers "^2.0.0" + reduce-css-calc "^1.2.6" + + postcss-colormin@^2.1.8: + version "2.2.2" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" + dependencies: + colormin "^1.0.5" + postcss "^5.0.13" + postcss-value-parser "^3.2.3" + + postcss-convert-values@^2.3.4: + version "2.6.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" + dependencies: + postcss "^5.0.11" + postcss-value-parser "^3.1.2" + + postcss-discard-comments@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" + dependencies: + postcss "^5.0.14" + + postcss-discard-duplicates@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" + dependencies: + postcss "^5.0.4" + + postcss-discard-empty@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" + dependencies: + postcss "^5.0.14" + + postcss-discard-overridden@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" + dependencies: + postcss "^5.0.16" + + postcss-discard-unused@^2.2.1: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" + dependencies: + postcss "^5.0.14" + uniqs "^2.0.0" + + postcss-filter-plugins@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c" + dependencies: + postcss "^5.0.4" + uniqid "^4.0.0" + + postcss-merge-idents@^2.1.5: + version "2.1.7" + resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" + dependencies: + has "^1.0.1" + postcss "^5.0.10" + postcss-value-parser "^3.1.1" + + postcss-merge-longhand@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" + dependencies: + postcss "^5.0.4" + + postcss-merge-rules@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" + dependencies: + browserslist "^1.5.2" + caniuse-api "^1.5.2" + postcss "^5.0.4" + postcss-selector-parser "^2.2.2" + vendors "^1.0.0" + + postcss-message-helpers@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" + + postcss-minify-font-values@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" + dependencies: + object-assign "^4.0.1" + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + + postcss-minify-gradients@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" + dependencies: + postcss "^5.0.12" + postcss-value-parser "^3.3.0" + + postcss-minify-params@^1.0.4: + version "1.2.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.2" + postcss-value-parser "^3.0.2" + uniqs "^2.0.0" + + postcss-minify-selectors@^2.0.4: + version "2.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" + dependencies: + alphanum-sort "^1.0.2" + has "^1.0.1" + postcss "^5.0.14" + postcss-selector-parser "^2.0.0" + + postcss-modules-extract-imports@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz#66140ecece38ef06bf0d3e355d69bf59d141ea85" + dependencies: + postcss "^6.0.1" + + postcss-modules-local-by-default@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + + postcss-modules-scope@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + + postcss-modules-values@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" + dependencies: + icss-replace-symbols "^1.1.0" + postcss "^6.0.1" + + postcss-normalize-charset@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" + dependencies: + postcss "^5.0.5" + + postcss-normalize-url@^3.0.7: + version "3.0.8" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^1.4.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + + postcss-ordered-values@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.1" + + postcss-reduce-idents@^2.2.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + + postcss-reduce-initial@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" + dependencies: + postcss "^5.0.4" + + postcss-reduce-transforms@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" + dependencies: + has "^1.0.1" + postcss "^5.0.8" + postcss-value-parser "^3.0.1" + + postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + + postcss-svgo@^2.1.1: + version "2.1.6" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" + dependencies: + is-svg "^2.0.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + svgo "^0.7.0" + + postcss-unique-selectors@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + + postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" + + postcss-zindex@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" + dependencies: + has "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + + postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: + version "5.2.18" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" + dependencies: + chalk "^1.1.3" + js-base64 "^2.1.9" + source-map "^0.5.6" + supports-color "^3.2.3" + + postcss@^6.0.1: + version "6.0.20" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.20.tgz#686107e743a12d5530cb68438c590d5b2bf72c3c" + dependencies: + chalk "^2.3.2" + source-map "^0.6.1" + supports-color "^5.3.0" + + prebuild-install@^2.2.2: + version "2.5.1" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.5.1.tgz#0f234140a73760813657c413cdccdda58296b1da" + dependencies: + detect-libc "^1.0.3" + expand-template "^1.0.2" + github-from-package "0.0.0" + minimist "^1.2.0" + mkdirp "^0.5.1" + node-abi "^2.2.0" + noop-logger "^0.1.1" + npmlog "^4.0.1" + os-homedir "^1.0.1" + pump "^2.0.1" + rc "^1.1.6" + simple-get "^2.7.0" + tar-fs "^1.13.0" + tunnel-agent "^0.6.0" + which-pm-runs "^1.0.0" + + prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + + prepend-http@^1.0.0, prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + + preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + + prettier@^1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.11.1.tgz#61e43fc4cd44e68f2b0dfc2c38cd4bb0fccdcc75" + + pretty-bytes@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-1.0.4.tgz#0a22e8210609ad35542f8c8d5d2159aff0751c84" + dependencies: + get-stdin "^4.0.1" + meow "^3.1.0" + + pretty-error@^2.0.2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" + dependencies: + renderkid "^2.0.1" + utila "~0.4" + + pretty-format@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.4.3.tgz#f873d780839a9c02e9664c8a082e9ee79eaac16f" + dependencies: + ansi-regex "^3.0.0" + ansi-styles "^3.2.0" + + private@^0.1.6, private@^0.1.7, private@~0.1.5: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + + process-nextick-args@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + + process-nextick-args@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + + process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + + process@~0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" + + progress-stream@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/progress-stream/-/progress-stream-1.2.0.tgz#2cd3cfea33ba3a89c9c121ec3347abe9ab125f77" + dependencies: + speedometer "~0.1.2" + through2 "~0.2.3" + + progress@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" + + promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + + promise@^7.0.3, promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + dependencies: + asap "~2.0.3" + + prop-types@^15.5.1, prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1: + version "15.6.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca" + dependencies: + fbjs "^0.8.16" + loose-envify "^1.3.1" + object-assign "^4.1.1" + + proxy-addr@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341" + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.6.0" + + prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + + pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + + public-encrypt@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + + pump@^1.0.0, pump@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + + pump@^2.0.0, pump@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + + pumpify@^1.3.3: + version "1.4.0" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.4.0.tgz#80b7c5df7e24153d03f0e7ac8a05a5d068bd07fb" + dependencies: + duplexify "^3.5.3" + inherits "^2.0.3" + pump "^2.0.0" + + punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + + punycode@^1.2.4, punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + + punycode@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + + pupa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-1.0.0.tgz#9a9568a5af7e657b8462a6e9d5328743560ceff6" + + q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + + qr.js@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/qr.js/-/qr.js-0.0.0.tgz#cace86386f59a0db8050fa90d9b6b0e88a1e364f" + + qrcode.react@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/qrcode.react/-/qrcode.react-0.8.0.tgz#413b31cc3b62910e39513f7bead945e01c4c34fb" + dependencies: + prop-types "^15.6.0" + qr.js "0.0.0" + + qs@6.5.1, qs@~6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" + + qs@~6.3.0: + version "6.3.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" + + qs@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + + query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + + querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + + querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + + querystringify@0.0.x: + version "0.0.4" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-0.0.4.tgz#0cf7f84f9463ff0ae51c4c4b142d95be37724d9c" + + querystringify@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb" + + randomatic@^1.1.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + + randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" + dependencies: + safe-buffer "^5.1.0" + + randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + + range-parser@^1.0.3, range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + + range-slice-stream@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-slice-stream/-/range-slice-stream-1.2.0.tgz#01ba954276052b783900e63d6118d8fcf3875d7f" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.5" + + raw-body@2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" + dependencies: + bytes "3.0.0" + http-errors "1.6.2" + iconv-lite "0.4.19" + unpipe "1.0.0" + + rc-progress@^2.0.6: + version "2.2.5" + resolved "https://registry.yarnpkg.com/rc-progress/-/rc-progress-2.2.5.tgz#e61d0544bf9d4208e5ba32fc50962159e7f952a3" + dependencies: + babel-runtime "6.x" + prop-types "^15.5.8" + + rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@^1.1.7, rc@^1.2.1: + version "1.2.6" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.6.tgz#eb18989c6d4f4f162c399f79ddd29f3835568092" + dependencies: + deep-extend "~0.4.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + + react-dom@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044" + dependencies: + fbjs "^0.8.16" + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.0" + + react-markdown@^2.5.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-2.5.1.tgz#f7a6c26a3a5faf5d4c2098155d9775e826fd56ee" + dependencies: + commonmark "^0.24.0" + commonmark-react-renderer "^4.3.4" + prop-types "^15.5.1" + + react-modal@^3.1.7: + version "3.3.2" + resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.3.2.tgz#b13da9490653a7c76bc0e9600323eb1079c620e7" + dependencies: + exenv "^1.2.0" + prop-types "^15.5.10" + warning "^3.0.0" + + react-paginate@^5.2.1: + version "5.2.2" + resolved "https://registry.yarnpkg.com/react-paginate/-/react-paginate-5.2.2.tgz#c407d325e3073e39e49739ab5095a829000a1c46" + dependencies: + prop-types "^15.6.1" + + react-redux@^5.0.3: + version "5.0.7" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.7.tgz#0dc1076d9afb4670f993ffaef44b8f8c1155a4c8" + dependencies: + hoist-non-react-statics "^2.5.0" + invariant "^2.0.0" + lodash "^4.17.5" + lodash-es "^4.17.5" + loose-envify "^1.1.0" + prop-types "^15.6.0" + + react-simplemde-editor@^3.6.11: + version "3.6.11" + resolved "https://registry.yarnpkg.com/react-simplemde-editor/-/react-simplemde-editor-3.6.11.tgz#4b9e136f6d4d00218e8ece3d87949e23b14e21dc" + dependencies: + react "^0.14.2" + simplemde "^1.11.2" + + react@^0.14.2: + version "0.14.9" + resolved "https://registry.yarnpkg.com/react/-/react-0.14.9.tgz#9110a6497c49d44ba1c0edd317aec29c2e0d91d1" + dependencies: + envify "^3.0.0" + fbjs "^0.6.1" + + react@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba" + dependencies: + fbjs "^0.8.16" + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.0" + + read-config-file@3.0.0, read-config-file@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-3.0.0.tgz#771def5184a7f76abaf6b2c82f20cb983775b8ea" + dependencies: + ajv "^6.1.1" + ajv-keywords "^3.1.0" + bluebird-lst "^1.0.5" + dotenv "^5.0.0" + dotenv-expand "^4.0.1" + fs-extra-p "^4.5.0" + js-yaml "^3.10.0" + json5 "^0.5.1" + lazy-val "^1.0.3" + + read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + + read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + + read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + + read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + + "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.3, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.3, readable-stream@^2.3.5: + version "2.3.5" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.5.tgz#b4f85003a938cbb6ecbce2a124fb1012bd1a838d" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.0.3" + util-deprecate "~1.0.1" + + readable-stream@1.0: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + + readable-stream@~1.1.9: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + + readable-stream@~2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" + dependencies: + buffer-shims "^1.0.0" + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~0.10.x" + util-deprecate "~1.0.1" + + readdirp@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + dependencies: + graceful-fs "^4.1.2" + minimatch "^3.0.2" + readable-stream "^2.0.2" + set-immediate-shim "^1.0.1" + + recast@^0.11.17, recast@~0.11.12: + version "0.11.23" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" + dependencies: + ast-types "0.9.6" + esprima "~3.1.0" + private "~0.1.5" + source-map "~0.5.0" + + redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + + reduce-css-calc@^1.2.6: + version "1.3.0" + resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" + dependencies: + balanced-match "^0.4.2" + math-expression-evaluator "^1.2.14" + reduce-function-call "^1.0.1" + + reduce-function-call@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" + dependencies: + balanced-match "^0.4.2" + + redux-logger@^3.0.1: + version "3.0.6" + resolved "https://registry.yarnpkg.com/redux-logger/-/redux-logger-3.0.6.tgz#f7555966f3098f3c88604c449cf0baf5778274bf" + dependencies: + deep-diff "^0.3.5" + + redux-persist-transform-compress@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/redux-persist-transform-compress/-/redux-persist-transform-compress-4.2.0.tgz#5089e299df7130878fca45f97ffe82888ba02690" + dependencies: + json-stringify-safe "^5.0.1" + lz-string "^1.4.4" + + redux-persist-transform-filter@0.0.16: + version "0.0.16" + resolved "https://registry.yarnpkg.com/redux-persist-transform-filter/-/redux-persist-transform-filter-0.0.16.tgz#0c21dc166774c12fb3f090f7a2f5ea90f7ba0cea" + dependencies: + lodash.forin "^4.4.0" + lodash.get "^4.4.2" + lodash.isempty "^4.4.0" + lodash.pickby "^4.6.0" + lodash.set "^4.3.2" + lodash.unset "^4.5.2" + + redux-persist@^4.8.0: + version "4.10.2" + resolved "https://registry.yarnpkg.com/redux-persist/-/redux-persist-4.10.2.tgz#8efdb16cfe882c521a78a6d0bfdfef2437f49f96" + dependencies: + json-stringify-safe "^5.0.1" + lodash "^4.17.4" + lodash-es "^4.17.4" + + redux-thunk@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.2.0.tgz#e615a16e16b47a19a515766133d1e3e99b7852e5" + + redux@^3.6.0: + version "3.7.2" + resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b" + dependencies: + lodash "^4.2.1" + lodash-es "^4.2.1" + loose-envify "^1.1.0" + symbol-observable "^1.0.3" + + regenerate@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" + + regenerator-runtime@^0.10.5: + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + + regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + + regenerator-transform@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + + regex-cache@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + dependencies: + is-equal-shallow "^0.1.3" + + regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + + regexpp@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.0.1.tgz#d857c3a741dce075c2848dcb019a0a975b190d43" + + regexpu-core@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + + regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + + registry-auth-token@^3.0.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" + dependencies: + rc "^1.1.6" + safe-buffer "^5.0.1" + + registry-url@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + dependencies: + rc "^1.0.1" + + regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + + regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + dependencies: + jsesc "~0.5.0" + + relateurl@0.2.x: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + + remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + + render-media@^2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/render-media/-/render-media-2.12.0.tgz#e44714d5c9789ec6330ffcaf12c552837e3d80f9" + dependencies: + debug "^3.1.0" + is-ascii "^1.0.0" + mediasource "^2.1.0" + stream-to-blob-url "^2.0.0" + videostream "^2.3.0" + + renderkid@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.1.tgz#898cabfc8bede4b7b91135a3ffd323e58c0db319" + dependencies: + css-select "^1.1.0" + dom-converter "~0.1" + htmlparser2 "~3.3.0" + strip-ansi "^3.0.0" + utila "~0.3" + + repeat-element@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + + repeat-string@^1.5.2, repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + + repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + dependencies: + is-finite "^1.0.0" + + request-promise-core@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" + dependencies: + lodash "^4.13.1" + + request-promise-native@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" + dependencies: + request-promise-core "1.1.1" + stealthy-require "^1.1.0" + tough-cookie ">=2.3.3" + + request@2, request@^2.45.0, request@^2.55.0, request@^2.83.0: + version "2.85.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.85.0.tgz#5a03615a47c61420b3eb99b7dba204f83603e1fa" + dependencies: + aws-sign2 "~0.7.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.3.1" + har-validator "~5.0.3" + hawk "~6.0.2" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + stringstream "~0.0.5" + tough-cookie "~2.3.3" + tunnel-agent "^0.6.0" + uuid "^3.1.0" + + request@2.81.0: + version "2.81.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~4.2.1" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + performance-now "^0.2.0" + qs "~6.4.0" + safe-buffer "^5.0.1" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "^0.6.0" + uuid "^3.0.0" + + request@~2.79.0: + version "2.79.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.11.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~2.0.6" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + qs "~6.3.0" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "~0.4.1" + uuid "^3.0.0" + + require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + + require-from-string@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.1.tgz#c545233e9d7da6616e9d59adfb39fc9f588676ff" + + require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + + require-uncached@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + dependencies: + caller-path "^0.1.0" + resolve-from "^1.0.0" + + requires-port@1.0.x, requires-port@1.x.x, requires-port@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + + reselect@^3.0.0, reselect@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-3.0.1.tgz#efdaa98ea7451324d092b2b2163a6a1d7a9a2147" + + resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + dependencies: + resolve-from "^3.0.0" + + resolve-from@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + + resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + + resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + + resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + + resolve@^1.2.0, resolve@^1.4.0, resolve@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.6.0.tgz#0fbd21278b27b4004481c395349e7aba60a9ff5c" + dependencies: + path-parse "^1.0.5" + + restore-cursor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" + dependencies: + exit-hook "^1.0.0" + onetime "^1.0.0" + + restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + + ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + + right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + + rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + dependencies: + glob "^7.0.5" + + ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" + dependencies: + hash-base "^2.0.0" + inherits "^2.0.1" + + run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + dependencies: + is-promise "^2.1.0" + + run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + dependencies: + aproba "^1.1.1" + + rx-lite-aggregates@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + dependencies: + rx-lite "*" + + rx-lite@*, rx-lite@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + + rxjs@^5.4.2: + version "5.5.7" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.7.tgz#afb3d1642b069b2fbf203903d6501d1acb4cda27" + dependencies: + symbol-observable "1.0.1" + + safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + + safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + dependencies: + ret "~0.1.10" + + sanitize-filename@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.1.tgz#612da1c96473fa02dccda92dcd5b4ab164a6772a" + dependencies: + truncate-utf8-bytes "^1.0.0" + + sass-graph@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" + dependencies: + glob "^7.0.0" + lodash "^4.0.0" + scss-tokenizer "^0.2.3" + yargs "^7.0.0" + + sass-loader@^6.0.7: + version "6.0.7" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-6.0.7.tgz#dd2fdb3e7eeff4a53f35ba6ac408715488353d00" + dependencies: + clone-deep "^2.0.1" + loader-utils "^1.0.1" + lodash.tail "^4.1.1" + neo-async "^2.5.0" + pify "^3.0.0" + + sax@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" + + sax@>=0.6.0, sax@^1.2.4, sax@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + + schema-utils@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf" + dependencies: + ajv "^5.0.0" + + schema-utils@^0.4.5: + version "0.4.5" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.5.tgz#21836f0608aac17b78f9e3e24daff14a5ca13a3e" + dependencies: + ajv "^6.1.0" + ajv-keywords "^3.1.0" + + scss-tokenizer@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" + dependencies: + js-base64 "^2.1.8" + source-map "^0.4.2" + + seek-bzip@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.5.tgz#cfe917cb3d274bcffac792758af53173eb1fabdc" + dependencies: + commander "~2.8.1" + + select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + + selfsigned@^1.9.1: + version "1.10.2" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.2.tgz#b4449580d99929b65b10a48389301a6592088758" + dependencies: + node-forge "0.7.1" + + semver-diff@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + dependencies: + semver "^5.0.3" + + "semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + + semver@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + + send@0.16.2: + version "0.16.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.6.2" + mime "1.4.1" + ms "2.0.0" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.4.0" + + serialize-javascript@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.4.0.tgz#7c958514db6ac2443a8abc062dc9f7886a7f6005" + + serve-index@^1.7.2: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + + serve-static@1.13.2: + version "1.13.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.2" + send "0.16.2" + + set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + + set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + + set-value@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.1" + to-object-path "^0.3.0" + + set-value@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + + setimmediate@^1.0.4, setimmediate@^1.0.5, setimmediate@~1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + + setprototypeof@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + + setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + + sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + + shallow-clone@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-1.0.0.tgz#4480cd06e882ef68b2ad88a3ea54832e2c48b571" + dependencies: + is-extendable "^0.1.1" + kind-of "^5.0.0" + mixin-object "^2.0.1" + + shapeshift.io@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/shapeshift.io/-/shapeshift.io-1.3.1.tgz#939f7d89e6a93fad4b556567d3fcdab45d5cc021" + dependencies: + request "^2.55.0" + xhr "^2.0.1" + + shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + dependencies: + shebang-regex "^1.0.0" + + shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + + shellwords@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + + signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + + simple-concat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" + + simple-get@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.7.0.tgz#ad37f926d08129237ff08c4f2edfd6f10e0380b5" + dependencies: + decompress-response "^3.3.0" + once "^1.3.1" + simple-concat "^1.0.0" + + simplemde@^1.11.2: + version "1.11.2" + resolved "https://registry.yarnpkg.com/simplemde/-/simplemde-1.11.2.tgz#a23a35d978d2c40ef07dec008c92f070d8e080e3" + dependencies: + codemirror "*" + codemirror-spell-checker "*" + marked "*" + + single-line-log@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/single-line-log/-/single-line-log-1.1.2.tgz#c2f83f273a3e1a16edb0995661da0ed5ef033364" + dependencies: + string-width "^1.0.1" + + slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + + slice-ansi@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" + + slice-ansi@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + dependencies: + is-fullwidth-code-point "^2.0.0" + + snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + + snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + dependencies: + kind-of "^3.2.0" + + snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + + sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + + sntp@2.x.x: + version "2.1.0" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" + dependencies: + hoek "4.x.x" + + sockjs-client@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12" + dependencies: + debug "^2.6.6" + eventsource "0.1.6" + faye-websocket "~0.11.0" + inherits "^2.0.1" + json3 "^3.3.2" + url-parse "^1.1.8" + + sockjs@0.3.19: + version "0.3.19" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" + dependencies: + faye-websocket "^0.10.0" + uuid "^3.0.1" + + sort-keys-length@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188" + dependencies: + sort-keys "^1.0.0" + + sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + dependencies: + is-plain-obj "^1.0.0" + + source-list-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" + + source-map-resolve@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.1.tgz#7ad0f593f2281598e854df80f19aae4b92d7a11a" + dependencies: + atob "^2.0.0" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + + source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + dependencies: + source-map "^0.5.6" + + source-map-support@^0.5.0, source-map-support@^0.5.3, source-map-support@^0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.4.tgz#54456efa89caa9270af7cd624cc2f123e51fbae8" + dependencies: + source-map "^0.6.0" + + source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + + source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.0, source-map@~0.5.1: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + + source-map@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + dependencies: + amdefine ">=0.0.4" + + source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + + spdx-correct@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + + spdx-exceptions@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" + + spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + + spdx-license-ids@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" + + spdy-transport@^2.0.18: + version "2.1.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.1.0.tgz#4bbb15aaffed0beefdd56ad61dbdc8ba3e2cb7a1" + dependencies: + debug "^2.6.8" + detect-node "^2.0.3" + hpack.js "^2.1.6" + obuf "^1.1.1" + readable-stream "^2.2.9" + safe-buffer "^5.0.1" + wbuf "^1.7.2" + + spdy@^3.4.1: + version "3.4.7" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-3.4.7.tgz#42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc" + dependencies: + debug "^2.6.8" + handle-thing "^1.2.5" + http-deceiver "^1.2.7" + safe-buffer "^5.0.1" + select-hose "^2.0.0" + spdy-transport "^2.0.18" + + speedometer@~0.1.2: + version "0.1.4" + resolved "https://registry.yarnpkg.com/speedometer/-/speedometer-0.1.4.tgz#9876dbd2a169d3115402d48e6ea6329c8816a50d" + + split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + dependencies: + extend-shallow "^3.0.0" + + sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + + sshpk@^1.7.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.1.tgz#130f5975eddad963f1d56f92b9ac6c51fa9f83eb" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + + ssri@^5.2.4: + version "5.3.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06" + dependencies: + safe-buffer "^5.1.1" + + stack-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" + + staged-git-files@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.0.tgz#1a9bb131c1885601023c7aaddd3d54c22142c526" + + stat-mode@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-0.2.2.tgz#e6c80b623123d7d80cf132ce538f346289072502" + + static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + + "statuses@>= 1.3.1 < 2", statuses@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + + stdout-stream@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.0.tgz#a2c7c8587e54d9427ea9edb3ac3f2cd522df378b" + dependencies: + readable-stream "^2.0.1" + + stealthy-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + + stream-browserify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + + stream-each@^1.1.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.2.tgz#8e8c463f91da8991778765873fe4d960d8f616bd" + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + + stream-http@^2.7.2: + version "2.8.1" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.1.tgz#d0441be1a457a73a733a8a7b53570bebd9ef66a4" + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.3" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + + stream-shift@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + + stream-to-blob-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/stream-to-blob-url/-/stream-to-blob-url-2.1.0.tgz#c341d10502ec51250607327258ec2f586b07d626" + dependencies: + stream-to-blob "^1.0.0" + + stream-to-blob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stream-to-blob/-/stream-to-blob-1.0.0.tgz#9f7a1ada39e16ea282ebb7e4cda307edabde658d" + dependencies: + once "^1.3.3" + + stream-to-observable@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.2.0.tgz#59d6ea393d87c2c0ddac10aa0d561bc6ba6f0e10" + dependencies: + any-observable "^0.2.0" + + strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + + string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + + string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + + string.prototype.repeat@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-0.2.0.tgz#aba36de08dcee6a5a337d49b2ea1da1b28fc0ecf" + + string_decoder@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.0.tgz#384f322ee8a848e500effde99901bba849c5d403" + dependencies: + safe-buffer "~5.1.0" + + string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + + string_decoder@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" + dependencies: + safe-buffer "~5.1.0" + + stringify-object@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.2.2.tgz#9853052e5a88fb605a44cd27445aa257ad7ffbcd" + dependencies: + get-own-enumerable-property-symbols "^2.0.1" + is-obj "^1.0.1" + is-regexp "^1.0.0" + + stringstream@~0.0.4, stringstream@~0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + + strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + + strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + + strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + dependencies: + is-utf8 "^0.2.0" + + strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + + strip-dirs@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5" + dependencies: + is-natural-number "^4.0.1" + + strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + + strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + dependencies: + get-stdin "^4.0.1" + + strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + + strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + + style-loader@^0.20.2: + version "0.20.3" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.20.3.tgz#ebef06b89dec491bcb1fdb3452e913a6fd1c10c4" + dependencies: + loader-utils "^1.1.0" + schema-utils "^0.4.5" + + sumchecker@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-1.3.1.tgz#79bb3b4456dd04f18ebdbc0d703a1d1daec5105d" + dependencies: + debug "^2.2.0" + es6-promise "^4.0.5" + + sumchecker@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-2.0.2.tgz#0f42c10e5d05da5d42eea3e56c3399a37d6c5b3e" + dependencies: + debug "^2.2.0" + + supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + + supports-color@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + dependencies: + has-flag "^1.0.0" + + supports-color@^4.2.1: + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + dependencies: + has-flag "^2.0.0" + + supports-color@^5.1.0, supports-color@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.3.0.tgz#5b24ac15db80fa927cf5227a4a33fd3c4c7676c0" + dependencies: + has-flag "^3.0.0" + + svgo@^0.7.0: + version "0.7.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" + dependencies: + coa "~1.0.1" + colors "~1.1.2" + csso "~2.3.1" + js-yaml "~3.7.0" + mkdirp "~0.5.1" + sax "~1.2.1" + whet.extend "~0.9.9" + + symbol-observable@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" + + symbol-observable@^0.2.2: + version "0.2.4" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40" + + symbol-observable@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + + symbol-tree@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + + table@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" + dependencies: + ajv "^5.2.3" + ajv-keywords "^2.1.0" + chalk "^2.1.0" + lodash "^4.17.4" + slice-ansi "1.0.0" + string-width "^2.1.1" + + table@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc" + dependencies: + ajv "^6.0.1" + ajv-keywords "^3.0.0" + chalk "^2.1.0" + lodash "^4.17.4" + slice-ansi "1.0.0" + string-width "^2.1.1" + + tapable@^0.1.8: + version "0.1.10" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4" + + tapable@^0.2.7: + version "0.2.8" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" + + tar-fs@^1.13.0: + version "1.16.0" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.0.tgz#e877a25acbcc51d8c790da1c57c9cf439817b896" + dependencies: + chownr "^1.0.1" + mkdirp "^0.5.1" + pump "^1.0.0" + tar-stream "^1.1.2" + + tar-pack@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" + dependencies: + debug "^2.2.0" + fstream "^1.0.10" + fstream-ignore "^1.0.5" + once "^1.3.3" + readable-stream "^2.1.4" + rimraf "^2.5.1" + tar "^2.2.1" + uid-number "^0.0.6" + + tar-stream@^1.1.2, tar-stream@^1.5.2: + version "1.5.5" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.5.5.tgz#5cad84779f45c83b1f2508d96b09d88c7218af55" + dependencies: + bl "^1.0.0" + end-of-stream "^1.0.0" + readable-stream "^2.0.0" + xtend "^4.0.0" + + tar@^2.0.0, tar@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + dependencies: + block-stream "*" + fstream "^1.0.2" + inherits "2" + + temp-file@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.1.1.tgz#8823649aa4e8a6e419eb71b601a2e4d472b0f24f" + dependencies: + async-exit-hook "^2.0.1" + bluebird-lst "^1.0.5" + fs-extra-p "^4.5.0" + lazy-val "^1.0.3" + + term-size@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + dependencies: + execa "^0.7.0" + + text-table@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + + throttleit@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-0.0.2.tgz#cfedf88e60c00dd9697b61fdd2a8343a9b680eaf" + + through2@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + dependencies: + readable-stream "^2.1.5" + xtend "~4.0.1" + + through2@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/through2/-/through2-0.2.3.tgz#eb3284da4ea311b6cc8ace3653748a52abf25a3f" + dependencies: + readable-stream "~1.1.9" + xtend "~2.1.1" + + through@^2.3.6, through@^2.3.8, through@~2.3.4, through@~2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + + thunky@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.2.tgz#a862e018e3fb1ea2ec3fce5d55605cf57f247371" + + time-stamp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.0.tgz#95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357" + + timed-out@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + + timers-browserify@^2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.6.tgz#241e76927d9ca05f4d959819022f5b3664b64bae" + dependencies: + setimmediate "^1.0.4" + + tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + dependencies: + os-tmpdir "~1.0.2" + + to-arraybuffer@^1.0.0, to-arraybuffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + + to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + + to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + + to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + dependencies: + kind-of "^3.0.2" + + to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + + to-regex@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + + toposort@^1.0.0: + version "1.0.6" + resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.6.tgz#c31748e55d210effc00fdcdc7d6e68d7d7bb9cec" + + tough-cookie@>=2.3.3, tough-cookie@^2.3.3, tough-cookie@~2.3.0, tough-cookie@~2.3.3: + version "2.3.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" + dependencies: + punycode "^1.4.1" + + tr46@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + dependencies: + punycode "^2.1.0" + + "traverse@>=0.3.0 <0.4": + version "0.3.9" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" + + tree-kill@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.0.tgz#5846786237b4239014f05db156b643212d4c6f36" + + trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + + trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + + trim@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + + "true-case-path@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.2.tgz#7ec91130924766c7f573be3020c34f8fdfd00d62" + dependencies: + glob "^6.0.4" + + truncate-utf8-bytes@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" + dependencies: + utf8-byte-length "^1.0.1" + + tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + + tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + + tunnel-agent@~0.4.1: + version "0.4.3" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" + + tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + + type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + dependencies: + prelude-ls "~1.1.2" + + type-is@~1.6.15, type-is@~1.6.16: + version "1.6.16" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.18" + + typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + + typo-js@*: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typo-js/-/typo-js-1.0.3.tgz#54d8ebc7949f1a7810908b6002c6841526c99d5a" + + ua-parser-js@^0.7.9: + version "0.7.17" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" + + uglify-es@^3.3.4: + version "3.3.9" + resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" + dependencies: + commander "~2.13.0" + source-map "~0.6.1" + + uglify-js@3.3.x: + version "3.3.16" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.16.tgz#23ba13efa27aa00885be7417819e8a9787f94028" + dependencies: + commander "~2.15.0" + source-map "~0.6.1" + + uglify-js@^2.8.29: + version "2.8.29" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + + uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + + uglifyjs-webpack-plugin@^0.4.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" + dependencies: + source-map "^0.5.6" + uglify-js "^2.8.29" + webpack-sources "^1.0.1" + + uglifyjs-webpack-plugin@^1.2.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.4.tgz#5eec941b2e9b8538be0a20fc6eda25b14c7c1043" + dependencies: + cacache "^10.0.4" + find-cache-dir "^1.0.0" + schema-utils "^0.4.5" + serialize-javascript "^1.4.0" + source-map "^0.6.1" + uglify-es "^3.3.4" + webpack-sources "^1.1.0" + worker-farm "^1.5.2" + + uid-number@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + + uint64be@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uint64be/-/uint64be-1.0.1.tgz#1f7154202f2a1b8af353871dda651bf34ce93e95" + + unbzip2-stream@^1.0.9: + version "1.2.5" + resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.2.5.tgz#73a033a567bbbde59654b193c44d48a7e4f43c47" + dependencies: + buffer "^3.0.1" + through "^2.3.6" + + unc-path-regex@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" + + underscore@>1.4.4: + version "1.8.3" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" + + union-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^0.4.3" + + uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + + uniqid@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1" + dependencies: + macaddress "^0.2.8" + + uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + + unique-filename@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.0.tgz#d05f2fe4032560871f30e93cbe735eea201514f3" + dependencies: + unique-slug "^2.0.0" + + unique-slug@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.0.tgz#db6676e7c7cc0629878ff196097c78855ae9f4ab" + dependencies: + imurmurhash "^0.1.4" + + unique-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + dependencies: + crypto-random-string "^1.0.0" + + universalify@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" + + unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + + unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + + unused-filename@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unused-filename/-/unused-filename-1.0.0.tgz#d340880f71ae2115ebaa1325bef05cc6684469c6" + dependencies: + modify-filename "^1.1.0" + path-exists "^3.0.0" + + unzip-response@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + + unzipper@^0.8.11: + version "0.8.11" + resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.8.11.tgz#894383dc6b4bdab944e446f665a82d40d167fbd4" + dependencies: + big-integer "^1.6.17" + binary "~0.3.0" + bluebird "~3.4.1" + buffer-indexof-polyfill "~1.0.0" + duplexer2 "~0.1.4" + fstream "~1.0.10" + listenercount "~1.0.1" + readable-stream "~2.1.5" + setimmediate "~1.0.4" + + upath@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.4.tgz#ee2321ba0a786c50973db043a50b7bcba822361d" + + update-notifier@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.3.0.tgz#4e8827a6bb915140ab093559d7014e3ebb837451" + dependencies: + boxen "^1.2.1" + chalk "^2.0.1" + configstore "^3.0.0" + import-lazy "^2.1.0" + is-installed-globally "^0.1.0" + is-npm "^1.0.0" + latest-version "^3.0.0" + semver-diff "^2.0.0" + xdg-basedir "^3.0.0" + + upper-case@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" + + urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + + url-loader@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.6.2.tgz#a007a7109620e9d988d14bce677a1decb9a993f7" + dependencies: + loader-utils "^1.0.2" + mime "^1.4.1" + schema-utils "^0.3.0" + + url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + dependencies: + prepend-http "^1.0.1" + + url-parse@1.0.x: + version "1.0.5" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b" + dependencies: + querystringify "0.0.x" + requires-port "1.0.x" + + url-parse@^1.1.8: + version "1.2.0" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.2.0.tgz#3a19e8aaa6d023ddd27dcc44cb4fc8f7fec23986" + dependencies: + querystringify "~1.0.0" + requires-port "~1.0.0" + + url-to-options@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" + + url@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" + dependencies: + punycode "1.3.2" + querystring "0.2.0" + + url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + dependencies: + punycode "1.3.2" + querystring "0.2.0" + + use@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.0.tgz#14716bf03fdfefd03040aef58d8b4b85f3a7c544" + dependencies: + kind-of "^6.0.2" + + utf8-byte-length@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" + + util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + + util@0.10.3, util@^0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + dependencies: + inherits "2.0.1" + + utila@~0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz#d7e8e7d7e309107092b05f8d9688824d633a4226" + + utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + + utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + + uuid@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" + + uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" + + validate-npm-package-license@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338" + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + + vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + + vendors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22" + + verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + + videostream@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/videostream/-/videostream-2.4.2.tgz#9560254d00fabdc40955c1a3c282057d8db1d115" + dependencies: + binary-search "^1.2.0" + inherits "^2.0.1" + mediasource "^2.0.0" + mp4-box-encoding "^1.1.1" + mp4-stream "^2.0.0" + multistream "^2.0.2" + pump "^1.0.1" + range-slice-stream "^1.2.0" + + virtual-module-webpack-plugin@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/virtual-module-webpack-plugin/-/virtual-module-webpack-plugin-0.3.0.tgz#b2095b2b8c51480362ab3ec2bd613bdd507cbd46" + + vm-browserify@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" + dependencies: + indexof "0.0.1" + + w3c-hr-time@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" + dependencies: + browser-process-hrtime "^0.1.2" + + warning@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" + dependencies: + loose-envify "^1.0.0" + + watchpack@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.5.0.tgz#231e783af830a22f8966f65c4c4bacc814072eed" + dependencies: + chokidar "^2.0.2" + graceful-fs "^4.1.2" + neo-async "^2.5.0" + + wbuf@^1.1.0, wbuf@^1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + dependencies: + minimalistic-assert "^1.0.0" + + webidl-conversions@^4.0.1, webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + + webpack-build-notifier@^0.1.23: + version "0.1.23" + resolved "https://registry.yarnpkg.com/webpack-build-notifier/-/webpack-build-notifier-0.1.23.tgz#7df405dfb77c5584c4e2e27b445f6aa0414ca384" + dependencies: + ansi-regex "^2.0.0" + node-notifier "5.1.2" + strip-ansi "^3.0.1" + + webpack-dev-middleware@1.12.2: + version "1.12.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e" + dependencies: + memory-fs "~0.4.1" + mime "^1.5.0" + path-is-absolute "^1.0.0" + range-parser "^1.0.3" + time-stamp "^2.0.0" + + webpack-dev-server@^2.11.1: + version "2.11.2" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.11.2.tgz#1f4f4c78bf1895378f376815910812daf79a216f" + dependencies: + ansi-html "0.0.7" + array-includes "^3.0.3" + bonjour "^3.5.0" + chokidar "^2.0.0" + compression "^1.5.2" + connect-history-api-fallback "^1.3.0" + debug "^3.1.0" + del "^3.0.0" + express "^4.16.2" + html-entities "^1.2.0" + http-proxy-middleware "~0.17.4" + import-local "^1.0.0" + internal-ip "1.2.0" + ip "^1.1.5" + killable "^1.0.0" + loglevel "^1.4.1" + opn "^5.1.0" + portfinder "^1.0.9" + selfsigned "^1.9.1" + serve-index "^1.7.2" + sockjs "0.3.19" + sockjs-client "1.1.4" + spdy "^3.4.1" + strip-ansi "^3.0.0" + supports-color "^5.1.0" + webpack-dev-middleware "1.12.2" + yargs "6.6.0" + + webpack-merge@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.2.tgz#5d372dddd3e1e5f8874f5bf5a8e929db09feb216" + dependencies: + lodash "^4.17.5" + + webpack-sources@^1.0.1, webpack-sources@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54" + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + + webpack@^3.10.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.11.0.tgz#77da451b1d7b4b117adaf41a1a93b5742f24d894" + dependencies: + acorn "^5.0.0" + acorn-dynamic-import "^2.0.0" + ajv "^6.1.0" + ajv-keywords "^3.1.0" + async "^2.1.2" + enhanced-resolve "^3.4.0" + escope "^3.6.0" + interpret "^1.0.0" + json-loader "^0.5.4" + json5 "^0.5.1" + loader-runner "^2.3.0" + loader-utils "^1.1.0" + memory-fs "~0.4.1" + mkdirp "~0.5.0" + node-libs-browser "^2.0.0" + source-map "^0.5.3" + supports-color "^4.2.1" + tapable "^0.2.7" + uglifyjs-webpack-plugin "^0.4.6" + watchpack "^1.4.0" + webpack-sources "^1.0.1" + yargs "^8.0.2" + + websocket-driver@>=0.5.1: + version "0.7.0" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" + dependencies: + http-parser-js ">=0.4.0" + websocket-extensions ">=0.1.1" + + websocket-extensions@>=0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" + + whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3" + dependencies: + iconv-lite "0.4.19" + + whatwg-fetch@>=0.10.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" + + whatwg-fetch@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-0.9.0.tgz#0e3684c6cb9995b43efc9df03e4c365d95fd9cc0" + + whatwg-url@^6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.4.0.tgz#08fdf2b9e872783a7a1f6216260a1d66cc722e08" + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.0" + webidl-conversions "^4.0.1" + + whet.extend@~0.9.9: + version "0.9.9" + resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" + + which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + + which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + + which-pm-runs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" + + which@1, which@^1.2.10, which@^1.2.12, which@^1.2.9, which@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" + dependencies: + isexe "^2.0.0" + + wide-align@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" + dependencies: + string-width "^1.0.2" + + widest-line@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.0.tgz#0142a4e8a243f8882c0233aa0e0281aa76152273" + dependencies: + string-width "^2.1.1" + + window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + + window-size@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" + + wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + + wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + + worker-farm@^1.5.2: + version "1.6.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" + dependencies: + errno "~0.1.7" + + wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + + wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + + write-file-atomic@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + + write@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + dependencies: + mkdirp "^0.5.1" + + ws@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-4.1.0.tgz#a979b5d7d4da68bf54efe0408967c324869a7289" + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + + xdg-basedir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" + + xhr@^2.0.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.4.1.tgz#ba982cced205ae5eec387169ac9dc77ca4853d38" + dependencies: + global "~4.3.0" + is-function "^1.0.1" + parse-headers "^2.0.0" + xtend "^4.0.0" + + xml-char-classes@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d" + + xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + + xml2js@0.4.17: + version "0.4.17" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.17.tgz#17be93eaae3f3b779359c795b419705a8817e868" + dependencies: + sax ">=0.6.0" + xmlbuilder "^4.1.0" + + xmlbuilder@4.2.1, xmlbuilder@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.2.1.tgz#aa58a3041a066f90eaa16c2f5389ff19f3f461a5" + dependencies: + lodash "^4.0.0" + + xmlbuilder@8.2.2: + version "8.2.2" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773" + + xmlbuilder@^9.0.7: + version "9.0.7" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" + + xmldom@0.1.x: + version "0.1.27" + resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" + + xpipe@*: + version "1.0.5" + resolved "https://registry.yarnpkg.com/xpipe/-/xpipe-1.0.5.tgz#8dd8bf45fc3f7f55f0e054b878f43a62614dafdf" + + xss-filters@^1.2.6: + version "1.2.7" + resolved "https://registry.yarnpkg.com/xss-filters/-/xss-filters-1.2.7.tgz#59fa1de201f36f2f3470dcac5f58ccc2830b0a9a" + + xtend@^4.0.0, xtend@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + + xtend@~2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" + dependencies: + object-keys "~0.4.0" + + y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + + y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + + yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + + yargs-parser@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" + dependencies: + camelcase "^3.0.0" + lodash.assign "^4.0.6" + + yargs-parser@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" + dependencies: + camelcase "^3.0.0" + + yargs-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" + dependencies: + camelcase "^3.0.0" + + yargs-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" + dependencies: + camelcase "^4.1.0" + + yargs-parser@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" + dependencies: + camelcase "^4.1.0" + + yargs@6.6.0: + version "6.6.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + 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.0" + + yargs@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.0.0.tgz#c052931006c5eee74610e5fc0354bedfd08a201b" + dependencies: + cliui "^4.0.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^9.0.2" + + yargs@^4.2.0, yargs@^4.7.1: + version "4.8.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" + dependencies: + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + lodash.assign "^4.0.3" + 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" + + yargs@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + 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@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" + dependencies: + camelcase "^4.1.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + 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.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^7.0.0" + + yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" + + yauzl@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" + dependencies: + fd-slicer "~1.0.1" + + yauzl@^2.4.2: + version "2.9.1" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.9.1.tgz#a81981ea70a57946133883f029c5821a89359a7f" + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.0.1" + +Trace: + Error: Command failed. + Exit code: 1 + Command: sh + Arguments: -c /Users/IGassmann/Developer/LBRY/lbry-app/node_modules/.bin/lint-staged -D + Directory: /Users/IGassmann/Developer/LBRY/lbry-app + Output: + + at ProcessTermError.MessageError (/usr/local/Cellar/yarn/1.5.1_1/libexec/lib/cli.js:186:110) + at new ProcessTermError (/usr/local/Cellar/yarn/1.5.1_1/libexec/lib/cli.js:226:113) + at ChildProcess. (/usr/local/Cellar/yarn/1.5.1_1/libexec/lib/cli.js:30281:17) + at emitTwo (events.js:126:13) + at ChildProcess.emit (events.js:214:7) + at maybeClose (internal/child_process.js:925:16) + at Process.ChildProcess._handle.onexit (internal/child_process.js:209:5) -- 2.45.3 From 95e04b1d96d72f4681d329b190351cac78090684 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Fri, 23 Mar 2018 15:42:17 -0400 Subject: [PATCH 124/192] chore: re-add Prettier rules to ESLint configuration file --- .eslintrc.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.eslintrc.json b/.eslintrc.json index f7dd140c7..69a674b7a 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -4,7 +4,7 @@ "airbnb", "plugin:import/electron", "plugin:flowtype/recommended", - "prettier" + "plugin:prettier/recommended" ], "settings": { "import/resolver": { @@ -28,6 +28,11 @@ "rules": { "import/no-commonjs": "warn", "import/no-amd": "warn", + "prettier/prettier": ["error", { + "trailingComma": "es5", + "printWidth": 100, + "singleQuote": true + }], "func-names": ["warn", "as-needed"] } } -- 2.45.3 From 6f7a12bfa6bdcfd43a999789a2c3dfa51073061e Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Fri, 23 Mar 2018 15:45:32 -0400 Subject: [PATCH 125/192] feat: enable yarnhook to keep node_modules up-to-date --- package.json | 6 +++++- yarn.lock | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index ba0f37cfb..2a6f4a7a2 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,9 @@ "build:dir": "yarn build -- --dir -c.compression=store -c.mac.identity=null", "release": "yarn compile && electron-builder build", "precommit": "lint-staged", + "postmerge": "yarnhook", + "postcheckout": "yarnhook", + "postrewrite": "yarnhook", "postinstall": "electron-builder install-app-deps && node build/downloadDaemon.js", "lint": "eslint 'src/**/*.{js,jsx}' --fix", "format": "prettier 'src/**/*.{js,jsx,scss,json}' --write" @@ -110,7 +113,8 @@ "prettier": "^1.11.1", "sass-loader": "^6.0.7", "webpack": "^3.10.0", - "webpack-build-notifier": "^0.1.23" + "webpack-build-notifier": "^0.1.23", + "yarnhook": "^0.1.1" }, "engines": { "node": ">=6", diff --git a/yarn.lock b/yarn.lock index dcd8918e8..4525c926e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3429,6 +3429,18 @@ execa@^0.7.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +execa@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + execa@^0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.9.0.tgz#adb7ce62cf985071f60580deb4a88b9e34712d01" @@ -9531,6 +9543,13 @@ yargs@~3.10.0: decamelize "^1.0.0" window-size "0.1.0" +yarnhook@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/yarnhook/-/yarnhook-0.1.1.tgz#6e67757327e6390cb313f371bdc44ded7c5e047b" + dependencies: + execa "^0.8.0" + find-parent-dir "^0.3.0" + yauzl@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" -- 2.45.3 From 172e3fd05abee24897393e3a0290344e27feda49 Mon Sep 17 00:00:00 2001 From: btzr-io Date: Fri, 23 Mar 2018 13:19:16 -0700 Subject: [PATCH 126/192] reduce usage of lbry.js --- src/renderer/component/fileList/view.jsx | 18 +++++++++++++++--- src/renderer/lbry.js | 22 ---------------------- 2 files changed, 15 insertions(+), 25 deletions(-) diff --git a/src/renderer/component/fileList/view.jsx b/src/renderer/component/fileList/view.jsx index 1af98000b..a3e6f4726 100644 --- a/src/renderer/component/fileList/view.jsx +++ b/src/renderer/component/fileList/view.jsx @@ -1,5 +1,4 @@ import React from 'react'; -import lbry from 'lbry.js'; import { buildURI } from 'lbryURI'; import FormField from 'component/formField'; import FileTile from 'component/fileTile'; @@ -50,8 +49,21 @@ class FileList extends React.PureComponent { : fileInfos, title: fileInfos => fileInfos.slice().sort((fileInfo1, fileInfo2) => { - const title1 = lbry.getFileTitle(fileInfo1).toLowerCase(); - const title2 = lbry.getFileTitle(fileInfo2).toLowerCase(); + const getFileTitle = fileInfo => { + const { value, metadata, claim_name, name } = fileInfo; + if (metadata) { + // downloaded claim + return metadata.title || claim_name; + } else if (value) { + // published claim + const { title } = value.stream.metadata; + return title || name; + } + // Invalid claim + return ''; + }; + const title1 = getFileTitle(fileInfo1).toLowerCase(); + const title2 = getFileTitle(fileInfo2).toLowerCase(); if (title1 < title2) { return -1; } else if (title1 > title2) { diff --git a/src/renderer/lbry.js b/src/renderer/lbry.js index f6887be1e..b7356894b 100644 --- a/src/renderer/lbry.js +++ b/src/renderer/lbry.js @@ -196,28 +196,6 @@ Lbry.getMediaType = (contentType, fileName) => { return 'unknown'; }; -Lbry.getAppVersionInfo = () => - new Promise(resolve => { - ipcRenderer.once('version-info-received', (event, versionInfo) => { - resolve(versionInfo); - }); - ipcRenderer.send('version-info-requested'); - }); - -Lbry.getFileTitle = fileInfo => { - const { value, metadata, claim_name, name } = fileInfo; - if (metadata) { - // downloaded claim - return metadata.title || claim_name; - } else if (value) { - // published claim - const { title } = value.stream.metadata; - return title || name; - } - // Invalid claim - return ''; -}; - /** * Wrappers for API methods to simulate missing or future behavior. Unlike the old-style stubs, * these are designed to be transparent wrappers around the corresponding API methods. -- 2.45.3 From 9dcf3959a360f85af3f31974e73a678a0aacd0ba Mon Sep 17 00:00:00 2001 From: btzr-io Date: Sat, 24 Mar 2018 10:15:13 -0700 Subject: [PATCH 127/192] revert getAppVersion --- src/renderer/lbry.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/renderer/lbry.js b/src/renderer/lbry.js index b7356894b..bdcd095c5 100644 --- a/src/renderer/lbry.js +++ b/src/renderer/lbry.js @@ -174,6 +174,14 @@ Lbry.publishDeprecated = (params, fileListedCallback, publishedCallback, errorCa Lbry.imagePath = file => `${staticResourcesPath}/img/${file}`; +Lbry.getAppVersionInfo = () => + new Promise(resolve => { + ipcRenderer.once('version-info-received', (event, versionInfo) => { + resolve(versionInfo); + }); + ipcRenderer.send('version-info-requested'); + }); + Lbry.getMediaType = (contentType, fileName) => { if (contentType) { return /^[^/]+/.exec(contentType)[0]; -- 2.45.3 From 6ec3a8f8ee24f19f43c9dabb795e58476f38b432 Mon Sep 17 00:00:00 2001 From: btzr-io Date: Sat, 24 Mar 2018 10:30:57 -0700 Subject: [PATCH 128/192] make codacy-bot happy again! --- src/renderer/component/fileList/view.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/renderer/component/fileList/view.jsx b/src/renderer/component/fileList/view.jsx index a3e6f4726..a18aac95f 100644 --- a/src/renderer/component/fileList/view.jsx +++ b/src/renderer/component/fileList/view.jsx @@ -50,10 +50,10 @@ class FileList extends React.PureComponent { title: fileInfos => fileInfos.slice().sort((fileInfo1, fileInfo2) => { const getFileTitle = fileInfo => { - const { value, metadata, claim_name, name } = fileInfo; + const { value, metadata, name, claim_name: claimName } = fileInfo; if (metadata) { // downloaded claim - return metadata.title || claim_name; + return metadata.title || claimName; } else if (value) { // published claim const { title } = value.stream.metadata; -- 2.45.3 From 5bd5d11ace5da7205c5d136a798f47ffbbed5725 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Sun, 25 Mar 2018 13:39:31 -0400 Subject: [PATCH 129/192] chore: remove yarn-error.log --- yarn-error.log | 9707 ------------------------------------------------ 1 file changed, 9707 deletions(-) delete mode 100644 yarn-error.log diff --git a/yarn-error.log b/yarn-error.log deleted file mode 100644 index fa6fe319d..000000000 --- a/yarn-error.log +++ /dev/null @@ -1,9707 +0,0 @@ -Arguments: - /Users/IGassmann/.nvm/versions/node/v8.9.0/bin/node /usr/local/Cellar/yarn/1.5.1_1/libexec/bin/yarn.js lint-staged -D - -PATH: - /Users/IGassmann/.nvm/versions/node/v8.9.0/bin:/opt/X11/bin:/Applications/VMware Fusion.app/Contents/Public:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin - -Yarn version: - 1.5.1 - -Node version: - 8.9.0 - -Platform: - darwin x64 - -npm manifest: - { - "name": "LBRY", - "version": "0.21.2", - "description": "A browser for the LBRY network, a digital marketplace controlled by its users.", - "keywords": [ - "lbry" - ], - "license": "MIT", - "homepage": "https://lbry.io/", - "bugs": { - "url": "https://github.com/lbryio/lbry-app/issues" - }, - "repository": { - "type": "git", - "url": "https://github.com/lbryio/lbry-app" - }, - "author": { - "name": "LBRY Inc.", - "email": "hello@lbry.io" - }, - "main": "src/main/index.js", - "scripts": { - "extract-langs": "node build/extractLocals.js", - "dev": "electron-webpack dev", - "compile": "electron-webpack && yarn extract-langs", - "build": "yarn compile && electron-builder build", - "build:dir": "yarn build -- --dir -c.compression=store -c.mac.identity=null", - "release": "yarn compile && electron-builder build", - "precommit": "lint-staged", - "postinstall": "electron-builder install-app-deps && node build/downloadDaemon.js", - "lint": "eslint 'src/**/*.{js,jsx}' --fix", - "format": "prettier 'src/**/*.{js,jsx,scss,json}' --write" - }, - "dependencies": { - "bluebird": "^3.5.1", - "classnames": "^2.2.5", - "country-data": "^0.0.31", - "electron-dl": "^1.11.0", - "electron-is-dev": "^0.3.0", - "electron-log": "^2.2.12", - "electron-publisher-s3": "^20.2.0", - "electron-updater": "^2.21.0", - "electron-window-state": "^4.1.1", - "find-process": "^1.1.0", - "formik": "^0.10.4", - "from2": "^2.3.0", - "install": "^0.10.2", - "jshashes": "^1.0.7", - "keytar-prebuild": "4.0.4", - "localforage": "^1.5.0", - "mixpanel-browser": "^2.17.1", - "moment": "^2.20.1", - "qrcode.react": "^0.8.0", - "rc-progress": "^2.0.6", - "react": "^16.2.0", - "react-dom": "^16.2.0", - "react-markdown": "^2.5.0", - "react-modal": "^3.1.7", - "react-paginate": "^5.2.1", - "react-redux": "^5.0.3", - "react-simplemde-editor": "^3.6.11", - "redux": "^3.6.0", - "redux-logger": "^3.0.1", - "redux-persist": "^4.8.0", - "redux-persist-transform-compress": "^4.2.0", - "redux-persist-transform-filter": "0.0.16", - "redux-thunk": "^2.2.0", - "render-media": "^2.12.0", - "reselect": "^3.0.0", - "semver": "^5.3.0", - "shapeshift.io": "^1.3.1", - "source-map-support": "^0.5.4", - "tree-kill": "^1.1.0", - "y18n": "^4.0.0" - }, - "devDependencies": { - "axios": "^0.18.0", - "babel-eslint": "^8.2.2", - "babel-plugin-module-resolver": "^3.1.0", - "babel-polyfill": "^6.20.0", - "babel-preset-env": "^1.6.1", - "babel-preset-react": "^6.24.1", - "babel-preset-stage-2": "^6.18.0", - "decompress": "^4.2.0", - "del": "^3.0.0", - "devtron": "^1.4.0", - "electron": "1.7.12", - "electron-builder": "^20.7.1", - "electron-devtools-installer": "^2.2.3", - "electron-webpack": "^1.13.0", - "eslint": "^4.19.0", - "eslint-config-airbnb": "^16.1.0", - "eslint-config-prettier": "^2.9.0", - "eslint-import-resolver-webpack": "^0.8.4", - "eslint-plugin-flowtype": "^2.46.1", - "eslint-plugin-import": "^2.9.0", - "eslint-plugin-jsx-a11y": "^6.0.3", - "eslint-plugin-prettier": "^2.6.0", - "eslint-plugin-react": "^7.7.0", - "flow-babel-webpack-plugin": "^1.1.1", - "flow-bin": "^0.68.0", - "flow-typed": "^2.3.0", - "husky": "^0.14.3", - "i18n-extract": "^0.5.1", - "json-loader": "^0.5.4", - "lint-staged": "^7.0.0", - "make-runnable": "^1.3.6", - "node-loader": "^0.6.0", - "node-sass": "^4.7.2", - "prettier": "^1.11.1", - "sass-loader": "^6.0.7", - "webpack": "^3.10.0", - "webpack-build-notifier": "^0.1.23" - }, - "engines": { - "node": ">=6", - "yarn": "^1.3" - }, - "lbrySettings": { - "lbrynetDaemonVersion": "0.19.1", - "lbrynetDaemonUrlTemplate": "https://github.com/lbryio/lbry/releases/download/vDAEMONVER/lbrynet-daemon-vDAEMONVER-OSNAME.zip", - "lbrynetDaemonDir": "static/daemon", - "lbrynetDaemonFileName": "lbrynet-daemon" - } - } - -yarn manifest: - No manifest - -Lockfile: - # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. - # yarn lockfile v1 - - - "7zip-bin-linux@~1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/7zip-bin-linux/-/7zip-bin-linux-1.3.1.tgz#4856db1ab1bf5b6ee8444f93f5a8ad71446d00d5" - - "7zip-bin-mac@~1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/7zip-bin-mac/-/7zip-bin-mac-1.0.1.tgz#3e68778bbf0926adc68159427074505d47555c02" - - "7zip-bin-win@~2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/7zip-bin-win/-/7zip-bin-win-2.2.0.tgz#0b81c43e911100f3ece2ebac4f414ca95a572d5b" - - "7zip-bin@~3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-3.1.0.tgz#70814c6b6d44fef8b74be6fc64d3977a2eff59a5" - optionalDependencies: - "7zip-bin-linux" "~1.3.1" - "7zip-bin-mac" "~1.0.1" - "7zip-bin-win" "~2.2.0" - - "7zip@0.0.6": - version "0.0.6" - resolved "https://registry.yarnpkg.com/7zip/-/7zip-0.0.6.tgz#9cafb171af82329490353b4816f03347aa150a30" - - "@babel/code-frame@7.0.0-beta.42", "@babel/code-frame@^7.0.0-beta.35", "@babel/code-frame@^7.0.0-beta.40": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.42.tgz#a9c83233fa7cd06b39dc77adbb908616ff4f1962" - dependencies: - "@babel/highlight" "7.0.0-beta.42" - - "@babel/generator@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.42.tgz#777bb50f39c94a7e57f73202d833141f8159af33" - dependencies: - "@babel/types" "7.0.0-beta.42" - jsesc "^2.5.1" - lodash "^4.2.0" - source-map "^0.5.0" - trim-right "^1.0.1" - - "@babel/helper-function-name@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.42.tgz#b38b8f4f85168d1812c543dd700b5d549b0c4658" - dependencies: - "@babel/helper-get-function-arity" "7.0.0-beta.42" - "@babel/template" "7.0.0-beta.42" - "@babel/types" "7.0.0-beta.42" - - "@babel/helper-get-function-arity@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.42.tgz#ad072e32f912c033053fc80478169aeadc22191e" - dependencies: - "@babel/types" "7.0.0-beta.42" - - "@babel/helper-module-imports@7.0.0-beta.35": - version "7.0.0-beta.35" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.35.tgz#308e350e731752cdb4d0f058df1d704925c64e0a" - dependencies: - "@babel/types" "7.0.0-beta.35" - lodash "^4.2.0" - - "@babel/helper-split-export-declaration@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.42.tgz#0d0d5254220a9cc4e7e226240306b939dc210ee7" - dependencies: - "@babel/types" "7.0.0-beta.42" - - "@babel/highlight@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.42.tgz#a502a1c0d6f99b2b0e81d468a1b0c0e81e3f3623" - dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^3.0.0" - - "@babel/template@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.42.tgz#7186d4e70d44cdec975049ba0a73bdaf5cdee052" - dependencies: - "@babel/code-frame" "7.0.0-beta.42" - "@babel/types" "7.0.0-beta.42" - babylon "7.0.0-beta.42" - lodash "^4.2.0" - - "@babel/traverse@^7.0.0-beta.40": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.42.tgz#f4bf4d1e33d41baf45205e2d0463591d57326285" - dependencies: - "@babel/code-frame" "7.0.0-beta.42" - "@babel/generator" "7.0.0-beta.42" - "@babel/helper-function-name" "7.0.0-beta.42" - "@babel/helper-split-export-declaration" "7.0.0-beta.42" - "@babel/types" "7.0.0-beta.42" - babylon "7.0.0-beta.42" - debug "^3.1.0" - globals "^11.1.0" - invariant "^2.2.0" - lodash "^4.2.0" - - "@babel/types@7.0.0-beta.35": - version "7.0.0-beta.35" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.35.tgz#cf933a9a9a38484ca724b335b88d83726d5ab960" - dependencies: - esutils "^2.0.2" - lodash "^4.2.0" - to-fast-properties "^2.0.0" - - "@babel/types@7.0.0-beta.42", "@babel/types@^7.0.0-beta.40": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.42.tgz#1e2118767684880f6963801b272fd2b3348efacc" - dependencies: - esutils "^2.0.2" - lodash "^4.2.0" - to-fast-properties "^2.0.0" - - "@types/node@^7.0.18": - version "7.0.56" - resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.56.tgz#b6b659049191822be43c14610c1785d4b9cddecf" - - "@types/webpack-env@^1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.13.5.tgz#ca854e9fbdbcdf45d7376882875f28e2c60593f8" - - abab@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" - - abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - - accepts@~1.3.4, accepts@~1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" - dependencies: - mime-types "~2.1.18" - negotiator "0.6.1" - - accessibility-developer-tools@^2.11.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/accessibility-developer-tools/-/accessibility-developer-tools-2.12.0.tgz#3da0cce9d6ec6373964b84f35db7cfc3df7ab514" - - acorn-dynamic-import@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" - dependencies: - acorn "^4.0.3" - - acorn-globals@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538" - dependencies: - acorn "^5.0.0" - - acorn-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" - dependencies: - acorn "^3.0.4" - - acorn@^3.0.4: - version "3.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" - - acorn@^4.0.3: - version "4.0.13" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" - - acorn@^5.0.0, acorn@^5.2.1, acorn@^5.3.0, acorn@^5.5.0: - version "5.5.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9" - - ajv-keywords@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" - - ajv-keywords@^3.0.0, ajv-keywords@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.1.0.tgz#ac2b27939c543e95d2c06e7f7f5c27be4aa543be" - - ajv@^4.9.1: - version "4.11.8" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" - dependencies: - co "^4.6.0" - json-stable-stringify "^1.0.1" - - ajv@^5.0.0, ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0: - version "5.5.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" - dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" - - ajv@^6.0.1, ajv@^6.1.0, ajv@^6.1.1: - version "6.3.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.3.0.tgz#1650a41114ef00574cac10b8032d8f4c14812da7" - dependencies: - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" - - align-text@^0.1.1, align-text@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" - dependencies: - kind-of "^3.0.2" - longest "^1.0.1" - repeat-string "^1.5.2" - - alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - - amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - - ansi-align@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" - dependencies: - string-width "^2.0.0" - - ansi-escapes@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" - - ansi-escapes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" - - ansi-html@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" - - ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - - ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - - ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - - ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - dependencies: - color-convert "^1.9.0" - - any-observable@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.2.0.tgz#c67870058003579009083f54ac0abafb5c33d242" - - anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - - app-builder-bin-linux@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/app-builder-bin-linux/-/app-builder-bin-linux-1.7.2.tgz#a764c8e52ecf1b5b068f32c820c6daf1ffed6a8f" - - app-builder-bin-linux@1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/app-builder-bin-linux/-/app-builder-bin-linux-1.8.1.tgz#10e9d344ff8019dbc708e11eca13db91f36607e2" - - app-builder-bin-mac@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/app-builder-bin-mac/-/app-builder-bin-mac-1.7.2.tgz#c4ee0d950666c97c12a45ac74ec6396be3357644" - - app-builder-bin-mac@1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/app-builder-bin-mac/-/app-builder-bin-mac-1.8.1.tgz#0f3d8ddb3b502cadeebc6db24593a74cd87138d0" - - app-builder-bin-win@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/app-builder-bin-win/-/app-builder-bin-win-1.7.2.tgz#7acac890782f4118f09941b343ba06c56452a6f6" - - app-builder-bin-win@1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/app-builder-bin-win/-/app-builder-bin-win-1.8.1.tgz#866ebd5f724143b8f55d365f88c22e221425fa1d" - - app-builder-bin@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-1.7.2.tgz#daf67060a6bad8f5f611a0d2876d9db897a83f06" - optionalDependencies: - app-builder-bin-linux "1.7.2" - app-builder-bin-mac "1.7.2" - app-builder-bin-win "1.7.2" - - app-builder-bin@1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-1.8.1.tgz#12c795c5203e59c6927816b2429b340667f634e8" - optionalDependencies: - app-builder-bin-linux "1.8.1" - app-builder-bin-mac "1.8.1" - app-builder-bin-win "1.8.1" - - app-root-path@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46" - - aproba@^1.0.3, aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - - are-we-there-yet@~1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - - argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - dependencies: - sprintf-js "~1.0.2" - - aria-query@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.7.1.tgz#26cbb5aff64144b0a825be1846e0b16cfa00b11e" - dependencies: - ast-types-flow "0.0.7" - commander "^2.11.0" - - arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - dependencies: - arr-flatten "^1.0.1" - - arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - - arr-flatten@^1.0.1, arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - - arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - - array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - - array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - - array-find@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-find/-/array-find-1.0.0.tgz#6c8e286d11ed768327f8e62ecee87353ca3e78b8" - - array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - - array-flatten@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296" - - array-includes@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.7.0" - - array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - dependencies: - array-uniq "^1.0.1" - - array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - - array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - - array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - - arrify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - - asap@~2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - - asn1.js@^4.0.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - - asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" - - assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - - assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" - - assert@^1.1.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" - dependencies: - util "0.10.3" - - assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - - ast-types-flow@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" - - ast-types@0.9.6: - version "0.9.6" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" - - async-each@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" - - async-exit-hook@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/async-exit-hook/-/async-exit-hook-2.0.1.tgz#8bd8b024b0ec9b1c01cccb9af9db29bd717dfaf3" - - async-foreach@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" - - async-limiter@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" - - async@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - - async@^2.1.2, async@^2.4.1: - version "2.6.0" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" - dependencies: - lodash "^4.14.0" - - asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - - atob@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.0.3.tgz#19c7a760473774468f20b2d2d03372ad7d4cbf5d" - - autoprefixer@^6.3.1: - version "6.7.7" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" - dependencies: - browserslist "^1.7.6" - caniuse-db "^1.0.30000634" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^5.2.16" - postcss-value-parser "^3.2.3" - - aws-sdk@^2.212.1: - version "2.212.1" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.212.1.tgz#833dbe8d837d46058a3772ac9bb73b69113136e4" - dependencies: - buffer "4.9.1" - events "1.1.1" - ieee754 "1.1.8" - jmespath "0.15.0" - querystring "0.2.0" - sax "1.2.1" - url "0.10.3" - uuid "3.1.0" - xml2js "0.4.17" - xmlbuilder "4.2.1" - - aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" - - aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - - aws4@^1.2.1, aws4@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" - - axios@^0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.0.tgz#32d53e4851efdc0a11993b6cd000789d70c05102" - dependencies: - follow-redirects "^1.3.0" - is-buffer "^1.1.5" - - axobject-query@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0" - dependencies: - ast-types-flow "0.0.7" - - babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - - babel-core@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" - dependencies: - babel-code-frame "^6.26.0" - babel-generator "^6.26.0" - babel-helpers "^6.24.1" - babel-messages "^6.23.0" - babel-register "^6.26.0" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - convert-source-map "^1.5.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@^8.2.2: - version "8.2.2" - resolved "http://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.2.tgz#1102273354c6f0b29b4ea28a65f97d122296b68b" - dependencies: - "@babel/code-frame" "^7.0.0-beta.40" - "@babel/traverse" "^7.0.0-beta.40" - "@babel/types" "^7.0.0-beta.40" - babylon "^7.0.0-beta.40" - eslint-scope "~3.7.1" - eslint-visitor-keys "^1.0.0" - - babel-generator@^6.26.0: - version "6.26.1" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" - dependencies: - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.17.4" - source-map "^0.5.7" - trim-right "^1.0.1" - - babel-helper-bindify-decorators@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330" - dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - - babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" - dependencies: - babel-helper-explode-assignable-expression "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - - babel-helper-builder-react-jsx@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" - dependencies: - babel-runtime "^6.26.0" - babel-types "^6.26.0" - esutils "^2.0.2" - - babel-helper-call-delegate@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - - babel-helper-define-map@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - - babel-helper-explode-assignable-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" - dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - - babel-helper-explode-class@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb" - dependencies: - babel-helper-bindify-decorators "^6.24.1" - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - - babel-helper-function-name@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" - dependencies: - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - - babel-helper-get-function-arity@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - - babel-helper-hoist-variables@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - - babel-helper-optimise-call-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - - babel-helper-regex@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" - dependencies: - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - - babel-helper-remap-async-to-generator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - - babel-helper-replace-supers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" - dependencies: - babel-helper-optimise-call-expression "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - - babel-helpers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - - babel-loader@^7.1.2: - version "7.1.4" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.4.tgz#e3463938bd4e6d55d1c174c5485d406a188ed015" - dependencies: - find-cache-dir "^1.0.0" - loader-utils "^1.0.2" - mkdirp "^0.5.1" - - babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - dependencies: - babel-runtime "^6.22.0" - - babel-plugin-check-es2015-constants@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" - dependencies: - babel-runtime "^6.22.0" - - babel-plugin-component@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-component/-/babel-plugin-component-1.1.0.tgz#74fa3446814bca990f52bcad6700465361b011b7" - dependencies: - "@babel/helper-module-imports" "7.0.0-beta.35" - - babel-plugin-module-resolver@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.1.0.tgz#cf7868bd2c1818f855aede16141009b87dd1f95b" - dependencies: - find-babel-config "^1.1.0" - glob "^7.1.2" - pkg-up "^2.0.0" - reselect "^3.0.1" - resolve "^1.4.0" - - babel-plugin-syntax-async-functions@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" - - babel-plugin-syntax-async-generators@^6.5.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" - - babel-plugin-syntax-class-properties@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" - - babel-plugin-syntax-decorators@^6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" - - babel-plugin-syntax-dynamic-import@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" - - babel-plugin-syntax-exponentiation-operator@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" - - babel-plugin-syntax-flow@^6.18.0, babel-plugin-syntax-flow@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" - - babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" - - babel-plugin-syntax-object-rest-spread@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" - - babel-plugin-syntax-trailing-function-commas@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" - - babel-plugin-transform-async-generator-functions@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" - dependencies: - babel-helper-remap-async-to-generator "^6.24.1" - babel-plugin-syntax-async-generators "^6.5.0" - babel-runtime "^6.22.0" - - babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async-to-generator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" - dependencies: - babel-helper-remap-async-to-generator "^6.24.1" - babel-plugin-syntax-async-functions "^6.8.0" - babel-runtime "^6.22.0" - - babel-plugin-transform-class-properties@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" - dependencies: - babel-helper-function-name "^6.24.1" - babel-plugin-syntax-class-properties "^6.8.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - - babel-plugin-transform-decorators@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" - dependencies: - babel-helper-explode-class "^6.24.1" - babel-plugin-syntax-decorators "^6.13.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-types "^6.24.1" - - babel-plugin-transform-es2015-arrow-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" - dependencies: - babel-runtime "^6.22.0" - - babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" - dependencies: - babel-runtime "^6.22.0" - - babel-plugin-transform-es2015-block-scoping@^6.23.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" - dependencies: - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - - babel-plugin-transform-es2015-classes@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" - dependencies: - 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.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - - babel-plugin-transform-es2015-computed-properties@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - - babel-plugin-transform-es2015-destructuring@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" - dependencies: - babel-runtime "^6.22.0" - - babel-plugin-transform-es2015-duplicate-keys@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - - babel-plugin-transform-es2015-for-of@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" - dependencies: - babel-runtime "^6.22.0" - - babel-plugin-transform-es2015-function-name@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - - babel-plugin-transform-es2015-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" - dependencies: - babel-runtime "^6.22.0" - - babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" - dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - - babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" - dependencies: - babel-plugin-transform-strict-mode "^6.24.1" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-types "^6.26.0" - - babel-plugin-transform-es2015-modules-systemjs@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - - babel-plugin-transform-es2015-modules-umd@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" - dependencies: - babel-plugin-transform-es2015-modules-amd "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - - babel-plugin-transform-es2015-object-super@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" - dependencies: - babel-helper-replace-supers "^6.24.1" - babel-runtime "^6.22.0" - - babel-plugin-transform-es2015-parameters@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" - dependencies: - babel-helper-call-delegate "^6.24.1" - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - - babel-plugin-transform-es2015-shorthand-properties@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - - babel-plugin-transform-es2015-spread@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" - dependencies: - babel-runtime "^6.22.0" - - babel-plugin-transform-es2015-sticky-regex@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - - babel-plugin-transform-es2015-template-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" - dependencies: - babel-runtime "^6.22.0" - - babel-plugin-transform-es2015-typeof-symbol@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" - dependencies: - babel-runtime "^6.22.0" - - babel-plugin-transform-es2015-unicode-regex@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - regexpu-core "^2.0.0" - - babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-exponentiation-operator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" - dependencies: - babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" - babel-plugin-syntax-exponentiation-operator "^6.8.0" - babel-runtime "^6.22.0" - - babel-plugin-transform-flow-comments@^6.17.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-comments/-/babel-plugin-transform-flow-comments-6.22.0.tgz#8d9491132f2b48abd0656f96c20f3bbd6fc17529" - dependencies: - babel-plugin-syntax-flow "^6.8.0" - babel-runtime "^6.22.0" - - babel-plugin-transform-flow-strip-types@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" - dependencies: - babel-plugin-syntax-flow "^6.18.0" - babel-runtime "^6.22.0" - - babel-plugin-transform-object-rest-spread@^6.22.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" - dependencies: - babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-runtime "^6.26.0" - - babel-plugin-transform-react-display-name@^6.23.0: - version "6.25.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" - dependencies: - babel-runtime "^6.22.0" - - babel-plugin-transform-react-jsx-self@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e" - dependencies: - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" - - babel-plugin-transform-react-jsx-source@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" - dependencies: - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" - - babel-plugin-transform-react-jsx@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" - dependencies: - babel-helper-builder-react-jsx "^6.24.1" - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" - - babel-plugin-transform-regenerator@^6.22.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" - dependencies: - regenerator-transform "^0.10.0" - - babel-plugin-transform-strict-mode@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - - babel-polyfill@^6.20.0, babel-polyfill@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" - dependencies: - babel-runtime "^6.26.0" - core-js "^2.5.0" - regenerator-runtime "^0.10.5" - - babel-preset-env@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48" - dependencies: - babel-plugin-check-es2015-constants "^6.22.0" - babel-plugin-syntax-trailing-function-commas "^6.22.0" - babel-plugin-transform-async-to-generator "^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.23.0" - babel-plugin-transform-es2015-classes "^6.23.0" - babel-plugin-transform-es2015-computed-properties "^6.22.0" - babel-plugin-transform-es2015-destructuring "^6.23.0" - babel-plugin-transform-es2015-duplicate-keys "^6.22.0" - babel-plugin-transform-es2015-for-of "^6.23.0" - babel-plugin-transform-es2015-function-name "^6.22.0" - babel-plugin-transform-es2015-literals "^6.22.0" - babel-plugin-transform-es2015-modules-amd "^6.22.0" - babel-plugin-transform-es2015-modules-commonjs "^6.23.0" - babel-plugin-transform-es2015-modules-systemjs "^6.23.0" - babel-plugin-transform-es2015-modules-umd "^6.23.0" - babel-plugin-transform-es2015-object-super "^6.22.0" - babel-plugin-transform-es2015-parameters "^6.23.0" - babel-plugin-transform-es2015-shorthand-properties "^6.22.0" - babel-plugin-transform-es2015-spread "^6.22.0" - babel-plugin-transform-es2015-sticky-regex "^6.22.0" - 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.22.0" - babel-plugin-transform-exponentiation-operator "^6.22.0" - babel-plugin-transform-regenerator "^6.22.0" - browserslist "^2.1.2" - invariant "^2.2.2" - semver "^5.3.0" - - babel-preset-flow@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d" - dependencies: - babel-plugin-transform-flow-strip-types "^6.22.0" - - babel-preset-react@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" - dependencies: - babel-plugin-syntax-jsx "^6.3.13" - babel-plugin-transform-react-display-name "^6.23.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-stage-2@^6.18.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1" - dependencies: - 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@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" - dependencies: - 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.22.0" - - babel-register@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" - dependencies: - babel-core "^6.26.0" - babel-runtime "^6.26.0" - core-js "^2.5.0" - home-or-tmp "^2.0.0" - lodash "^4.17.4" - mkdirp "^0.5.1" - source-map-support "^0.4.15" - - babel-runtime@6.x, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - - babel-template@^6.24.1, babel-template@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" - dependencies: - babel-runtime "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - lodash "^4.17.4" - - babel-traverse@^6.24.1, babel-traverse@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" - dependencies: - babel-code-frame "^6.26.0" - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - debug "^2.6.8" - globals "^9.18.0" - invariant "^2.2.2" - lodash "^4.17.4" - - babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" - dependencies: - babel-runtime "^6.26.0" - esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" - - babylon@7.0.0-beta.42, babylon@^7.0.0-beta.40: - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.42.tgz#67cfabcd4f3ec82999d29031ccdea89d0ba99657" - - babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - - balanced-match@^0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" - - balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - - base62@^1.1.0: - version "1.2.7" - resolved "https://registry.yarnpkg.com/base62/-/base62-1.2.7.tgz#5c01aad73c0124f9535cff1bdb9c4e6ccf838cfb" - - base64-js@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978" - - base64-js@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" - - base64-js@^1.0.2, base64-js@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.3.tgz#fb13668233d9614cf5fb4bce95a9ba4096cdf801" - - base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - - batch@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - - bcrypt-pbkdf@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" - dependencies: - tweetnacl "^0.14.3" - - big-integer@^1.6.17: - version "1.6.27" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.27.tgz#8e56c6f8b2dd6c4fe8d32102b83d4f25868e4b3a" - - big.js@^3.1.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" - - binary-extensions@^1.0.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" - - binary-search@^1.2.0: - version "1.3.3" - resolved "https://registry.yarnpkg.com/binary-search/-/binary-search-1.3.3.tgz#b5adb6fb279a197be51b1ee8b0fb76fcdc61b429" - - binary@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" - dependencies: - buffers "~0.1.1" - chainsaw "~0.1.0" - - bl@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" - dependencies: - readable-stream "^2.3.5" - safe-buffer "^5.1.1" - - block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - dependencies: - inherits "~2.0.0" - - bluebird-lst@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/bluebird-lst/-/bluebird-lst-1.0.5.tgz#bebc83026b7e92a72871a3dc599e219cbfb002a9" - dependencies: - bluebird "^3.5.1" - - bluebird@^3.4.7, bluebird@^3.5.0, bluebird@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" - - bluebird@~3.4.1: - version "3.4.7" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" - - bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" - - body-parser@1.18.2: - version "1.18.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" - dependencies: - bytes "3.0.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.1" - http-errors "~1.6.2" - iconv-lite "0.4.19" - on-finished "~2.3.0" - qs "6.5.1" - raw-body "2.3.2" - type-is "~1.6.15" - - bonjour@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" - dependencies: - array-flatten "^2.1.0" - deep-equal "^1.0.1" - dns-equal "^1.0.0" - dns-txt "^2.0.2" - multicast-dns "^6.0.1" - multicast-dns-service-types "^1.1.0" - - boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - - boom@2.x.x: - version "2.10.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" - dependencies: - hoek "2.x.x" - - boom@4.x.x: - version "4.3.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" - dependencies: - hoek "4.x.x" - - boom@5.x.x: - version "5.2.0" - resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" - dependencies: - hoek "4.x.x" - - boxen@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" - dependencies: - ansi-align "^2.0.0" - camelcase "^4.0.0" - chalk "^2.0.1" - cli-boxes "^1.0.0" - string-width "^2.0.0" - term-size "^1.2.0" - widest-line "^2.0.0" - - brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - - braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - - braces@^2.3.0, braces@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.1.tgz#7086c913b4e5a08dbe37ac0ee6a2500c4ba691bb" - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - define-property "^1.0.0" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - kind-of "^6.0.2" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - - brorand@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - - browser-process-hrtime@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" - - browser-resolve@^1.11.2: - version "1.11.2" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" - dependencies: - resolve "1.1.7" - - browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f" - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - - browserify-cipher@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - - browserify-des@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - - browserify-rsa@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - dependencies: - bn.js "^4.1.0" - randombytes "^2.0.1" - - browserify-sign@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" - dependencies: - bn.js "^4.1.1" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.2" - elliptic "^6.0.0" - inherits "^2.0.1" - parse-asn1 "^5.0.0" - - browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - dependencies: - pako "~1.0.5" - - browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: - version "1.7.7" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" - dependencies: - caniuse-db "^1.0.30000639" - electron-to-chromium "^1.2.7" - - browserslist@^2.1.2: - version "2.11.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.3.tgz#fe36167aed1bbcde4827ebfe71347a2cc70b99b2" - dependencies: - caniuse-lite "^1.0.30000792" - electron-to-chromium "^1.3.30" - - buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - - buffer-from@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531" - - buffer-indexof-polyfill@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz#a9fb806ce8145d5428510ce72f278bb363a638bf" - - buffer-indexof@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" - - buffer-shims@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" - - buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - - buffer@4.9.1, buffer@^4.3.0: - version "4.9.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - - buffer@^3.0.1: - version "3.6.0" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-3.6.0.tgz#a72c936f77b96bf52f5f7e7b467180628551defb" - dependencies: - base64-js "0.0.8" - ieee754 "^1.1.4" - isarray "^1.0.0" - - buffers@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" - - builder-util-runtime@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-4.1.0.tgz#7dcd042d555d2f161a5538d7a0ea8c292daa0683" - dependencies: - bluebird-lst "^1.0.5" - debug "^3.1.0" - fs-extra-p "^4.5.2" - sax "^1.2.4" - - builder-util-runtime@4.2.0, builder-util-runtime@^4.1.0, builder-util-runtime@^4.2.0, builder-util-runtime@~4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-4.2.0.tgz#c56aa18d34390143da031c418c9d3a055fbd3522" - dependencies: - bluebird-lst "^1.0.5" - debug "^3.1.0" - fs-extra-p "^4.5.2" - sax "^1.2.4" - - builder-util@5.6.7: - version "5.6.7" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.6.7.tgz#662ff2ba4f70416ee0c085126f16af48fbf97900" - dependencies: - "7zip-bin" "~3.1.0" - app-builder-bin "1.7.2" - bluebird-lst "^1.0.5" - builder-util-runtime "^4.1.0" - chalk "^2.3.2" - debug "^3.1.0" - fs-extra-p "^4.5.2" - is-ci "^1.1.0" - js-yaml "^3.11.0" - lazy-val "^1.0.3" - semver "^5.5.0" - source-map-support "^0.5.4" - stat-mode "^0.2.2" - temp-file "^3.1.1" - - builder-util@5.7.2, builder-util@^5.6.7, builder-util@^5.7.0, builder-util@^5.7.1: - version "5.7.2" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.7.2.tgz#049b4365993f34519c9d56589494cda2257b24d3" - dependencies: - "7zip-bin" "~3.1.0" - app-builder-bin "1.8.1" - bluebird-lst "^1.0.5" - builder-util-runtime "^4.2.0" - chalk "^2.3.2" - debug "^3.1.0" - fs-extra-p "^4.5.2" - is-ci "^1.1.0" - js-yaml "^3.11.0" - lazy-val "^1.0.3" - semver "^5.5.0" - source-map-support "^0.5.4" - stat-mode "^0.2.2" - temp-file "^3.1.1" - - builtin-modules@^1.0.0, builtin-modules@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - - builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - - bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - - cacache@^10.0.4: - version "10.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460" - dependencies: - bluebird "^3.5.1" - chownr "^1.0.1" - glob "^7.1.2" - graceful-fs "^4.1.11" - lru-cache "^4.1.1" - mississippi "^2.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.2" - ssri "^5.2.4" - unique-filename "^1.1.0" - y18n "^4.0.0" - - cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - - caller-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" - dependencies: - callsites "^0.2.0" - - callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" - - callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - - camel-case@3.0.x: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" - dependencies: - no-case "^2.2.0" - upper-case "^1.1.1" - - camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - - camelcase@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" - - camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - - camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - - camelcase@^4.0.0, camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - - caniuse-api@^1.5.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" - dependencies: - browserslist "^1.3.6" - caniuse-db "^1.0.30000529" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - - caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000819" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000819.tgz#c3b7dd559e5e6d63d5dcaa62bac6bd04c7619709" - - caniuse-lite@^1.0.30000792: - version "1.0.30000819" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000819.tgz#aabee5fd15a080febab6ae5d30c9ea15f4c6d4e2" - - capture-stack-trace@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" - - caseless@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" - - caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - - center-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" - dependencies: - align-text "^0.1.3" - lazy-cache "^1.0.3" - - chainsaw@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" - dependencies: - traverse ">=0.3.0 <0.4" - - chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - - chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1, chalk@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65" - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - - chardet@^0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" - - charenc@~0.0.1: - version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - - chokidar@^2.0.0, chokidar@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.2.tgz#4dc65139eeb2714977735b6a35d06e97b494dfd7" - dependencies: - anymatch "^2.0.0" - async-each "^1.0.0" - braces "^2.3.0" - glob-parent "^3.1.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^2.1.1" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - upath "^1.0.0" - optionalDependencies: - fsevents "^1.0.0" - - chownr@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" - - chromium-pickle-js@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205" - - ci-info@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.3.tgz#710193264bb05c77b8c90d02f5aaf22216a667b2" - - cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - - circular-json@^0.3.1: - version "0.3.3" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" - - clap@^1.0.9: - version "1.2.3" - resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" - dependencies: - chalk "^1.1.3" - - class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - - classnames@^2.2.5: - version "2.2.5" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" - - clean-css@4.1.x: - version "4.1.11" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.11.tgz#2ecdf145aba38f54740f26cefd0ff3e03e125d6a" - dependencies: - source-map "0.5.x" - - cli-boxes@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" - - cli-cursor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" - dependencies: - restore-cursor "^1.0.1" - - cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - dependencies: - restore-cursor "^2.0.0" - - cli-spinners@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" - - cli-truncate@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" - dependencies: - slice-ansi "0.0.4" - string-width "^1.0.1" - - cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - - cliui@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" - dependencies: - center-align "^0.1.1" - right-align "^0.1.1" - wordwrap "0.0.2" - - cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - - cliui@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.0.0.tgz#743d4650e05f36d1ed2575b59638d87322bfbbcc" - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi "^2.0.0" - - clone-deep@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-2.0.2.tgz#00db3a1e173656730d1188c3d6aced6d7ea97713" - dependencies: - for-own "^1.0.0" - is-plain-object "^2.0.4" - kind-of "^6.0.0" - shallow-clone "^1.0.0" - - clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - - co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - - coa@~1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" - dependencies: - q "^1.1.2" - - code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - - codemirror-spell-checker@*: - version "1.1.2" - resolved "https://registry.yarnpkg.com/codemirror-spell-checker/-/codemirror-spell-checker-1.1.2.tgz#1c660f9089483ccb5113b9ba9ca19c3f4993371e" - dependencies: - typo-js "*" - - codemirror@*: - version "5.36.0" - resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.36.0.tgz#1172ad9dc298056c06e0b34e5ccd23825ca15b40" - - collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - - color-convert@^1.3.0, color-convert@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" - dependencies: - color-name "^1.1.1" - - color-convert@~0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-0.5.3.tgz#bdb6c69ce660fadffe0b0007cc447e1b9f7282bd" - - color-name@^1.0.0, color-name@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - - color-string@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" - dependencies: - color-name "^1.0.0" - - color@^0.11.0: - version "0.11.4" - resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" - dependencies: - clone "^1.0.2" - color-convert "^1.3.0" - color-string "^0.3.0" - - colormin@^1.0.5: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" - dependencies: - color "^0.11.0" - css-color-names "0.0.4" - has "^1.0.1" - - colors@^1.1.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.2.1.tgz#f4a3d302976aaf042356ba1ade3b1a2c62d9d794" - - colors@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" - - combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" - dependencies: - delayed-stream "~1.0.0" - - commander@2.15.x, commander@^2.11.0, commander@^2.14.1, commander@^2.5.0, commander@^2.9.0, commander@~2.15.0: - version "2.15.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" - - commander@~2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" - - commander@~2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" - dependencies: - graceful-readlink ">= 1.0.0" - - commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - - commoner@^0.10.1: - version "0.10.8" - resolved "https://registry.yarnpkg.com/commoner/-/commoner-0.10.8.tgz#34fc3672cd24393e8bb47e70caa0293811f4f2c5" - dependencies: - commander "^2.5.0" - detective "^4.3.1" - glob "^5.0.15" - graceful-fs "^4.1.2" - iconv-lite "^0.4.5" - mkdirp "^0.5.0" - private "^0.1.6" - q "^1.1.2" - recast "^0.11.17" - - commonmark-react-renderer@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/commonmark-react-renderer/-/commonmark-react-renderer-4.3.4.tgz#29f345357951ab36eb386d45ea6bc08006f3ff9b" - dependencies: - lodash.assign "^4.2.0" - lodash.isplainobject "^4.0.6" - pascalcase "^0.1.1" - xss-filters "^1.2.6" - - commonmark@^0.24.0: - version "0.24.0" - resolved "https://registry.yarnpkg.com/commonmark/-/commonmark-0.24.0.tgz#b80de0182c546355643aa15db12bfb282368278f" - dependencies: - entities "~ 1.1.1" - mdurl "~ 1.0.1" - string.prototype.repeat "^0.2.0" - - compare-version@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/compare-version/-/compare-version-0.1.2.tgz#0162ec2d9351f5ddd59a9202cba935366a725080" - - component-emitter@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - - compressible@~2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.13.tgz#0d1020ab924b2fdb4d6279875c7d6daba6baa7a9" - dependencies: - mime-db ">= 1.33.0 < 2" - - compression@^1.5.2: - version "1.7.2" - resolved "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz#aaffbcd6aaf854b44ebb280353d5ad1651f59a69" - dependencies: - accepts "~1.3.4" - bytes "3.0.0" - compressible "~2.0.13" - debug "2.6.9" - on-headers "~1.0.1" - safe-buffer "5.1.1" - vary "~1.1.2" - - concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - - concat-stream@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" - dependencies: - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - - concat-stream@^1.5.0, concat-stream@^1.6.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - - configstore@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.1.tgz#094ee662ab83fad9917678de114faaea8fcdca90" - dependencies: - dot-prop "^4.1.0" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - unique-string "^1.0.0" - write-file-atomic "^2.0.0" - xdg-basedir "^3.0.0" - - connect-history-api-fallback@^1.3.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" - - console-browserify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" - dependencies: - date-now "^0.1.4" - - console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - - constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - - contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - - content-disposition@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" - - content-type-parser@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7" - - content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - - convert-source-map@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" - - cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - - cookie@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" - - copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - - copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - - core-js@^1.0.0: - version "1.2.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" - - core-js@^2.4.0, core-js@^2.5.0: - version "2.5.3" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e" - - core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - - cosmiconfig@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc" - dependencies: - is-directory "^0.3.1" - js-yaml "^3.9.0" - parse-json "^4.0.0" - require-from-string "^2.0.1" - - country-data@^0.0.31: - version "0.0.31" - resolved "https://registry.yarnpkg.com/country-data/-/country-data-0.0.31.tgz#80966b8e1d147fa6d6a589d32933f8793774956d" - dependencies: - currency-symbol-map "~2" - underscore ">1.4.4" - - create-ecdh@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" - dependencies: - bn.js "^4.1.0" - elliptic "^6.0.0" - - create-error-class@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" - dependencies: - capture-stack-trace "^1.0.0" - - create-hash@^1.1.0, create-hash@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd" - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - ripemd160 "^2.0.0" - sha.js "^2.4.0" - - create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: - version "1.1.6" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06" - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - - crocket@^0.9.11: - version "0.9.11" - resolved "https://registry.yarnpkg.com/crocket/-/crocket-0.9.11.tgz#288fca11ef0d3dd239b62c488265f30c8edfb0c5" - dependencies: - xpipe "*" - - cross-spawn@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" - dependencies: - lru-cache "^4.0.1" - which "^1.2.9" - - cross-spawn@^5.0.1, cross-spawn@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - - cross-unzip@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/cross-unzip/-/cross-unzip-0.0.2.tgz#5183bc47a09559befcf98cc4657964999359372f" - - crypt@~0.0.1: - version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - - cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" - dependencies: - boom "2.x.x" - - cryptiles@3.x.x: - version "3.1.2" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" - dependencies: - boom "5.x.x" - - crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - - crypto-random-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - - css-color-names@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - - css-hot-loader@^1.3.7: - version "1.3.8" - resolved "https://registry.yarnpkg.com/css-hot-loader/-/css-hot-loader-1.3.8.tgz#edc17f9a24c8e2254c1c570e3779257489aa53f6" - dependencies: - loader-utils "^1.1.0" - lodash "^4.17.5" - normalize-url "^1.9.1" - - css-loader@^0.28.9: - version "0.28.11" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.11.tgz#c3f9864a700be2711bb5a2462b2389b1a392dab7" - dependencies: - babel-code-frame "^6.26.0" - css-selector-tokenizer "^0.7.0" - cssnano "^3.10.0" - icss-utils "^2.1.0" - loader-utils "^1.0.2" - lodash.camelcase "^4.3.0" - object-assign "^4.1.1" - postcss "^5.0.6" - postcss-modules-extract-imports "^1.2.0" - postcss-modules-local-by-default "^1.2.0" - postcss-modules-scope "^1.1.0" - postcss-modules-values "^1.3.0" - postcss-value-parser "^3.3.0" - source-list-map "^2.0.0" - - css-select@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - - css-selector-tokenizer@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86" - dependencies: - cssesc "^0.1.0" - fastparse "^1.1.1" - regexpu-core "^1.0.0" - - css-what@2.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" - - cssesc@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" - - cssnano@^3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" - dependencies: - autoprefixer "^6.3.1" - decamelize "^1.1.2" - defined "^1.0.0" - has "^1.0.1" - object-assign "^4.0.1" - postcss "^5.0.14" - postcss-calc "^5.2.0" - postcss-colormin "^2.1.8" - postcss-convert-values "^2.3.4" - postcss-discard-comments "^2.0.4" - postcss-discard-duplicates "^2.0.1" - postcss-discard-empty "^2.0.1" - postcss-discard-overridden "^0.1.1" - postcss-discard-unused "^2.2.1" - postcss-filter-plugins "^2.0.0" - postcss-merge-idents "^2.1.5" - postcss-merge-longhand "^2.0.1" - postcss-merge-rules "^2.0.3" - postcss-minify-font-values "^1.0.2" - postcss-minify-gradients "^1.0.1" - postcss-minify-params "^1.0.4" - postcss-minify-selectors "^2.0.4" - postcss-normalize-charset "^1.1.0" - postcss-normalize-url "^3.0.7" - postcss-ordered-values "^2.1.0" - postcss-reduce-idents "^2.2.2" - postcss-reduce-initial "^1.0.0" - postcss-reduce-transforms "^1.0.3" - postcss-svgo "^2.1.1" - postcss-unique-selectors "^2.0.2" - postcss-value-parser "^3.2.3" - postcss-zindex "^2.0.1" - - csso@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" - dependencies: - clap "^1.0.9" - source-map "^0.5.3" - - cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": - version "0.3.2" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" - - "cssstyle@>= 0.2.37 < 0.3.0": - version "0.2.37" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" - dependencies: - cssom "0.3.x" - - currency-symbol-map@~2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/currency-symbol-map/-/currency-symbol-map-2.2.0.tgz#2b3c1872ff1ac2ce595d8273e58e1fff0272aea2" - - currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - dependencies: - array-find-index "^1.0.1" - - cyclist@~0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" - - d@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" - dependencies: - es5-ext "^0.10.9" - - damerau-levenshtein@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" - - dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - dependencies: - assert-plus "^1.0.0" - - date-fns@^1.27.2: - version "1.29.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" - - date-now@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" - - debug@2.6.9, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - dependencies: - ms "2.0.0" - - debug@^3.0.0, debug@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - dependencies: - ms "2.0.0" - - decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - - decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - - decompress-response@^3.2.0, decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - dependencies: - mimic-response "^1.0.0" - - decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1" - dependencies: - file-type "^5.2.0" - is-stream "^1.1.0" - tar-stream "^1.5.2" - - decompress-tarbz2@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz#3082a5b880ea4043816349f378b56c516be1a39b" - dependencies: - decompress-tar "^4.1.0" - file-type "^6.1.0" - is-stream "^1.1.0" - seek-bzip "^1.0.5" - unbzip2-stream "^1.0.9" - - decompress-targz@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/decompress-targz/-/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee" - dependencies: - decompress-tar "^4.1.1" - file-type "^5.2.0" - is-stream "^1.1.0" - - decompress-unzip@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/decompress-unzip/-/decompress-unzip-4.0.1.tgz#deaaccdfd14aeaf85578f733ae8210f9b4848f69" - dependencies: - file-type "^3.8.0" - get-stream "^2.2.0" - pify "^2.3.0" - yauzl "^2.4.2" - - decompress@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/decompress/-/decompress-4.2.0.tgz#7aedd85427e5a92dacfe55674a7c505e96d01f9d" - dependencies: - decompress-tar "^4.0.0" - decompress-tarbz2 "^4.0.0" - decompress-targz "^4.0.0" - decompress-unzip "^4.0.1" - graceful-fs "^4.1.10" - make-dir "^1.0.0" - pify "^2.3.0" - strip-dirs "^2.0.0" - - dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - - deep-diff@^0.3.5: - version "0.3.8" - resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.8.tgz#c01de63efb0eec9798801d40c7e0dae25b582c84" - - deep-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - - deep-extend@~0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" - - deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - - define-properties@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" - dependencies: - foreach "^2.0.5" - object-keys "^1.0.8" - - define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - dependencies: - is-descriptor "^0.1.0" - - define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - dependencies: - is-descriptor "^1.0.0" - - define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - - defined@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - - del@^2.0.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" - dependencies: - globby "^5.0.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - rimraf "^2.2.8" - - del@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" - dependencies: - globby "^6.1.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - p-map "^1.1.1" - pify "^3.0.0" - rimraf "^2.2.8" - - delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - - delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - - depd@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" - - depd@~1.1.1, depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - - des.js@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - - destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - - detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - dependencies: - repeating "^2.0.0" - - detect-libc@^1.0.2, detect-libc@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - - detect-node@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127" - - detective@^4.3.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/detective/-/detective-4.7.1.tgz#0eca7314338442febb6d65da54c10bb1c82b246e" - dependencies: - acorn "^5.2.1" - defined "^1.0.0" - - devtron@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/devtron/-/devtron-1.4.0.tgz#b5e748bd6e95bbe70bfcc68aae6fe696119441e1" - dependencies: - accessibility-developer-tools "^2.11.0" - highlight.js "^9.3.0" - humanize-plus "^1.8.1" - - diff@^3.2.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - - diffie-hellman@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - - dmg-builder@4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-4.1.3.tgz#d336cf398fd331b2dedd7efae4b51b9bfe00aa1c" - dependencies: - bluebird-lst "^1.0.5" - builder-util "^5.7.0" - electron-builder-lib "~20.6.2" - fs-extra-p "^4.5.2" - iconv-lite "^0.4.19" - js-yaml "^3.11.0" - parse-color "^1.0.0" - sanitize-filename "^1.6.1" - - dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - - dns-packet@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" - dependencies: - ip "^1.1.0" - safe-buffer "^5.0.1" - - dns-txt@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" - dependencies: - buffer-indexof "^1.0.0" - - doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - - doctrine@^2.0.2, doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - dependencies: - esutils "^2.0.2" - - dom-converter@~0.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz#a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b" - dependencies: - utila "~0.3" - - dom-serializer@0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" - dependencies: - domelementtype "~1.1.1" - entities "~1.1.1" - - dom-walk@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" - - domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - - domelementtype@1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" - - domelementtype@~1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" - - domexception@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" - dependencies: - webidl-conversions "^4.0.2" - - domhandler@2.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594" - dependencies: - domelementtype "1" - - domutils@1.1: - version "1.1.6" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" - dependencies: - domelementtype "1" - - domutils@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - dependencies: - dom-serializer "0" - domelementtype "1" - - dot-prop@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - dependencies: - is-obj "^1.0.0" - - dotenv-expand@^4.0.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-4.2.0.tgz#def1f1ca5d6059d24a766e587942c21106ce1275" - - dotenv@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" - - duplexer2@~0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" - dependencies: - readable-stream "^2.0.2" - - duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - - duplexify@^3.4.2, duplexify@^3.5.3: - version "3.5.4" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.4.tgz#4bb46c1796eabebeec4ca9a2e66b808cb7a3d8b4" - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - - ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" - dependencies: - jsbn "~0.1.0" - - ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - - ejs@^2.5.7: - version "2.5.7" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.7.tgz#cc872c168880ae3c7189762fd5ffc00896c9518a" - - electron-builder-lib@20.7.1: - version "20.7.1" - resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.7.1.tgz#c1d5abe0ed42606dcf92e46d4fdedc09f6d21ee3" - dependencies: - "7zip-bin" "~3.1.0" - app-builder-bin "1.8.1" - async-exit-hook "^2.0.1" - bluebird-lst "^1.0.5" - builder-util "5.7.2" - builder-util-runtime "4.2.0" - chromium-pickle-js "^0.2.0" - debug "^3.1.0" - ejs "^2.5.7" - electron-osx-sign "0.4.10" - electron-publish "20.7.0" - fs-extra-p "^4.5.2" - hosted-git-info "^2.6.0" - is-ci "^1.1.0" - isbinaryfile "^3.0.2" - js-yaml "^3.11.0" - lazy-val "^1.0.3" - minimatch "^3.0.4" - normalize-package-data "^2.4.0" - plist "^3.0.1" - read-config-file "3.0.0" - sanitize-filename "^1.6.1" - semver "^5.5.0" - temp-file "^3.1.1" - - electron-builder-lib@~20.6.2: - version "20.6.2" - resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.6.2.tgz#34f38b6172c05f90d34b6b5ed2f2b6922e731a39" - dependencies: - "7zip-bin" "~3.1.0" - app-builder-bin "1.7.2" - async-exit-hook "^2.0.1" - bluebird-lst "^1.0.5" - builder-util "5.6.7" - builder-util-runtime "4.1.0" - chromium-pickle-js "^0.2.0" - debug "^3.1.0" - ejs "^2.5.7" - electron-osx-sign "0.4.10" - electron-publish "20.6.1" - fs-extra-p "^4.5.2" - hosted-git-info "^2.6.0" - is-ci "^1.1.0" - isbinaryfile "^3.0.2" - js-yaml "^3.11.0" - lazy-val "^1.0.3" - minimatch "^3.0.4" - normalize-package-data "^2.4.0" - plist "^2.1.0" - read-config-file "3.0.0" - sanitize-filename "^1.6.1" - semver "^5.5.0" - temp-file "^3.1.1" - - electron-builder@^20.7.1: - version "20.7.1" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-20.7.1.tgz#209eac9892a8f97e9e0ec312e9c50c4e7c0b4758" - dependencies: - bluebird-lst "^1.0.5" - builder-util "5.7.2" - builder-util-runtime "4.2.0" - chalk "^2.3.2" - dmg-builder "4.1.3" - electron-builder-lib "20.7.1" - electron-download-tf "4.3.4" - fs-extra-p "^4.5.2" - is-ci "^1.1.0" - lazy-val "^1.0.3" - read-config-file "3.0.0" - sanitize-filename "^1.6.1" - update-notifier "^2.3.0" - yargs "^11.0.0" - - electron-devtools-installer@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/electron-devtools-installer/-/electron-devtools-installer-2.2.3.tgz#58b9a4ec507377bc46e091cd43714188e0c369be" - dependencies: - "7zip" "0.0.6" - cross-unzip "0.0.2" - rimraf "^2.5.2" - semver "^5.3.0" - - electron-dl@^1.11.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/electron-dl/-/electron-dl-1.11.0.tgz#112851f3857bb1a556b5c736af06040bd40df850" - dependencies: - ext-name "^5.0.0" - pupa "^1.0.0" - unused-filename "^1.0.0" - - electron-download-tf@4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/electron-download-tf/-/electron-download-tf-4.3.4.tgz#b03740b2885aa2ad3f8784fae74df427f66d5165" - dependencies: - debug "^3.0.0" - env-paths "^1.0.0" - fs-extra "^4.0.1" - minimist "^1.2.0" - nugget "^2.0.1" - path-exists "^3.0.0" - rc "^1.2.1" - semver "^5.4.1" - sumchecker "^2.0.2" - - electron-download@^3.0.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/electron-download/-/electron-download-3.3.0.tgz#2cfd54d6966c019c4d49ad65fbe65cc9cdef68c8" - dependencies: - debug "^2.2.0" - fs-extra "^0.30.0" - home-path "^1.0.1" - minimist "^1.2.0" - nugget "^2.0.0" - path-exists "^2.1.0" - rc "^1.1.2" - semver "^5.3.0" - sumchecker "^1.2.0" - - electron-is-dev@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/electron-is-dev/-/electron-is-dev-0.3.0.tgz#14e6fda5c68e9e4ecbeff9ccf037cbd7c05c5afe" - - electron-log@^2.2.12: - version "2.2.14" - resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-2.2.14.tgz#2123319ccb8d70b0db07f0eda57d5823cb42b4b0" - - electron-osx-sign@0.4.10: - version "0.4.10" - resolved "https://registry.yarnpkg.com/electron-osx-sign/-/electron-osx-sign-0.4.10.tgz#be4f3b89b2a75a1dc5f1e7249081ab2929ca3a26" - dependencies: - 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@20.6.1: - version "20.6.1" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-20.6.1.tgz#1bc8497fc9370f8e39c9212ce0b5857ef1d666fd" - dependencies: - bluebird-lst "^1.0.5" - builder-util "^5.6.7" - builder-util-runtime "^4.1.0" - chalk "^2.3.2" - fs-extra-p "^4.5.2" - lazy-val "^1.0.3" - mime "^2.2.0" - - electron-publish@20.7.0, electron-publish@~20.7.0: - version "20.7.0" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-20.7.0.tgz#1bdc02365b199cd817e635bcd251670a39e014ce" - dependencies: - bluebird-lst "^1.0.5" - builder-util "^5.7.1" - builder-util-runtime "^4.2.0" - chalk "^2.3.2" - fs-extra-p "^4.5.2" - lazy-val "^1.0.3" - mime "^2.2.0" - - electron-publisher-s3@^20.2.0: - version "20.7.0" - resolved "https://registry.yarnpkg.com/electron-publisher-s3/-/electron-publisher-s3-20.7.0.tgz#3c2cc2f8b5959258883d646996e88c276224cb33" - dependencies: - aws-sdk "^2.212.1" - bluebird-lst "^1.0.5" - builder-util "^5.7.1" - electron-publish "~20.7.0" - fs-extra-p "^4.5.2" - mime "^2.2.0" - - electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30: - version "1.3.40" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.40.tgz#1fbd6d97befd72b8a6f921dc38d22413d2f6fddf" - - electron-updater@^2.21.0: - version "2.21.3" - resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-2.21.3.tgz#767bfe6a2a5513cb11c79f94efef6d1ff01fb058" - dependencies: - bluebird-lst "^1.0.5" - builder-util-runtime "~4.2.0" - electron-is-dev "^0.3.0" - fs-extra-p "^4.5.2" - js-yaml "^3.11.0" - lazy-val "^1.0.3" - lodash.isequal "^4.5.0" - semver "^5.5.0" - source-map-support "^0.5.4" - - electron-webpack-js@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/electron-webpack-js/-/electron-webpack-js-1.2.0.tgz#0d53038ba36dd9802df30647570957ec4347fe20" - dependencies: - babel-core "^6.26.0" - babel-loader "^7.1.2" - babel-plugin-component "^1.1.0" - babel-plugin-syntax-dynamic-import "^6.18.0" - babel-preset-env "^1.6.1" - - electron-webpack@^1.13.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/electron-webpack/-/electron-webpack-1.13.0.tgz#f123dd94e660d966cce45950bf39f8af10755e78" - dependencies: - "@types/webpack-env" "^1.13.5" - async-exit-hook "^2.0.1" - bluebird-lst "^1.0.5" - chalk "^2.3.1" - crocket "^0.9.11" - css-hot-loader "^1.3.7" - css-loader "^0.28.9" - debug "^3.1.0" - electron-devtools-installer "^2.2.3" - electron-webpack-js "~1.2.0" - extract-text-webpack-plugin "^3.0.2" - file-loader "^1.1.7" - fs-extra-p "^4.5.2" - html-loader "^0.5.5" - html-webpack-plugin "^2.30.1" - lazy-val "^1.0.3" - node-loader "^0.6.0" - read-config-file "^3.0.0" - semver "^5.5.0" - source-map-support "^0.5.3" - style-loader "^0.20.2" - uglifyjs-webpack-plugin "^1.2.0" - url-loader "^0.6.2" - virtual-module-webpack-plugin "^0.3.0" - webpack-dev-server "^2.11.1" - webpack-merge "^4.1.1" - yargs "^11.0.0" - - electron-window-state@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/electron-window-state/-/electron-window-state-4.1.1.tgz#6b34fdc31b38514dfec8b7c8f7b5d4addb67632d" - dependencies: - deep-equal "^1.0.1" - jsonfile "^2.2.3" - mkdirp "^0.5.1" - - electron@1.7.12: - version "1.7.12" - resolved "https://registry.yarnpkg.com/electron/-/electron-1.7.12.tgz#dcc61a2c1b0c3df25f68b3425379a01abd01190e" - dependencies: - "@types/node" "^7.0.18" - electron-download "^3.0.1" - extract-zip "^1.0.3" - - elegant-spinner@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" - - elliptic@^6.0.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" - dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" - hash.js "^1.0.0" - hmac-drbg "^1.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.0" - - emoji-regex@^6.1.0: - version "6.5.1" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2" - - emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - - encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - - encoding@^0.1.11, encoding@^0.1.12: - version "0.1.12" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" - dependencies: - iconv-lite "~0.4.13" - - end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" - dependencies: - once "^1.4.0" - - enhanced-resolve@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.4.0" - object-assign "^4.0.1" - tapable "^0.2.7" - - enhanced-resolve@~0.9.0: - version "0.9.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e" - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.2.0" - tapable "^0.1.8" - - "entities@~ 1.1.1", entities@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" - - env-paths@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-1.0.0.tgz#4168133b42bb05c38a35b1ae4397c8298ab369e0" - - envify@^3.0.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/envify/-/envify-3.4.1.tgz#d7122329e8df1688ba771b12501917c9ce5cbce8" - dependencies: - jstransform "^11.0.3" - through "~2.3.4" - - errno@^0.1.3, errno@~0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - dependencies: - prr "~1.0.1" - - error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" - dependencies: - is-arrayish "^0.2.1" - - es-abstract@^1.7.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.11.0.tgz#cce87d518f0496893b1a30cd8461835535480681" - dependencies: - es-to-primitive "^1.1.1" - function-bind "^1.1.1" - has "^1.0.1" - is-callable "^1.1.3" - is-regex "^1.0.4" - - es-to-primitive@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" - dependencies: - is-callable "^1.1.1" - is-date-object "^1.0.1" - is-symbol "^1.0.1" - - es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.41" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.41.tgz#bab3e982d750f0112f0cb9e6abed72c59eb33eb2" - dependencies: - es6-iterator "~2.0.3" - es6-symbol "~3.1.1" - next-tick "1" - - es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - - es6-map@^0.1.3: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-set "~0.1.5" - es6-symbol "~3.1.1" - event-emitter "~0.3.5" - - es6-promise@^4.0.5: - version "4.2.4" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29" - - es6-set@~0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-symbol "3.1.1" - event-emitter "~0.3.5" - - es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" - dependencies: - d "1" - es5-ext "~0.10.14" - - es6-templates@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/es6-templates/-/es6-templates-0.2.3.tgz#5cb9ac9fb1ded6eb1239342b81d792bbb4078ee4" - dependencies: - recast "~0.11.12" - through "~2.3.6" - - es6-weak-map@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" - dependencies: - d "1" - es5-ext "^0.10.14" - es6-iterator "^2.0.1" - es6-symbol "^3.1.1" - - escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - - escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - - escodegen@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.1.tgz#dbae17ef96c8e4bedb1356f4504fa4cc2f7cb7e2" - dependencies: - esprima "^3.1.3" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - - escope@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" - dependencies: - es6-map "^0.1.3" - es6-weak-map "^2.0.1" - esrecurse "^4.1.0" - estraverse "^4.1.1" - - eslint-config-airbnb-base@^12.1.0: - version "12.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz#386441e54a12ccd957b0a92564a4bafebd747944" - dependencies: - eslint-restricted-globals "^0.1.1" - - eslint-config-airbnb@^16.1.0: - version "16.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-16.1.0.tgz#2546bfb02cc9fe92284bf1723ccf2e87bc45ca46" - dependencies: - eslint-config-airbnb-base "^12.1.0" - - eslint-config-prettier@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.9.0.tgz#5ecd65174d486c22dff389fe036febf502d468a3" - dependencies: - get-stdin "^5.0.1" - - eslint-import-resolver-node@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" - dependencies: - debug "^2.6.9" - resolve "^1.5.0" - - eslint-import-resolver-webpack@^0.8.4: - version "0.8.4" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.8.4.tgz#0f7cd74bc9d7fc1773e8d5fc25baf864b2f87a42" - dependencies: - array-find "^1.0.0" - debug "^2.6.8" - enhanced-resolve "~0.9.0" - find-root "^0.1.1" - has "^1.0.1" - interpret "^1.0.0" - is-absolute "^0.2.3" - lodash.get "^3.7.0" - node-libs-browser "^1.0.0 || ^2.0.0" - resolve "^1.2.0" - semver "^5.3.0" - - eslint-module-utils@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz#abaec824177613b8a95b299639e1b6facf473449" - dependencies: - debug "^2.6.8" - pkg-dir "^1.0.0" - - eslint-plugin-flowtype@^2.46.1: - version "2.46.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.46.1.tgz#c4f81d580cd89c82bc3a85a1ccf4ae3a915143a4" - dependencies: - lodash "^4.15.0" - - eslint-plugin-import@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.9.0.tgz#26002efbfca5989b7288ac047508bd24f217b169" - dependencies: - builtin-modules "^1.1.1" - contains-path "^0.1.0" - debug "^2.6.8" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.1" - eslint-module-utils "^2.1.1" - has "^1.0.1" - lodash "^4.17.4" - minimatch "^3.0.3" - read-pkg-up "^2.0.0" - - eslint-plugin-jsx-a11y@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.0.3.tgz#54583d1ae442483162e040e13cc31865465100e5" - dependencies: - aria-query "^0.7.0" - array-includes "^3.0.3" - ast-types-flow "0.0.7" - axobject-query "^0.1.0" - damerau-levenshtein "^1.0.0" - emoji-regex "^6.1.0" - jsx-ast-utils "^2.0.0" - - eslint-plugin-prettier@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.0.tgz#33e4e228bdb06142d03c560ce04ec23f6c767dd7" - dependencies: - fast-diff "^1.1.1" - jest-docblock "^21.0.0" - - eslint-plugin-react@^7.7.0: - version "7.7.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.7.0.tgz#f606c719dbd8a1a2b3d25c16299813878cca0160" - dependencies: - doctrine "^2.0.2" - has "^1.0.1" - jsx-ast-utils "^2.0.1" - prop-types "^15.6.0" - - eslint-restricted-globals@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" - - eslint-scope@^3.7.1, eslint-scope@~3.7.1: - version "3.7.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - - eslint-visitor-keys@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" - - eslint@^4.19.0: - version "4.19.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" - dependencies: - ajv "^5.3.0" - babel-code-frame "^6.22.0" - chalk "^2.1.0" - concat-stream "^1.6.0" - cross-spawn "^5.1.0" - debug "^3.1.0" - doctrine "^2.1.0" - eslint-scope "^3.7.1" - eslint-visitor-keys "^1.0.0" - espree "^3.5.4" - esquery "^1.0.0" - esutils "^2.0.2" - file-entry-cache "^2.0.0" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.0.1" - ignore "^3.3.3" - imurmurhash "^0.1.4" - inquirer "^3.0.6" - is-resolvable "^1.0.0" - js-yaml "^3.9.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.4" - minimatch "^3.0.2" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - pluralize "^7.0.0" - progress "^2.0.0" - regexpp "^1.0.1" - require-uncached "^1.0.3" - semver "^5.3.0" - strip-ansi "^4.0.0" - strip-json-comments "~2.0.1" - table "4.0.2" - text-table "~0.2.0" - - espree@^3.5.4: - version "3.5.4" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" - dependencies: - acorn "^5.5.0" - acorn-jsx "^3.0.0" - - esprima-fb@^15001.1.0-dev-harmony-fb: - version "15001.1.0-dev-harmony-fb" - resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz#30a947303c6b8d5e955bee2b99b1d233206a6901" - - esprima@^2.6.0: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - - esprima@^3.1.3, esprima@~3.1.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - - esprima@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" - - esquery@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" - dependencies: - estraverse "^4.0.0" - - esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - dependencies: - estraverse "^4.1.0" - - estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - - esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - - etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - - event-emitter@~0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" - dependencies: - d "1" - es5-ext "~0.10.14" - - eventemitter3@1.x.x: - version "1.2.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" - - events@1.1.1, events@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" - - eventsource@0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" - dependencies: - original ">=0.0.5" - - evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - - execa@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - - execa@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.9.0.tgz#adb7ce62cf985071f60580deb4a88b9e34712d01" - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - - exenv@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" - - exit-hook@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" - - expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - dependencies: - is-posix-bracket "^0.1.0" - - expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - - expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - dependencies: - fill-range "^2.1.0" - - expand-template@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-1.1.0.tgz#e09efba977bf98f9ee0ed25abd0c692e02aec3fc" - - expect@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/expect/-/expect-22.4.3.tgz#d5a29d0a0e1fb2153557caef2674d4547e914674" - dependencies: - ansi-styles "^3.2.0" - jest-diff "^22.4.3" - jest-get-type "^22.4.3" - jest-matcher-utils "^22.4.3" - jest-message-util "^22.4.3" - jest-regex-util "^22.4.3" - - express@^4.16.2: - version "4.16.3" - resolved "https://registry.yarnpkg.com/express/-/express-4.16.3.tgz#6af8a502350db3246ecc4becf6b5a34d22f7ed53" - dependencies: - accepts "~1.3.5" - array-flatten "1.1.1" - body-parser "1.18.2" - content-disposition "0.5.2" - content-type "~1.0.4" - cookie "0.3.1" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.1.1" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.2" - path-to-regexp "0.1.7" - proxy-addr "~2.0.3" - qs "6.5.1" - range-parser "~1.2.0" - safe-buffer "5.1.1" - send "0.16.2" - serve-static "1.13.2" - setprototypeof "1.1.0" - statuses "~1.4.0" - type-is "~1.6.16" - utils-merge "1.0.1" - vary "~1.1.2" - - ext-list@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37" - dependencies: - mime-db "^1.28.0" - - ext-name@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ext-name/-/ext-name-5.0.0.tgz#70781981d183ee15d13993c8822045c506c8f0a6" - dependencies: - ext-list "^2.0.0" - sort-keys-length "^1.0.0" - - extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - dependencies: - is-extendable "^0.1.0" - - extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - - extend@~3.0.0, extend@~3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" - - external-editor@^2.0.4: - version "2.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48" - dependencies: - chardet "^0.4.0" - iconv-lite "^0.4.17" - tmp "^0.0.33" - - extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - dependencies: - is-extglob "^1.0.0" - - extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - - extract-text-webpack-plugin@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz#5f043eaa02f9750a9258b78c0a6e0dc1408fb2f7" - dependencies: - async "^2.4.1" - loader-utils "^1.1.0" - schema-utils "^0.3.0" - webpack-sources "^1.0.1" - - extract-zip@^1.0.3: - version "1.6.6" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.6.tgz#1290ede8d20d0872b429fd3f351ca128ec5ef85c" - dependencies: - concat-stream "1.6.0" - debug "2.6.9" - mkdirp "0.5.0" - yauzl "2.4.1" - - extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - - extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - - fast-deep-equal@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" - - fast-diff@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.1.2.tgz#4b62c42b8e03de3f848460b639079920695d0154" - - fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - - fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - - fastparse@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" - - faye-websocket@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" - dependencies: - websocket-driver ">=0.5.1" - - faye-websocket@~0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" - dependencies: - websocket-driver ">=0.5.1" - - fbjs@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.6.1.tgz#9636b7705f5ba9684d44b72f78321254afc860f7" - dependencies: - core-js "^1.0.0" - loose-envify "^1.0.0" - promise "^7.0.3" - ua-parser-js "^0.7.9" - whatwg-fetch "^0.9.0" - - fbjs@^0.8.16: - version "0.8.16" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" - dependencies: - core-js "^1.0.0" - isomorphic-fetch "^2.1.1" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.9" - - fd-slicer@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" - dependencies: - pend "~1.2.0" - - figures@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - - figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - dependencies: - escape-string-regexp "^1.0.5" - - file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" - dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" - - file-loader@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8" - dependencies: - loader-utils "^1.0.2" - schema-utils "^0.4.5" - - file-type@^3.8.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" - - file-type@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6" - - file-type@^6.1.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919" - - filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - - fill-range@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^1.1.3" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - - fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - - finalhandler@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.2" - statuses "~1.4.0" - unpipe "~1.0.0" - - find-babel-config@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.1.0.tgz#acc01043a6749fec34429be6b64f542ebb5d6355" - dependencies: - json5 "^0.5.1" - path-exists "^3.0.0" - - find-cache-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" - dependencies: - commondir "^1.0.1" - make-dir "^1.0.0" - pkg-dir "^2.0.0" - - find-parent-dir@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" - - find-process@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/find-process/-/find-process-1.1.0.tgz#f21fa08220fec972b471d92ae3cf0c62bebcd5bb" - dependencies: - chalk "^2.0.1" - commander "^2.11.0" - debug "^2.6.8" - - find-root@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/find-root/-/find-root-0.1.2.tgz#98d2267cff1916ccaf2743b3a0eea81d79d7dcd1" - - find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - - find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - dependencies: - locate-path "^2.0.0" - - flat-cache@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" - dependencies: - circular-json "^0.3.1" - del "^2.0.2" - graceful-fs "^4.1.2" - write "^0.2.1" - - flatten@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" - - flow-babel-webpack-plugin@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flow-babel-webpack-plugin/-/flow-babel-webpack-plugin-1.1.1.tgz#7dd41110b96045eab8d8af6df48883310de54e91" - dependencies: - babel-plugin-transform-flow-comments "^6.17.0" - flow-bin ">=0.44.2 <1" - lodash.merge "^4.6.0" - - "flow-bin@>=0.44.2 <1", flow-bin@^0.68.0: - version "0.68.0" - resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.68.0.tgz#86c2d14857d306eb2e85e274f2eebf543564f623" - - flow-typed@^2.3.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/flow-typed/-/flow-typed-2.4.0.tgz#3d2f48cf85df29df3bca6745b623726496ff4788" - dependencies: - babel-polyfill "^6.26.0" - colors "^1.1.2" - fs-extra "^5.0.0" - github "0.2.4" - glob "^7.1.2" - got "^7.1.0" - md5 "^2.1.0" - mkdirp "^0.5.1" - rimraf "^2.6.2" - semver "^5.5.0" - table "^4.0.2" - through "^2.3.8" - unzipper "^0.8.11" - which "^1.3.0" - yargs "^4.2.0" - - flush-write-stream@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd" - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.4" - - follow-redirects@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.4.1.tgz#d8120f4518190f55aac65bb6fc7b85fcd666d6aa" - dependencies: - debug "^3.1.0" - - for-each@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.2.tgz#2c40450b9348e97f281322593ba96704b9abd4d4" - dependencies: - is-function "~1.0.0" - - for-in@^0.1.3: - version "0.1.8" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" - - for-in@^1.0.1, for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - - for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - dependencies: - for-in "^1.0.1" - - for-own@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" - dependencies: - for-in "^1.0.1" - - foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - - forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - - form-data@~2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" - - form-data@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" - dependencies: - asynckit "^0.4.0" - combined-stream "1.0.6" - mime-types "^2.1.12" - - formik@^0.10.4: - version "0.10.5" - resolved "https://registry.yarnpkg.com/formik/-/formik-0.10.5.tgz#6984d2f22e918c6d2264a3cb86b8582f7277faca" - dependencies: - lodash.isequal "4.5.0" - prop-types "^15.5.10" - warning "^3.0.0" - - forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - - fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - dependencies: - map-cache "^0.2.2" - - fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - - from2@^2.1.0, from2@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - - fs-extra-p@^4.5.0, fs-extra-p@^4.5.2: - version "4.5.2" - resolved "https://registry.yarnpkg.com/fs-extra-p/-/fs-extra-p-4.5.2.tgz#0a22aba489284d17f375d5dc5139aa777fe2df51" - dependencies: - bluebird-lst "^1.0.5" - fs-extra "^5.0.0" - - fs-extra@^0.30.0: - version "0.30.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - path-is-absolute "^1.0.0" - rimraf "^2.2.8" - - fs-extra@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - - fs-extra@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - - fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - - fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - - fsevents@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" - dependencies: - nan "^2.3.0" - node-pre-gyp "^0.6.39" - - fstream-ignore@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" - dependencies: - fstream "^1.0.0" - inherits "2" - minimatch "^3.0.0" - - fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2, fstream@~1.0.10: - version "1.0.11" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - - function-bind@^1.0.2, function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - - functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - - gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - - gaze@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.2.tgz#847224677adb8870d679257ed3388fdb61e40105" - dependencies: - globule "^1.0.0" - - generate-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" - - generate-object-property@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" - dependencies: - is-property "^1.0.0" - - get-caller-file@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" - - get-own-enumerable-property-symbols@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-2.0.1.tgz#5c4ad87f2834c4b9b4e84549dc1e0650fb38c24b" - - get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - - get-stdin@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" - - get-stream@^2.2.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" - dependencies: - object-assign "^4.0.1" - pinkie-promise "^2.0.0" - - get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - - get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - - getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - dependencies: - assert-plus "^1.0.0" - - gettext-parser@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/gettext-parser/-/gettext-parser-1.3.1.tgz#74b7a99e4b5fa8daab11fa515e8a582480448a12" - dependencies: - encoding "^0.1.12" - safe-buffer "^5.1.1" - - github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - - github@0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/github/-/github-0.2.4.tgz#24fa7f0e13fa11b946af91134c51982a91ce538b" - dependencies: - mime "^1.2.11" - - glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - - glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - dependencies: - is-glob "^2.0.0" - - glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - - glob@^5.0.15: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - - glob@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - - glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1: - version "7.1.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - - global-dirs@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" - dependencies: - ini "^1.3.4" - - global@~4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" - dependencies: - min-document "^2.19.0" - process "~0.5.1" - - globals@^11.0.1, globals@^11.1.0: - version "11.3.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.3.0.tgz#e04fdb7b9796d8adac9c8f64c14837b2313378b0" - - globals@^9.18.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - - globby@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" - dependencies: - array-union "^1.0.1" - arrify "^1.0.0" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - - globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - - globule@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.0.tgz#1dc49c6822dd9e8a2fa00ba2a295006e8664bd09" - dependencies: - glob "~7.1.1" - lodash "~4.17.4" - minimatch "~3.0.2" - - got@^6.7.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" - dependencies: - create-error-class "^3.0.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - is-redirect "^1.0.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - lowercase-keys "^1.0.0" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - unzip-response "^2.0.1" - url-parse-lax "^1.0.0" - - got@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" - dependencies: - decompress-response "^3.2.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - is-plain-obj "^1.1.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - isurl "^1.0.0-alpha5" - lowercase-keys "^1.0.0" - p-cancelable "^0.3.0" - p-timeout "^1.1.1" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - url-parse-lax "^1.0.0" - url-to-options "^1.0.1" - - graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - - "graceful-readlink@>= 1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" - - growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - - handle-thing@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" - - har-schema@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" - - har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - - har-validator@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" - dependencies: - chalk "^1.1.1" - commander "^2.9.0" - is-my-json-valid "^2.12.4" - pinkie-promise "^2.0.0" - - har-validator@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" - dependencies: - ajv "^4.9.1" - har-schema "^1.0.5" - - har-validator@~5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" - dependencies: - ajv "^5.1.0" - har-schema "^2.0.0" - - has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - dependencies: - ansi-regex "^2.0.0" - - has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - - has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" - - has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - - has-symbol-support-x@^1.4.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" - - has-to-string-tag-x@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" - dependencies: - has-symbol-support-x "^1.4.1" - - has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - - has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - - has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - - has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - - has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - - has@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" - dependencies: - function-bind "^1.0.2" - - hash-base@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" - dependencies: - inherits "^2.0.1" - - hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - - hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.0" - - hawk@3.1.3, hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" - dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" - - hawk@~6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" - dependencies: - boom "4.x.x" - cryptiles "3.x.x" - hoek "4.x.x" - sntp "2.x.x" - - he@1.1.x: - version "1.1.1" - resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" - - highlight.js@^9.3.0: - version "9.12.0" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e" - - hmac-drbg@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - - hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - - hoek@4.x.x: - version "4.2.1" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" - - hoist-non-react-statics@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz#d2ca2dfc19c5a91c5a6615ce8e564ef0347e2a40" - - home-or-tmp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.1" - - home-path@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/home-path/-/home-path-1.0.5.tgz#788b29815b12d53bacf575648476e6f9041d133f" - - hosted-git-info@^2.1.4, hosted-git-info@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.0.tgz#23235b29ab230c576aab0d4f13fc046b0b038222" - - hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - - html-comment-regex@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" - - html-encoding-sniffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" - dependencies: - whatwg-encoding "^1.0.1" - - html-entities@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" - - html-loader@^0.5.5: - version "0.5.5" - resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-0.5.5.tgz#6356dbeb0c49756d8ebd5ca327f16ff06ab5faea" - dependencies: - es6-templates "^0.2.3" - fastparse "^1.1.1" - html-minifier "^3.5.8" - loader-utils "^1.1.0" - object-assign "^4.1.1" - - html-minifier@^3.2.3, html-minifier@^3.5.8: - version "3.5.12" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.12.tgz#6bfad4d0327f5b8d2b62f5854654ac3703b9b031" - dependencies: - camel-case "3.0.x" - clean-css "4.1.x" - commander "2.15.x" - he "1.1.x" - ncname "1.0.x" - param-case "2.1.x" - relateurl "0.2.x" - uglify-js "3.3.x" - - html-webpack-plugin@^2.30.1: - version "2.30.1" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz#7f9c421b7ea91ec460f56527d78df484ee7537d5" - dependencies: - bluebird "^3.4.7" - html-minifier "^3.2.3" - loader-utils "^0.2.16" - lodash "^4.17.3" - pretty-error "^2.0.2" - toposort "^1.0.0" - - htmlparser2@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe" - dependencies: - domelementtype "1" - domhandler "2.1" - domutils "1.1" - readable-stream "1.0" - - http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - - http-errors@1.6.2, http-errors@~1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" - dependencies: - depd "1.1.1" - inherits "2.0.3" - setprototypeof "1.0.3" - statuses ">= 1.3.1 < 2" - - http-parser-js@>=0.4.0: - version "0.4.11" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.11.tgz#5b720849c650903c27e521633d94696ee95f3529" - - http-proxy-middleware@~0.17.4: - version "0.17.4" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz#642e8848851d66f09d4f124912846dbaeb41b833" - dependencies: - http-proxy "^1.16.2" - is-glob "^3.1.0" - lodash "^4.17.2" - micromatch "^2.3.11" - - http-proxy@^1.16.2: - version "1.16.2" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742" - dependencies: - eventemitter3 "1.x.x" - requires-port "1.x.x" - - http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" - dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - - http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - - https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - - humanize-plus@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/humanize-plus/-/humanize-plus-1.8.2.tgz#a65b34459ad6367adbb3707a82a3c9f916167030" - - husky@^0.14.3: - version "0.14.3" - resolved "https://registry.yarnpkg.com/husky/-/husky-0.14.3.tgz#c69ed74e2d2779769a17ba8399b54ce0b63c12c3" - dependencies: - is-ci "^1.0.10" - normalize-path "^1.0.0" - strip-indent "^2.0.0" - - i18n-extract@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/i18n-extract/-/i18n-extract-0.5.1.tgz#57517422ff589c86268eaf5f38718b9a82cd5090" - dependencies: - babel-traverse "^6.26.0" - babylon "^6.18.0" - gettext-parser "^1.2.0" - glob "^7.1.1" - - iconv-lite@0.4.19, iconv-lite@^0.4.17, iconv-lite@^0.4.19, iconv-lite@^0.4.5, iconv-lite@~0.4.13: - version "0.4.19" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" - - icss-replace-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" - - icss-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" - dependencies: - postcss "^6.0.1" - - ieee754@1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" - - ieee754@^1.1.4: - version "1.1.10" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.10.tgz#719a6f7b026831e64bdb838b0de1bb0029bbf716" - - iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - - ignore@^3.3.3: - version "3.3.7" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" - - immediate@~3.0.5: - version "3.0.6" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" - - import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - - import-local@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" - dependencies: - pkg-dir "^2.0.0" - resolve-cwd "^2.0.0" - - imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - - in-publish@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" - - indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - dependencies: - repeating "^2.0.0" - - indent-string@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" - - indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - - indexof@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - - inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - dependencies: - once "^1.3.0" - wrappy "1" - - inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - - inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - - ini@^1.3.4, ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - - inquirer@^3.0.6: - version "3.3.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^2.0.4" - figures "^2.0.0" - lodash "^4.3.0" - mute-stream "0.0.7" - run-async "^2.2.0" - rx-lite "^4.0.8" - rx-lite-aggregates "^4.0.8" - string-width "^2.1.0" - strip-ansi "^4.0.0" - through "^2.3.6" - - install@^0.10.2: - version "0.10.4" - resolved "https://registry.yarnpkg.com/install/-/install-0.10.4.tgz#9cb09115768b93a582d1450a6ba3f275975b49aa" - - internal-ip@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-1.2.0.tgz#ae9fbf93b984878785d50a8de1b356956058cf5c" - dependencies: - meow "^3.3.0" - - interpret@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" - - invariant@^2.0.0, invariant@^2.2.0, invariant@^2.2.2: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - dependencies: - loose-envify "^1.0.0" - - invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - - ip@^1.1.0, ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - - ipaddr.js@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.6.0.tgz#e3fa357b773da619f26e95f049d055c72796f86b" - - is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - - is-absolute@^0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.2.6.tgz#20de69f3db942ef2d87b9c2da36f172235b1b5eb" - dependencies: - is-relative "^0.2.1" - is-windows "^0.2.0" - - is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - dependencies: - kind-of "^3.0.2" - - is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - dependencies: - kind-of "^6.0.0" - - is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - - is-ascii@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-ascii/-/is-ascii-1.0.0.tgz#f02ad0259a0921cd199ff21ce1b09e0f6b4e3929" - - is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - dependencies: - binary-extensions "^1.0.0" - - is-buffer@^1.1.5, is-buffer@~1.1.1: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - - is-builtin-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" - dependencies: - builtin-modules "^1.0.0" - - is-callable@^1.1.1, is-callable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" - - is-ci@^1.0.10, is-ci@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" - dependencies: - ci-info "^1.0.0" - - is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - dependencies: - kind-of "^3.0.2" - - is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - dependencies: - kind-of "^6.0.0" - - is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - - is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - - is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - - is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - - is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - - is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - dependencies: - is-primitive "^2.0.0" - - is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - - is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - dependencies: - is-plain-object "^2.0.4" - - is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - - is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - - is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - dependencies: - number-is-nan "^1.0.0" - - is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - dependencies: - number-is-nan "^1.0.0" - - is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - - is-function@^1.0.1, is-function@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" - - is-generator-fn@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" - - is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - dependencies: - is-extglob "^1.0.0" - - is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - dependencies: - is-extglob "^2.1.0" - - is-glob@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" - dependencies: - is-extglob "^2.1.1" - - is-installed-globally@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" - dependencies: - global-dirs "^0.1.0" - is-path-inside "^1.0.0" - - is-my-ip-valid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" - - is-my-json-valid@^2.12.4: - version "2.17.2" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz#6b2103a288e94ef3de5cf15d29dd85fc4b78d65c" - dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - is-my-ip-valid "^1.0.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" - - is-natural-number@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" - - is-npm@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" - - is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - dependencies: - kind-of "^3.0.2" - - is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - dependencies: - kind-of "^3.0.2" - - is-number@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" - - is-obj@^1.0.0, is-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - - is-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" - - is-observable@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-0.2.0.tgz#b361311d83c6e5d726cabf5e250b0237106f5ae2" - dependencies: - symbol-observable "^0.2.2" - - is-odd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24" - dependencies: - is-number "^4.0.0" - - is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - - is-path-in-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" - dependencies: - is-path-inside "^1.0.0" - - is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - dependencies: - path-is-inside "^1.0.1" - - is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - - is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - dependencies: - isobject "^3.0.1" - - is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - - is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - - is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - - is-property@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" - - is-redirect@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" - - is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - dependencies: - has "^1.0.1" - - is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - - is-relative@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5" - dependencies: - is-unc-path "^0.1.1" - - is-resolvable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - - is-retry-allowed@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" - - is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - - is-svg@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" - dependencies: - html-comment-regex "^1.1.0" - - is-symbol@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" - - is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - - is-unc-path@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-0.1.2.tgz#6ab053a72573c10250ff416a3814c35178af39b9" - dependencies: - unc-path-regex "^0.1.0" - - is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - - is-windows@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" - - is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - - is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - - isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - - isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - - isbinaryfile@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.2.tgz#4a3e974ec0cba9004d3fc6cde7209ea69368a621" - - isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - - isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - dependencies: - isarray "1.0.0" - - isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - - isomorphic-fetch@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" - dependencies: - node-fetch "^1.0.1" - whatwg-fetch ">=0.10.0" - - isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - - isurl@^1.0.0-alpha5: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" - dependencies: - has-to-string-tag-x "^1.2.0" - is-object "^1.0.1" - - jest-config@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.4.3.tgz#0e9d57db267839ea31309119b41dc2fa31b76403" - dependencies: - chalk "^2.0.1" - glob "^7.1.1" - jest-environment-jsdom "^22.4.3" - jest-environment-node "^22.4.3" - jest-get-type "^22.4.3" - jest-jasmine2 "^22.4.3" - jest-regex-util "^22.4.3" - jest-resolve "^22.4.3" - jest-util "^22.4.3" - jest-validate "^22.4.3" - pretty-format "^22.4.3" - - jest-diff@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.4.3.tgz#e18cc3feff0aeef159d02310f2686d4065378030" - dependencies: - chalk "^2.0.1" - diff "^3.2.0" - jest-get-type "^22.4.3" - pretty-format "^22.4.3" - - jest-docblock@^21.0.0: - version "21.2.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" - - jest-environment-jsdom@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz#d67daa4155e33516aecdd35afd82d4abf0fa8a1e" - dependencies: - jest-mock "^22.4.3" - jest-util "^22.4.3" - jsdom "^11.5.1" - - jest-environment-node@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.4.3.tgz#54c4eaa374c83dd52a9da8759be14ebe1d0b9129" - dependencies: - jest-mock "^22.4.3" - jest-util "^22.4.3" - - jest-get-type@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" - - jest-jasmine2@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.4.3.tgz#4daf64cd14c793da9db34a7c7b8dcfe52a745965" - dependencies: - chalk "^2.0.1" - co "^4.6.0" - expect "^22.4.3" - graceful-fs "^4.1.11" - is-generator-fn "^1.0.0" - jest-diff "^22.4.3" - jest-matcher-utils "^22.4.3" - jest-message-util "^22.4.3" - jest-snapshot "^22.4.3" - jest-util "^22.4.3" - source-map-support "^0.5.0" - - jest-matcher-utils@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz#4632fe428ebc73ebc194d3c7b65d37b161f710ff" - dependencies: - chalk "^2.0.1" - jest-get-type "^22.4.3" - pretty-format "^22.4.3" - - jest-message-util@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.4.3.tgz#cf3d38aafe4befddbfc455e57d65d5239e399eb7" - dependencies: - "@babel/code-frame" "^7.0.0-beta.35" - chalk "^2.0.1" - micromatch "^2.3.11" - slash "^1.0.0" - stack-utils "^1.0.1" - - jest-mock@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.4.3.tgz#f63ba2f07a1511772cdc7979733397df770aabc7" - - jest-regex-util@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.4.3.tgz#a826eb191cdf22502198c5401a1fc04de9cef5af" - - jest-resolve@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.4.3.tgz#0ce9d438c8438229aa9b916968ec6b05c1abb4ea" - dependencies: - browser-resolve "^1.11.2" - chalk "^2.0.1" - - jest-snapshot@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.4.3.tgz#b5c9b42846ffb9faccb76b841315ba67887362d2" - dependencies: - chalk "^2.0.1" - jest-diff "^22.4.3" - jest-matcher-utils "^22.4.3" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - pretty-format "^22.4.3" - - jest-util@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.4.3.tgz#c70fec8eec487c37b10b0809dc064a7ecf6aafac" - dependencies: - callsites "^2.0.0" - chalk "^2.0.1" - graceful-fs "^4.1.11" - is-ci "^1.0.10" - jest-message-util "^22.4.3" - mkdirp "^0.5.1" - source-map "^0.6.0" - - jest-validate@^22.4.0, jest-validate@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.4.3.tgz#0780954a5a7daaeec8d3c10834b9280865976b30" - dependencies: - chalk "^2.0.1" - jest-config "^22.4.3" - jest-get-type "^22.4.3" - leven "^2.1.0" - pretty-format "^22.4.3" - - jmespath@0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" - - js-base64@^2.1.8, js-base64@^2.1.9: - version "2.4.3" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.3.tgz#2e545ec2b0f2957f41356510205214e98fad6582" - - js-tokens@^3.0.0, js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - - js-yaml@^3.10.0, js-yaml@^3.11.0, js-yaml@^3.9.0, js-yaml@^3.9.1: - version "3.11.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - - js-yaml@~3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" - dependencies: - argparse "^1.0.7" - esprima "^2.6.0" - - jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - - jsdom@^11.5.1: - version "11.6.2" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.6.2.tgz#25d1ef332d48adf77fc5221fe2619967923f16bb" - dependencies: - abab "^1.0.4" - acorn "^5.3.0" - acorn-globals "^4.1.0" - array-equal "^1.0.0" - browser-process-hrtime "^0.1.2" - content-type-parser "^1.0.2" - cssom ">= 0.3.2 < 0.4.0" - cssstyle ">= 0.2.37 < 0.3.0" - domexception "^1.0.0" - escodegen "^1.9.0" - html-encoding-sniffer "^1.0.2" - left-pad "^1.2.0" - nwmatcher "^1.4.3" - parse5 "4.0.0" - pn "^1.1.0" - request "^2.83.0" - request-promise-native "^1.0.5" - sax "^1.2.4" - symbol-tree "^3.2.2" - tough-cookie "^2.3.3" - w3c-hr-time "^1.0.1" - webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.3" - whatwg-url "^6.4.0" - ws "^4.0.0" - xml-name-validator "^3.0.0" - - jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" - - jsesc@^2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe" - - jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - - jshashes@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/jshashes/-/jshashes-1.0.7.tgz#bed8c97a0e9632fd0513916f55f76dd5486be59f" - - json-loader@^0.5.4: - version "0.5.7" - resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" - - json-parse-better-errors@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz#50183cd1b2d25275de069e9e71b467ac9eab973a" - - json-schema-traverse@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" - - json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - - json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - - json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - dependencies: - jsonify "~0.0.0" - - json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - - json3@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" - - json5@^0.5.0, json5@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - - jsonfile@^2.1.0, jsonfile@^2.2.3: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - optionalDependencies: - graceful-fs "^4.1.6" - - jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - optionalDependencies: - graceful-fs "^4.1.6" - - jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - - jsonpointer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" - - jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - - jstransform@^11.0.3: - version "11.0.3" - resolved "https://registry.yarnpkg.com/jstransform/-/jstransform-11.0.3.tgz#09a78993e0ae4d4ef4487f6155a91f6190cb4223" - dependencies: - base62 "^1.1.0" - commoner "^0.10.1" - esprima-fb "^15001.1.0-dev-harmony-fb" - object-assign "^2.0.0" - source-map "^0.4.2" - - jsx-ast-utils@^2.0.0, jsx-ast-utils@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" - dependencies: - array-includes "^3.0.3" - - keytar-prebuild@4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/keytar-prebuild/-/keytar-prebuild-4.0.4.tgz#eb6354c68f2b3609dc325ef8709844632652d602" - dependencies: - nan "2.7.0" - prebuild-install "^2.2.2" - - killable@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.0.tgz#da8b84bd47de5395878f95d64d02f2449fe05e6b" - - kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - dependencies: - is-buffer "^1.1.5" - - kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - dependencies: - is-buffer "^1.1.5" - - kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - - kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - - klaw@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - optionalDependencies: - graceful-fs "^4.1.9" - - latest-version@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" - dependencies: - package-json "^4.0.0" - - lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - - lazy-val@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.3.tgz#bb97b200ef00801d94c317e29dc6ed39e31c5edc" - - lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - dependencies: - invert-kv "^1.0.0" - - left-pad@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.2.0.tgz#d30a73c6b8201d8f7d8e7956ba9616087a68e0ee" - - leven@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - - levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - - lie@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e" - dependencies: - immediate "~3.0.5" - - lint-staged@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-7.0.0.tgz#57926c63201e7bd38ca0576d74391efa699b4a9d" - dependencies: - app-root-path "^2.0.1" - chalk "^2.3.1" - commander "^2.14.1" - cosmiconfig "^4.0.0" - debug "^3.1.0" - dedent "^0.7.0" - execa "^0.9.0" - find-parent-dir "^0.3.0" - is-glob "^4.0.0" - jest-validate "^22.4.0" - listr "^0.13.0" - lodash "^4.17.5" - log-symbols "^2.2.0" - micromatch "^3.1.8" - npm-which "^3.0.1" - p-map "^1.1.1" - path-is-inside "^1.0.2" - pify "^3.0.0" - please-upgrade-node "^3.0.1" - staged-git-files "1.1.0" - stringify-object "^3.2.2" - - listenercount@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" - - listr-silent-renderer@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" - - listr-update-renderer@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz#344d980da2ca2e8b145ba305908f32ae3f4cc8a7" - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - elegant-spinner "^1.0.1" - figures "^1.7.0" - indent-string "^3.0.0" - log-symbols "^1.0.2" - log-update "^1.0.2" - strip-ansi "^3.0.1" - - listr-verbose-renderer@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#8206f4cf6d52ddc5827e5fd14989e0e965933a35" - dependencies: - chalk "^1.1.3" - cli-cursor "^1.0.2" - date-fns "^1.27.2" - figures "^1.7.0" - - listr@^0.13.0: - version "0.13.0" - resolved "https://registry.yarnpkg.com/listr/-/listr-0.13.0.tgz#20bb0ba30bae660ee84cc0503df4be3d5623887d" - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - figures "^1.7.0" - indent-string "^2.1.0" - is-observable "^0.2.0" - is-promise "^2.1.0" - is-stream "^1.1.0" - listr-silent-renderer "^1.1.1" - listr-update-renderer "^0.4.0" - listr-verbose-renderer "^0.4.0" - log-symbols "^1.0.2" - log-update "^1.0.2" - ora "^0.2.3" - p-map "^1.1.1" - rxjs "^5.4.2" - stream-to-observable "^0.2.0" - strip-ansi "^3.0.1" - - load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - - load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - - loader-runner@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" - - loader-utils@^0.2.16: - version "0.2.17" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - object-assign "^4.0.1" - - loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - - localforage@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.6.0.tgz#8b0059beeb3875c48124286ca7fdbf23d52b8c97" - dependencies: - lie "3.1.1" - - locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - - lodash-es@^4.17.4, lodash-es@^4.17.5, lodash-es@^4.2.1: - version "4.17.7" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.7.tgz#db240a3252c3dd8360201ac9feef91ac977ea856" - - lodash._baseget@^3.0.0: - version "3.7.2" - resolved "https://registry.yarnpkg.com/lodash._baseget/-/lodash._baseget-3.7.2.tgz#1b6ae1d5facf3c25532350a13c1197cb8bb674f4" - - lodash._topath@^3.0.0: - version "3.8.1" - resolved "https://registry.yarnpkg.com/lodash._topath/-/lodash._topath-3.8.1.tgz#3ec5e2606014f4cb97f755fe6914edd8bfc00eac" - dependencies: - lodash.isarray "^3.0.0" - - lodash.assign@^4.0.3, lodash.assign@^4.0.6, lodash.assign@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" - - lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - - lodash.clonedeep@^4.3.2: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - - lodash.forin@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.forin/-/lodash.forin-4.4.0.tgz#5d3f20ae564011fbe88381f7d98949c9c9519731" - - lodash.get@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-3.7.0.tgz#3ce68ae2c91683b281cc5394128303cbf75e691f" - dependencies: - lodash._baseget "^3.0.0" - lodash._topath "^3.0.0" - - lodash.get@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - - lodash.isarray@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" - - lodash.isempty@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e" - - lodash.isequal@4.5.0, lodash.isequal@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - - lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - - lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - - lodash.merge@^4.6.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.1.tgz#adc25d9cb99b9391c59624f379fbba60d7111d54" - - lodash.mergewith@^4.6.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927" - - lodash.pickby@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.pickby/-/lodash.pickby-4.6.0.tgz#7dea21d8c18d7703a27c704c15d3b84a67e33aff" - - lodash.set@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" - - lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - - lodash.tail@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664" - - lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - - lodash.unset@^4.5.2: - version "4.5.2" - resolved "https://registry.yarnpkg.com/lodash.unset/-/lodash.unset-4.5.2.tgz#370d1d3e85b72a7e1b0cdf2d272121306f23e4ed" - - lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@~4.17.4: - version "4.17.5" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" - - log-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" - dependencies: - chalk "^1.0.0" - - log-symbols@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - dependencies: - chalk "^2.0.1" - - log-update@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" - dependencies: - ansi-escapes "^1.0.0" - cli-cursor "^1.0.2" - - loglevel@^1.4.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa" - - longest@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" - - loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" - dependencies: - js-tokens "^3.0.0" - - loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - - lower-case@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" - - lowercase-keys@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" - - lru-cache@^4.0.1, lru-cache@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.2.tgz#45234b2e6e2f2b33da125624c4664929a0224c3f" - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - - lz-string@^1.4.4: - version "1.4.4" - resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" - - macaddress@^0.2.8: - version "0.2.8" - resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" - - make-dir@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.2.0.tgz#6d6a49eead4aae296c53bbf3a1a008bd6c89469b" - dependencies: - pify "^3.0.0" - - make-runnable@^1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-runnable/-/make-runnable-1.3.6.tgz#ca9b1d31b06f051e37570fb7ad98bc5369f982be" - dependencies: - bluebird "^3.5.0" - yargs "^4.7.1" - - map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - - map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - - map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - dependencies: - object-visit "^1.0.0" - - marked@*: - version "0.3.17" - resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.17.tgz#607f06668b3c6b1246b28f13da76116ac1aa2d2b" - - math-expression-evaluator@^1.2.14: - version "1.2.17" - resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" - - md5.js@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - - md5@^2.1.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9" - dependencies: - charenc "~0.0.1" - crypt "~0.0.1" - is-buffer "~1.1.1" - - "mdurl@~ 1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" - - media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - - mediasource@^2.0.0, mediasource@^2.1.0: - version "2.1.3" - resolved "https://registry.yarnpkg.com/mediasource/-/mediasource-2.1.3.tgz#27a9c1aac51bfb6eba96af2d13a84d0b2a8eac68" - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.5" - to-arraybuffer "^1.0.1" - - mem@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" - dependencies: - mimic-fn "^1.0.0" - - memory-fs@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290" - - memory-fs@^0.4.0, memory-fs@~0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - - meow@^3.1.0, meow@^3.3.0, meow@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - - merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - - methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - - micromatch@^2.3.11: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - - micromatch@^3.1.4, micromatch@^3.1.8: - version "3.1.9" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.9.tgz#15dc93175ae39e52e93087847096effc73efcf89" - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - - miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - - "mime-db@>= 1.33.0 < 2", mime-db@^1.28.0, mime-db@~1.33.0: - version "1.33.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" - - mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.7: - version "2.1.18" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" - dependencies: - mime-db "~1.33.0" - - mime@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" - - mime@^1.2.11, mime@^1.4.1, mime@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - - mime@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.2.0.tgz#161e541965551d3b549fa1114391e3a3d55b923b" - - mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - - mimic-response@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.0.tgz#df3d3652a73fded6b9b0b24146e6fd052353458e" - - min-document@^2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" - dependencies: - dom-walk "^0.1.0" - - minimalistic-assert@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" - - minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - - "minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - dependencies: - brace-expansion "^1.1.7" - - minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - - minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - - mississippi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f" - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^2.0.1" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - - mixin-deep@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - - mixin-object@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e" - dependencies: - for-in "^0.1.3" - is-extendable "^0.1.1" - - mixpanel-browser@^2.17.1: - version "2.19.0" - resolved "https://registry.yarnpkg.com/mixpanel-browser/-/mixpanel-browser-2.19.0.tgz#425a5c29f621b2050d2aa4ee121b73a4ccd6c3aa" - - mkdirp@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12" - dependencies: - minimist "0.0.8" - - mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - dependencies: - minimist "0.0.8" - - modify-filename@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/modify-filename/-/modify-filename-1.1.0.tgz#9a2dec83806fbb2d975f22beec859ca26b393aa1" - - moment@^2.20.1: - version "2.21.0" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.21.0.tgz#2a114b51d2a6ec9e6d83cf803f838a878d8a023a" - - move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" - - mp4-box-encoding@^1.1.0, mp4-box-encoding@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/mp4-box-encoding/-/mp4-box-encoding-1.1.2.tgz#39850ee05ba5370460070b3a2acbd07616e2d831" - dependencies: - uint64be "^1.0.1" - - mp4-stream@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/mp4-stream/-/mp4-stream-2.0.2.tgz#34161ba2d9b608733b4b2247edf3780ba2c47ec5" - dependencies: - inherits "^2.0.1" - mp4-box-encoding "^1.1.0" - next-event "^1.0.0" - readable-stream "^2.0.3" - - ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - - multicast-dns-service-types@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" - - multicast-dns@^6.0.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" - dependencies: - dns-packet "^1.3.1" - thunky "^1.0.2" - - multistream@^2.0.2: - version "2.1.0" - resolved "https://registry.yarnpkg.com/multistream/-/multistream-2.1.0.tgz#625c267d5c44424ad6294788b5bb4da3dcb32f1d" - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.5" - - mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - - nan@2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46" - - nan@^2.3.0, nan@^2.3.2: - version "2.10.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" - - nanomatch@^1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2" - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-odd "^2.0.0" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - - natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - - ncname@1.0.x: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ncname/-/ncname-1.0.0.tgz#5b57ad18b1ca092864ef62b0b1ed8194f383b71c" - dependencies: - xml-char-classes "^1.0.0" - - negotiator@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" - - neo-async@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.0.tgz#76b1c823130cca26acfbaccc8fbaf0a2fa33b18f" - - next-event@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/next-event/-/next-event-1.0.0.tgz#e7778acde2e55802e0ad1879c39cf6f75eda61d8" - - next-tick@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" - - no-case@^2.2.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" - dependencies: - lower-case "^1.1.1" - - node-abi@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.3.0.tgz#f3d554d6ac72a9ee16f0f4dc9548db7c08de4986" - dependencies: - semver "^5.4.1" - - node-fetch@^1.0.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" - dependencies: - encoding "^0.1.11" - is-stream "^1.0.1" - - node-forge@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.1.tgz#9da611ea08982f4b94206b3beb4cc9665f20c300" - - node-gyp@^3.3.1: - version "3.6.2" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60" - dependencies: - fstream "^1.0.0" - glob "^7.0.3" - graceful-fs "^4.1.2" - minimatch "^3.0.2" - mkdirp "^0.5.0" - nopt "2 || 3" - npmlog "0 || 1 || 2 || 3 || 4" - osenv "0" - request "2" - rimraf "2" - semver "~5.3.0" - tar "^2.0.0" - which "1" - - "node-libs-browser@^1.0.0 || ^2.0.0", node-libs-browser@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^1.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.0" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.10.3" - vm-browserify "0.0.4" - - node-loader@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/node-loader/-/node-loader-0.6.0.tgz#c797ef51095ed5859902b157f6384f6361e05ae8" - - node-notifier@5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff" - dependencies: - growly "^1.3.0" - semver "^5.3.0" - shellwords "^0.1.0" - which "^1.2.12" - - node-pre-gyp@^0.6.39: - version "0.6.39" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" - dependencies: - detect-libc "^1.0.2" - hawk "3.1.3" - mkdirp "^0.5.1" - nopt "^4.0.1" - npmlog "^4.0.2" - rc "^1.1.7" - request "2.81.0" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^2.2.1" - tar-pack "^3.4.0" - - node-sass@^4.7.2: - version "4.7.2" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.7.2.tgz#9366778ba1469eb01438a9e8592f4262bcb6794e" - dependencies: - async-foreach "^0.1.3" - chalk "^1.1.1" - cross-spawn "^3.0.0" - gaze "^1.0.0" - get-stdin "^4.0.1" - glob "^7.0.3" - in-publish "^2.0.0" - lodash.assign "^4.2.0" - lodash.clonedeep "^4.3.2" - lodash.mergewith "^4.6.0" - meow "^3.7.0" - mkdirp "^0.5.1" - nan "^2.3.2" - node-gyp "^3.3.1" - npmlog "^4.0.0" - request "~2.79.0" - sass-graph "^2.2.4" - stdout-stream "^1.4.0" - "true-case-path" "^1.0.2" - - noop-logger@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" - - "nopt@2 || 3": - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - dependencies: - abbrev "1" - - nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - dependencies: - abbrev "1" - osenv "^0.1.4" - - normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" - dependencies: - hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - - normalize-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" - - normalize-path@^2.0.1, normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - dependencies: - remove-trailing-separator "^1.0.1" - - normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - - normalize-url@^1.4.0, normalize-url@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" - dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" - - npm-path@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" - dependencies: - which "^1.2.10" - - npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - dependencies: - path-key "^2.0.0" - - npm-which@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" - dependencies: - commander "^2.9.0" - npm-path "^2.0.2" - which "^1.2.10" - - "npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.1, npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - - nth-check@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" - dependencies: - boolbase "~1.0.0" - - nugget@^2.0.0, nugget@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/nugget/-/nugget-2.0.1.tgz#201095a487e1ad36081b3432fa3cada4f8d071b0" - dependencies: - debug "^2.1.3" - minimist "^1.1.0" - pretty-bytes "^1.0.2" - progress-stream "^1.1.0" - request "^2.45.0" - single-line-log "^1.1.2" - throttleit "0.0.2" - - num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - - number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - - nwmatcher@^1.4.3: - version "1.4.4" - resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.4.tgz#2285631f34a95f0d0395cd900c96ed39b58f346e" - - oauth-sign@~0.8.1, oauth-sign@~0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" - - object-assign@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa" - - object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - - object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - - object-keys@^1.0.8: - version "1.0.11" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" - - object-keys@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" - - object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - dependencies: - isobject "^3.0.0" - - object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" - - object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - dependencies: - isobject "^3.0.1" - - obuf@^1.0.0, obuf@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" - - on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - dependencies: - ee-first "1.1.1" - - on-headers@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" - - once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - dependencies: - wrappy "1" - - onetime@^1.0.0: - version "1.1.0" - resolved "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" - - onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - dependencies: - mimic-fn "^1.0.0" - - opn@^5.1.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.3.0.tgz#64871565c863875f052cfdf53d3e3cb5adb53b1c" - dependencies: - is-wsl "^1.1.0" - - optionator@^0.8.1, optionator@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - - ora@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4" - dependencies: - chalk "^1.1.1" - cli-cursor "^1.0.2" - cli-spinners "^0.1.2" - object-assign "^4.0.1" - - original@>=0.0.5: - version "1.0.0" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.0.tgz#9147f93fa1696d04be61e01bd50baeaca656bd3b" - dependencies: - url-parse "1.0.x" - - os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - - os-homedir@^1.0.0, os-homedir@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - - os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - dependencies: - lcid "^1.0.0" - - os-locale@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" - dependencies: - execa "^0.7.0" - lcid "^1.0.0" - mem "^1.1.0" - - os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - - osenv@0, osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - - p-cancelable@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" - - p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - - p-limit@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c" - dependencies: - p-try "^1.0.0" - - p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - dependencies: - p-limit "^1.1.0" - - p-map@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" - - p-timeout@^1.1.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" - dependencies: - p-finally "^1.0.0" - - p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - - package-json@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" - dependencies: - got "^6.7.1" - registry-auth-token "^3.0.1" - registry-url "^3.0.3" - semver "^5.1.0" - - pako@~1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" - - parallel-transform@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" - dependencies: - cyclist "~0.2.2" - inherits "^2.0.3" - readable-stream "^2.1.5" - - param-case@2.1.x: - version "2.1.1" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" - dependencies: - no-case "^2.2.0" - - parse-asn1@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" - dependencies: - asn1.js "^4.0.0" - browserify-aes "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - - parse-color@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-color/-/parse-color-1.0.0.tgz#7b748b95a83f03f16a94f535e52d7f3d94658619" - dependencies: - color-convert "~0.5.0" - - parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - - parse-headers@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.1.tgz#6ae83a7aa25a9d9b700acc28698cd1f1ed7e9536" - dependencies: - for-each "^0.3.2" - trim "0.0.1" - - parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - dependencies: - error-ex "^1.2.0" - - parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - - parse5@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" - - parseurl@~1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" - - pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - - path-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" - - path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - - path-exists@^2.0.0, path-exists@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - dependencies: - pinkie-promise "^2.0.0" - - path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - - path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - - path-is-inside@^1.0.1, path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - - path-key@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - - path-parse@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" - - path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - - path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - - path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - dependencies: - pify "^2.0.0" - - pbkdf2@^3.0.3: - version "3.0.14" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade" - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - - pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - - performance-now@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" - - performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - - pify@^2.0.0, pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - - pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - - pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - dependencies: - pinkie "^2.0.0" - - pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - - pkg-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" - dependencies: - find-up "^1.0.0" - - pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - dependencies: - find-up "^2.1.0" - - pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" - dependencies: - find-up "^2.1.0" - - please-upgrade-node@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.0.1.tgz#0a681f2c18915e5433a5ca2cd94e0b8206a782db" - - plist@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/plist/-/plist-2.1.0.tgz#57ccdb7a0821df21831217a3cad54e3e146a1025" - dependencies: - base64-js "1.2.0" - xmlbuilder "8.2.2" - xmldom "0.1.x" - - plist@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.1.tgz#a9b931d17c304e8912ef0ba3bdd6182baf2e1f8c" - dependencies: - base64-js "^1.2.3" - xmlbuilder "^9.0.7" - xmldom "0.1.x" - - pluralize@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" - - pn@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" - - portfinder@^1.0.9: - version "1.0.13" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9" - dependencies: - async "^1.5.2" - debug "^2.2.0" - mkdirp "0.5.x" - - posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - - postcss-calc@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" - dependencies: - postcss "^5.0.2" - postcss-message-helpers "^2.0.0" - reduce-css-calc "^1.2.6" - - postcss-colormin@^2.1.8: - version "2.2.2" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" - dependencies: - colormin "^1.0.5" - postcss "^5.0.13" - postcss-value-parser "^3.2.3" - - postcss-convert-values@^2.3.4: - version "2.6.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" - dependencies: - postcss "^5.0.11" - postcss-value-parser "^3.1.2" - - postcss-discard-comments@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" - dependencies: - postcss "^5.0.14" - - postcss-discard-duplicates@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" - dependencies: - postcss "^5.0.4" - - postcss-discard-empty@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" - dependencies: - postcss "^5.0.14" - - postcss-discard-overridden@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" - dependencies: - postcss "^5.0.16" - - postcss-discard-unused@^2.2.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" - dependencies: - postcss "^5.0.14" - uniqs "^2.0.0" - - postcss-filter-plugins@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c" - dependencies: - postcss "^5.0.4" - uniqid "^4.0.0" - - postcss-merge-idents@^2.1.5: - version "2.1.7" - resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" - dependencies: - has "^1.0.1" - postcss "^5.0.10" - postcss-value-parser "^3.1.1" - - postcss-merge-longhand@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" - dependencies: - postcss "^5.0.4" - - postcss-merge-rules@^2.0.3: - version "2.1.2" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" - dependencies: - browserslist "^1.5.2" - caniuse-api "^1.5.2" - postcss "^5.0.4" - postcss-selector-parser "^2.2.2" - vendors "^1.0.0" - - postcss-message-helpers@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" - - postcss-minify-font-values@^1.0.2: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" - dependencies: - object-assign "^4.0.1" - postcss "^5.0.4" - postcss-value-parser "^3.0.2" - - postcss-minify-gradients@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" - dependencies: - postcss "^5.0.12" - postcss-value-parser "^3.3.0" - - postcss-minify-params@^1.0.4: - version "1.2.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" - dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.2" - postcss-value-parser "^3.0.2" - uniqs "^2.0.0" - - postcss-minify-selectors@^2.0.4: - version "2.1.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" - dependencies: - alphanum-sort "^1.0.2" - has "^1.0.1" - postcss "^5.0.14" - postcss-selector-parser "^2.0.0" - - postcss-modules-extract-imports@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz#66140ecece38ef06bf0d3e355d69bf59d141ea85" - dependencies: - postcss "^6.0.1" - - postcss-modules-local-by-default@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - - postcss-modules-scope@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - - postcss-modules-values@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" - dependencies: - icss-replace-symbols "^1.1.0" - postcss "^6.0.1" - - postcss-normalize-charset@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" - dependencies: - postcss "^5.0.5" - - postcss-normalize-url@^3.0.7: - version "3.0.8" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" - dependencies: - is-absolute-url "^2.0.0" - normalize-url "^1.4.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" - - postcss-ordered-values@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" - dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.1" - - postcss-reduce-idents@^2.2.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" - dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.2" - - postcss-reduce-initial@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" - dependencies: - postcss "^5.0.4" - - postcss-reduce-transforms@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" - dependencies: - has "^1.0.1" - postcss "^5.0.8" - postcss-value-parser "^3.0.1" - - postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" - dependencies: - flatten "^1.0.2" - indexes-of "^1.0.1" - uniq "^1.0.1" - - postcss-svgo@^2.1.1: - version "2.1.6" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" - dependencies: - is-svg "^2.0.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" - svgo "^0.7.0" - - postcss-unique-selectors@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" - dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" - - postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" - - postcss-zindex@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" - dependencies: - has "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" - - postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: - version "5.2.18" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" - dependencies: - chalk "^1.1.3" - js-base64 "^2.1.9" - source-map "^0.5.6" - supports-color "^3.2.3" - - postcss@^6.0.1: - version "6.0.20" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.20.tgz#686107e743a12d5530cb68438c590d5b2bf72c3c" - dependencies: - chalk "^2.3.2" - source-map "^0.6.1" - supports-color "^5.3.0" - - prebuild-install@^2.2.2: - version "2.5.1" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.5.1.tgz#0f234140a73760813657c413cdccdda58296b1da" - dependencies: - detect-libc "^1.0.3" - expand-template "^1.0.2" - github-from-package "0.0.0" - minimist "^1.2.0" - mkdirp "^0.5.1" - node-abi "^2.2.0" - noop-logger "^0.1.1" - npmlog "^4.0.1" - os-homedir "^1.0.1" - pump "^2.0.1" - rc "^1.1.6" - simple-get "^2.7.0" - tar-fs "^1.13.0" - tunnel-agent "^0.6.0" - which-pm-runs "^1.0.0" - - prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - - prepend-http@^1.0.0, prepend-http@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - - preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - - prettier@^1.11.1: - version "1.11.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.11.1.tgz#61e43fc4cd44e68f2b0dfc2c38cd4bb0fccdcc75" - - pretty-bytes@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-1.0.4.tgz#0a22e8210609ad35542f8c8d5d2159aff0751c84" - dependencies: - get-stdin "^4.0.1" - meow "^3.1.0" - - pretty-error@^2.0.2: - version "2.1.1" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" - dependencies: - renderkid "^2.0.1" - utila "~0.4" - - pretty-format@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.4.3.tgz#f873d780839a9c02e9664c8a082e9ee79eaac16f" - dependencies: - ansi-regex "^3.0.0" - ansi-styles "^3.2.0" - - private@^0.1.6, private@^0.1.7, private@~0.1.5: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - - process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" - - process-nextick-args@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" - - process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - - process@~0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" - - progress-stream@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/progress-stream/-/progress-stream-1.2.0.tgz#2cd3cfea33ba3a89c9c121ec3347abe9ab125f77" - dependencies: - speedometer "~0.1.2" - through2 "~0.2.3" - - progress@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" - - promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - - promise@^7.0.3, promise@^7.1.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - dependencies: - asap "~2.0.3" - - prop-types@^15.5.1, prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1: - version "15.6.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca" - dependencies: - fbjs "^0.8.16" - loose-envify "^1.3.1" - object-assign "^4.1.1" - - proxy-addr@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341" - dependencies: - forwarded "~0.1.2" - ipaddr.js "1.6.0" - - prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - - pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - - public-encrypt@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - - pump@^1.0.0, pump@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - - pump@^2.0.0, pump@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - - pumpify@^1.3.3: - version "1.4.0" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.4.0.tgz#80b7c5df7e24153d03f0e7ac8a05a5d068bd07fb" - dependencies: - duplexify "^3.5.3" - inherits "^2.0.3" - pump "^2.0.0" - - punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - - punycode@^1.2.4, punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - - punycode@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" - - pupa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pupa/-/pupa-1.0.0.tgz#9a9568a5af7e657b8462a6e9d5328743560ceff6" - - q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - - qr.js@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/qr.js/-/qr.js-0.0.0.tgz#cace86386f59a0db8050fa90d9b6b0e88a1e364f" - - qrcode.react@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/qrcode.react/-/qrcode.react-0.8.0.tgz#413b31cc3b62910e39513f7bead945e01c4c34fb" - dependencies: - prop-types "^15.6.0" - qr.js "0.0.0" - - qs@6.5.1, qs@~6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" - - qs@~6.3.0: - version "6.3.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" - - qs@~6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" - - query-string@^4.1.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" - dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - - querystring-es3@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - - querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - - querystringify@0.0.x: - version "0.0.4" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-0.0.4.tgz#0cf7f84f9463ff0ae51c4c4b142d95be37724d9c" - - querystringify@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb" - - randomatic@^1.1.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - - randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" - dependencies: - safe-buffer "^5.1.0" - - randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - - range-parser@^1.0.3, range-parser@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" - - range-slice-stream@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/range-slice-stream/-/range-slice-stream-1.2.0.tgz#01ba954276052b783900e63d6118d8fcf3875d7f" - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.5" - - raw-body@2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" - dependencies: - bytes "3.0.0" - http-errors "1.6.2" - iconv-lite "0.4.19" - unpipe "1.0.0" - - rc-progress@^2.0.6: - version "2.2.5" - resolved "https://registry.yarnpkg.com/rc-progress/-/rc-progress-2.2.5.tgz#e61d0544bf9d4208e5ba32fc50962159e7f952a3" - dependencies: - babel-runtime "6.x" - prop-types "^15.5.8" - - rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@^1.1.7, rc@^1.2.1: - version "1.2.6" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.6.tgz#eb18989c6d4f4f162c399f79ddd29f3835568092" - dependencies: - deep-extend "~0.4.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - - react-dom@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044" - dependencies: - fbjs "^0.8.16" - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.0" - - react-markdown@^2.5.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-2.5.1.tgz#f7a6c26a3a5faf5d4c2098155d9775e826fd56ee" - dependencies: - commonmark "^0.24.0" - commonmark-react-renderer "^4.3.4" - prop-types "^15.5.1" - - react-modal@^3.1.7: - version "3.3.2" - resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.3.2.tgz#b13da9490653a7c76bc0e9600323eb1079c620e7" - dependencies: - exenv "^1.2.0" - prop-types "^15.5.10" - warning "^3.0.0" - - react-paginate@^5.2.1: - version "5.2.2" - resolved "https://registry.yarnpkg.com/react-paginate/-/react-paginate-5.2.2.tgz#c407d325e3073e39e49739ab5095a829000a1c46" - dependencies: - prop-types "^15.6.1" - - react-redux@^5.0.3: - version "5.0.7" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.7.tgz#0dc1076d9afb4670f993ffaef44b8f8c1155a4c8" - dependencies: - hoist-non-react-statics "^2.5.0" - invariant "^2.0.0" - lodash "^4.17.5" - lodash-es "^4.17.5" - loose-envify "^1.1.0" - prop-types "^15.6.0" - - react-simplemde-editor@^3.6.11: - version "3.6.11" - resolved "https://registry.yarnpkg.com/react-simplemde-editor/-/react-simplemde-editor-3.6.11.tgz#4b9e136f6d4d00218e8ece3d87949e23b14e21dc" - dependencies: - react "^0.14.2" - simplemde "^1.11.2" - - react@^0.14.2: - version "0.14.9" - resolved "https://registry.yarnpkg.com/react/-/react-0.14.9.tgz#9110a6497c49d44ba1c0edd317aec29c2e0d91d1" - dependencies: - envify "^3.0.0" - fbjs "^0.6.1" - - react@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba" - dependencies: - fbjs "^0.8.16" - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.0" - - read-config-file@3.0.0, read-config-file@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-3.0.0.tgz#771def5184a7f76abaf6b2c82f20cb983775b8ea" - dependencies: - ajv "^6.1.1" - ajv-keywords "^3.1.0" - bluebird-lst "^1.0.5" - dotenv "^5.0.0" - dotenv-expand "^4.0.1" - fs-extra-p "^4.5.0" - js-yaml "^3.10.0" - json5 "^0.5.1" - lazy-val "^1.0.3" - - read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - - read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - - read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - - read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - - "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.3, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.3, readable-stream@^2.3.5: - version "2.3.5" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.5.tgz#b4f85003a938cbb6ecbce2a124fb1012bd1a838d" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.0.3" - util-deprecate "~1.0.1" - - readable-stream@1.0: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - - readable-stream@~1.1.9: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - - readable-stream@~2.1.5: - version "2.1.5" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" - dependencies: - buffer-shims "^1.0.0" - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" - util-deprecate "~1.0.1" - - readdirp@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" - dependencies: - graceful-fs "^4.1.2" - minimatch "^3.0.2" - readable-stream "^2.0.2" - set-immediate-shim "^1.0.1" - - recast@^0.11.17, recast@~0.11.12: - version "0.11.23" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" - dependencies: - ast-types "0.9.6" - esprima "~3.1.0" - private "~0.1.5" - source-map "~0.5.0" - - redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - - reduce-css-calc@^1.2.6: - version "1.3.0" - resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" - dependencies: - balanced-match "^0.4.2" - math-expression-evaluator "^1.2.14" - reduce-function-call "^1.0.1" - - reduce-function-call@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" - dependencies: - balanced-match "^0.4.2" - - redux-logger@^3.0.1: - version "3.0.6" - resolved "https://registry.yarnpkg.com/redux-logger/-/redux-logger-3.0.6.tgz#f7555966f3098f3c88604c449cf0baf5778274bf" - dependencies: - deep-diff "^0.3.5" - - redux-persist-transform-compress@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/redux-persist-transform-compress/-/redux-persist-transform-compress-4.2.0.tgz#5089e299df7130878fca45f97ffe82888ba02690" - dependencies: - json-stringify-safe "^5.0.1" - lz-string "^1.4.4" - - redux-persist-transform-filter@0.0.16: - version "0.0.16" - resolved "https://registry.yarnpkg.com/redux-persist-transform-filter/-/redux-persist-transform-filter-0.0.16.tgz#0c21dc166774c12fb3f090f7a2f5ea90f7ba0cea" - dependencies: - lodash.forin "^4.4.0" - lodash.get "^4.4.2" - lodash.isempty "^4.4.0" - lodash.pickby "^4.6.0" - lodash.set "^4.3.2" - lodash.unset "^4.5.2" - - redux-persist@^4.8.0: - version "4.10.2" - resolved "https://registry.yarnpkg.com/redux-persist/-/redux-persist-4.10.2.tgz#8efdb16cfe882c521a78a6d0bfdfef2437f49f96" - dependencies: - json-stringify-safe "^5.0.1" - lodash "^4.17.4" - lodash-es "^4.17.4" - - redux-thunk@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.2.0.tgz#e615a16e16b47a19a515766133d1e3e99b7852e5" - - redux@^3.6.0: - version "3.7.2" - resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b" - dependencies: - lodash "^4.2.1" - lodash-es "^4.2.1" - loose-envify "^1.1.0" - symbol-observable "^1.0.3" - - regenerate@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" - - regenerator-runtime@^0.10.5: - version "0.10.5" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" - - regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - - regenerator-transform@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" - dependencies: - babel-runtime "^6.18.0" - babel-types "^6.19.0" - private "^0.1.6" - - regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - dependencies: - is-equal-shallow "^0.1.3" - - regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - - regexpp@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.0.1.tgz#d857c3a741dce075c2848dcb019a0a975b190d43" - - regexpu-core@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - - regexpu-core@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - - registry-auth-token@^3.0.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" - dependencies: - rc "^1.1.6" - safe-buffer "^5.0.1" - - registry-url@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" - dependencies: - rc "^1.0.1" - - regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - - regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - dependencies: - jsesc "~0.5.0" - - relateurl@0.2.x: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - - remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - - render-media@^2.12.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/render-media/-/render-media-2.12.0.tgz#e44714d5c9789ec6330ffcaf12c552837e3d80f9" - dependencies: - debug "^3.1.0" - is-ascii "^1.0.0" - mediasource "^2.1.0" - stream-to-blob-url "^2.0.0" - videostream "^2.3.0" - - renderkid@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.1.tgz#898cabfc8bede4b7b91135a3ffd323e58c0db319" - dependencies: - css-select "^1.1.0" - dom-converter "~0.1" - htmlparser2 "~3.3.0" - strip-ansi "^3.0.0" - utila "~0.3" - - repeat-element@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" - - repeat-string@^1.5.2, repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - - repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - dependencies: - is-finite "^1.0.0" - - request-promise-core@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" - dependencies: - lodash "^4.13.1" - - request-promise-native@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" - dependencies: - request-promise-core "1.1.1" - stealthy-require "^1.1.0" - tough-cookie ">=2.3.3" - - request@2, request@^2.45.0, request@^2.55.0, request@^2.83.0: - version "2.85.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.85.0.tgz#5a03615a47c61420b3eb99b7dba204f83603e1fa" - dependencies: - aws-sign2 "~0.7.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.3.1" - har-validator "~5.0.3" - hawk "~6.0.2" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.17" - oauth-sign "~0.8.2" - performance-now "^2.1.0" - qs "~6.5.1" - safe-buffer "^5.1.1" - stringstream "~0.0.5" - tough-cookie "~2.3.3" - tunnel-agent "^0.6.0" - uuid "^3.1.0" - - request@2.81.0: - version "2.81.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~4.2.1" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - performance-now "^0.2.0" - qs "~6.4.0" - safe-buffer "^5.0.1" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "^0.6.0" - uuid "^3.0.0" - - request@~2.79.0: - version "2.79.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.11.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~2.0.6" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - qs "~6.3.0" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" - uuid "^3.0.0" - - require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - - require-from-string@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.1.tgz#c545233e9d7da6616e9d59adfb39fc9f588676ff" - - require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - - require-uncached@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" - dependencies: - caller-path "^0.1.0" - resolve-from "^1.0.0" - - requires-port@1.0.x, requires-port@1.x.x, requires-port@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - - reselect@^3.0.0, reselect@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-3.0.1.tgz#efdaa98ea7451324d092b2b2163a6a1d7a9a2147" - - resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - dependencies: - resolve-from "^3.0.0" - - resolve-from@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" - - resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - - resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - - resolve@1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - - resolve@^1.2.0, resolve@^1.4.0, resolve@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.6.0.tgz#0fbd21278b27b4004481c395349e7aba60a9ff5c" - dependencies: - path-parse "^1.0.5" - - restore-cursor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" - dependencies: - exit-hook "^1.0.0" - onetime "^1.0.0" - - restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - - ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - - right-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" - dependencies: - align-text "^0.1.1" - - rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" - dependencies: - glob "^7.0.5" - - ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" - dependencies: - hash-base "^2.0.0" - inherits "^2.0.1" - - run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - dependencies: - is-promise "^2.1.0" - - run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - dependencies: - aproba "^1.1.1" - - rx-lite-aggregates@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" - dependencies: - rx-lite "*" - - rx-lite@*, rx-lite@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" - - rxjs@^5.4.2: - version "5.5.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.7.tgz#afb3d1642b069b2fbf203903d6501d1acb4cda27" - dependencies: - symbol-observable "1.0.1" - - safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" - - safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - dependencies: - ret "~0.1.10" - - sanitize-filename@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.1.tgz#612da1c96473fa02dccda92dcd5b4ab164a6772a" - dependencies: - truncate-utf8-bytes "^1.0.0" - - sass-graph@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" - dependencies: - glob "^7.0.0" - lodash "^4.0.0" - scss-tokenizer "^0.2.3" - yargs "^7.0.0" - - sass-loader@^6.0.7: - version "6.0.7" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-6.0.7.tgz#dd2fdb3e7eeff4a53f35ba6ac408715488353d00" - dependencies: - clone-deep "^2.0.1" - loader-utils "^1.0.1" - lodash.tail "^4.1.1" - neo-async "^2.5.0" - pify "^3.0.0" - - sax@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" - - sax@>=0.6.0, sax@^1.2.4, sax@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - - schema-utils@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf" - dependencies: - ajv "^5.0.0" - - schema-utils@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.5.tgz#21836f0608aac17b78f9e3e24daff14a5ca13a3e" - dependencies: - ajv "^6.1.0" - ajv-keywords "^3.1.0" - - scss-tokenizer@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" - dependencies: - js-base64 "^2.1.8" - source-map "^0.4.2" - - seek-bzip@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.5.tgz#cfe917cb3d274bcffac792758af53173eb1fabdc" - dependencies: - commander "~2.8.1" - - select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - - selfsigned@^1.9.1: - version "1.10.2" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.2.tgz#b4449580d99929b65b10a48389301a6592088758" - dependencies: - node-forge "0.7.1" - - semver-diff@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" - dependencies: - semver "^5.0.3" - - "semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" - - semver@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - - send@0.16.2: - version "0.16.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.6.2" - mime "1.4.1" - ms "2.0.0" - on-finished "~2.3.0" - range-parser "~1.2.0" - statuses "~1.4.0" - - serialize-javascript@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.4.0.tgz#7c958514db6ac2443a8abc062dc9f7886a7f6005" - - serve-index@^1.7.2: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - - serve-static@1.13.2: - version "1.13.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.2" - send "0.16.2" - - set-blocking@^2.0.0, set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - - set-immediate-shim@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - - set-value@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.1" - to-object-path "^0.3.0" - - set-value@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - - setimmediate@^1.0.4, setimmediate@^1.0.5, setimmediate@~1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - - setprototypeof@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" - - setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - - sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - - shallow-clone@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-1.0.0.tgz#4480cd06e882ef68b2ad88a3ea54832e2c48b571" - dependencies: - is-extendable "^0.1.1" - kind-of "^5.0.0" - mixin-object "^2.0.1" - - shapeshift.io@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/shapeshift.io/-/shapeshift.io-1.3.1.tgz#939f7d89e6a93fad4b556567d3fcdab45d5cc021" - dependencies: - request "^2.55.0" - xhr "^2.0.1" - - shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - dependencies: - shebang-regex "^1.0.0" - - shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - - shellwords@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - - signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - - simple-concat@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" - - simple-get@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.7.0.tgz#ad37f926d08129237ff08c4f2edfd6f10e0380b5" - dependencies: - decompress-response "^3.3.0" - once "^1.3.1" - simple-concat "^1.0.0" - - simplemde@^1.11.2: - version "1.11.2" - resolved "https://registry.yarnpkg.com/simplemde/-/simplemde-1.11.2.tgz#a23a35d978d2c40ef07dec008c92f070d8e080e3" - dependencies: - codemirror "*" - codemirror-spell-checker "*" - marked "*" - - single-line-log@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/single-line-log/-/single-line-log-1.1.2.tgz#c2f83f273a3e1a16edb0995661da0ed5ef033364" - dependencies: - string-width "^1.0.1" - - slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - - slice-ansi@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" - - slice-ansi@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" - dependencies: - is-fullwidth-code-point "^2.0.0" - - snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - - snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - dependencies: - kind-of "^3.2.0" - - snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - - sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" - dependencies: - hoek "2.x.x" - - sntp@2.x.x: - version "2.1.0" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" - dependencies: - hoek "4.x.x" - - sockjs-client@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12" - dependencies: - debug "^2.6.6" - eventsource "0.1.6" - faye-websocket "~0.11.0" - inherits "^2.0.1" - json3 "^3.3.2" - url-parse "^1.1.8" - - sockjs@0.3.19: - version "0.3.19" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" - dependencies: - faye-websocket "^0.10.0" - uuid "^3.0.1" - - sort-keys-length@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188" - dependencies: - sort-keys "^1.0.0" - - sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - dependencies: - is-plain-obj "^1.0.0" - - source-list-map@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" - - source-map-resolve@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.1.tgz#7ad0f593f2281598e854df80f19aae4b92d7a11a" - dependencies: - atob "^2.0.0" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - - source-map-support@^0.4.15: - version "0.4.18" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" - dependencies: - source-map "^0.5.6" - - source-map-support@^0.5.0, source-map-support@^0.5.3, source-map-support@^0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.4.tgz#54456efa89caa9270af7cd624cc2f123e51fbae8" - dependencies: - source-map "^0.6.0" - - source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - - source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.0, source-map@~0.5.1: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - - source-map@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - dependencies: - amdefine ">=0.0.4" - - source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - - spdx-correct@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - - spdx-exceptions@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" - - spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - - spdx-license-ids@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" - - spdy-transport@^2.0.18: - version "2.1.0" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.1.0.tgz#4bbb15aaffed0beefdd56ad61dbdc8ba3e2cb7a1" - dependencies: - debug "^2.6.8" - detect-node "^2.0.3" - hpack.js "^2.1.6" - obuf "^1.1.1" - readable-stream "^2.2.9" - safe-buffer "^5.0.1" - wbuf "^1.7.2" - - spdy@^3.4.1: - version "3.4.7" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-3.4.7.tgz#42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc" - dependencies: - debug "^2.6.8" - handle-thing "^1.2.5" - http-deceiver "^1.2.7" - safe-buffer "^5.0.1" - select-hose "^2.0.0" - spdy-transport "^2.0.18" - - speedometer@~0.1.2: - version "0.1.4" - resolved "https://registry.yarnpkg.com/speedometer/-/speedometer-0.1.4.tgz#9876dbd2a169d3115402d48e6ea6329c8816a50d" - - split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - dependencies: - extend-shallow "^3.0.0" - - sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - - sshpk@^1.7.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.1.tgz#130f5975eddad963f1d56f92b9ac6c51fa9f83eb" - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - optionalDependencies: - bcrypt-pbkdf "^1.0.0" - ecc-jsbn "~0.1.1" - jsbn "~0.1.0" - tweetnacl "~0.14.0" - - ssri@^5.2.4: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06" - dependencies: - safe-buffer "^5.1.1" - - stack-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" - - staged-git-files@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.0.tgz#1a9bb131c1885601023c7aaddd3d54c22142c526" - - stat-mode@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-0.2.2.tgz#e6c80b623123d7d80cf132ce538f346289072502" - - static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - - "statuses@>= 1.3.1 < 2", statuses@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" - - stdout-stream@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.0.tgz#a2c7c8587e54d9427ea9edb3ac3f2cd522df378b" - dependencies: - readable-stream "^2.0.1" - - stealthy-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - - stream-browserify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - - stream-each@^1.1.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.2.tgz#8e8c463f91da8991778765873fe4d960d8f616bd" - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - - stream-http@^2.7.2: - version "2.8.1" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.1.tgz#d0441be1a457a73a733a8a7b53570bebd9ef66a4" - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.3" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - - stream-shift@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" - - stream-to-blob-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/stream-to-blob-url/-/stream-to-blob-url-2.1.0.tgz#c341d10502ec51250607327258ec2f586b07d626" - dependencies: - stream-to-blob "^1.0.0" - - stream-to-blob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stream-to-blob/-/stream-to-blob-1.0.0.tgz#9f7a1ada39e16ea282ebb7e4cda307edabde658d" - dependencies: - once "^1.3.3" - - stream-to-observable@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.2.0.tgz#59d6ea393d87c2c0ddac10aa0d561bc6ba6f0e10" - dependencies: - any-observable "^0.2.0" - - strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - - string-width@^1.0.1, string-width@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - - string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - - string.prototype.repeat@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-0.2.0.tgz#aba36de08dcee6a5a337d49b2ea1da1b28fc0ecf" - - string_decoder@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.0.tgz#384f322ee8a848e500effde99901bba849c5d403" - dependencies: - safe-buffer "~5.1.0" - - string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - - string_decoder@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" - dependencies: - safe-buffer "~5.1.0" - - stringify-object@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.2.2.tgz#9853052e5a88fb605a44cd27445aa257ad7ffbcd" - dependencies: - get-own-enumerable-property-symbols "^2.0.1" - is-obj "^1.0.1" - is-regexp "^1.0.0" - - stringstream@~0.0.4, stringstream@~0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" - - strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - dependencies: - ansi-regex "^2.0.0" - - strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - dependencies: - ansi-regex "^3.0.0" - - strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - dependencies: - is-utf8 "^0.2.0" - - strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - - strip-dirs@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5" - dependencies: - is-natural-number "^4.0.1" - - strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - - strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - dependencies: - get-stdin "^4.0.1" - - strip-indent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - - strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - - style-loader@^0.20.2: - version "0.20.3" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.20.3.tgz#ebef06b89dec491bcb1fdb3452e913a6fd1c10c4" - dependencies: - loader-utils "^1.1.0" - schema-utils "^0.4.5" - - sumchecker@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-1.3.1.tgz#79bb3b4456dd04f18ebdbc0d703a1d1daec5105d" - dependencies: - debug "^2.2.0" - es6-promise "^4.0.5" - - sumchecker@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-2.0.2.tgz#0f42c10e5d05da5d42eea3e56c3399a37d6c5b3e" - dependencies: - debug "^2.2.0" - - supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - - supports-color@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - dependencies: - has-flag "^1.0.0" - - supports-color@^4.2.1: - version "4.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" - dependencies: - has-flag "^2.0.0" - - supports-color@^5.1.0, supports-color@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.3.0.tgz#5b24ac15db80fa927cf5227a4a33fd3c4c7676c0" - dependencies: - has-flag "^3.0.0" - - svgo@^0.7.0: - version "0.7.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" - dependencies: - coa "~1.0.1" - colors "~1.1.2" - csso "~2.3.1" - js-yaml "~3.7.0" - mkdirp "~0.5.1" - sax "~1.2.1" - whet.extend "~0.9.9" - - symbol-observable@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" - - symbol-observable@^0.2.2: - version "0.2.4" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40" - - symbol-observable@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - - symbol-tree@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" - - table@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" - dependencies: - ajv "^5.2.3" - ajv-keywords "^2.1.0" - chalk "^2.1.0" - lodash "^4.17.4" - slice-ansi "1.0.0" - string-width "^2.1.1" - - table@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc" - dependencies: - ajv "^6.0.1" - ajv-keywords "^3.0.0" - chalk "^2.1.0" - lodash "^4.17.4" - slice-ansi "1.0.0" - string-width "^2.1.1" - - tapable@^0.1.8: - version "0.1.10" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4" - - tapable@^0.2.7: - version "0.2.8" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" - - tar-fs@^1.13.0: - version "1.16.0" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.0.tgz#e877a25acbcc51d8c790da1c57c9cf439817b896" - dependencies: - chownr "^1.0.1" - mkdirp "^0.5.1" - pump "^1.0.0" - tar-stream "^1.1.2" - - tar-pack@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" - dependencies: - debug "^2.2.0" - fstream "^1.0.10" - fstream-ignore "^1.0.5" - once "^1.3.3" - readable-stream "^2.1.4" - rimraf "^2.5.1" - tar "^2.2.1" - uid-number "^0.0.6" - - tar-stream@^1.1.2, tar-stream@^1.5.2: - version "1.5.5" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.5.5.tgz#5cad84779f45c83b1f2508d96b09d88c7218af55" - dependencies: - bl "^1.0.0" - end-of-stream "^1.0.0" - readable-stream "^2.0.0" - xtend "^4.0.0" - - tar@^2.0.0, tar@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" - dependencies: - block-stream "*" - fstream "^1.0.2" - inherits "2" - - temp-file@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.1.1.tgz#8823649aa4e8a6e419eb71b601a2e4d472b0f24f" - dependencies: - async-exit-hook "^2.0.1" - bluebird-lst "^1.0.5" - fs-extra-p "^4.5.0" - lazy-val "^1.0.3" - - term-size@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" - dependencies: - execa "^0.7.0" - - text-table@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - - throttleit@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-0.0.2.tgz#cfedf88e60c00dd9697b61fdd2a8343a9b680eaf" - - through2@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" - dependencies: - readable-stream "^2.1.5" - xtend "~4.0.1" - - through2@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/through2/-/through2-0.2.3.tgz#eb3284da4ea311b6cc8ace3653748a52abf25a3f" - dependencies: - readable-stream "~1.1.9" - xtend "~2.1.1" - - through@^2.3.6, through@^2.3.8, through@~2.3.4, through@~2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - - thunky@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.2.tgz#a862e018e3fb1ea2ec3fce5d55605cf57f247371" - - time-stamp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.0.tgz#95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357" - - timed-out@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - - timers-browserify@^2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.6.tgz#241e76927d9ca05f4d959819022f5b3664b64bae" - dependencies: - setimmediate "^1.0.4" - - tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - dependencies: - os-tmpdir "~1.0.2" - - to-arraybuffer@^1.0.0, to-arraybuffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - - to-fast-properties@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" - - to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - - to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - dependencies: - kind-of "^3.0.2" - - to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - - to-regex@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - - toposort@^1.0.0: - version "1.0.6" - resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.6.tgz#c31748e55d210effc00fdcdc7d6e68d7d7bb9cec" - - tough-cookie@>=2.3.3, tough-cookie@^2.3.3, tough-cookie@~2.3.0, tough-cookie@~2.3.3: - version "2.3.4" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" - dependencies: - punycode "^1.4.1" - - tr46@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - dependencies: - punycode "^2.1.0" - - "traverse@>=0.3.0 <0.4": - version "0.3.9" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" - - tree-kill@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.0.tgz#5846786237b4239014f05db156b643212d4c6f36" - - trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - - trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - - trim@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" - - "true-case-path@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.2.tgz#7ec91130924766c7f573be3020c34f8fdfd00d62" - dependencies: - glob "^6.0.4" - - truncate-utf8-bytes@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" - dependencies: - utf8-byte-length "^1.0.1" - - tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - - tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - dependencies: - safe-buffer "^5.0.1" - - tunnel-agent@~0.4.1: - version "0.4.3" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" - - tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - - type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - dependencies: - prelude-ls "~1.1.2" - - type-is@~1.6.15, type-is@~1.6.16: - version "1.6.16" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" - dependencies: - media-typer "0.3.0" - mime-types "~2.1.18" - - typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - - typo-js@*: - version "1.0.3" - resolved "https://registry.yarnpkg.com/typo-js/-/typo-js-1.0.3.tgz#54d8ebc7949f1a7810908b6002c6841526c99d5a" - - ua-parser-js@^0.7.9: - version "0.7.17" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" - - uglify-es@^3.3.4: - version "3.3.9" - resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" - dependencies: - commander "~2.13.0" - source-map "~0.6.1" - - uglify-js@3.3.x: - version "3.3.16" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.16.tgz#23ba13efa27aa00885be7417819e8a9787f94028" - dependencies: - commander "~2.15.0" - source-map "~0.6.1" - - uglify-js@^2.8.29: - version "2.8.29" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" - dependencies: - source-map "~0.5.1" - yargs "~3.10.0" - optionalDependencies: - uglify-to-browserify "~1.0.0" - - uglify-to-browserify@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" - - uglifyjs-webpack-plugin@^0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" - dependencies: - source-map "^0.5.6" - uglify-js "^2.8.29" - webpack-sources "^1.0.1" - - uglifyjs-webpack-plugin@^1.2.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.4.tgz#5eec941b2e9b8538be0a20fc6eda25b14c7c1043" - dependencies: - cacache "^10.0.4" - find-cache-dir "^1.0.0" - schema-utils "^0.4.5" - serialize-javascript "^1.4.0" - source-map "^0.6.1" - uglify-es "^3.3.4" - webpack-sources "^1.1.0" - worker-farm "^1.5.2" - - uid-number@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" - - uint64be@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uint64be/-/uint64be-1.0.1.tgz#1f7154202f2a1b8af353871dda651bf34ce93e95" - - unbzip2-stream@^1.0.9: - version "1.2.5" - resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.2.5.tgz#73a033a567bbbde59654b193c44d48a7e4f43c47" - dependencies: - buffer "^3.0.1" - through "^2.3.6" - - unc-path-regex@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" - - underscore@>1.4.4: - version "1.8.3" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" - - union-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^0.4.3" - - uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - - uniqid@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1" - dependencies: - macaddress "^0.2.8" - - uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - - unique-filename@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.0.tgz#d05f2fe4032560871f30e93cbe735eea201514f3" - dependencies: - unique-slug "^2.0.0" - - unique-slug@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.0.tgz#db6676e7c7cc0629878ff196097c78855ae9f4ab" - dependencies: - imurmurhash "^0.1.4" - - unique-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" - dependencies: - crypto-random-string "^1.0.0" - - universalify@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" - - unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - - unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - - unused-filename@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unused-filename/-/unused-filename-1.0.0.tgz#d340880f71ae2115ebaa1325bef05cc6684469c6" - dependencies: - modify-filename "^1.1.0" - path-exists "^3.0.0" - - unzip-response@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" - - unzipper@^0.8.11: - version "0.8.11" - resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.8.11.tgz#894383dc6b4bdab944e446f665a82d40d167fbd4" - dependencies: - big-integer "^1.6.17" - binary "~0.3.0" - bluebird "~3.4.1" - buffer-indexof-polyfill "~1.0.0" - duplexer2 "~0.1.4" - fstream "~1.0.10" - listenercount "~1.0.1" - readable-stream "~2.1.5" - setimmediate "~1.0.4" - - upath@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.4.tgz#ee2321ba0a786c50973db043a50b7bcba822361d" - - update-notifier@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.3.0.tgz#4e8827a6bb915140ab093559d7014e3ebb837451" - dependencies: - boxen "^1.2.1" - chalk "^2.0.1" - configstore "^3.0.0" - import-lazy "^2.1.0" - is-installed-globally "^0.1.0" - is-npm "^1.0.0" - latest-version "^3.0.0" - semver-diff "^2.0.0" - xdg-basedir "^3.0.0" - - upper-case@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - - urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - - url-loader@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.6.2.tgz#a007a7109620e9d988d14bce677a1decb9a993f7" - dependencies: - loader-utils "^1.0.2" - mime "^1.4.1" - schema-utils "^0.3.0" - - url-parse-lax@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - dependencies: - prepend-http "^1.0.1" - - url-parse@1.0.x: - version "1.0.5" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b" - dependencies: - querystringify "0.0.x" - requires-port "1.0.x" - - url-parse@^1.1.8: - version "1.2.0" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.2.0.tgz#3a19e8aaa6d023ddd27dcc44cb4fc8f7fec23986" - dependencies: - querystringify "~1.0.0" - requires-port "~1.0.0" - - url-to-options@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" - - url@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" - dependencies: - punycode "1.3.2" - querystring "0.2.0" - - url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - dependencies: - punycode "1.3.2" - querystring "0.2.0" - - use@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.0.tgz#14716bf03fdfefd03040aef58d8b4b85f3a7c544" - dependencies: - kind-of "^6.0.2" - - utf8-byte-length@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" - - util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - - util@0.10.3, util@^0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - dependencies: - inherits "2.0.1" - - utila@~0.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz#d7e8e7d7e309107092b05f8d9688824d633a4226" - - utila@~0.4: - version "0.4.0" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - - utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - - uuid@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" - - uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" - - validate-npm-package-license@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338" - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - - vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - - vendors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22" - - verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - - videostream@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/videostream/-/videostream-2.4.2.tgz#9560254d00fabdc40955c1a3c282057d8db1d115" - dependencies: - binary-search "^1.2.0" - inherits "^2.0.1" - mediasource "^2.0.0" - mp4-box-encoding "^1.1.1" - mp4-stream "^2.0.0" - multistream "^2.0.2" - pump "^1.0.1" - range-slice-stream "^1.2.0" - - virtual-module-webpack-plugin@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/virtual-module-webpack-plugin/-/virtual-module-webpack-plugin-0.3.0.tgz#b2095b2b8c51480362ab3ec2bd613bdd507cbd46" - - vm-browserify@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" - dependencies: - indexof "0.0.1" - - w3c-hr-time@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" - dependencies: - browser-process-hrtime "^0.1.2" - - warning@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" - dependencies: - loose-envify "^1.0.0" - - watchpack@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.5.0.tgz#231e783af830a22f8966f65c4c4bacc814072eed" - dependencies: - chokidar "^2.0.2" - graceful-fs "^4.1.2" - neo-async "^2.5.0" - - wbuf@^1.1.0, wbuf@^1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" - dependencies: - minimalistic-assert "^1.0.0" - - webidl-conversions@^4.0.1, webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - - webpack-build-notifier@^0.1.23: - version "0.1.23" - resolved "https://registry.yarnpkg.com/webpack-build-notifier/-/webpack-build-notifier-0.1.23.tgz#7df405dfb77c5584c4e2e27b445f6aa0414ca384" - dependencies: - ansi-regex "^2.0.0" - node-notifier "5.1.2" - strip-ansi "^3.0.1" - - webpack-dev-middleware@1.12.2: - version "1.12.2" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e" - dependencies: - memory-fs "~0.4.1" - mime "^1.5.0" - path-is-absolute "^1.0.0" - range-parser "^1.0.3" - time-stamp "^2.0.0" - - webpack-dev-server@^2.11.1: - version "2.11.2" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.11.2.tgz#1f4f4c78bf1895378f376815910812daf79a216f" - dependencies: - ansi-html "0.0.7" - array-includes "^3.0.3" - bonjour "^3.5.0" - chokidar "^2.0.0" - compression "^1.5.2" - connect-history-api-fallback "^1.3.0" - debug "^3.1.0" - del "^3.0.0" - express "^4.16.2" - html-entities "^1.2.0" - http-proxy-middleware "~0.17.4" - import-local "^1.0.0" - internal-ip "1.2.0" - ip "^1.1.5" - killable "^1.0.0" - loglevel "^1.4.1" - opn "^5.1.0" - portfinder "^1.0.9" - selfsigned "^1.9.1" - serve-index "^1.7.2" - sockjs "0.3.19" - sockjs-client "1.1.4" - spdy "^3.4.1" - strip-ansi "^3.0.0" - supports-color "^5.1.0" - webpack-dev-middleware "1.12.2" - yargs "6.6.0" - - webpack-merge@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.2.tgz#5d372dddd3e1e5f8874f5bf5a8e929db09feb216" - dependencies: - lodash "^4.17.5" - - webpack-sources@^1.0.1, webpack-sources@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54" - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - - webpack@^3.10.0: - version "3.11.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.11.0.tgz#77da451b1d7b4b117adaf41a1a93b5742f24d894" - dependencies: - acorn "^5.0.0" - acorn-dynamic-import "^2.0.0" - ajv "^6.1.0" - ajv-keywords "^3.1.0" - async "^2.1.2" - enhanced-resolve "^3.4.0" - escope "^3.6.0" - interpret "^1.0.0" - json-loader "^0.5.4" - json5 "^0.5.1" - loader-runner "^2.3.0" - loader-utils "^1.1.0" - memory-fs "~0.4.1" - mkdirp "~0.5.0" - node-libs-browser "^2.0.0" - source-map "^0.5.3" - supports-color "^4.2.1" - tapable "^0.2.7" - uglifyjs-webpack-plugin "^0.4.6" - watchpack "^1.4.0" - webpack-sources "^1.0.1" - yargs "^8.0.2" - - websocket-driver@>=0.5.1: - version "0.7.0" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" - dependencies: - http-parser-js ">=0.4.0" - websocket-extensions ">=0.1.1" - - websocket-extensions@>=0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" - - whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3" - dependencies: - iconv-lite "0.4.19" - - whatwg-fetch@>=0.10.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" - - whatwg-fetch@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-0.9.0.tgz#0e3684c6cb9995b43efc9df03e4c365d95fd9cc0" - - whatwg-url@^6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.4.0.tgz#08fdf2b9e872783a7a1f6216260a1d66cc722e08" - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.0" - webidl-conversions "^4.0.1" - - whet.extend@~0.9.9: - version "0.9.9" - resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" - - which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - - which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - - which-pm-runs@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" - - which@1, which@^1.2.10, which@^1.2.12, which@^1.2.9, which@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" - dependencies: - isexe "^2.0.0" - - wide-align@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" - dependencies: - string-width "^1.0.2" - - widest-line@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.0.tgz#0142a4e8a243f8882c0233aa0e0281aa76152273" - dependencies: - string-width "^2.1.1" - - window-size@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" - - window-size@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" - - wordwrap@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" - - wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - - worker-farm@^1.5.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" - dependencies: - errno "~0.1.7" - - wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - - wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - - write-file-atomic@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - - write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" - dependencies: - mkdirp "^0.5.1" - - ws@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-4.1.0.tgz#a979b5d7d4da68bf54efe0408967c324869a7289" - dependencies: - async-limiter "~1.0.0" - safe-buffer "~5.1.0" - - xdg-basedir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" - - xhr@^2.0.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.4.1.tgz#ba982cced205ae5eec387169ac9dc77ca4853d38" - dependencies: - global "~4.3.0" - is-function "^1.0.1" - parse-headers "^2.0.0" - xtend "^4.0.0" - - xml-char-classes@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d" - - xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - - xml2js@0.4.17: - version "0.4.17" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.17.tgz#17be93eaae3f3b779359c795b419705a8817e868" - dependencies: - sax ">=0.6.0" - xmlbuilder "^4.1.0" - - xmlbuilder@4.2.1, xmlbuilder@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.2.1.tgz#aa58a3041a066f90eaa16c2f5389ff19f3f461a5" - dependencies: - lodash "^4.0.0" - - xmlbuilder@8.2.2: - version "8.2.2" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773" - - xmlbuilder@^9.0.7: - version "9.0.7" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" - - xmldom@0.1.x: - version "0.1.27" - resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" - - xpipe@*: - version "1.0.5" - resolved "https://registry.yarnpkg.com/xpipe/-/xpipe-1.0.5.tgz#8dd8bf45fc3f7f55f0e054b878f43a62614dafdf" - - xss-filters@^1.2.6: - version "1.2.7" - resolved "https://registry.yarnpkg.com/xss-filters/-/xss-filters-1.2.7.tgz#59fa1de201f36f2f3470dcac5f58ccc2830b0a9a" - - xtend@^4.0.0, xtend@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - - xtend@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" - dependencies: - object-keys "~0.4.0" - - y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - - y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - - yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - - yargs-parser@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" - dependencies: - camelcase "^3.0.0" - lodash.assign "^4.0.6" - - yargs-parser@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" - dependencies: - camelcase "^3.0.0" - - yargs-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" - dependencies: - camelcase "^3.0.0" - - yargs-parser@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" - dependencies: - camelcase "^4.1.0" - - yargs-parser@^9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" - dependencies: - camelcase "^4.1.0" - - yargs@6.6.0: - version "6.6.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - 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.0" - - yargs@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.0.0.tgz#c052931006c5eee74610e5fc0354bedfd08a201b" - dependencies: - cliui "^4.0.0" - decamelize "^1.1.1" - find-up "^2.1.0" - get-caller-file "^1.0.1" - os-locale "^2.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^9.0.2" - - yargs@^4.2.0, yargs@^4.7.1: - version "4.8.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" - dependencies: - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - lodash.assign "^4.0.3" - 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" - - yargs@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - 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@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" - dependencies: - camelcase "^4.1.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - 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.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^7.0.0" - - yargs@~3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" - dependencies: - camelcase "^1.0.2" - cliui "^2.1.0" - decamelize "^1.0.0" - window-size "0.1.0" - - yauzl@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" - dependencies: - fd-slicer "~1.0.1" - - yauzl@^2.4.2: - version "2.9.1" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.9.1.tgz#a81981ea70a57946133883f029c5821a89359a7f" - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.0.1" - -Trace: - Error: Command failed. - Exit code: 1 - Command: sh - Arguments: -c /Users/IGassmann/Developer/LBRY/lbry-app/node_modules/.bin/lint-staged -D - Directory: /Users/IGassmann/Developer/LBRY/lbry-app - Output: - - at ProcessTermError.MessageError (/usr/local/Cellar/yarn/1.5.1_1/libexec/lib/cli.js:186:110) - at new ProcessTermError (/usr/local/Cellar/yarn/1.5.1_1/libexec/lib/cli.js:226:113) - at ChildProcess. (/usr/local/Cellar/yarn/1.5.1_1/libexec/lib/cli.js:30281:17) - at emitTwo (events.js:126:13) - at ChildProcess.emit (events.js:214:7) - at maybeClose (internal/child_process.js:925:16) - at Process.ChildProcess._handle.onexit (internal/child_process.js:209:5) -- 2.45.3 From 540b9fe4b5b4c9acc14bda40964f0a7755b2d501 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Sun, 25 Mar 2018 13:47:32 -0400 Subject: [PATCH 130/192] docs: add badges to README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index c338fa325..fc0476f28 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ [![Build Status](https://travis-ci.org/lbryio/lbry-app.svg?branch=master)](https://travis-ci.org/lbryio/lbry-app) [![dependencies](https://david-dm.org/lbryio/lbry-app/status.svg)](https://david-dm.org/lbryio/lbry-app) +[![Codacy Badge](https://api.codacy.com/project/badge/Grade/78b627d4f5524792adc48719835e1523)](https://www.codacy.com/app/LBRY/lbry-app?utm_source=github.com&utm_medium=referral&utm_content=lbryio/lbry-app&utm_campaign=Badge_Grade) +[![chat on Discord](https://img.shields.io/discord/362322208485277697.svg?logo=discord)](https://discord.gg/U5aRyN6) The LBRY app is a graphical browser for the decentralized content marketplace provided by the [LBRY](https://lbry.io) protocol. It is essentially the -- 2.45.3 From 20ef534a444df6639317f2ae20f37b4b8054dd8c Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Sun, 25 Mar 2018 13:57:29 -0400 Subject: [PATCH 131/192] docs: update node.js requirement --- README.md | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index fc0476f28..1c18f9d4b 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ development and testing purposes. This will download and install the LBRY app and its dependencies, including [the LBRY daemon](https://github.com/lbryio/lbry) and command line utilities like `node` and `yarn`. -The LBRY app requires Node >= 6; if you have an earlier version of Node installed and want to keep +The LBRY app requires Node >= 7; if you have an earlier version of Node installed and want to keep it, you can use [nvm](https://github.com/creationix/nvm) to switch back and forth. #### Arch Linux and Other Non-Debian Distributions diff --git a/package.json b/package.json index 2a6f4a7a2..d62455fd9 100644 --- a/package.json +++ b/package.json @@ -117,7 +117,7 @@ "yarnhook": "^0.1.1" }, "engines": { - "node": ">=6", + "node": ">=7", "yarn": "^1.3" }, "lbrySettings": { -- 2.45.3 From 234d815dcca3ea4da9e7848adc8398472a39b3bd Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Sun, 25 Mar 2018 14:01:41 -0400 Subject: [PATCH 132/192] chore: update gitignore file --- .gitignore | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 4e8a81944..e8d5eb911 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,6 @@ /node_modules /dist -/build/daemon.ver /build/daemon.zip -/build/venv -*.pyc /static/daemon/lbrynet* /static/locales - - +yarn-error.log -- 2.45.3 From 2999ad4f6eed58b4d0651bad9f6300dadfe865d9 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Sun, 25 Mar 2018 14:05:48 -0400 Subject: [PATCH 133/192] chore: clean-up unused files --- .appveyor.yml | 27 ----- .bumpversion.cfg | 22 ---- Dangerfile | 6 - build.sh | 4 - build/build.ps1 | 32 ------ build/build.sh | 59 ---------- build/changelog.py | 129 --------------------- build/install_deps.sh | 122 -------------------- build/lbry3.pfx.enc | Bin 5408 -> 0 bytes build/release.py | 250 ----------------------------------------- build/requirements.txt | 6 - build/upload_assets.py | 146 ------------------------ 12 files changed, 803 deletions(-) delete mode 100644 .appveyor.yml delete mode 100644 .bumpversion.cfg delete mode 100644 Dangerfile delete mode 100755 build.sh delete mode 100644 build/build.ps1 delete mode 100755 build/build.sh delete mode 100644 build/changelog.py delete mode 100755 build/install_deps.sh delete mode 100644 build/lbry3.pfx.enc delete mode 100644 build/release.py delete mode 100644 build/requirements.txt delete mode 100644 build/upload_assets.py diff --git a/.appveyor.yml b/.appveyor.yml deleted file mode 100644 index 237d2ee1b..000000000 --- a/.appveyor.yml +++ /dev/null @@ -1,27 +0,0 @@ -# Test against the latest version of this Node.js version -environment: - nodejs_version: 7 - GH_TOKEN: - secure: LiI5jyuHUw6XbH4kC3gP1HX4P/v4rwD/gCNtaFhQu2AvJz1/1wALkp5ECnIxRySN - pfx_key: - secure: 1mwqyRy7hDqDjDK+TIAoaXyXzpNgwruFNA6TPkinUcVM7A+NLD33RQLnfnwVy+R5ovD2pUfhQ6+N0Fqebv6tZh436LIEsock+6IOdpgFwrg= - AWS_ACCESS_KEY_ID: - secure: iVGwoJ7ogspjSmuqr+haVPLglSgQsp6tUZx6mIlKH7Q= - AWS_SECRET_ACCESS_KEY: - secure: zKaqdZGPl0exDL5YhJkb33prSemC9Rzg9S7Lw2wFy1WnJ6ffgl6mQH7jqJDUTqsY - CSC_LINK: build\lbry3.pfx - CSC_KEY_PASSWORD: - secure: u6DydPcdrUJlxGL9uc7yQRYG8+5rY6aAEE9nfCSzFyNzZlX9NniOp8Uh5ZKQqX7bGEngLI6ipbLfiJvn0XFnhbn2iTkOuMqOXVJVOehvwlQ= - -skip_branch_with_pr: false - -clone_folder: C:\projects\lbry-app - -build_script: - - ps: build\build.ps1 - -test: off - -artifacts: - - path: dist\*.exe - name: LBRY diff --git a/.bumpversion.cfg b/.bumpversion.cfg deleted file mode 100644 index fb5518f9f..000000000 --- a/.bumpversion.cfg +++ /dev/null @@ -1,22 +0,0 @@ -[bumpversion] -current_version = 0.20.0 -commit = True -tag = True -parse = (?P\d+)\.(?P\d+)\.(?P\d+)(-(?P[a-z]+)(?P\d+))? -serialize = - {major}.{minor}.{patch}-{release}{candidate} - {major}.{minor}.{patch} - -[bumpversion:part:candidate] -first_value = 1 - -[bumpversion:part:release] -optional_value = production -values = - rc - production - -[bumpversion:file:package.json] -search = "version": "{current_version}" -replace = "version": "{new_version}" - diff --git a/Dangerfile b/Dangerfile deleted file mode 100644 index 6cfa33ba7..000000000 --- a/Dangerfile +++ /dev/null @@ -1,6 +0,0 @@ -# Add a CHANGELOG entry for app changes -has_app_changes = !(git.modified_files.grep(/js/).empty? && git.modified_files.grep(/scss/).empty?) -if !git.modified_files.include?("CHANGELOG.md") && has_app_changes - fail("Please include a CHANGELOG entry.") - message "See http://keepachangelog.com/en/0.3.0/ for details on good changelog guidelines" -end diff --git a/build.sh b/build.sh deleted file mode 100755 index ec3e6d703..000000000 --- a/build.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -# this is here because teamcity runs /build.sh to build the project -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -"$DIR/build/build.sh" diff --git a/build/build.ps1 b/build/build.ps1 deleted file mode 100644 index 730fd80af..000000000 --- a/build/build.ps1 +++ /dev/null @@ -1,32 +0,0 @@ -pip install -r build\requirements.txt - -# Decrypt cert -nuget install secure-file -ExcludeVersion -secure-file\tools\secure-file -decrypt build\lbry3.pfx.enc -secret "$env:pfx_key" - -# Get the latest stable version of Node.js or io.js -Install-Product node $env:nodejs_version -npm install -g yarn -yarn install - -# clean dist\ -if (Test-Path -Path dist\) { - Remove-Item -Recurse -Force dist\ -} -New-Item -ItemType directory -Path dist\ - -# get daemon and cli executable -$package_settings = (Get-Content package.json -Raw | ConvertFrom-Json).lbrySettings -$daemon_ver = $package_settings.lbrynetDaemonVersion -$daemon_url_template = $package_settings.lbrynetDaemonUrlTemplate -$daemon_url = $daemon_url_template.Replace('OSNAME', 'windows').Replace('DAEMONVER', $daemon_ver) -Invoke-WebRequest -Uri $daemon_url -OutFile daemon.zip -Expand-Archive daemon.zip -DestinationPath static\daemon\ -dir static\daemon\ # verify that daemon binary is there -rm daemon.zip - -# build electron app -yarn build -dir dist # verify that binary was built/named correctly - -python build\upload_assets.py diff --git a/build/build.sh b/build/build.sh deleted file mode 100755 index 7ce077b3d..000000000 --- a/build/build.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/bash - -set -euo pipefail - -ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd )" -cd "$ROOT" -BUILD_DIR="$ROOT/build" - -LINUX=false -OSX=false -if [ "$(uname)" == "Darwin" ]; then - echo -e "\033[0;32mBuilding for OSX\x1b[m" - OSX=true -elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then - echo -e "\033[0;32mBuilding for Linux\x1b[m" - LINUX=true -else - echo -e "\033[1;31mPlatform detection failed\x1b[m" - exit 1 -fi - -if $OSX; then - ICON="$BUILD_DIR/icon.icns" -else - ICON="$BUILD_DIR/icons/48x48.png" -fi - -FULL_BUILD="${FULL_BUILD:-false}" -if [ -n "${TEAMCITY_VERSION:-}" -o -n "${APPVEYOR:-}" ]; then - FULL_BUILD="true" -fi - -DEPS="${DEPS:-$FULL_BUILD}" -if [ "$DEPS" != "true" ]; then - echo -e "\033[1;36mDependencies will NOT be installed. Run with \"INSTALL_DEPENDENCIES=true\" to install dependencies, or \"FULL_BUILD=true\" to install dependencies and build a complete app.\x1b[m" -else - # install dependencies - echo -e "\033[0;32mInstalling Dependencies\x1b[m" - "$BUILD_DIR/install_deps.sh" -fi - -[ -d "$ROOT/dist" ] && rm -rf "$ROOT/dist" - -yarn install - -################### -# Build the app # -################### -if [ "$FULL_BUILD" == "true" ]; then - if $OSX; then - security unlock-keychain -p ${KEYCHAIN_PASSWORD} osx-build.keychain - fi - - yarn build - - echo -e '\033[0;32mBuild and packaging complete.\x1b[m' -else - echo -e 'Build complete. Run \033[1;31myarn dev\x1b[m to launch the app' -fi diff --git a/build/changelog.py b/build/changelog.py deleted file mode 100644 index 322fc30a7..000000000 --- a/build/changelog.py +++ /dev/null @@ -1,129 +0,0 @@ -import datetime -import re - -CHANGELOG_START_RE = re.compile(r'^\#\# \[Unreleased\]') -CHANGELOG_END_RE = re.compile(r'^\#\# \[.*\] - \d{4}-\d{2}-\d{2}') -# if we come across a section header between two release section headers -# then we probably have an improperly formatted changelog -CHANGELOG_ERROR_RE = re.compile(r'^\#\# ') -SECTION_RE = re.compile(r'^\#\#\# (.*)$') -EMPTY_RE = re.compile(r'^\w*\*\w*$') -ENTRY_RE = re.compile(r'\* (.*)') -VALID_SECTIONS = ['Added', 'Changed', 'Deprecated', 'Removed', 'Fixed', 'Security'] - -# allocate some entries to cut-down on merge conflicts -TEMPLATE = """### Added - * - * - -### Changed - * - * - -### Fixed - * - * - -### Deprecated - * - * - -### Removed - * - * - -""" - - -class Changelog(object): - def __init__(self, path): - self.path = path - self.start = [] - self.unreleased = [] - self.rest = [] - self._parse() - - def _parse(self): - with open(self.path) as fp: - lines = fp.readlines() - - unreleased_start_found = False - unreleased_end_found = False - - for line in lines: - if not unreleased_start_found: - self.start.append(line) - if CHANGELOG_START_RE.search(line): - unreleased_start_found = True - continue - if unreleased_end_found: - self.rest.append(line) - continue - if CHANGELOG_END_RE.search(line): - self.rest.append(line) - unreleased_end_found = True - continue - if CHANGELOG_ERROR_RE.search(line): - raise Exception( - 'Failed to parse {}: {}'.format(self.path, 'unexpected section header found')) - self.unreleased.append(line) - - self.unreleased = self._normalize_section(self.unreleased) - - @staticmethod - def _normalize_section(lines): - """Parse a changelog entry and output a normalized form""" - sections = {} - current_section_name = None - current_section_contents = [] - for line in lines: - line = line.strip() - if not line or EMPTY_RE.match(line): - continue - match = SECTION_RE.match(line) - if match: - if current_section_contents: - sections[current_section_name] = current_section_contents - current_section_contents = [] - current_section_name = match.group(1) - if current_section_name not in VALID_SECTIONS: - raise ValueError("Section '{}' is not valid".format(current_section_name)) - continue - match = ENTRY_RE.match(line) - if match: - current_section_contents.append(match.group(1)) - continue - raise Exception('Something is wrong with line: {}'.format(line)) - if current_section_contents: - sections[current_section_name] = current_section_contents - - output = [] - for section in VALID_SECTIONS: - if section not in sections: - continue - output.append('### {}'.format(section)) - for entry in sections[section]: - output.append(' * {}'.format(entry)) - output.append("\n") - return output - - def get_unreleased(self): - return '\n'.join(self.unreleased) if self.unreleased else None - - def bump(self, version): - if not self.unreleased: - return - - today = datetime.datetime.today() - header = "## [{}] - {}\n\n".format(version, today.strftime('%Y-%m-%d')) - - changelog_data = ( - ''.join(self.start) + - TEMPLATE + - header + - '\n'.join(self.unreleased) + '\n\n' - + ''.join(self.rest) - ) - - with open(self.path, 'w') as fp: - fp.write(changelog_data) diff --git a/build/install_deps.sh b/build/install_deps.sh deleted file mode 100755 index c31b010f0..000000000 --- a/build/install_deps.sh +++ /dev/null @@ -1,122 +0,0 @@ -#!/bin/bash - -set -euo pipefail - -LINUX=false -OSX=false - -if [ "$(uname)" == "Darwin" ]; then - OSX=true -elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then - LINUX=true -else - echo "Platform detection failed" - exit 1 -fi - - -SUDO='' -if (( $EUID != 0 )); then - SUDO='sudo' -fi - -cmd_exists() { - command -v "$1" >/dev/null 2>&1 - return $? -} - -set +eu -GITUSERNAME=$(git config --global --get user.name) -if [ -z "$GITUSERNAME" ]; then - git config --global user.name "$(whoami)" -fi -GITEMAIL=$(git config --global --get user.email) -if [ -z "$GITEMAIL" ]; then - git config --global user.email "$(whoami)@lbry.io" -fi -set -eu - - -if $LINUX; then - INSTALL="$SUDO apt-get install --no-install-recommends -y" - $INSTALL build-essential libssl-dev libffi-dev libgmp3-dev python2.7-dev libsecret-1-dev curl -elif $OSX; then - if ! cmd_exists brew; then - /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" - else - brew update - fi -fi - - -if ! cmd_exists python; then - if $LINUX; then - $INSTALL python2.7 - elif $OSX; then - brew install python - else - echo "python2.7 required" - exit 1 - fi -fi - -PYTHON_VERSION=$(python -c 'import sys; print(".".join(map(str, sys.version_info[:2])))') -if [ "$PYTHON_VERSION" != "2.7" ]; then - echo "Python 2.7 required" - exit 1 -fi - -if ! cmd_exists pip; then - if $LINUX; then - $INSTALL python-pip - elif $OSX; then - $SUDO easy_install pip - else - echo "pip required" - exit 1 - fi - $SUDO pip install --upgrade pip -fi - -if $LINUX && [ "$(pip list --format=columns | grep setuptools | wc -l)" -ge 1 ]; then - $SUDO pip install setuptools -fi - -if ! cmd_exists virtualenv; then - $SUDO pip install virtualenv -fi - -if ! cmd_exists node; then - if $LINUX; then - curl -sL https://deb.nodesource.com/setup_8.x | $SUDO -E bash - - $INSTALL nodejs - elif $OSX; then - brew install node - else - echo "node required" - exit 1 - fi -fi - -if ! cmd_exists yarn; then - if $LINUX; then - curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | $SUDO apt-key add - - echo "deb https://dl.yarnpkg.com/debian/ stable main" | $SUDO tee /etc/apt/sources.list.d/yarn.list - $SUDO apt-get update - $SUDO apt-get -o Dpkg::Options::="--force-overwrite" install yarn - elif $OSX; then - brew install yarn - else - echo "yarn required" - exit 1 - fi -fi - -if ! cmd_exists unzip; then - if $LINUX; then - $INSTALL unzip - else - echo "unzip required" - exit 1 - fi -fi diff --git a/build/lbry3.pfx.enc b/build/lbry3.pfx.enc deleted file mode 100644 index 330cfc05b4d34fec9470f5a774f1f0255a9292e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5408 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
H9wcEVIQLC;{_Lrhw!1?O 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 KtknZI2*A(0C1wQx diff --git a/build/release.py b/build/release.py deleted file mode 100644 index f17600e79..000000000 --- a/build/release.py +++ /dev/null @@ -1,250 +0,0 @@ -"""Bump version and create Github release - -This script should be run locally, not on a build server. -""" -import argparse -import contextlib -import os -import json -import re -import requests -import subprocess -import sys - -import git -import github - -import changelog - -ROOT = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) -APP_PACKAGE_JSON_FILE = os.path.join(ROOT, 'package.json') - - -def main(): - bumpversion_parts = get_bumpversion_parts() - - parser = argparse.ArgumentParser() - parser.add_argument("part", choices=bumpversion_parts, help="part of version to bump") - parser.add_argument("--skip-sanity-checks", action="store_true") - parser.add_argument("--skip-push", action="store_true") - parser.add_argument("--dry-run", action="store_true") - parser.add_argument("--confirm", action="store_true") - args = parser.parse_args() - - if args.dry_run: - print "DRY RUN. Nothing will be committed/pushed." - - repo = Repo('lbry-app', args.part, ROOT) - branch = 'master' - - print 'Current version: {}'.format(repo.current_version) - print 'New version: {}'.format(repo.new_version) - with open(APP_PACKAGE_JSON_FILE, 'r') as f: - package_settings = json.load(f)['lbrySettings'] - daemon_url_template = package_settings['lbrynetDaemonUrlTemplate'] - daemon_version = package_settings['lbrynetDaemonVersion'] - print 'Daemon version: {} ({})'.format(daemon_version, daemon_url_template.replace('DAEMONVER', daemon_version)) - - if not args.confirm and not confirm(): - print "Aborting" - return 1 - - if not args.skip_sanity_checks: - run_sanity_checks(repo, branch) - repo.assert_new_tag_is_absent() - - is_rc = re.search('-rc\d+$', repo.new_version) is not None - # only have a release message for real releases, not for RCs - release_msg = '' if is_rc else repo.get_unreleased_changelog() - - if args.dry_run: - print "rc: " + ("yes" if is_rc else "no") - print "release message: \n" + (release_msg or " NO MESSAGE FOR RCs") - return - - gh_token = get_gh_token() - auth = github.Github(gh_token) - github_repo = auth.get_repo('lbryio/lbry-app') - - if not is_rc: - repo.bump_changelog() - repo.bumpversion() - - new_tag = repo.get_new_tag() - github_repo.create_git_release(new_tag, new_tag, release_msg, draft=True, prerelease=is_rc) - - if args.skip_push: - print ( - 'Skipping push; you will have to reset and delete tags if ' - 'you want to run this script again.' - ) - else: - repo.git_repo.git.push(follow_tags=True, recurse_submodules='check') - - -class Repo(object): - def __init__(self, name, part, directory): - self.name = name - self.part = part - if not self.part: - raise Exception('Part required') - self.directory = directory - self.git_repo = git.Repo(self.directory) - self._bumped = False - - self.current_version = self._get_current_version() - self.new_version = self._get_new_version() - self._changelog = changelog.Changelog(os.path.join(self.directory, 'CHANGELOG.md')) - - def get_new_tag(self): - return 'v' + self.new_version - - def get_unreleased_changelog(self): - return self._changelog.get_unreleased() - - def bump_changelog(self): - self._changelog.bump(self.new_version) - with pushd(self.directory): - self.git_repo.git.add(os.path.basename(self._changelog.path)) - - def _get_current_version(self): - with pushd(self.directory): - output = subprocess.check_output( - ['bumpversion', '--dry-run', '--list', '--allow-dirty', self.part]) - return re.search('^current_version=(.*)$', output, re.M).group(1) - - def _get_new_version(self): - with pushd(self.directory): - output = subprocess.check_output( - ['bumpversion', '--dry-run', '--list', '--allow-dirty', self.part]) - return re.search('^new_version=(.*)$', output, re.M).group(1) - - def bumpversion(self): - if self._bumped: - raise Exception('Cowardly refusing to bump a repo twice') - with pushd(self.directory): - subprocess.check_call(['bumpversion', '--allow-dirty', self.part]) - self._bumped = True - - def assert_new_tag_is_absent(self): - new_tag = self.get_new_tag() - tags = self.git_repo.git.tag() - if new_tag in tags.split('\n'): - raise Exception('Tag {} is already present in repo {}.'.format(new_tag, self.name)) - - def is_behind(self, branch): - self.git_repo.remotes.origin.fetch() - rev_list = '{branch}...origin/{branch}'.format(branch=branch) - commits_behind = self.git_repo.git.rev_list(rev_list, right_only=True, count=True) - commits_behind = int(commits_behind) - return commits_behind > 0 - - -def get_bumpversion_parts(): - with pushd(ROOT): - output = subprocess.check_output([ - 'bumpversion', '--dry-run', '--list', '--allow-dirty', 'fake-part', - ]) - parse_line = re.search('^parse=(.*)$', output, re.M).group(1) - return tuple(re.findall('<([^>]+)>', parse_line)) - - -def get_gh_token(): - if 'GH_TOKEN' in os.environ: - return os.environ['GH_TOKEN'] - else: - print """ -Please enter your personal access token. If you don't have one -See https://github.com/lbryio/lbry-app/wiki/Release-Script#generate-a-personal-access-token -for instructions on how to generate one. - -You can also set the GH_TOKEN environment variable to avoid seeing this message -in the future""" - return raw_input('token: ').strip() - - -def confirm(): - try: - return raw_input('Is this what you want? [y/N] ').strip().lower() == 'y' - except KeyboardInterrupt: - return False - - -def run_sanity_checks(repo, branch): - if repo.git_repo.is_dirty(): - print 'Cowardly refusing to release a dirty repo' - sys.exit(1) - if repo.git_repo.active_branch.name != branch: - print 'Cowardly refusing to release when not on the {} branch'.format(branch) - sys.exit(1) - if repo.is_behind(branch): - print 'Cowardly refusing to release when behind origin' - sys.exit(1) - if not is_custom_bumpversion_version(): - print ( - 'Install LBRY\'s fork of bumpversion: ' - 'pip install -U git+https://github.com/lbryio/bumpversion.git' - ) - sys.exit(1) - if not check_daemon_urls(): - sys.exit(1) - - -def check_daemon_urls(): - with open(APP_PACKAGE_JSON_FILE, 'r') as f: - package_settings = json.load(f)['lbrySettings'] - - daemon_url_template = package_settings['lbrynetDaemonUrlTemplate'] - daemon_version = package_settings['lbrynetDaemonVersion'] - - if "OSNAME" not in daemon_url_template: - print "Daemon URL must include the string \"OSNAME\"" - return False - elif "DAEMONVER" not in daemon_url_template: - print "Daemon URL must include the string \"DAEMONVER\"" - return False - - for osname in ('linux', 'macos', 'windows'): - if not check_url(daemon_url_template.replace('DAEMONVER', daemon_version).replace('OSNAME', osname)): - print "Daemon URL for", osname, " does not work" - return False - - return True - -def check_url(url): - url = url.strip() - r = requests.head(url) - if r.status_code >= 400: - return False - elif r.status_code >= 300: - new_location = r.headers.get('Location').strip() - if new_location == url: - # self-loop - return False - if "amazonaws.com" in new_location: - # HEAD doesnt work on s3 links, so assume its good - return True - return check_url(new_location) - return True - - -def is_custom_bumpversion_version(): - try: - output = subprocess.check_output(['bumpversion', '-v'], stderr=subprocess.STDOUT).strip() - if output == 'bumpversion 0.5.4-lbry': - return True - except (subprocess.CalledProcessError, OSError): - pass - return False - - -@contextlib.contextmanager -def pushd(new_dir): - previous_dir = os.getcwd() - os.chdir(new_dir) - yield - os.chdir(previous_dir) - - -if __name__ == '__main__': - sys.exit(main()) diff --git a/build/requirements.txt b/build/requirements.txt deleted file mode 100644 index 75805d517..000000000 --- a/build/requirements.txt +++ /dev/null @@ -1,6 +0,0 @@ -GitPython==2.1.1 -PyGithub==1.32 -requests[security]==2.13.0 -uritemplate==3.0.0 -git+https://github.com/lbryio/bumpversion.git -boto3==1.4.4 diff --git a/build/upload_assets.py b/build/upload_assets.py deleted file mode 100644 index b0fb5513c..000000000 --- a/build/upload_assets.py +++ /dev/null @@ -1,146 +0,0 @@ -import glob -import json -import os -import platform -import subprocess -import sys - -import github -import uritemplate -import boto3 - -def main(): - upload_to_github_if_tagged('lbryio/lbry-app') - - -def get_asset_path(): - this_dir = os.path.dirname(os.path.realpath(__file__)) - system = platform.system() - if system == 'Darwin': - suffix = 'dmg' - elif system == 'Linux': - suffix = 'deb' - elif system == 'Windows': - suffix = 'exe' - else: - raise Exception("I don't know about any artifact on {}".format(system)) - - return os.path.realpath(glob.glob(this_dir + '/../dist/LBRY*.' + suffix)[0]) - -def get_update_asset_path(): - # Get the asset used used for updates. On Mac, this is a .zip; on - # Windows it's just the installer file. - if platform.system() == 'Darwin': - this_dir = os.path.dirname(os.path.realpath(__file__)) - return os.path.realpath(glob.glob(this_dir + '/../dist/LBRY*.zip')[0]) - else: - return get_asset_path() - - -def get_latest_file_path(): - # The update metadata file is called latest.yml on Windows, latest-mac.yml on - # Mac, latest-linux.yml on Linux - this_dir = os.path.dirname(os.path.realpath(__file__)) - - latestfilematches = glob.glob(this_dir + '/../dist/latest*.yml') - - return latestfilematches[0] if latestfilematches else None - -def upload_to_github_if_tagged(repo_name): - try: - current_tag = subprocess.check_output( - ['git', 'describe', '--exact-match', 'HEAD']).strip() - except subprocess.CalledProcessError: - print 'Not uploading to GitHub as we are not currently on a tag' - return 1 - - print "Current tag: " + current_tag - - if 'GH_TOKEN' not in os.environ: - print 'Must set GH_TOKEN in order to publish assets to a release' - return 1 - - gh_token = os.environ['GH_TOKEN'] - auth = github.Github(gh_token) - repo = auth.get_repo(repo_name) - - if not check_repo_has_tag(repo, current_tag): - print 'Tag {} is not in repo {}'.format(current_tag, repo) - # TODO: maybe this should be an error - return 1 - - asset_path = get_asset_path() - print "Uploading " + asset_path + " to Github tag " + current_tag - release = get_github_release(repo, current_tag) - upload_asset_to_github(release, asset_path, gh_token) - - -def check_repo_has_tag(repo, target_tag): - tags = repo.get_tags().get_page(0) - for tag in tags: - if tag.name == target_tag: - return True - return False - - -def get_github_release(repo, current_tag): - for release in repo.get_releases(): - if release.tag_name == current_tag: - return release - raise Exception('No release for {} was found'.format(current_tag)) - - -def upload_asset_to_github(release, asset_to_upload, token): - basename = os.path.basename(asset_to_upload) - for asset in release.raw_data['assets']: - if asset['name'] == basename: - print 'File {} has already been uploaded to {}'.format(basename, release.tag_name) - return - - upload_uri = uritemplate.expand(release.upload_url, {'name': basename}) - count = 0 - while count < 10: - try: - output = _curl_uploader(upload_uri, asset_to_upload, token) - if 'errors' in output: - raise Exception(output) - else: - print 'Successfully uploaded to {}'.format(output['browser_download_url']) - except Exception: - print 'Failed uploading on attempt {}'.format(count + 1) - count += 1 - - -def _curl_uploader(upload_uri, asset_to_upload, token): - # using requests.post fails miserably with SSL EPIPE errors. I spent - # half a day trying to debug before deciding to switch to curl. - # - # TODO: actually set the content type - print 'Using curl to upload {} to {}'.format(asset_to_upload, upload_uri) - cmd = [ - 'curl', - '-sS', - '-X', 'POST', - '-u', ':{}'.format(os.environ['GH_TOKEN']), - '--header', 'Content-Type: application/octet-stream', - '--data-binary', '@-', - upload_uri - ] - # '-d', '{"some_key": "some_value"}', - print 'Calling curl:' - print cmd - print - with open(asset_to_upload, 'rb') as fp: - p = subprocess.Popen(cmd, stdin=fp, stderr=subprocess.PIPE, stdout=subprocess.PIPE) - stdout, stderr = p.communicate() - print 'curl return code:', p.returncode - if stderr: - print 'stderr output from curl:' - print stderr - print 'stdout from curl:' - print stdout - return json.loads(stdout) - - -if __name__ == '__main__': - sys.exit(main()) -- 2.45.3 From 87cb8731c8ff89e32653391c43187d2d6fcd21c7 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Sun, 25 Mar 2018 14:11:16 -0400 Subject: [PATCH 134/192] docs: update README.md --- README.md | 30 ++++-------------------------- 1 file changed, 4 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 1c18f9d4b..112546e83 100644 --- a/README.md +++ b/README.md @@ -39,40 +39,18 @@ development and testing purposes. ### One-time Setup -1. Clone this repo -2. `DEPS=true ./build.sh` - -This will download and install the LBRY app and its dependencies, including -[the LBRY daemon](https://github.com/lbryio/lbry) and command line utilities like `node` and `yarn`. -The LBRY app requires Node >= 7; if you have an earlier version of Node installed and want to keep -it, you can use [nvm](https://github.com/creationix/nvm) to switch back and forth. - -#### Arch Linux and Other Non-Debian Distributions - -Running the build script with `DEPS=true` triggers a bash script with `apt-get` specific commands. -If you are using a distribution without `apt-get`, try running the script as: - -`./build.sh` - -You may also have to install the package [libsecret](https://wiki.gnome.org/Projects/Libsecret) if -it is not already installed. +1. Clone this repository +2. Run `$ yarn` ### Running The app can be run from the sources using the following command: -`yarn dev` - -### On Windows - -#### One-time Setup - -Download the lbry daemon and CLI [binaries](https://github.com/lbryio/lbry/releases) and place them -in `static\daemon`. +`$ yarn dev` ### Build -Run `yarn build`. +Run `$ yarn build`. We use [electron-builder](https://github.com/electron-userland/electron-builder) to create distributable packages. -- 2.45.3 From 2251fe5832fb1053bc69e313d98ce3ba368cb557 Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Mon, 26 Mar 2018 00:31:52 -0700 Subject: [PATCH 135/192] Notify after download, badges and fix error --- src/renderer/component/subHeader/index.js | 2 + src/renderer/component/subHeader/view.jsx | 12 +- src/renderer/constants/action_types.js | 2 + src/renderer/constants/notification_types.js | 3 + src/renderer/page/subscriptions/index.js | 8 +- src/renderer/page/subscriptions/view.jsx | 16 ++- src/renderer/redux/actions/content.js | 68 ++++++++-- src/renderer/redux/actions/subscriptions.js | 119 ++++++++++-------- src/renderer/redux/reducers/subscriptions.js | 49 ++++++++ src/renderer/redux/selectors/subscriptions.js | 4 +- 10 files changed, 217 insertions(+), 66 deletions(-) create mode 100644 src/renderer/constants/notification_types.js diff --git a/src/renderer/component/subHeader/index.js b/src/renderer/component/subHeader/index.js index e550952c2..f445734c5 100644 --- a/src/renderer/component/subHeader/index.js +++ b/src/renderer/component/subHeader/index.js @@ -2,11 +2,13 @@ import React from 'react'; import { connect } from 'react-redux'; import { selectCurrentPage, selectHeaderLinks } from 'redux/selectors/navigation'; import { doNavigate } from 'redux/actions/navigation'; +import { selectNotifications } from 'redux/selectors/subscriptions'; import SubHeader from './view'; const select = (state, props) => ({ currentPage: selectCurrentPage(state), subLinks: selectHeaderLinks(state), + notifications: selectNotifications(state), }); const perform = dispatch => ({ diff --git a/src/renderer/component/subHeader/view.jsx b/src/renderer/component/subHeader/view.jsx index 65227dc72..8ede92169 100644 --- a/src/renderer/component/subHeader/view.jsx +++ b/src/renderer/component/subHeader/view.jsx @@ -1,9 +1,15 @@ import React from 'react'; import Link from 'component/link'; import classnames from 'classnames'; +import * as NOTIFICATION_TYPES from 'constants/notification_types'; const SubHeader = props => { - const { subLinks, currentPage, navigate, fullWidth, smallMargin } = props; + const { subLinks, currentPage, navigate, fullWidth, smallMargin, notifications } = props; + + const badges = Object.keys(notifications).reduce( + (acc, cur) => (notifications[cur].type === NOTIFICATION_TYPES.DOWNLOADING ? acc : acc + 1), + 0 + ); const links = []; @@ -14,7 +20,9 @@ const SubHeader = props => { key={link} className={link == currentPage ? 'sub-header-selected' : 'sub-header-unselected'} > - {subLinks[link]} + {subLinks[link] === 'Subscriptions' && badges + ? `Subscriptions (${badges})` + : subLinks[link]} ); } diff --git a/src/renderer/constants/action_types.js b/src/renderer/constants/action_types.js index f4a993143..43594a8ce 100644 --- a/src/renderer/constants/action_types.js +++ b/src/renderer/constants/action_types.js @@ -165,6 +165,8 @@ export const CHANNEL_SUBSCRIBE = 'CHANNEL_SUBSCRIBE'; export const CHANNEL_UNSUBSCRIBE = 'CHANNEL_UNSUBSCRIBE'; export const HAS_FETCHED_SUBSCRIPTIONS = 'HAS_FETCHED_SUBSCRIPTIONS'; export const SET_SUBSCRIPTION_LATEST = 'SET_SUBSCRIPTION_LATEST'; +export const SET_SUBSCRIPTION_NOTIFICATION = 'SET_SUBSCRIPTION_NOTIFICATION'; +export const SET_SUBSCRIPTION_NOTIFICATIONS = 'SET_SUBSCRIPTION_NOTIFICATIONS'; export const CHECK_SUBSCRIPTION_STARTED = 'CHECK_SUBSCRIPTION_STARTED'; export const CHECK_SUBSCRIPTION_COMPLETED = 'CHECK_SUBSCRIPTION_COMPLETED'; export const CHECK_SUBSCRIPTIONS_SUBSCRIBE = 'CHECK_SUBSCRIPTIONS_SUBSCRIBE'; diff --git a/src/renderer/constants/notification_types.js b/src/renderer/constants/notification_types.js new file mode 100644 index 000000000..4b1dd975a --- /dev/null +++ b/src/renderer/constants/notification_types.js @@ -0,0 +1,3 @@ +export const DOWNLOADING = 'DOWNLOADING'; +export const DOWNLOADED = 'DOWNLOADED'; +export const NOTIFY_ONLY = 'NOTIFY_ONLY;'; diff --git a/src/renderer/page/subscriptions/index.js b/src/renderer/page/subscriptions/index.js index 1cd401dda..4d1ce6409 100644 --- a/src/renderer/page/subscriptions/index.js +++ b/src/renderer/page/subscriptions/index.js @@ -4,18 +4,24 @@ import { selectSubscriptionsFromClaims, selectSubscriptions, selectHasFetchedSubscriptions, + selectNotifications, } from 'redux/selectors/subscriptions'; import { doFetchClaimsByChannel } from 'redux/actions/content'; -import { setHasFetchedSubscriptions } from 'redux/actions/subscriptions'; +import { + setHasFetchedSubscriptions, + setSubscriptionNotifications, +} from 'redux/actions/subscriptions'; import SubscriptionsPage from './view'; const select = state => ({ hasFetchedSubscriptions: state.subscriptions.hasFetchedSubscriptions, savedSubscriptions: selectSubscriptions(state), subscriptions: selectSubscriptionsFromClaims(state), + notifications: selectNotifications(state), }); export default connect(select, { doFetchClaimsByChannel, setHasFetchedSubscriptions, + setSubscriptionNotifications, })(SubscriptionsPage); diff --git a/src/renderer/page/subscriptions/view.jsx b/src/renderer/page/subscriptions/view.jsx index 3e09748a5..8f0e56840 100644 --- a/src/renderer/page/subscriptions/view.jsx +++ b/src/renderer/page/subscriptions/view.jsx @@ -4,6 +4,7 @@ import SubHeader from 'component/subHeader'; import { BusyMessage } from 'component/common.js'; import { FeaturedCategory } from 'page/discover/view'; import type { Subscription } from 'redux/reducers/subscriptions'; +import * as NOTIFICATION_TYPES from 'constants/notification_types'; type SavedSubscriptions = Array; @@ -23,11 +24,23 @@ export default class extends React.PureComponent { // that causes this component to be rendered with zero savedSubscriptions // we need to wait until persist/REHYDRATE has fired before rendering the page componentDidMount() { - const { savedSubscriptions, setHasFetchedSubscriptions } = this.props; + const { + savedSubscriptions, + setHasFetchedSubscriptions, + notifications, + setSubscriptionNotifications, + } = this.props; if (savedSubscriptions.length) { this.fetchSubscriptions(savedSubscriptions); setHasFetchedSubscriptions(); } + const newNotifications = {}; + Object.keys(notifications).forEach(cur => { + if (notifications[cur].type === NOTIFICATION_TYPES.DOWNLOADING) { + newNotifications[cur] = { ...notifications[cur] }; + } + }); + setSubscriptionNotifications(newNotifications); } componentWillReceiveProps(props: Props) { @@ -52,6 +65,7 @@ export default class extends React.PureComponent { render() { const { subscriptions, savedSubscriptions } = this.props; + // TODO: if you are subscribed to an empty channel, this will always be true (but it should not be) const someClaimsNotLoaded = Boolean( subscriptions.find(subscription => !subscription.claims.length) ); diff --git a/src/renderer/redux/actions/content.js b/src/renderer/redux/actions/content.js index 146b9b6d5..2fdffc677 100644 --- a/src/renderer/redux/actions/content.js +++ b/src/renderer/redux/actions/content.js @@ -1,13 +1,20 @@ import * as ACTIONS from 'constants/action_types'; import * as MODALS from 'constants/modal_types'; import * as SETTINGS from 'constants/settings'; +import * as NOTIFICATION_TYPES from 'constants/notification_types'; import { ipcRenderer } from 'electron'; import Lbry from 'lbry'; import Lbryio from 'lbryio'; import { normalizeURI, buildURI } from 'lbryURI'; import { doAlertError, doOpenModal } from 'redux/actions/app'; import { doClaimEligiblePurchaseRewards } from 'redux/actions/rewards'; -import { setSubscriptionLatest } from 'redux/actions/subscriptions'; +import { doNavigate } from 'redux/actions/navigation'; +import { + setSubscriptionLatest, + setSubscriptionNotification, + setSubscriptionNotifications, +} from 'redux/actions/subscriptions'; +import { selectNotifications } from 'redux/selectors/subscriptions'; import { selectBadgeNumber } from 'redux/selectors/app'; import { selectMyClaimsRaw } from 'redux/selectors/claims'; import { selectResolvingUris } from 'redux/selectors/content'; @@ -164,13 +171,45 @@ export function doUpdateLoadStatus(uri, outpoint) { const totalProgress = selectTotalDownloadProgress(getState()); setProgressBar(totalProgress); - const notif = new window.Notification('LBRY Download Complete', { - body: fileInfo.metadata.title, - silent: false, - }); - notif.onclick = () => { - ipcRenderer.send('focusWindow', 'main'); - }; + const notifications = selectNotifications(getState()); + if (notifications[uri] && notifications[uri].type === NOTIFICATION_TYPES.DOWNLOADING) { + const count = Object.keys(notifications).reduce( + (acc, cur) => + notifications[cur].subscription.channelName === + notifications[uri].subscription.channelName + ? acc + 1 + : acc, + 0 + ); + const notif = new window.Notification(notifications[uri].subscription.channelName, { + body: `Posted ${fileInfo.metadata.title}${ + count > 1 && count < 10 ? ` and ${count - 1} other new items` : '' + }${count > 9 ? ' and 9+ other new items' : ''}`, + silent: false, + }); + notif.onclick = () => { + dispatch( + doNavigate('/show', { + uri, + }) + ); + }; + dispatch( + setSubscriptionNotification( + notifications[uri].subscription, + uri, + NOTIFICATION_TYPES.DOWNLOADED + ) + ); + } else { + const notif = new window.Notification('LBRY Download Complete', { + body: fileInfo.metadata.title, + silent: false, + }); + notif.onclick = () => { + ipcRenderer.send('focusWindow', 'main'); + }; + } } else { // ready to play const { total_bytes: totalBytes, written_bytes: writtenBytes } = fileInfo; @@ -344,7 +383,7 @@ export function doPurchaseUri(uri, specificCostInfo) { } export function doFetchClaimsByChannel(uri, page) { - return dispatch => { + return (dispatch, getState) => { dispatch({ type: ACTIONS.FETCH_CHANNEL_CLAIMS_STARTED, data: { uri, page }, @@ -371,6 +410,17 @@ export function doFetchClaimsByChannel(uri, page) { buildURI({ contentName: latest.name, claimId: latest.claim_id }, false) ) ); + const notifications = selectNotifications(getState()); + const newNotifications = {}; + Object.keys(notifications).forEach(cur => { + if ( + notifications[cur].subscription.channelName !== latest.channel_name || + notifications[cur].type === NOTIFICATION_TYPES.DOWNLOADING + ) { + newNotifications[cur] = { ...notifications[cur] }; + } + }); + dispatch(setSubscriptionNotifications(newNotifications)); } dispatch({ diff --git a/src/renderer/redux/actions/subscriptions.js b/src/renderer/redux/actions/subscriptions.js index 58269ab40..53160ef8c 100644 --- a/src/renderer/redux/actions/subscriptions.js +++ b/src/renderer/redux/actions/subscriptions.js @@ -1,6 +1,12 @@ // @flow import * as ACTIONS from 'constants/action_types'; -import type { Subscription, Dispatch, SubscriptionState } from 'redux/reducers/subscriptions'; +import * as NOTIFICATION_TYPES from 'constants/notification_types'; +import type { + Subscription, + Dispatch, + SubscriptionState, + SubscriptionNotifications, +} from 'redux/reducers/subscriptions'; import { selectSubscriptions } from 'redux/selectors/subscriptions'; import Lbry from 'lbry'; import { doPurchaseUri } from 'redux/actions/content'; @@ -9,6 +15,7 @@ import { buildURI } from 'lbryURI'; import analytics from 'analytics'; const CHECK_SUBSCRIPTIONS_INTERVAL = 60 * 60 * 1000; +const SUBSCRIPTION_DOWNLOAD_LIMIT = 1; export const doChannelSubscribe = (subscription: Subscription) => (dispatch: Dispatch) => { dispatch({ @@ -59,63 +66,47 @@ export const doCheckSubscription = (subscription: Subscription, notify?: boolean const claimResult = result[subscription.uri] || {}; const { claims_in_channel: claimsInChannel } = claimResult; - const count = subscription.latest - ? claimsInChannel.reduce( - (prev, cur, index) => - buildURI({ contentName: cur.name, claimId: cur.claim_id }, false) === - subscription.latest - ? index - : prev, - -1 - ) - : 1; - - if (count !== 0 && notify) { - if (!claimsInChannel[0].value.stream.metadata.fee) { - dispatch( - doPurchaseUri( - buildURI( - { contentName: claimsInChannel[0].name, claimId: claimsInChannel[0].claim_id }, - false - ), - { cost: 0 } - ) - ); + if (claimsInChannel) { + if (notify) { + claimsInChannel.reduce((prev, cur, index) => { + const uri = buildURI({ contentName: cur.name, claimId: cur.claim_id }, false); + if (prev === -1 && uri !== subscription.latest) { + dispatch( + setSubscriptionNotification( + subscription, + uri, + index < SUBSCRIPTION_DOWNLOAD_LIMIT && !cur.value.stream.metadata.fee + ? NOTIFICATION_TYPES.DOWNLOADING + : NOTIFICATION_TYPES.NOTIFY_ONLY + ) + ); + if (index < SUBSCRIPTION_DOWNLOAD_LIMIT && !cur.value.stream.metadata.fee) { + dispatch(doPurchaseUri(uri, { cost: 0 })); + } + } + return uri === subscription.latest || !subscription.latest ? index : prev; + }, -1); } - const notif = new window.Notification(subscription.channelName, { - body: `Posted ${claimsInChannel[0].value.stream.metadata.title}${ - count > 1 ? ` and ${count - 1} other new items` : '' - }${count < 0 ? ' and 9+ other new items' : ''}`, - silent: false, - }); - notif.onclick = () => { - dispatch( - doNavigate('/show', { + dispatch( + setSubscriptionLatest( + { + channelName: claimsInChannel[0].channel_name, uri: buildURI( - { contentName: claimsInChannel[0].name, claimId: claimsInChannel[0].claim_id }, - true + { + channelName: claimsInChannel[0].channel_name, + claimId: claimsInChannel[0].claim_id, + }, + false ), - }) - ); - }; - } - - dispatch( - setSubscriptionLatest( - { - channelName: claimsInChannel[0].channel_name, - uri: buildURI( - { channelName: claimsInChannel[0].channel_name, claimId: claimsInChannel[0].claim_id }, + }, + buildURI( + { contentName: claimsInChannel[0].name, claimId: claimsInChannel[0].claim_id }, false - ), - }, - buildURI( - { contentName: claimsInChannel[0].name, claimId: claimsInChannel[0].claim_id }, - false + ) ) - ) - ); + ); + } dispatch({ type: ACTIONS.CHECK_SUBSCRIPTION_COMPLETED, @@ -135,5 +126,29 @@ export const setSubscriptionLatest = (subscription: Subscription, uri: string) = }, }); +export const setSubscriptionNotification = ( + subscription: Subscription, + uri: string, + notificationType: string +) => (dispatch: Dispatch) => + dispatch({ + type: ACTIONS.SET_SUBSCRIPTION_NOTIFICATION, + data: { + subscription, + uri, + type: notificationType, + }, + }); + +export const setSubscriptionNotifications = (notifications: SubscriptionNotifications) => ( + dispatch: Dispatch +) => + dispatch({ + type: ACTIONS.SET_SUBSCRIPTION_NOTIFICATIONS, + data: { + notifications, + }, + }); + export const setHasFetchedSubscriptions = () => (dispatch: Dispatch) => dispatch({ type: ACTIONS.HAS_FETCHED_SUBSCRIPTIONS }); diff --git a/src/renderer/redux/reducers/subscriptions.js b/src/renderer/redux/reducers/subscriptions.js index a8f40746f..7a54e2d46 100644 --- a/src/renderer/redux/reducers/subscriptions.js +++ b/src/renderer/redux/reducers/subscriptions.js @@ -1,5 +1,6 @@ // @flow import * as ACTIONS from 'constants/action_types'; +import * as NOTIFICATION_TYPES from 'constants/notification_types'; import { handleActions } from 'util/redux-utils'; export type Subscription = { @@ -8,10 +9,23 @@ export type Subscription = { latest: ?string, }; +export type NotificationType = + | NOTIFICATION_TYPES.DOWNLOADING + | NOTIFICATION_TYPES.DOWNLOADED + | NOTIFICATION_TYPES.NOTIFY_ONLY; + +export type SubscriptionNotifications = { + [string]: { + subscription: Subscription, + type: NotificationType, + }, +}; + // Subscription redux types export type SubscriptionState = { subscriptions: Array, hasFetchedSubscriptions: boolean, + notifications: SubscriptionNotifications, }; // Subscription action types @@ -37,6 +51,22 @@ type setSubscriptionLatest = { }, }; +type setSubscriptionNotification = { + type: ACTIONS.SET_SUBSCRIPTION_NOTIFICATION, + data: { + subscription: Subscription, + uri: string, + type: NotificationType, + }, +}; + +type setSubscriptionNotifications = { + type: ACTIONS.SET_SUBSCRIPTION_NOTIFICATIONS, + data: { + notifications: SubscriptionNotifications, + }, +}; + type CheckSubscriptionStarted = { type: ACTIONS.CHECK_SUBSCRIPTION_STARTED, }; @@ -50,6 +80,7 @@ export type Action = | doChannelUnsubscribe | HasFetchedSubscriptions | setSubscriptionLatest + | setSubscriptionNotification | CheckSubscriptionStarted | CheckSubscriptionCompleted | Function; @@ -58,6 +89,7 @@ export type Dispatch = (action: Action) => any; const defaultState = { subscriptions: [], hasFetchedSubscriptions: false, + notifications: {}, }; export default handleActions( @@ -106,6 +138,23 @@ export default handleActions( : subscription ), }), + [ACTIONS.SET_SUBSCRIPTION_NOTIFICATION]: ( + state: SubscriptionState, + action: setSubscriptionNotification + ): SubscriptionState => ({ + ...state, + notifications: { + ...state.notifications, + [action.data.uri]: { subscription: action.data.subscription, type: action.data.type }, + }, + }), + [ACTIONS.SET_SUBSCRIPTION_NOTIFICATIONS]: ( + state: SubscriptionState, + action: setSubscriptionNotifications + ): SubscriptionState => ({ + ...state, + notifications: action.data.notifications, + }), }, defaultState ); diff --git a/src/renderer/redux/selectors/subscriptions.js b/src/renderer/redux/selectors/subscriptions.js index 50bedf3ef..30efb5dc4 100644 --- a/src/renderer/redux/selectors/subscriptions.js +++ b/src/renderer/redux/selectors/subscriptions.js @@ -4,6 +4,8 @@ import { selectAllClaimsByChannel, selectClaimsById } from './claims'; // get the entire subscriptions state const selectState = state => state.subscriptions || {}; +export const selectNotifications = createSelector(selectState, state => state.notifications); + // list of saved channel names and uris export const selectSubscriptions = createSelector(selectState, state => state.subscriptions); @@ -23,7 +25,7 @@ export const selectSubscriptionsFromClaims = createSelector( let channelClaims = []; // if subscribed channel has content - if (channelIds[subscription.uri]) { + if (channelIds[subscription.uri] && channelIds[subscription.uri]['1']) { // This will need to be more robust, we will want to be able to load more than the first page const pageOneChannelIds = channelIds[subscription.uri]['1']; -- 2.45.3 From d1bb7a9c2a72e9008d5c88e9302db2fe33298b76 Mon Sep 17 00:00:00 2001 From: liamcardenas Date: Mon, 26 Mar 2018 01:12:02 -0700 Subject: [PATCH 136/192] Authenticate as early as possible --- src/renderer/index.js | 4 +++- src/renderer/redux/actions/app.js | 2 -- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/renderer/index.js b/src/renderer/index.js index b81edfd2c..631e42af1 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -15,7 +15,7 @@ import { } from 'redux/actions/app'; import { doNavigate } from 'redux/actions/navigation'; import { doDownloadLanguages, doUpdateIsNightAsync } from 'redux/actions/settings'; -import { doUserEmailVerify } from 'redux/actions/user'; +import { doUserEmailVerify, doAuthenticate } from 'redux/actions/user'; import 'scss/all.scss'; import store from 'store'; import app from './app'; @@ -95,6 +95,8 @@ document.addEventListener('click', event => { }); const init = () => { + app.store.dispatch(doAuthenticate()); + autoUpdater.on('update-downloaded', () => { app.store.dispatch(doAutoUpdate()); }); diff --git a/src/renderer/redux/actions/app.js b/src/renderer/redux/actions/app.js index f9c868baf..fa1483c8f 100644 --- a/src/renderer/redux/actions/app.js +++ b/src/renderer/redux/actions/app.js @@ -9,7 +9,6 @@ import { doFetchRewardedContent } from 'redux/actions/content'; import { doFetchFileInfosAndPublishedClaims } from 'redux/actions/file_info'; import { doAuthNavigate } from 'redux/actions/navigation'; import { doFetchDaemonSettings } from 'redux/actions/settings'; -import { doAuthenticate } from 'redux/actions/user'; import { doBalanceSubscribe } from 'redux/actions/wallet'; import { doPause } from 'redux/actions/media'; import { doCheckSubscriptions } from 'redux/actions/subscriptions'; @@ -289,7 +288,6 @@ export function doDaemonReady() { return (dispatch, getState) => { const state = getState(); - dispatch(doAuthenticate()); dispatch({ type: ACTIONS.DAEMON_READY }); dispatch(doFetchDaemonSettings()); dispatch(doBalanceSubscribe()); -- 2.45.3 From f97f8d35caaeff90b9d313463d447327028ad82d Mon Sep 17 00:00:00 2001 From: Liam Cardenas Date: Mon, 26 Mar 2018 10:26:02 -0700 Subject: [PATCH 137/192] Revert "Authenticate early" --- src/renderer/index.js | 4 +--- src/renderer/redux/actions/app.js | 2 ++ 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/renderer/index.js b/src/renderer/index.js index 631e42af1..b81edfd2c 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -15,7 +15,7 @@ import { } from 'redux/actions/app'; import { doNavigate } from 'redux/actions/navigation'; import { doDownloadLanguages, doUpdateIsNightAsync } from 'redux/actions/settings'; -import { doUserEmailVerify, doAuthenticate } from 'redux/actions/user'; +import { doUserEmailVerify } from 'redux/actions/user'; import 'scss/all.scss'; import store from 'store'; import app from './app'; @@ -95,8 +95,6 @@ document.addEventListener('click', event => { }); const init = () => { - app.store.dispatch(doAuthenticate()); - autoUpdater.on('update-downloaded', () => { app.store.dispatch(doAutoUpdate()); }); diff --git a/src/renderer/redux/actions/app.js b/src/renderer/redux/actions/app.js index fa1483c8f..f9c868baf 100644 --- a/src/renderer/redux/actions/app.js +++ b/src/renderer/redux/actions/app.js @@ -9,6 +9,7 @@ import { doFetchRewardedContent } from 'redux/actions/content'; import { doFetchFileInfosAndPublishedClaims } from 'redux/actions/file_info'; import { doAuthNavigate } from 'redux/actions/navigation'; import { doFetchDaemonSettings } from 'redux/actions/settings'; +import { doAuthenticate } from 'redux/actions/user'; import { doBalanceSubscribe } from 'redux/actions/wallet'; import { doPause } from 'redux/actions/media'; import { doCheckSubscriptions } from 'redux/actions/subscriptions'; @@ -288,6 +289,7 @@ export function doDaemonReady() { return (dispatch, getState) => { const state = getState(); + dispatch(doAuthenticate()); dispatch({ type: ACTIONS.DAEMON_READY }); dispatch(doFetchDaemonSettings()); dispatch(doBalanceSubscribe()); -- 2.45.3 From 944ef3deb57b5bf1090f5bbea0b636b09e8c42e9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Mon, 26 Mar 2018 14:15:14 -0400 Subject: [PATCH 138/192] build: bump babel-plugin-module-resolver from 3.1.0 to 3.1.1 (#1183) Bumps [babel-plugin-module-resolver](https://github.com/tleunen/babel-plugin-module-resolver) from 3.1.0 to 3.1.1. - [Release notes](https://github.com/tleunen/babel-plugin-module-resolver/releases) - [Changelog](https://github.com/tleunen/babel-plugin-module-resolver/blob/master/CHANGELOG.md) - [Commits](https://github.com/tleunen/babel-plugin-module-resolver/compare/v3.1.0...v3.1.1) Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index d62455fd9..d5b00ba5a 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "devDependencies": { "axios": "^0.18.0", "babel-eslint": "^8.2.2", - "babel-plugin-module-resolver": "^3.1.0", + "babel-plugin-module-resolver": "^3.1.1", "babel-polyfill": "^6.20.0", "babel-preset-env": "^1.6.1", "babel-preset-react": "^6.24.1", diff --git a/yarn.lock b/yarn.lock index 4525c926e..25d7d4d4e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -739,9 +739,9 @@ babel-plugin-component@^1.1.0: dependencies: "@babel/helper-module-imports" "7.0.0-beta.35" -babel-plugin-module-resolver@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.1.0.tgz#cf7868bd2c1818f855aede16141009b87dd1f95b" +babel-plugin-module-resolver@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.1.1.tgz#881cf67e3d4b8400d5eaaefc1be44d2dc1fe404f" dependencies: find-babel-config "^1.1.0" glob "^7.1.2" -- 2.45.3 From ddc15a37e350aebbe506cf7c04fa5c0b8ec5969d Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Mon, 26 Mar 2018 14:16:27 -0400 Subject: [PATCH 139/192] chore: remove unused dependencies (#1187) --- package.json | 3 --- yarn.lock | 10 +--------- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/package.json b/package.json index d5b00ba5a..702894dd5 100644 --- a/package.json +++ b/package.json @@ -46,9 +46,6 @@ "electron-window-state": "^4.1.1", "find-process": "^1.1.0", "formik": "^0.10.4", - "from2": "^2.3.0", - "install": "^0.10.2", - "jshashes": "^1.0.7", "keytar-prebuild": "4.0.4", "localforage": "^1.5.0", "mixpanel-browser": "^2.17.1", diff --git a/yarn.lock b/yarn.lock index 25d7d4d4e..a3fc62ffd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3926,7 +3926,7 @@ fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" -from2@^2.1.0, from2@^2.3.0: +from2@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" dependencies: @@ -4672,10 +4672,6 @@ inquirer@^3.0.6: strip-ansi "^4.0.0" through "^2.3.6" -install@^0.10.2: - version "0.10.4" - resolved "https://registry.yarnpkg.com/install/-/install-0.10.4.tgz#9cb09115768b93a582d1450a6ba3f275975b49aa" - internal-ip@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-1.2.0.tgz#ae9fbf93b984878785d50a8de1b356956058cf5c" @@ -5289,10 +5285,6 @@ jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" -jshashes@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/jshashes/-/jshashes-1.0.7.tgz#bed8c97a0e9632fd0513916f55f76dd5486be59f" - json-loader@^0.5.4: version "0.5.7" resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" -- 2.45.3 From 3edd660f774561f1ea7858144d2804d83733f0fd Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Mon, 26 Mar 2018 14:32:43 -0700 Subject: [PATCH 140/192] implement app redesign --- .eslintrc.json | 3 +- .flowconfig | 3 + .gitignore | 1 + flow-typed/react-feather.js | 3 + flow-typed/react-markdown.js | 3 + flow-typed/react-modal.js | 3 + flow-typed/react-paginate.js | 3 + flow-typed/react-simplemde-editor.js | 7 + flow-typed/react-transition-group.js | 3 + flow-typed/render-media.js | 3 + .../flow-typed => flow-typed}/reselect.js | 0 package.json | 8 +- src/main/createWindow.js | 4 +- src/renderer/component/address/view.jsx | 68 +- src/renderer/component/app/index.js | 3 +- src/renderer/component/app/view.jsx | 73 +- .../component/{link => button}/index.js | 4 +- src/renderer/component/button/view.jsx | 111 + src/renderer/component/cardMedia/view.jsx | 73 +- src/renderer/component/cardVerify/view.jsx | 7 +- src/renderer/component/channelTile/view.jsx | 58 +- src/renderer/component/common.js | 172 -- .../component/common/busy-indicator.jsx | 16 + .../component/common/category-list.jsx | 245 ++ .../component/common/credit-amount.jsx | 100 + .../file-exporter.jsx} | 37 +- .../component/common/file-selector.jsx | 77 + .../form-components/form-field-price.jsx | 77 + .../common/form-components/form-field.jsx | 100 + .../common/form-components/form-row.jsx | 32 + .../component/common/form-components/form.jsx | 27 + .../common/form-components/submit.jsx | 23 + src/renderer/component/common/form.jsx | 5 + src/renderer/component/common/icon.jsx | 36 + src/renderer/component/common/lbc-symbol.jsx | 6 + src/renderer/component/common/qr-code.jsx | 18 + src/renderer/component/common/spinner.jsx | 38 +- src/renderer/component/common/thumbnail.jsx | 28 + src/renderer/component/common/tooltip.jsx | 58 + .../component/common/transaction-link.jsx | 18 + .../component/common/truncated-text.jsx | 17 + src/renderer/component/file-selector.js | 83 - src/renderer/component/fileActions/view.jsx | 63 +- src/renderer/component/fileCard/index.js | 31 +- src/renderer/component/fileCard/view.jsx | 127 +- src/renderer/component/fileDetails/view.jsx | 131 +- .../component/fileDownloadLink/view.jsx | 51 +- src/renderer/component/fileList/view.jsx | 111 +- .../component/fileListSearch/index.js | 7 +- .../component/fileListSearch/view.jsx | 109 +- src/renderer/component/filePrice/view.jsx | 31 +- src/renderer/component/fileTile/index.js | 3 +- src/renderer/component/fileTile/view.jsx | 153 +- src/renderer/component/form.js | 186 -- src/renderer/component/formField/view.jsx | 7 +- .../component/formFieldPrice/view.jsx | 62 +- src/renderer/component/header/index.js | 12 +- src/renderer/component/header/view.jsx | 134 +- src/renderer/component/icon/index.js | 5 - src/renderer/component/icon/view.jsx | 50 - src/renderer/component/inviteList/view.jsx | 13 +- src/renderer/component/inviteNew/view.jsx | 64 +- src/renderer/component/link/view.jsx | 60 - .../component/linkTransaction/index.js | 5 - .../component/linkTransaction/view.jsx | 14 - src/renderer/component/load_screen.js | 57 - src/renderer/component/menu.js | 111 - src/renderer/component/nsfwOverlay/view.jsx | 10 +- src/renderer/component/page/index.js | 31 + src/renderer/component/page/view.jsx | 33 + src/renderer/component/publishForm/index.js | 7 +- .../publishForm/internal/bid-help-text.jsx | 61 + .../publishForm/internal/channelSection.jsx | 181 -- .../publishForm/internal/license-type.jsx | 108 + src/renderer/component/publishForm/view.jsx | 1274 +++----- src/renderer/component/rewardLink/view.jsx | 10 +- .../component/rewardListClaimed/view.jsx | 68 +- src/renderer/component/rewardSummary/view.jsx | 47 +- src/renderer/component/rewardTile/view.jsx | 56 +- src/renderer/component/router/view.jsx | 4 +- src/renderer/component/selectChannel/index.js | 18 + src/renderer/component/selectChannel/view.jsx | 220 ++ .../shapeShift/internal/active-shift.jsx | 33 +- .../component/shapeShift/internal/form.jsx | 91 +- src/renderer/component/shapeShift/view.jsx | 87 +- src/renderer/component/sideBar/index.js | 24 + src/renderer/component/sideBar/view.jsx | 139 + src/renderer/component/snackBar/view.jsx | 4 +- src/renderer/component/splash/index.js | 2 - .../component/splash/internal/load-screen.jsx | 38 + src/renderer/component/splash/view.jsx | 44 +- .../component/subscribeButton/index.js | 1 - .../component/subscribeButton/view.jsx | 68 +- src/renderer/component/tooltip.js | 54 - .../internal/TransactionListItem.jsx | 91 - .../internal/transaction-list-item.jsx | 103 + .../component/transactionList/view.jsx | 130 +- .../component/transactionListRecent/view.jsx | 53 +- src/renderer/component/uriIndicator/view.jsx | 64 +- src/renderer/component/userEmailNew/view.jsx | 5 +- .../component/userEmailVerify/view.jsx | 34 +- src/renderer/component/userPhoneNew/view.jsx | 47 +- .../component/userPhoneVerify/view.jsx | 31 +- src/renderer/component/userVerify/view.jsx | 41 +- .../video/internal/loading-screen.jsx | 29 +- .../component/video/internal/play-button.jsx | 55 +- .../component/video/internal/player.jsx | 18 +- src/renderer/component/video/view.jsx | 144 +- src/renderer/component/walletAddress/view.jsx | 33 +- src/renderer/component/walletBalance/view.jsx | 38 +- src/renderer/component/walletSend/index.js | 26 +- src/renderer/component/walletSend/view.jsx | 126 +- src/renderer/component/walletSendTip/view.jsx | 75 +- src/renderer/component/wunderbar/index.js | 34 +- .../wunderbar/internal/autocomplete.jsx | 604 ++++ src/renderer/component/wunderbar/view.jsx | 242 +- src/renderer/constants/action_types.js | 20 +- src/renderer/constants/claim.js | 4 + src/renderer/constants/icons.js | 31 +- src/renderer/constants/licenses.js | 31 + src/renderer/constants/modal_types.js | 9 +- src/renderer/constants/search.js | 3 + src/renderer/lbry.js | 143 +- src/renderer/modal/modal.js | 118 - src/renderer/modal/modal.jsx | 146 + .../modal/modalAutoUpdateConfirm/view.jsx | 9 +- .../modal/modalAutoUpdateDownloaded/view.jsx | 4 +- src/renderer/modal/modalCreditIntro/view.jsx | 12 +- src/renderer/modal/modalDownloading/view.jsx | 6 +- .../modal/modalEmailCollection/view.jsx | 4 +- src/renderer/modal/modalFirstReward/view.jsx | 5 +- .../modal/modalFirstSubscription/view.jsx | 13 +- .../modal/modalIncompatibleDaemon/view.jsx | 4 +- .../modal/modalPhoneCollection/view.jsx | 4 +- src/renderer/modal/modalPublish/index.js | 13 + src/renderer/modal/modalPublish/view.jsx | 39 + src/renderer/modal/modalRemoveFile/view.jsx | 57 +- src/renderer/modal/modalRouter/view.jsx | 9 + src/renderer/modal/modalSearch/index.js | 13 + src/renderer/modal/modalSearch/view.jsx | 25 + src/renderer/modal/modalSendTip/index.js | 9 + src/renderer/modal/modalSendTip/view.jsx | 23 + src/renderer/modal/modalUpgrade/view.jsx | 4 +- src/renderer/modal/modalWelcome/view.jsx | 4 +- src/renderer/page/auth/view.jsx | 45 +- src/renderer/page/backup/view.jsx | 111 +- src/renderer/page/channel/index.js | 2 + src/renderer/page/channel/view.jsx | 88 +- src/renderer/page/discover/view.jsx | 252 +- src/renderer/page/file/index.js | 12 +- src/renderer/page/file/view.jsx | 196 +- src/renderer/page/fileListDownloaded/index.js | 17 +- src/renderer/page/fileListDownloaded/view.jsx | 50 +- src/renderer/page/fileListPublished/index.js | 16 +- src/renderer/page/fileListPublished/view.jsx | 65 +- src/renderer/page/getCredits/view.jsx | 26 +- src/renderer/page/help/view.jsx | 265 +- src/renderer/page/invite/view.jsx | 20 +- src/renderer/page/publish/index.js | 71 +- src/renderer/page/publish/view.jsx | 19 +- src/renderer/page/report.js | 6 +- src/renderer/page/rewards/view.jsx | 41 +- src/renderer/page/search/index.js | 6 +- src/renderer/page/search/view.jsx | 89 +- src/renderer/page/sendCredits/view.jsx | 7 +- src/renderer/page/settings/index.js | 5 +- src/renderer/page/settings/view.jsx | 595 ++-- src/renderer/page/show/view.jsx | 43 +- src/renderer/page/subscriptions/view.jsx | 23 +- src/renderer/page/transactionHistory/view.jsx | 37 +- src/renderer/page/wallet/view.jsx | 13 +- src/renderer/redux/actions/content.js | 18 - src/renderer/redux/actions/publish.js | 181 ++ src/renderer/redux/actions/search.js | 215 +- src/renderer/redux/actions/video.js | 10 - src/renderer/redux/actions/wallet.js | 49 +- src/renderer/redux/reducers/app.js | 18 +- src/renderer/redux/reducers/content.js | 1 + src/renderer/redux/reducers/publish.js | 167 ++ src/renderer/redux/reducers/search.js | 119 +- src/renderer/redux/reducers/settings.js | 1 + src/renderer/redux/reducers/video.js | 25 - src/renderer/redux/reducers/wallet.js | 44 +- src/renderer/redux/selectors/claims.js | 6 + src/renderer/redux/selectors/file_info.js | 91 +- src/renderer/redux/selectors/navigation.js | 261 +- src/renderer/redux/selectors/publish.js | 26 + src/renderer/redux/selectors/search.js | 62 +- src/renderer/redux/selectors/video.js | 6 - src/renderer/redux/selectors/wallet.js | 20 - src/renderer/scss/_gui.scss | 391 ++- src/renderer/scss/_icons.scss | 1678 ----------- src/renderer/scss/_reset.scss | 2 +- src/renderer/scss/_vars.scss | 152 +- src/renderer/scss/all.scss | 14 +- src/renderer/scss/component/__divider.scss | 8 - src/renderer/scss/component/_button.scss | 240 +- src/renderer/scss/component/_card.scss | 610 ++-- .../scss/component/_channel-indicator.scss | 6 - src/renderer/scss/component/_checkbox.scss | 69 - src/renderer/scss/component/_content.scss | 56 + .../scss/component/_file-download.scss | 10 +- src/renderer/scss/component/_file-list.scss | 44 + .../scss/component/_file-selector.scss | 23 - src/renderer/scss/component/_file-tile.scss | 22 - src/renderer/scss/component/_form-field.scss | 218 +- src/renderer/scss/component/_header.scss | 71 +- src/renderer/scss/component/_load-screen.scss | 28 +- src/renderer/scss/component/_modal.scss | 42 +- src/renderer/scss/component/_nav.scss | 98 + src/renderer/scss/component/_radio.scss | 54 - src/renderer/scss/component/_search.scss | 97 + src/renderer/scss/component/_shapeshift.scss | 39 - src/renderer/scss/component/_snack-bar.scss | 16 +- src/renderer/scss/component/_spinner.scss | 83 +- src/renderer/scss/component/_table.scss | 84 +- src/renderer/scss/component/_tabs.scss | 64 - src/renderer/scss/component/_tooltip.scss | 11 +- src/renderer/scss/component/_video.scss | 83 - src/renderer/scss/page/_show.scss | 13 - src/renderer/store.js | 6 +- src/renderer/util/debounce.js | 21 + src/renderer/util/form-validation.js | 23 + src/renderer/util/handle-fetch.js | 5 + static/font/.DS_Store | Bin 0 -> 6148 bytes static/font/FontAwesome.otf | Bin 134808 -> 0 bytes static/font/fontawesome-webfont.eot | Bin 165742 -> 0 bytes static/font/fontawesome-webfont.svg | 2671 ----------------- static/font/fontawesome-webfont.ttf | Bin 165548 -> 0 bytes static/font/fontawesome-webfont.woff | Bin 98024 -> 0 bytes static/font/fontawesome-webfont.woff2 | Bin 77160 -> 0 bytes static/font/metropolis/bold.eot | Bin 0 -> 35022 bytes static/font/metropolis/bold.otf | Bin 0 -> 24340 bytes static/font/metropolis/bold.svg | 875 ++++++ static/font/metropolis/bold.ttf | Bin 0 -> 34744 bytes static/font/metropolis/bold.woff | Bin 0 -> 16804 bytes static/font/metropolis/medium.eot | Bin 0 -> 35582 bytes static/font/metropolis/medium.otf | Bin 0 -> 23916 bytes static/font/metropolis/medium.svg | 876 ++++++ static/font/metropolis/medium.ttf | Bin 0 -> 35280 bytes static/font/metropolis/medium.woff | Bin 0 -> 16964 bytes static/font/metropolis/semibold.eot | Bin 0 -> 35450 bytes static/font/metropolis/semibold.otf | Bin 0 -> 24160 bytes static/font/metropolis/semibold.svg | 875 ++++++ static/font/metropolis/semibold.ttf | Bin 0 -> 35136 bytes static/font/metropolis/semibold.woff | Bin 0 -> 16868 bytes static/img/stripe-background.png | Bin 0 -> 23205 bytes static/themes/light.css | 9 +- yarn.lock | 118 +- 249 files changed, 11090 insertions(+), 10904 deletions(-) create mode 100644 flow-typed/react-feather.js create mode 100644 flow-typed/react-markdown.js create mode 100644 flow-typed/react-modal.js create mode 100644 flow-typed/react-paginate.js create mode 100644 flow-typed/react-simplemde-editor.js create mode 100644 flow-typed/react-transition-group.js create mode 100644 flow-typed/render-media.js rename {src/renderer/flow-typed => flow-typed}/reselect.js (100%) rename src/renderer/component/{link => button}/index.js (74%) create mode 100644 src/renderer/component/button/view.jsx delete mode 100644 src/renderer/component/common.js create mode 100644 src/renderer/component/common/busy-indicator.jsx create mode 100644 src/renderer/component/common/category-list.jsx create mode 100644 src/renderer/component/common/credit-amount.jsx rename src/renderer/component/{file-exporter.js => common/file-exporter.jsx} (72%) create mode 100644 src/renderer/component/common/file-selector.jsx create mode 100644 src/renderer/component/common/form-components/form-field-price.jsx create mode 100644 src/renderer/component/common/form-components/form-field.jsx create mode 100644 src/renderer/component/common/form-components/form-row.jsx create mode 100644 src/renderer/component/common/form-components/form.jsx create mode 100644 src/renderer/component/common/form-components/submit.jsx create mode 100644 src/renderer/component/common/form.jsx create mode 100644 src/renderer/component/common/icon.jsx create mode 100644 src/renderer/component/common/lbc-symbol.jsx create mode 100644 src/renderer/component/common/qr-code.jsx create mode 100644 src/renderer/component/common/thumbnail.jsx create mode 100644 src/renderer/component/common/tooltip.jsx create mode 100644 src/renderer/component/common/transaction-link.jsx create mode 100644 src/renderer/component/common/truncated-text.jsx delete mode 100644 src/renderer/component/file-selector.js delete mode 100644 src/renderer/component/form.js delete mode 100644 src/renderer/component/icon/index.js delete mode 100644 src/renderer/component/icon/view.jsx delete mode 100644 src/renderer/component/link/view.jsx delete mode 100644 src/renderer/component/linkTransaction/index.js delete mode 100644 src/renderer/component/linkTransaction/view.jsx delete mode 100644 src/renderer/component/load_screen.js delete mode 100644 src/renderer/component/menu.js create mode 100644 src/renderer/component/page/index.js create mode 100644 src/renderer/component/page/view.jsx create mode 100644 src/renderer/component/publishForm/internal/bid-help-text.jsx delete mode 100644 src/renderer/component/publishForm/internal/channelSection.jsx create mode 100644 src/renderer/component/publishForm/internal/license-type.jsx create mode 100644 src/renderer/component/selectChannel/index.js create mode 100644 src/renderer/component/selectChannel/view.jsx create mode 100644 src/renderer/component/sideBar/index.js create mode 100644 src/renderer/component/sideBar/view.jsx create mode 100644 src/renderer/component/splash/internal/load-screen.jsx delete mode 100644 src/renderer/component/tooltip.js delete mode 100644 src/renderer/component/transactionList/internal/TransactionListItem.jsx create mode 100644 src/renderer/component/transactionList/internal/transaction-list-item.jsx create mode 100644 src/renderer/component/wunderbar/internal/autocomplete.jsx create mode 100644 src/renderer/constants/claim.js create mode 100644 src/renderer/constants/licenses.js create mode 100644 src/renderer/constants/search.js delete mode 100644 src/renderer/modal/modal.js create mode 100644 src/renderer/modal/modal.jsx create mode 100644 src/renderer/modal/modalPublish/index.js create mode 100644 src/renderer/modal/modalPublish/view.jsx create mode 100644 src/renderer/modal/modalSearch/index.js create mode 100644 src/renderer/modal/modalSearch/view.jsx create mode 100644 src/renderer/modal/modalSendTip/index.js create mode 100644 src/renderer/modal/modalSendTip/view.jsx create mode 100644 src/renderer/redux/actions/publish.js delete mode 100644 src/renderer/redux/actions/video.js create mode 100644 src/renderer/redux/reducers/publish.js delete mode 100644 src/renderer/redux/reducers/video.js create mode 100644 src/renderer/redux/selectors/publish.js delete mode 100644 src/renderer/redux/selectors/video.js delete mode 100644 src/renderer/scss/_icons.scss delete mode 100644 src/renderer/scss/component/__divider.scss delete mode 100644 src/renderer/scss/component/_checkbox.scss create mode 100644 src/renderer/scss/component/_content.scss create mode 100644 src/renderer/scss/component/_file-list.scss delete mode 100644 src/renderer/scss/component/_file-selector.scss delete mode 100644 src/renderer/scss/component/_file-tile.scss create mode 100644 src/renderer/scss/component/_nav.scss delete mode 100644 src/renderer/scss/component/_radio.scss create mode 100644 src/renderer/scss/component/_search.scss delete mode 100644 src/renderer/scss/component/_shapeshift.scss delete mode 100644 src/renderer/scss/component/_tabs.scss delete mode 100644 src/renderer/scss/component/_video.scss delete mode 100644 src/renderer/scss/page/_show.scss create mode 100644 src/renderer/util/debounce.js create mode 100644 src/renderer/util/form-validation.js create mode 100644 src/renderer/util/handle-fetch.js create mode 100644 static/font/.DS_Store delete mode 100644 static/font/FontAwesome.otf delete mode 100644 static/font/fontawesome-webfont.eot delete mode 100644 static/font/fontawesome-webfont.svg delete mode 100644 static/font/fontawesome-webfont.ttf delete mode 100644 static/font/fontawesome-webfont.woff delete mode 100644 static/font/fontawesome-webfont.woff2 create mode 100644 static/font/metropolis/bold.eot create mode 100644 static/font/metropolis/bold.otf create mode 100644 static/font/metropolis/bold.svg create mode 100644 static/font/metropolis/bold.ttf create mode 100644 static/font/metropolis/bold.woff create mode 100644 static/font/metropolis/medium.eot create mode 100644 static/font/metropolis/medium.otf create mode 100644 static/font/metropolis/medium.svg create mode 100644 static/font/metropolis/medium.ttf create mode 100644 static/font/metropolis/medium.woff create mode 100644 static/font/metropolis/semibold.eot create mode 100644 static/font/metropolis/semibold.otf create mode 100644 static/font/metropolis/semibold.svg create mode 100644 static/font/metropolis/semibold.ttf create mode 100644 static/font/metropolis/semibold.woff create mode 100644 static/img/stripe-background.png diff --git a/.eslintrc.json b/.eslintrc.json index 69a674b7a..009c389de 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -33,6 +33,7 @@ "printWidth": 100, "singleQuote": true }], - "func-names": ["warn", "as-needed"] + "func-names": ["warn", "as-needed"], + "arrow-body-style": "off" } } diff --git a/.flowconfig b/.flowconfig index f98db8793..664b2d8de 100644 --- a/.flowconfig +++ b/.flowconfig @@ -17,5 +17,8 @@ module.name_mapper='^types\(.*\)$' -> '/src/renderer/types\1' module.name_mapper='^component\(.*\)$' -> '/src/renderer/component\1' module.name_mapper='^page\(.*\)$' -> '/src/renderer/page\1' module.name_mapper='^lbry\(.*\)$' -> '/src/renderer/lbry\1' +module.name_mapper='^rewards\(.*\)$' -> '/src/renderer/rewards\1' +module.name_mapper='^modal\(.*\)$' -> '/src/renderer/modal\1' +module.name_mapper='^app\(.*\)$' -> '/src/renderer/app\1' [strict] diff --git a/.gitignore b/.gitignore index e8d5eb911..ce340404f 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ /static/daemon/lbrynet* /static/locales yarn-error.log +npm-debug.log* diff --git a/flow-typed/react-feather.js b/flow-typed/react-feather.js new file mode 100644 index 000000000..c91a71f66 --- /dev/null +++ b/flow-typed/react-feather.js @@ -0,0 +1,3 @@ +declare module 'react-feather' { + declare module.exports: any; +} diff --git a/flow-typed/react-markdown.js b/flow-typed/react-markdown.js new file mode 100644 index 000000000..63b7f2aad --- /dev/null +++ b/flow-typed/react-markdown.js @@ -0,0 +1,3 @@ +declare module 'react-markdown' { + declare module.exports: any; +} diff --git a/flow-typed/react-modal.js b/flow-typed/react-modal.js new file mode 100644 index 000000000..17766e9f0 --- /dev/null +++ b/flow-typed/react-modal.js @@ -0,0 +1,3 @@ +declare module 'react-modal' { + declare module.exports: any; +} diff --git a/flow-typed/react-paginate.js b/flow-typed/react-paginate.js new file mode 100644 index 000000000..f161d1a42 --- /dev/null +++ b/flow-typed/react-paginate.js @@ -0,0 +1,3 @@ +declare module 'react-paginate' { + declare module.exports: any; +} diff --git a/flow-typed/react-simplemde-editor.js b/flow-typed/react-simplemde-editor.js new file mode 100644 index 000000000..7d23780f1 --- /dev/null +++ b/flow-typed/react-simplemde-editor.js @@ -0,0 +1,7 @@ +declare module 'react-simplemde-editor' { + declare module.exports: any; +} + +declare module 'react-simplemde-editor/dist/simplemde.min.css' { + declare module.exports: any; +} diff --git a/flow-typed/react-transition-group.js b/flow-typed/react-transition-group.js new file mode 100644 index 000000000..77bc87c09 --- /dev/null +++ b/flow-typed/react-transition-group.js @@ -0,0 +1,3 @@ +declare module 'react-transition-group' { + declare module.exports: any; +} diff --git a/flow-typed/render-media.js b/flow-typed/render-media.js new file mode 100644 index 000000000..acb885cc8 --- /dev/null +++ b/flow-typed/render-media.js @@ -0,0 +1,3 @@ +declare module 'render-media' { + declare module.exports: any; +} diff --git a/src/renderer/flow-typed/reselect.js b/flow-typed/reselect.js similarity index 100% rename from src/renderer/flow-typed/reselect.js rename to flow-typed/reselect.js diff --git a/package.json b/package.json index 702894dd5..992a96788 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "bluebird": "^3.5.1", "classnames": "^2.2.5", "country-data": "^0.0.31", + "dom-scroll-into-view": "^1.2.1", "electron-dl": "^1.11.0", "electron-is-dev": "^0.3.0", "electron-log": "^2.2.12", @@ -46,7 +47,10 @@ "electron-window-state": "^4.1.1", "find-process": "^1.1.0", "formik": "^0.10.4", - "keytar-prebuild": "4.0.4", + "from2": "^2.3.0", + "install": "^0.10.2", + "jshashes": "^1.0.7", + "keytar-prebuild": "4.1.1", "localforage": "^1.5.0", "mixpanel-browser": "^2.17.1", "moment": "^2.20.1", @@ -54,11 +58,13 @@ "rc-progress": "^2.0.6", "react": "^16.2.0", "react-dom": "^16.2.0", + "react-feather": "^1.0.8", "react-markdown": "^2.5.0", "react-modal": "^3.1.7", "react-paginate": "^5.2.1", "react-redux": "^5.0.3", "react-simplemde-editor": "^3.6.11", + "react-transition-group": "1.x", "redux": "^3.6.0", "redux-logger": "^3.0.1", "redux-persist": "^4.8.0", diff --git a/src/main/createWindow.js b/src/main/createWindow.js index afdfe5d65..d83f9b1c3 100644 --- a/src/main/createWindow.js +++ b/src/main/createWindow.js @@ -16,8 +16,8 @@ export default appState => { }); let windowConfiguration = { - backgroundColor: '#155B4A', - minWidth: 800, + backgroundColor: '#44b098', + minWidth: 950, minHeight: 600, autoHideMenuBar: true, show: false, diff --git a/src/renderer/component/address/view.jsx b/src/renderer/component/address/view.jsx index 65ea563c0..eff0f6697 100644 --- a/src/renderer/component/address/view.jsx +++ b/src/renderer/component/address/view.jsx @@ -1,52 +1,52 @@ -import React from 'react'; -import PropTypes from 'prop-types'; +// @flow +import * as React from 'react'; import { clipboard } from 'electron'; -import Link from 'component/link'; -import classnames from 'classnames'; +import { FormRow } from 'component/common/form'; +import Button from 'component/button'; +import * as icons from 'constants/icons'; -export default class Address extends React.PureComponent { - static propTypes = { - address: PropTypes.string, - }; +type Props = { + address: string, + doShowSnackBar: ({ message: string }) => void, +}; - constructor(props) { - super(props); +export default class Address extends React.PureComponent { + constructor() { + super(); - this._inputElem = null; + this.input = null; } + input: ?HTMLInputElement; + render() { - const { address, showCopyButton, doShowSnackBar } = this.props; + const { address, doShowSnackBar } = this.props; return ( -
+ { - this._inputElem = input; + this.input = input; }} onFocus={() => { - this._inputElem.select(); + if (this.input) { + this.input.select(); + } }} - readOnly="readonly" - value={address || ''} /> - {showCopyButton && ( - - { - clipboard.writeText(address); - doShowSnackBar({ message: __('Address copied') }); - }} - /> - - )} -
+ + ); + } +} + +export default Button; diff --git a/src/renderer/component/cardMedia/view.jsx b/src/renderer/component/cardMedia/view.jsx index 06f80f1d7..a0d4b6d4e 100644 --- a/src/renderer/component/cardMedia/view.jsx +++ b/src/renderer/component/cardMedia/view.jsx @@ -1,46 +1,51 @@ +// @flow import React from 'react'; +import classnames from 'classnames'; -class CardMedia extends React.PureComponent { - static AUTO_THUMB_CLASSES = [ - 'purple', - 'red', - 'pink', - 'indigo', - 'blue', - 'light-blue', - 'cyan', - 'teal', - 'green', - 'yellow', - 'orange', - ]; +type Props = { + thumbnail: ?string, // externally sourced image + nsfw: ?boolean, +}; - componentWillMount() { - this.setState({ - autoThumbClass: - CardMedia.AUTO_THUMB_CLASSES[ - Math.floor(Math.random() * CardMedia.AUTO_THUMB_CLASSES.length) - ], - }); - } +const autoThumbColors = [ + 'purple', + 'red', + 'pink', + 'indigo', + 'blue', + 'light-blue', + 'cyan', + 'teal', + 'green', + 'yellow', + 'orange', +]; + +class CardMedia extends React.PureComponent { + getAutoThumbClass = () => { + return autoThumbColors[Math.floor(Math.random() * autoThumbColors.length)]; + }; render() { - const { title, thumbnail } = this.props; - const atClass = this.state.autoThumbClass; + const { thumbnail, nsfw } = this.props; - if (thumbnail) { - return
; + const generateAutothumb = !thumbnail && !nsfw; + let autoThumbClass; + if (generateAutothumb) { + autoThumbClass = `card__media--autothumb.${this.getAutoThumbClass()}`; } return ( -
-
- {title && - title - .replace(/\s+/g, '') - .substring(0, Math.min(title.replace(' ', '').length, 5)) - .toUpperCase()} -
+
+ {(!thumbnail || nsfw) && ( + {nsfw ? __('NSFW') : 'LBRY'} + )}
); } diff --git a/src/renderer/component/cardVerify/view.jsx b/src/renderer/component/cardVerify/view.jsx index 4690b61d2..2df72f076 100644 --- a/src/renderer/component/cardVerify/view.jsx +++ b/src/renderer/component/cardVerify/view.jsx @@ -1,6 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; -import Link from 'component/link'; +import Button from 'component/button'; +import * as icons from 'constants/icons'; let scriptLoading = false; let scriptLoaded = false; @@ -156,10 +157,10 @@ class CardVerify extends React.Component { render() { return ( - diff --git a/src/renderer/component/channelTile/view.jsx b/src/renderer/component/channelTile/view.jsx index 73efed63a..531b9fccd 100644 --- a/src/renderer/component/channelTile/view.jsx +++ b/src/renderer/component/channelTile/view.jsx @@ -1,18 +1,36 @@ -import React from 'react'; +// @flow +import * as React from 'react'; import CardMedia from 'component/cardMedia'; -import { TruncatedText, BusyMessage } from 'component/common.js'; +import TruncatedText from 'component/common/truncated-text'; -class ChannelTile extends React.PureComponent { +/* + This component can probably be combined with FileTile + Currently the only difference is showing the number of files/empty channel +*/ + +type Props = { + uri: string, + isResolvingUri: boolean, + totalItems: number, + claim: ?{ + claim_id: string, + name: string, + }, + resolveUri: string => void, + navigate: (string, ?{}) => void, +}; + +class ChannelTile extends React.PureComponent { componentDidMount() { const { uri, resolveUri } = this.props; resolveUri(uri); } - componentWillReceiveProps(nextProps) { + componentWillReceiveProps(nextProps: Props) { const { uri, resolveUri } = this.props; - if (nextProps.uri != uri) { + if (nextProps.uri !== uri) { resolveUri(uri); } } @@ -29,29 +47,25 @@ class ChannelTile extends React.PureComponent { const onClick = () => navigate('/show', { uri }); return ( -
-
-
- {channelName && } -
-
-

- {channelName || uri} -

+
+ +
+ {isResolvingUri &&
{__('Loading...')}
} + {!isResolvingUri && ( + +
+ {channelName || uri}
-
- {isResolvingUri && } +
{totalItems > 0 && ( - This is a channel with {totalItems} {totalItems === 1 ? ' item' : ' items'}{' '} - inside of it. + {totalItems} {totalItems === 1 ? 'file' : 'files'} )} - {!isResolvingUri && - !totalItems && This is an empty channel.} + {!isResolvingUri && !totalItems && This is an empty channel.}
-
-
+ + )}
); diff --git a/src/renderer/component/common.js b/src/renderer/component/common.js deleted file mode 100644 index 629d09f57..000000000 --- a/src/renderer/component/common.js +++ /dev/null @@ -1,172 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { formatCredits, formatFullPrice } from 'util/formatCredits'; -import lbry from '../lbry.js'; - -export class TruncatedText extends React.PureComponent { - static propTypes = { - lines: PropTypes.number, - }; - - static defaultProps = { - lines: null, - }; - - render() { - return ( - - {this.props.children} - - ); - } -} - -export class BusyMessage extends React.PureComponent { - static propTypes = { - message: PropTypes.string, - }; - - render() { - return ( - - {this.props.message} - - ); - } -} - -export class CurrencySymbol extends React.PureComponent { - render() { - return LBC; - } -} - -export class CreditAmount extends React.PureComponent { - static propTypes = { - amount: PropTypes.number.isRequired, - precision: PropTypes.number, - isEstimate: PropTypes.bool, - label: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]), - showFree: PropTypes.bool, - showFullPrice: PropTypes.bool, - showPlus: PropTypes.bool, - look: PropTypes.oneOf(['indicator', 'plain', 'fee']), - }; - - static defaultProps = { - precision: 2, - label: true, - showFree: false, - look: 'indicator', - showFullPrice: false, - showPlus: false, - }; - - render() { - const minimumRenderableAmount = Math.pow(10, -1 * this.props.precision); - const { amount, precision, showFullPrice } = this.props; - - let formattedAmount; - const fullPrice = formatFullPrice(amount, 2); - - if (showFullPrice) { - formattedAmount = fullPrice; - } else { - formattedAmount = - amount > 0 && amount < minimumRenderableAmount - ? `<${minimumRenderableAmount}` - : formatCredits(amount, precision); - } - - let amountText; - if (this.props.showFree && parseFloat(this.props.amount) === 0) { - amountText = __('free'); - } else { - if (this.props.label) { - const label = - typeof this.props.label === 'string' - ? this.props.label - : parseFloat(amount) == 1 ? __('credit') : __('credits'); - - amountText = `${formattedAmount} ${label}`; - } else { - amountText = formattedAmount; - } - if (this.props.showPlus && amount > 0) { - amountText = `+${amountText}`; - } - } - - return ( - - {amountText} - {this.props.isEstimate ? ( - - * - - ) : null} - - ); - } -} - -export class Thumbnail extends React.PureComponent { - static propTypes = { - src: PropTypes.string, - }; - - handleError() { - if (this.state.imageUrl != this._defaultImageUri) { - this.setState({ - imageUri: this._defaultImageUri, - }); - } - } - - constructor(props) { - super(props); - - this._defaultImageUri = lbry.imagePath('default-thumb.svg'); - this._maxLoadTime = 10000; - this._isMounted = false; - - this.state = { - imageUri: this.props.src || this._defaultImageUri, - }; - } - - componentDidMount() { - this._isMounted = true; - setTimeout(() => { - if (this._isMounted && !this.refs.img.complete) { - this.setState({ - imageUri: this._defaultImageUri, - }); - } - }, this._maxLoadTime); - } - - componentWillUnmount() { - this._isMounted = false; - } - - render() { - const className = this.props.className ? this.props.className : '', - otherProps = Object.assign({}, this.props); - delete otherProps.className; - return ( - { - this.handleError(); - }} - {...otherProps} - className={className} - src={this.state.imageUri} - /> - ); - } -} diff --git a/src/renderer/component/common/busy-indicator.jsx b/src/renderer/component/common/busy-indicator.jsx new file mode 100644 index 000000000..ee95a00ca --- /dev/null +++ b/src/renderer/component/common/busy-indicator.jsx @@ -0,0 +1,16 @@ +// @flow +import React from 'react'; + +type Props = { + message: ?string, +}; + +const BusyIndicator = (props: Props) => { + return ( + + {props.message} + + ); +}; + +export default BusyIndicator; diff --git a/src/renderer/component/common/category-list.jsx b/src/renderer/component/common/category-list.jsx new file mode 100644 index 000000000..13aacab76 --- /dev/null +++ b/src/renderer/component/common/category-list.jsx @@ -0,0 +1,245 @@ +// @flow +import React from 'react'; +import { normalizeURI } from 'lbryURI'; +import ToolTip from 'component/common/tooltip'; +import FileCard from 'component/fileCard'; +import Button from 'component/button'; +import * as icons from 'constants/icons'; + +type Props = { + category: string, + names: Array, + categoryLink?: string, +}; + +type State = { + canScrollNext: boolean, + canScrollPrevious: boolean, +}; + +class CategoryList extends React.PureComponent { + constructor() { + super(); + + this.state = { + canScrollPrevious: false, + canScrollNext: false, + }; + + (this: any).handleScrollNext = this.handleScrollNext.bind(this); + (this: any).handleScrollPrevious = this.handleScrollPrevious.bind(this); + this.rowItems = undefined; + } + + componentDidMount() { + const cardRow = this.rowItems; + if (cardRow) { + const cards = cardRow.getElementsByTagName('section'); + const lastCard = cards[cards.length - 1]; + const isCompletelyVisible = this.isCardVisible(lastCard); + + if (!isCompletelyVisible) { + // not sure how we can avoid doing this + /* eslint-disable react/no-did-mount-set-state */ + this.setState({ + canScrollNext: true, + }); + /* eslint-enable react/no-did-mount-set-state */ + } + } + } + + rowItems: ?HTMLDivElement; + + handleScroll(cardRow: HTMLDivElement, scrollTarget: number) { + const cards = cardRow.getElementsByTagName('section'); + const animationCallback = () => { + const firstCard = cards[0]; + const lastCard = cards[cards.length - 1]; + const firstCardVisible = this.isCardVisible(firstCard); + const lastCardVisible = this.isCardVisible(lastCard); + this.setState({ + canScrollNext: !lastCardVisible, + canScrollPrevious: !firstCardVisible, + }); + }; + + const currentScrollLeft = cardRow.scrollLeft; + const direction = currentScrollLeft > scrollTarget ? 'left' : 'right'; + this.scrollCardsAnimated(cardRow, scrollTarget, direction, animationCallback); + } + + scrollCardsAnimated = ( + cardRow: HTMLDivElement, + scrollTarget: number, + direction: string, + callback: () => any + ) => { + let start; + const step = timestamp => { + if (!start) start = timestamp; + + const currentLeftVal = cardRow.scrollLeft; + + let newTarget; + let shouldContinue; + let progress = currentLeftVal; + + if (direction === 'right') { + progress += timestamp - start; + newTarget = Math.min(progress, scrollTarget); + shouldContinue = newTarget < scrollTarget; + } else { + progress -= timestamp - start; + newTarget = Math.max(progress, scrollTarget); + shouldContinue = newTarget > scrollTarget; + } + + cardRow.scrollLeft = newTarget; // eslint-disable-line no-param-reassign + + if (shouldContinue) { + window.requestAnimationFrame(step); + } else { + callback(); + } + }; + + window.requestAnimationFrame(step); + }; + + // check if a card is fully visible horizontally + isCardVisible = (section: HTMLElement) => { + const rect = section.getBoundingClientRect(); + const isVisible = rect.left >= 0 && rect.right <= window.innerWidth; + return isVisible; + }; + + handleScrollNext() { + const cardRow = this.rowItems; + if (cardRow) { + const cards = cardRow.getElementsByTagName('section'); + + // loop over items until we find one that is on the screen + // continue searching until a card isn't fully visible, this is the new target + let firstFullVisibleCard; + let firstSemiVisibleCard; + + for (let i = 0; i < cards.length; i += 1) { + const currentCardVisible = this.isCardVisible(cards[i]); + + if (firstFullVisibleCard && !currentCardVisible) { + firstSemiVisibleCard = cards[i]; + break; + } else if (currentCardVisible) { + [firstFullVisibleCard] = cards; + } + } + + if (firstFullVisibleCard && firstSemiVisibleCard) { + const scrollTarget = firstSemiVisibleCard.offsetLeft - firstFullVisibleCard.offsetLeft; + this.handleScroll(cardRow, scrollTarget); + } + } + } + + handleScrollPrevious() { + const cardRow = this.rowItems; + if (cardRow) { + const cards = cardRow.getElementsByTagName('section'); + + let hasFoundCard; + let numberOfCardsThatCanFit = 0; + + // loop starting at the end until we find a visible card + // then count to find how many cards can fit on the screen + for (let i = cards.length - 1; i >= 0; i -= 1) { + const currentCard = cards[i]; + const isCurrentCardVisible = this.isCardVisible(currentCard); + + if (isCurrentCardVisible) { + if (!hasFoundCard) { + hasFoundCard = true; + } + + numberOfCardsThatCanFit += 1; + } else if (hasFoundCard) { + // this card is off the screen to the left + // we know how many cards can fit on a screen + // find the new target and scroll + const firstCardOffsetLeft = cards[0].offsetLeft; + const cardIndexToScrollTo = i + 1 - numberOfCardsThatCanFit; + const newFirstCard = cards[cardIndexToScrollTo]; + + let scrollTarget; + if (newFirstCard) { + scrollTarget = newFirstCard.offsetLeft; + } else { + // more cards can fit on the screen than are currently hidden + // just scroll to the first card + scrollTarget = cards[0].offsetLeft; + } + + scrollTarget -= firstCardOffsetLeft; // to play nice with the margins + + this.handleScroll(cardRow, scrollTarget); + break; + } + } + } + } + + render() { + const { category, names, categoryLink } = this.props; + const { canScrollNext, canScrollPrevious } = this.state; + + // The lint was throwing an error saying we should use
+
+
+
+
{ + this.rowItems = ref; + }} + className="card-row__scrollhouse" + > + {names && + names.map(name => )} +
+ + ); + } +} + +export default CategoryList; diff --git a/src/renderer/component/common/credit-amount.jsx b/src/renderer/component/common/credit-amount.jsx new file mode 100644 index 000000000..0147c0154 --- /dev/null +++ b/src/renderer/component/common/credit-amount.jsx @@ -0,0 +1,100 @@ +// @flow +import React from 'react'; +import classnames from 'classnames'; +import { formatCredits, formatFullPrice } from 'util/formatCredits'; + +type Props = { + amount: number, + precision: number, + showFree: boolean, + showFullPrice: boolean, + showPlus: boolean, + isEstimate?: boolean, + large?: boolean, + plain?: boolean, + fee?: boolean, + noStyle?: boolean, +}; + +class CreditAmount extends React.PureComponent { + static defaultProps = { + precision: 2, + showFree: false, + showFullPrice: false, + showPlus: false, + }; + + render() { + const { + amount, + precision, + showFullPrice, + showFree, + showPlus, + large, + isEstimate, + plain, + noStyle, + fee, + } = this.props; + + const minimumRenderableAmount = 10 ** (-1 * precision); + const fullPrice = formatFullPrice(amount, 2); + const isFree = parseFloat(amount) === 0; + + let formattedAmount; + if (showFullPrice) { + formattedAmount = fullPrice; + } else { + formattedAmount = + amount > 0 && amount < minimumRenderableAmount + ? `<${minimumRenderableAmount}` + : formatCredits(amount, precision); + } + + let amountText; + if (showFree && isFree) { + amountText = __('FREE'); + } else { + amountText = formattedAmount; + + if (showPlus && amount > 0) { + amountText = `+${amountText}`; + } + + if (!plain) { + amountText = `${amountText} ${__('LBC')}`; + } + + if (fee) { + amountText = `${amountText} ${__('fee')}`; + } + } + + return ( + + {amountText} + + {isEstimate ? ( + + * + + ) : null} + + ); + } +} + +export default CreditAmount; diff --git a/src/renderer/component/file-exporter.js b/src/renderer/component/common/file-exporter.jsx similarity index 72% rename from src/renderer/component/file-exporter.js rename to src/renderer/component/common/file-exporter.jsx index 7c9fed011..8ab48e05c 100644 --- a/src/renderer/component/file-exporter.js +++ b/src/renderer/component/common/file-exporter.jsx @@ -1,31 +1,35 @@ +// @flow import fs from 'fs'; import path from 'path'; import React from 'react'; import PropTypes from 'prop-types'; -import Link from 'component/link'; +import Button from 'component/button'; import parseData from 'util/parseData'; import * as icons from 'constants/icons'; -const { remote } = require('electron'); +import { remote } from 'electron'; -class FileExporter extends React.PureComponent { - static propTypes = { - data: PropTypes.array, - title: PropTypes.string, - label: PropTypes.string, - filters: PropTypes.arrayOf(PropTypes.string), - defaultPath: PropTypes.string, - onFileCreated: PropTypes.func, - }; +type Props = { + data: Array, + title: string, + label: string, + defaultPath?: string, + filters: Array, + onFileCreated?: string => void, +}; +class FileExporter extends React.PureComponent { static defaultProps = { filters: [], }; - constructor(props) { - super(props); + constructor() { + super(); + this.handleButtonClick = this.handleButtonClick.bind(this); } - handleFileCreation(filename, data) { + handleButtonClick: () => void; + + handleFileCreation(filename: string, data: any) { const { onFileCreated } = this.props; fs.writeFile(filename, data, err => { if (err) throw err; @@ -67,12 +71,11 @@ class FileExporter extends React.PureComponent { render() { const { title, label } = this.props; return ( - this.handleButtonClick()} + onClick={this.handleButtonClick} /> ); } diff --git a/src/renderer/component/common/file-selector.jsx b/src/renderer/component/common/file-selector.jsx new file mode 100644 index 000000000..d5d12cfde --- /dev/null +++ b/src/renderer/component/common/file-selector.jsx @@ -0,0 +1,77 @@ +// @flow +import React from 'react'; +import { remote } from 'electron'; +import Button from 'component/button'; +import { FormRow } from 'component/common/form'; +import path from 'path'; + +type Props = { + type: string, + currentPath: ?string, + onFileChosen: (string, string) => void, +}; + +class FileSelector extends React.PureComponent { + static defaultProps = { + type: 'file', + }; + + constructor() { + super(); + this.input = null; + } + + handleButtonClick() { + remote.dialog.showOpenDialog( + { + properties: + this.props.type === 'file' ? ['openFile'] : ['openDirectory', 'createDirectory'], + }, + paths => { + if (!paths) { + // User hit cancel, so do nothing + return; + } + + const filePath = paths[0]; + const extension = path.extname(filePath); + const fileName = path.basename(filePath, extension); + + if (this.props.onFileChosen) { + this.props.onFileChosen(filePath, fileName); + } + } + ); + } + + input: ?HTMLInputElement; + + render() { + const { type, currentPath } = this.props; + + return ( + + +
{body}
+ + ); + } +} + +export default ToolTip; diff --git a/src/renderer/component/common/transaction-link.jsx b/src/renderer/component/common/transaction-link.jsx new file mode 100644 index 000000000..2d48feb96 --- /dev/null +++ b/src/renderer/component/common/transaction-link.jsx @@ -0,0 +1,18 @@ +// @flow +import React from 'react'; +import Button from 'component/button'; + +type Props = { + id: string, +}; + +const TransactionLink = (props: Props) => { + const { id } = props; + + const href = `https://explorer.lbry.io/#!/transaction/${id}`; + const label = id.substr(0, 7); + + return {' '} - - { - this._inputElem = input; - }} - onFocus={() => { - this._inputElem.select(); - }} - readOnly="readonly" - value={this.state.path || __('No File Chosen')} - /> - - - ); - } -} - -export default FileSelector; diff --git a/src/renderer/component/fileActions/view.jsx b/src/renderer/component/fileActions/view.jsx index b2d83f3b9..0ffb21468 100644 --- a/src/renderer/component/fileActions/view.jsx +++ b/src/renderer/component/fileActions/view.jsx @@ -1,52 +1,47 @@ +// @flow import React from 'react'; -import Link from 'component/link'; +import Button from 'component/button'; import FileDownloadLink from 'component/fileDownloadLink'; import * as modals from 'constants/modal_types'; +import classnames from 'classnames'; +import * as icons from 'constants/icons'; -class FileActions extends React.PureComponent { +type FileInfo = { + claim_id: string, +}; + +type Props = { + uri: string, + openModal: (string, any) => void, + claimIsMine: boolean, + fileInfo: FileInfo, + vertical?: boolean, // should the buttons be stacked vertically? +}; + +class FileActions extends React.PureComponent { render() { - const { fileInfo, uri, openModal, claimIsMine } = this.props; + const { fileInfo, uri, openModal, claimIsMine, vertical } = this.props; - const claimId = fileInfo ? fileInfo.claim_id : null, - showDelete = fileInfo && Object.keys(fileInfo).length > 0; + const claimId = fileInfo ? fileInfo.claim_id : ''; + const showDelete = fileInfo && Object.keys(fileInfo).length > 0; return ( -
+
{showDelete && ( - openModal(modals.CONFIRM_FILE_REMOVE, { uri })} /> )} {!claimIsMine && ( - - )} - - {claimIsMine && ( - )}
diff --git a/src/renderer/component/fileCard/index.js b/src/renderer/component/fileCard/index.js index f324e93a3..12bc9e649 100644 --- a/src/renderer/component/fileCard/index.js +++ b/src/renderer/component/fileCard/index.js @@ -6,16 +6,31 @@ import { selectShowNsfw } from 'redux/selectors/settings'; import { makeSelectClaimForUri, makeSelectMetadataForUri } from 'redux/selectors/claims'; import { makeSelectFileInfoForUri } from 'redux/selectors/file_info'; import { makeSelectIsUriResolving, selectRewardContentClaimIds } from 'redux/selectors/content'; +import { selectPendingPublish } from 'redux/selectors/publish'; import FileCard from './view'; -const select = (state, props) => ({ - claim: makeSelectClaimForUri(props.uri)(state), - fileInfo: makeSelectFileInfoForUri(props.uri)(state), - obscureNsfw: !selectShowNsfw(state), - metadata: makeSelectMetadataForUri(props.uri)(state), - rewardedContentClaimIds: selectRewardContentClaimIds(state, props), - isResolvingUri: makeSelectIsUriResolving(props.uri)(state), -}); +const select = (state, props) => { + let claim; + let fileInfo; + let metadata; + let isResolvingUri; + + const pendingPublish = selectPendingPublish(props.uri)(state); + + const fileCardInfo = pendingPublish || { + claim: makeSelectClaimForUri(props.uri)(state), + fileInfo: makeSelectFileInfoForUri(props.uri)(state), + metadata: makeSelectMetadataForUri(props.uri)(state), + isResolvingUri: makeSelectIsUriResolving(props.uri)(state), + }; + + return { + obscureNsfw: !selectShowNsfw(state), + rewardedContentClaimIds: selectRewardContentClaimIds(state, props), + ...fileCardInfo, + pending: !!pendingPublish, + }; +}; const perform = dispatch => ({ navigate: (path, params) => dispatch(doNavigate(path, params)), diff --git a/src/renderer/component/fileCard/view.jsx b/src/renderer/component/fileCard/view.jsx index 19b1370da..1e23ad092 100644 --- a/src/renderer/component/fileCard/view.jsx +++ b/src/renderer/component/fileCard/view.jsx @@ -1,111 +1,102 @@ -import React from 'react'; +// @flow +import * as React from 'react'; import { normalizeURI } from 'lbryURI'; import CardMedia from 'component/cardMedia'; -import Link from 'component/link'; -import { TruncatedText } from 'component/common'; -import Icon from 'component/icon'; +import TruncatedText from 'component/common/truncated-text'; +import Icon from 'component/common/icon'; import FilePrice from 'component/filePrice'; import UriIndicator from 'component/uriIndicator'; import NsfwOverlay from 'component/nsfwOverlay'; -import TruncatedMarkdown from 'component/truncatedMarkdown'; import * as icons from 'constants/icons'; +import classnames from 'classnames'; -class FileCard extends React.PureComponent { - constructor(props) { - super(props); +// TODO: iron these out +type Props = { + isResolvingUri: boolean, + resolveUri: string => void, + uri: string, + claim: ?{ claim_id: string }, + fileInfo: ?{}, + metadata: ?{ nsfw: boolean, thumbnail: ?string }, + navigate: (string, ?{}) => void, + rewardedContentClaimIds: Array, + obscureNsfw: boolean, + showPrice: boolean, + pending?: boolean, +}; - this.state = { - hovered: false, - }; - } +class FileCard extends React.PureComponent { + static defaultProps = { + showPrice: true, + }; componentWillMount() { this.resolve(this.props); } - componentWillReceiveProps(nextProps) { + componentWillReceiveProps(nextProps: Props) { this.resolve(nextProps); } - resolve(props) { + resolve = (props: Props) => { const { isResolvingUri, resolveUri, claim, uri } = props; if (!isResolvingUri && claim === undefined && uri) { resolveUri(uri); } - } - - handleMouseOver() { - this.setState({ - hovered: true, - }); - } - - handleMouseOut() { - this.setState({ - hovered: false, - }); - } + }; render() { const { claim, fileInfo, metadata, - isResolvingUri, navigate, rewardedContentClaimIds, + obscureNsfw, + showPrice, + pending, } = this.props; - - const uri = normalizeURI(this.props.uri); + const uri = !pending ? normalizeURI(this.props.uri) : this.props.uri; const title = metadata && metadata.title ? metadata.title : uri; const thumbnail = metadata && metadata.thumbnail ? metadata.thumbnail : null; - const obscureNsfw = this.props.obscureNsfw && metadata && metadata.nsfw; + const shouldObscureNsfw = obscureNsfw && metadata && metadata.nsfw; const isRewardContent = claim && rewardedContentClaimIds.includes(claim.claim_id); - let description = ''; - if (isResolvingUri && !claim) { - description = __('Loading...'); - } else if (metadata && metadata.description) { - description = metadata.description; - } else if (claim === null) { - description = __('This address contains no content.'); - } - + // We should be able to tab through cards + /* eslint-disable jsx-a11y/click-events-have-key-events */ return (
navigate('/show', { uri }) : () => {}} + className={classnames('card card--small', { + 'card--link': !pending, + 'card--pending': pending, + })} > -
- navigate('/show', { uri })} className="card__link"> - -
-
- {title} -
-
- - {' '} - {isRewardContent && }{' '} - {fileInfo && } - - - - -
-
- - {/* Test for nizuka's design: should we remove description? -
- {description} -
- */} + +
{showPrice && }
+ +
+
+ {title} +
+
+ {pending ? ( +
Pending...
+ ) : ( + + + {isRewardContent && } + {fileInfo && } + + )} +
- {obscureNsfw && this.state.hovered && }
); + /* eslint-enable jsx-a11y/click-events-have-key-events */ } } diff --git a/src/renderer/component/fileDetails/view.jsx b/src/renderer/component/fileDetails/view.jsx index 9b6753484..3912729ad 100644 --- a/src/renderer/component/fileDetails/view.jsx +++ b/src/renderer/component/fileDetails/view.jsx @@ -1,70 +1,81 @@ -import React from 'react'; +// @flow +import * as React from 'react'; import ReactMarkdown from 'react-markdown'; -import lbry from 'lbry.js'; -import FileActions from 'component/fileActions'; -import Link from 'component/link'; -import DateTime from 'component/dateTime'; +import lbry from 'lbry'; +import Button from 'component/button'; +import path from 'path'; -const path = require('path'); +type Props = { + claim: {}, + fileInfo: { + download_path: string, + }, + metadata: { + description: string, + language: string, + license: string, + }, + openFolder: string => void, + contentType: string, +}; -class FileDetails extends React.PureComponent { - render() { - const { claim, contentType, fileInfo, metadata, openFolder, uri } = this.props; - - if (!claim || !metadata) { - return ( -
- {__('Empty claim or metadata info.')} -
- ); - } - - const { description, language, license } = metadata; - const mediaType = lbry.getMediaType(contentType); - - const downloadPath = fileInfo ? path.normalize(fileInfo.download_path) : null; +const FileDetails = (props: Props) => { + const { claim, contentType, fileInfo, metadata, openFolder } = props; + if (!claim || !metadata) { return ( -
-
- -
-
- -
-
- - - - - - - - - - - - - - - {downloadPath && ( - - - - - )} - -
{__('Content-Type')}{mediaType}
{__('Language')}{language}
{__('License')}{license}
{__('Downloaded to')} - openFolder(downloadPath)}>{downloadPath} -
-
+
+ {__('Empty claim or metadata info.')}
); } -} + + const { description, language, license } = metadata; + const mediaType = lbry.getMediaType(contentType); + + const downloadPath = fileInfo ? path.normalize(fileInfo.download_path) : null; + + return ( + + {description && ( + +
About
+
+ +
+
+ )} +
Info
+
+
+ {__('Content-Type')} + {': '} + {mediaType} +
+
+ {__('Language')} + {': '} + {language} +
+
+ {__('License')} + {': '} + {license} +
+ {downloadPath && ( +
+ {__('Downloaded to')} + {': '} +
+ )} +
+
+ ); +}; export default FileDetails; diff --git a/src/renderer/component/fileDownloadLink/view.jsx b/src/renderer/component/fileDownloadLink/view.jsx index 57818da51..c2c413bd6 100644 --- a/src/renderer/component/fileDownloadLink/view.jsx +++ b/src/renderer/component/fileDownloadLink/view.jsx @@ -1,7 +1,7 @@ import React from 'react'; -import { BusyMessage } from 'component/common'; -import Icon from 'component/icon'; -import Link from 'component/link'; +import Button from 'component/button'; +import classnames from 'classnames'; +import * as icons from 'constants/icons'; class FileDownloadLink extends React.PureComponent { componentWillMount() { @@ -53,38 +53,34 @@ class FileDownloadLink extends React.PureComponent { if (loading || downloading) { const progress = - fileInfo && fileInfo.written_bytes - ? fileInfo.written_bytes / fileInfo.total_bytes * 100 - : 0, - label = fileInfo ? progress.toFixed(0) + __('% complete') : __('Connecting...'), - labelWithIcon = ( - - - {label} - - ); + fileInfo && fileInfo.written_bytes + ? fileInfo.written_bytes / fileInfo.total_bytes * 100 + : 0; + const label = fileInfo ? progress.toFixed(0) + __('% complete') : __('Connecting...'); return ( -
+
- {labelWithIcon} + {label}
- {labelWithIcon} + {label}
); } else if (fileInfo === null && !downloading) { if (!costInfo) { - return ; + return null; } + return ( - { purchaseUri(uri); }} @@ -92,11 +88,10 @@ class FileDownloadLink extends React.PureComponent { ); } else if (fileInfo && fileInfo.download_path) { return ( - openFile()} /> ); diff --git a/src/renderer/component/fileList/view.jsx b/src/renderer/component/fileList/view.jsx index 9c926e825..0e3b730f9 100644 --- a/src/renderer/component/fileList/view.jsx +++ b/src/renderer/component/fileList/view.jsx @@ -1,21 +1,54 @@ -import React from 'react'; +// @flow +import * as React from 'react'; import { buildURI } from 'lbryURI'; -import FormField from 'component/formField'; -import FileTile from 'component/fileTile'; -import { BusyMessage } from 'component/common.js'; +import { FormField } from 'component/common/form'; +import FileCard from 'component/fileCard'; -class FileList extends React.PureComponent { - constructor(props) { +type FileInfo = { + name: string, + channelName: ?string, + pending?: boolean, + value?: { + publisherSignature: { + certificateId: string, + }, + }, + metadata: { + publisherSignature: { + certificateId: string, + }, + }, +}; + +type Props = { + hideFilter: boolean, + fileInfos: Array, +}; + +type State = { + sortBy: string, +}; + +class FileList extends React.PureComponent { + static defaultProps = { + hideFilter: false, + }; + + constructor(props: Props) { super(props); this.state = { sortBy: 'dateNew', }; - this._sortFunctions = { + this.sortFunctions = { dateNew: fileInfos => this.props.sortByHeight ? fileInfos.slice().sort((fileInfo1, fileInfo2) => { + if (fileInfo1.pending) { + return -1; + } + const height1 = this.props.claimsById[fileInfo1.claim_id] ? this.props.claimsById[fileInfo1.claim_id].height : 0; @@ -76,60 +109,62 @@ class FileList extends React.PureComponent { }; } - getChannelSignature(fileInfo) { + getChannelSignature = (fileInfo: FileInfo) => { + if (fileInfo.pending) { + return undefined; + } + if (fileInfo.value) { return fileInfo.value.publisherSignature.certificateId; } return fileInfo.channel_claim_id; - } + }; - handleSortChanged(event) { + handleSortChanged(event: SyntheticInputEvent<*>) { this.setState({ sortBy: event.target.value, }); } render() { - const { handleSortChanged, fetching, fileInfos } = this.props; + const { fileInfos, hideFilter } = this.props; const { sortBy } = this.state; const content = []; - this._sortFunctions[sortBy](fileInfos).forEach(fileInfo => { + this.sortFunctions[sortBy](fileInfos).forEach(fileInfo => { + const { channel_name: channelName, name: claimName, claim_id: claimId } = fileInfo; const uriParams = {}; - if (fileInfo.channel_name) { - uriParams.channelName = fileInfo.channel_name; - uriParams.contentName = fileInfo.claim_name || fileInfo.name; + if (channelName) { + uriParams.channelName = channelName; + uriParams.contentName = claimName; uriParams.claimId = this.getChannelSignature(fileInfo); } else { - uriParams.claimId = fileInfo.claim_id; - uriParams.claimName = fileInfo.claim_name || fileInfo.name; + uriParams.claimId = claimId; + uriParams.claimName = claimName; } + const uri = buildURI(uriParams); - content.push( - - ); + content.push(); }); + return ( -
- {fetching && } - - {__('Sort by')}{' '} - - - - - - - {content} +
+
+ {!hideFilter && ( + + + + + )} +
+
{content}
); } diff --git a/src/renderer/component/fileListSearch/index.js b/src/renderer/component/fileListSearch/index.js index ec06231af..328295768 100644 --- a/src/renderer/component/fileListSearch/index.js +++ b/src/renderer/component/fileListSearch/index.js @@ -1,12 +1,13 @@ -import React from 'react'; import { connect } from 'react-redux'; import { doSearch } from 'redux/actions/search'; -import { selectIsSearching, makeSelectSearchUris } from 'redux/selectors/search'; +import { makeSelectSearchUris, selectIsSearching } from 'redux/selectors/search'; +import { selectSearchDownloadUris } from 'redux/selectors/file_info'; import FileListSearch from './view'; const select = (state, props) => ({ - isSearching: selectIsSearching(state), uris: makeSelectSearchUris(props.query)(state), + downloadUris: selectSearchDownloadUris(props.query)(state), + isSearching: selectIsSearching(state), }); const perform = dispatch => ({ diff --git a/src/renderer/component/fileListSearch/view.jsx b/src/renderer/component/fileListSearch/view.jsx index 89e99ca65..53add5ab7 100644 --- a/src/renderer/component/fileListSearch/view.jsx +++ b/src/renderer/component/fileListSearch/view.jsx @@ -1,58 +1,95 @@ +// @flow import React from 'react'; import FileTile from 'component/fileTile'; import ChannelTile from 'component/channelTile'; -import Link from 'component/link'; -import { BusyMessage } from 'component/common.js'; import { parseURI } from 'lbryURI'; +import debounce from 'util/debounce'; -const SearchNoResults = props => { - const { query } = props; +const SEARCH_DEBOUNCE_TIME = 800; - return ( -
- - {(__('No one has checked anything in for %s yet.'), query)}{' '} - - -
- ); +const NoResults = () => { + return
{__('No results')}
; }; -class FileListSearch extends React.PureComponent { - componentWillMount() { - this.doSearch(this.props); +type Props = { + search: string => void, + query: string, + isSearching: boolean, + uris: ?Array, + downloadUris: ?Array, +}; + +class FileListSearch extends React.PureComponent { + constructor(props: Props) { + super(props); + this.debouncedSearch = debounce(this.props.search, SEARCH_DEBOUNCE_TIME); } - componentWillReceiveProps(props) { - if (props.query != this.props.query) { - this.doSearch(props); + componentDidMount() { + const { search, query } = this.props; + search(query); + } + + componentWillReceiveProps(nextProps: Props) { + const { query: nextQuery } = nextProps; + const { query: currentQuerry } = this.props; + + if (nextQuery !== currentQuerry) { + this.debouncedSearch(nextQuery); } } - doSearch(props) { - this.props.search(props.query); - } + debouncedSearch: string => void; render() { - const { isSearching, uris, query } = this.props; + const { uris, query, downloadUris, isSearching } = this.props; + + const fileResults = []; + const channelResults = []; + if (uris && uris.length) { + uris.forEach(uri => { + const isChannel = parseURI(uri).claimName[0] === '@'; + if (isChannel) { + channelResults.push(uri); + } else { + fileResults.push(uri); + } + }); + } return ( -
- {isSearching && !uris && } + query && ( +
+
+
{__('Files')}
+ {!isSearching && + (fileResults.length ? ( + fileResults.map(uri => ) + ) : ( + + ))} +
- {isSearching && uris && } +
+
{__('Channels')}
+ {!isSearching && + (channelResults.length ? ( + channelResults.map(uri => ) + ) : ( + + ))} +
- {uris && uris.length - ? uris.map( - uri => - parseURI(uri).claimName[0] === '@' ? ( - - ) : ( - - ) - ) - : !isSearching && } -
+
+
{__('Your downloads')}
+ {downloadUris && downloadUris.length ? ( + downloadUris.map(uri => ) + ) : ( + + )} +
+
+ ) ); } } diff --git a/src/renderer/component/filePrice/view.jsx b/src/renderer/component/filePrice/view.jsx index 5a5947f14..090c93126 100644 --- a/src/renderer/component/filePrice/view.jsx +++ b/src/renderer/component/filePrice/view.jsx @@ -1,35 +1,48 @@ +// @flow import React from 'react'; -import { CreditAmount } from 'component/common'; +import CreditAmount from 'component/common/credit-amount'; + +type Props = { + showFullPrice: boolean, + costInfo: ?{ includesData: boolean, cost: number }, + fetchCostInfo: string => void, + uri: string, + fetching: boolean, + claim: ?{}, +}; + +class FilePrice extends React.PureComponent { + static defaultProps = { + showFullPrice: false, + }; -class FilePrice extends React.PureComponent { componentWillMount() { this.fetchCost(this.props); } - componentWillReceiveProps(nextProps) { + componentWillReceiveProps(nextProps: Props) { this.fetchCost(nextProps); } - fetchCost(props) { + fetchCost = (props: Props) => { const { costInfo, fetchCostInfo, uri, fetching, claim } = props; if (costInfo === undefined && !fetching && claim) { fetchCostInfo(uri); } - } + }; render() { - const { costInfo, look = 'indicator', showFullPrice = false } = this.props; + const { costInfo, showFullPrice } = this.props; - const isEstimate = costInfo ? !costInfo.includesData : null; + const isEstimate = costInfo ? !costInfo.includesData : false; if (!costInfo) { - return ???; + return PRICE; } return ( ({ claim: makeSelectClaimForUri(props.uri)(state), - fileInfo: makeSelectFileInfoForUri(props.uri)(state), - obscureNsfw: !selectShowNsfw(state), + isDownloaded: !!makeSelectFileInfoForUri(props.uri)(state), metadata: makeSelectMetadataForUri(props.uri)(state), isResolvingUri: makeSelectIsUriResolving(props.uri)(state), rewardedContentClaimIds: selectRewardContentClaimIds(state, props), diff --git a/src/renderer/component/fileTile/view.jsx b/src/renderer/component/fileTile/view.jsx index 6bbc3b4c6..7761b9f4e 100644 --- a/src/renderer/component/fileTile/view.jsx +++ b/src/renderer/component/fileTile/view.jsx @@ -1,132 +1,115 @@ -import React from 'react'; +// @flow +import * as React from 'react'; import * as icons from 'constants/icons'; import { normalizeURI, isURIClaimable, parseURI } from 'lbryURI'; import CardMedia from 'component/cardMedia'; -import { TruncatedText } from 'component/common.js'; +import TruncatedText from 'component/common/truncated-text'; import FilePrice from 'component/filePrice'; -import NsfwOverlay from 'component/nsfwOverlay'; -import Icon from 'component/icon'; +import Icon from 'component/common/icon'; +import Button from 'component/button'; +import classnames from 'classnames'; -class FileTile extends React.PureComponent { - static SHOW_EMPTY_PUBLISH = 'publish'; - static SHOW_EMPTY_PENDING = 'pending'; +type Props = { + fullWidth: boolean, // removes the max-width css + showUri: boolean, + showLocal: boolean, + isDownloaded: boolean, + uri: string, + isResolvingUri: boolean, + rewardedContentClaimIds: Array, + claim: ?{ + name: string, + channel_name: string, + claim_id: string, + }, + metadata: {}, + resolveUri: string => void, + navigate: (string, ?{}) => void, +}; +class FileTile extends React.PureComponent { static defaultProps = { - showPrice: true, - showLocal: true, + showUri: false, + showLocal: false, + fullWidth: false, }; - constructor(props) { - super(props); - this.state = { - showNsfwHelp: false, - }; - } - componentDidMount() { const { isResolvingUri, claim, uri, resolveUri } = this.props; - if (!isResolvingUri && !claim && uri) resolveUri(uri); } - componentWillReceiveProps(nextProps) { - const { isResolvingUri, claim, uri, resolveUri } = this.props; - + componentWillReceiveProps(nextProps: Props) { + const { isResolvingUri, claim, uri, resolveUri } = nextProps; if (!isResolvingUri && claim === undefined && uri) resolveUri(uri); } - handleMouseOver() { - if (this.props.obscureNsfw && this.props.metadata && this.props.metadata.nsfw) { - this.setState({ - showNsfwHelp: true, - }); - } - } - - handleMouseOut() { - if (this.state.showNsfwHelp) { - this.setState({ - showNsfwHelp: false, - }); - } - } - render() { const { claim, - showActions, metadata, isResolvingUri, - showEmpty, navigate, - showPrice, - showLocal, rewardedContentClaimIds, - fileInfo, + showUri, + fullWidth, + showLocal, + isDownloaded, } = this.props; const uri = normalizeURI(this.props.uri); const isClaimed = !!claim; - const isClaimable = isURIClaimable(uri); const title = isClaimed && metadata && metadata.title ? metadata.title : parseURI(uri).contentName; const thumbnail = metadata && metadata.thumbnail ? metadata.thumbnail : null; - const obscureNsfw = this.props.obscureNsfw && metadata && metadata.nsfw; const isRewardContent = claim && rewardedContentClaimIds.includes(claim.claim_id); - let onClick = () => navigate('/show', { uri }); + const onClick = () => navigate('/show', { uri }); - let name = ''; + let name; + let channel; if (claim) { name = claim.name; - } - - let description = ''; - if (isClaimed) { - description = metadata && metadata.description; - } else if (isResolvingUri) { - description = __('Loading...'); - } else if (showEmpty === FileTile.SHOW_EMPTY_PUBLISH) { - onClick = () => navigate('/publish', {}); - description = ( - - {__('This location is unused.')}{' '} - {isClaimable && {__('Put something here!')}} - - ); - } else if (showEmpty === FileTile.SHOW_EMPTY_PENDING) { - description = {__('This file is pending confirmation.')}; + channel = claim.channel_name; } return (
-
-
- -
-
- - {showPrice && }{' '} - {isRewardContent && }{' '} - {showLocal && fileInfo && } - -

- {title || name} -

+ +
+ {isResolvingUri &&
{__('Loading...')}
} + {!isResolvingUri && ( + +
+ {title || name}
- {description && ( -
- {description} -
+
+ {showUri ? uri : channel || __('Anonymous')} + {isRewardContent && } + {showLocal && isDownloaded && } +
+ {!name && ( + + {__('This location is unused.')}{' '} +
-
+ + )}
- {this.state.showNsfwHelp && }
); } diff --git a/src/renderer/component/form.js b/src/renderer/component/form.js deleted file mode 100644 index c13619b1a..000000000 --- a/src/renderer/component/form.js +++ /dev/null @@ -1,186 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import FormField from 'component/formField'; -import Icon from 'component/icon'; - -let formFieldCounter = 0; - -export const formFieldNestedLabelTypes = ['radio', 'checkbox']; - -export function formFieldId() { - return `form-field-${++formFieldCounter}`; -} - -export class Form extends React.PureComponent { - static propTypes = { - onSubmit: PropTypes.func.isRequired, - }; - - constructor(props) { - super(props); - } - - handleSubmit(event) { - event.preventDefault(); - this.props.onSubmit(); - } - - render() { - return
this.handleSubmit(event)}>{this.props.children}
; - } -} - -export class FormRow extends React.PureComponent { - static propTypes = { - label: PropTypes.oneOfType([PropTypes.string, PropTypes.element]), - errorMessage: PropTypes.oneOfType([PropTypes.string, PropTypes.object]), - // helper: PropTypes.html, - }; - - static defaultProps = { - isFocus: false, - }; - - constructor(props) { - super(props); - - this._field = null; - - this._fieldRequiredText = __('This field is required'); - - this.state = this.getStateFromProps(props); - } - - componentWillReceiveProps(nextProps) { - this.setState(this.getStateFromProps(nextProps)); - } - - getStateFromProps(props) { - return { - isError: !!props.errorMessage, - errorMessage: - typeof props.errorMessage === 'string' - ? props.errorMessage - : props.errorMessage instanceof Error ? props.errorMessage.toString() : '', - }; - } - - showError(text) { - this.setState({ - isError: true, - errorMessage: text, - }); - } - - showRequiredError() { - this.showError(this._fieldRequiredText); - } - - clearError(text) { - this.setState({ - isError: false, - errorMessage: '', - }); - } - - getValue() { - return this._field.getValue(); - } - - getSelectedElement() { - return this._field.getSelectedElement(); - } - - getOptions() { - return this._field.getOptions(); - } - - focus() { - this._field.focus(); - } - - onFocus() { - this.setState({ isFocus: true }); - } - - onBlur() { - this.setState({ isFocus: false }); - } - - render() { - const fieldProps = Object.assign({}, this.props), - elementId = formFieldId(), - renderLabelInFormField = formFieldNestedLabelTypes.includes(this.props.type); - - if (!renderLabelInFormField) { - delete fieldProps.label; - } - delete fieldProps.helper; - delete fieldProps.errorMessage; - delete fieldProps.isFocus; - - return ( -
- {this.props.label && !renderLabelInFormField ? ( -
- -
- ) : ( - '' - )} - { - this._field = ref ? ref.getWrappedInstance() : null; - }} - hasError={this.state.isError} - onFocus={this.onFocus.bind(this)} - onBlur={this.onBlur.bind(this)} - {...fieldProps} - /> - {!this.state.isError && this.props.helper ? ( -
{this.props.helper}
- ) : ( - '' - )} - {this.state.isError ? ( -
{this.state.errorMessage}
- ) : ( - '' - )} -
- ); - } -} - -export const Submit = props => { - const { title, label, icon, disabled } = props; - - const className = `${'button-block' + - ' button-primary' + - ' button-set-item' + - ' button--submit'}${disabled ? ' disabled' : ''}`; - - const content = ( - - {'icon' in props ? : null} - {label ? {label} : null} - - ); - - return ( - - ); -}; diff --git a/src/renderer/component/formField/view.jsx b/src/renderer/component/formField/view.jsx index 960b08c17..9d8dca9ec 100644 --- a/src/renderer/component/formField/view.jsx +++ b/src/renderer/component/formField/view.jsx @@ -1,8 +1,10 @@ +// This file is going to die +/* eslint-disable */ import React from 'react'; import PropTypes from 'prop-types'; -import FileSelector from 'component/file-selector.js'; +import FileSelector from 'component/common/file-selector'; import SimpleMDE from 'react-simplemde-editor'; -import { formFieldNestedLabelTypes, formFieldId } from '../form'; +import { formFieldNestedLabelTypes, formFieldId } from 'component/common/form'; import style from 'react-simplemde-editor/dist/simplemde.min.css'; const formFieldFileSelectorTypes = ['file', 'directory']; @@ -195,3 +197,4 @@ class FormField extends React.PureComponent { } export default FormField; +/* eslint-enable */ diff --git a/src/renderer/component/formFieldPrice/view.jsx b/src/renderer/component/formFieldPrice/view.jsx index 71382bb47..405e9b8ce 100644 --- a/src/renderer/component/formFieldPrice/view.jsx +++ b/src/renderer/component/formFieldPrice/view.jsx @@ -1,63 +1,5 @@ -import React from 'react'; -import FormField from 'component/formField'; +// This just exists so the app builds. It will be removed -class FormFieldPrice extends React.PureComponent { - constructor(props) { - super(props); - this.state = { - amount: props.defaultValue && props.defaultValue.amount ? props.defaultValue.amount : '', - currency: - props.defaultValue && props.defaultValue.currency ? props.defaultValue.currency : 'LBC', - }; - } - - handleChange(newValues) { - const newState = Object.assign({}, this.state, newValues); - this.setState(newState); - this.props.onChange({ - amount: newState.amount, - currency: newState.currency, - }); - } - - handleFeeAmountChange(event) { - this.handleChange({ - amount: event.target.value ? Number(event.target.value) : null, - }); - } - - handleFeeCurrencyChange(event) { - this.handleChange({ currency: event.target.value }); - } - - render() { - const { defaultValue, placeholder, min } = this.props; - - return ( - - this.handleFeeAmountChange(event)} - defaultValue={defaultValue && defaultValue.amount ? defaultValue.amount : ''} - className="form-field__input--inline" - /> - this.handleFeeCurrencyChange(event)} - defaultValue={defaultValue && defaultValue.currency ? defaultValue.currency : ''} - className="form-field__input--inline" - > - - - - - ); - } -} +const FormFieldPrice = () => null; export default FormFieldPrice; diff --git a/src/renderer/component/header/index.js b/src/renderer/component/header/index.js index 59c98d0ff..073d0d2eb 100644 --- a/src/renderer/component/header/index.js +++ b/src/renderer/component/header/index.js @@ -1,16 +1,12 @@ -import React from 'react'; -import { formatCredits } from 'util/formatCredits'; import { connect } from 'react-redux'; -import { selectIsBackDisabled, selectIsForwardDisabled } from 'redux/selectors/navigation'; -import { selectBalance } from 'redux/selectors/wallet'; -import { doNavigate, doHistoryBack, doHistoryForward } from 'redux/actions/navigation'; -import Header from './view'; +import { doNavigate } from 'redux/actions/navigation'; import { selectIsUpgradeAvailable, selectAutoUpdateDownloaded } from 'redux/selectors/app'; +import { formatCredits } from 'util/formatCredits'; +import { selectBalance } from 'redux/selectors/wallet'; +import Header from './view'; import { doDownloadUpgradeRequested } from 'redux/actions/app'; const select = state => ({ - isBackDisabled: selectIsBackDisabled(state), - isForwardDisabled: selectIsForwardDisabled(state), isUpgradeAvailable: selectIsUpgradeAvailable(state), autoUpdateDownloaded: selectAutoUpdateDownloaded(state), balance: formatCredits(selectBalance(state) || 0, 2), diff --git a/src/renderer/component/header/view.jsx b/src/renderer/component/header/view.jsx index 7109d7b8b..e081e2139 100644 --- a/src/renderer/component/header/view.jsx +++ b/src/renderer/component/header/view.jsx @@ -1,100 +1,68 @@ -import React from 'react'; -import Link from 'component/link'; +// @flow +import * as React from 'react'; +import Button from 'component/button'; import WunderBar from 'component/wunderbar'; +import * as icons from 'constants/icons'; -export const Header = props => { +type Props = { + balance: string, + navigate: any => void, + downloadUpgradeRequested: any => void, + isUpgradeAvailable: boolean, + autoUpdateDownloaded: boolean, +}; + +const Header = (props: Props) => { const { balance, - back, - forward, - isBackDisabled, - isForwardDisabled, isUpgradeAvailable, - autoUpdateDownloaded, navigate, downloadUpgradeRequested, + autoUpdateDownloaded, } = props; + + const showUpgradeButton = + autoUpdateDownloaded || (process.platform === 'linux' && isUpgradeAvailable); + return ( - ); }; diff --git a/src/renderer/component/icon/index.js b/src/renderer/component/icon/index.js deleted file mode 100644 index 81d61e58b..000000000 --- a/src/renderer/component/icon/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; -import Icon from './view'; - -export default connect(null, null)(Icon); diff --git a/src/renderer/component/icon/view.jsx b/src/renderer/component/icon/view.jsx deleted file mode 100644 index 795a1b241..000000000 --- a/src/renderer/component/icon/view.jsx +++ /dev/null @@ -1,50 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import * as icons from 'constants/icons'; -import classnames from 'classnames'; - -export default class Icon extends React.PureComponent { - static propTypes = { - icon: PropTypes.string.isRequired, - fixed: PropTypes.bool, - }; - - static defaultProps = { - fixed: false, - }; - - getIconClass() { - const { icon } = this.props; - - return icon.startsWith('icon-') ? icon : `icon-${icon}`; - } - - getIconTitle() { - switch (this.props.icon) { - case icons.FEATURED: - return __('Watch this and earn rewards.'); - case icons.LOCAL: - return __('You have a copy of this file.'); - default: - return ''; - } - } - - render() { - const { icon, fixed, className, leftPad } = this.props; - const iconClass = this.getIconClass(); - const title = this.getIconTitle(); - - const spanClassName = classnames( - 'icon', - iconClass, - { - 'icon-fixed-width': fixed, - 'icon--left-pad': leftPad, - }, - className - ); - - return ; - } -} diff --git a/src/renderer/component/inviteList/view.jsx b/src/renderer/component/inviteList/view.jsx index c339cfd1b..7874e9251 100644 --- a/src/renderer/component/inviteList/view.jsx +++ b/src/renderer/component/inviteList/view.jsx @@ -1,7 +1,8 @@ import React from 'react'; -import Icon from 'component/icon'; +import Icon from 'component/common/icon'; import RewardLink from 'component/rewardLink'; import rewards from 'rewards.js'; +import * as icons from 'constants/icons'; class InviteList extends React.PureComponent { render() { @@ -12,8 +13,8 @@ class InviteList extends React.PureComponent { } return ( -
-
+
+

{__('Invite History')}

@@ -21,7 +22,7 @@ class InviteList extends React.PureComponent { {__("You haven't invited anyone.")} )} {invitees.length > 0 && ( - +
@@ -35,14 +36,14 @@ class InviteList extends React.PureComponent {
{__('Invitee Email')}{invitee.email} {invitee.invite_accepted ? ( - + ) : ( {__('unused')} )} {invitee.invite_reward_claimed ? ( - + ) : invitee.invite_reward_claimable ? ( ) : ( diff --git a/src/renderer/component/inviteNew/view.jsx b/src/renderer/component/inviteNew/view.jsx index b7a76709f..6e174bb73 100644 --- a/src/renderer/component/inviteNew/view.jsx +++ b/src/renderer/component/inviteNew/view.jsx @@ -1,14 +1,19 @@ +// I'll come back to this +/* eslint-disable */ import React from 'react'; -import { BusyMessage, CreditAmount } from 'component/common'; -import { Form, FormRow, Submit } from 'component/form.js'; +import BusyIndicator from 'component/common/busy-indicator'; +import CreditAmount from 'component/common/credit-amount'; +import { Form, FormRow, FormField, Submit } from 'component/common/form'; class FormInviteNew extends React.PureComponent { - constructor(props) { - super(props); + constructor() { + super(); this.state = { email: '', }; + + this.handleSubmit = this.handleSubmit.bind(this); } handleEmailChanged(event) { @@ -23,23 +28,27 @@ class FormInviteNew extends React.PureComponent { } render() { - const { errorMessage, isPending } = this.props; + const { errorMessage, isPending, rewardAmount } = this.props; + const label = `${__('Get')} ${rewardAmount} LBC`; return ( -
- { - this.handleEmailChanged(event); - }} - /> -
- + + + { + this.handleEmailChanged(event); + }} + /> + +
+
); @@ -58,10 +67,10 @@ class InviteNew extends React.PureComponent { } = this.props; return ( -
-
- -

{__('Invite a Friend')}

+
+
{__('Invite a Friend')}
+
+ {__("Or an enemy. Or your cousin Jerry, who you're kind of unsure about.")}
{/*
@@ -71,8 +80,12 @@ class InviteNew extends React.PureComponent {

{__("You have no invites.")}

}
*/}
-

{__("Or an enemy. Or your cousin Jerry, who you're kind of unsure about.")}

- +
); @@ -80,3 +93,4 @@ class InviteNew extends React.PureComponent { } export default InviteNew; +/* eslint-enable */ diff --git a/src/renderer/component/link/view.jsx b/src/renderer/component/link/view.jsx deleted file mode 100644 index 92451daff..000000000 --- a/src/renderer/component/link/view.jsx +++ /dev/null @@ -1,60 +0,0 @@ -import React from 'react'; -import Icon from 'component/icon'; - -const Link = props => { - const { - href, - title, - style, - label, - icon, - iconRight, - button, - disabled, - children, - navigate, - navigateParams, - doNavigate, - className, - span, - } = props; - - const combinedClassName = - (className || '') + - (!className && !button ? 'button-text' : '') + // Non-button links get the same look as text buttons - (button ? ` button-block button-${button} button-set-item` : '') + - (disabled ? ' disabled' : ''); - - const onClick = - !props.onClick && navigate - ? event => { - event.stopPropagation(); - doNavigate(navigate, navigateParams || {}); - } - : props.onClick; - - let content; - if (children) { - content = children; - } else { - content = ( - - {icon ? : null} - {label ? {label} : null} - {iconRight ? : null} - - ); - } - - const linkProps = { - className: combinedClassName, - href: href || 'javascript:;', - title, - onClick, - style, - }; - - return span ? {content} : {content}; -}; - -export default Link; diff --git a/src/renderer/component/linkTransaction/index.js b/src/renderer/component/linkTransaction/index.js deleted file mode 100644 index 4f4aa23b7..000000000 --- a/src/renderer/component/linkTransaction/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; -import LinkTransaction from './view'; - -export default connect(null, null)(LinkTransaction); diff --git a/src/renderer/component/linkTransaction/view.jsx b/src/renderer/component/linkTransaction/view.jsx deleted file mode 100644 index 44e81c321..000000000 --- a/src/renderer/component/linkTransaction/view.jsx +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react'; -import Link from 'component/link'; - -const LinkTransaction = props => { - const { id } = props; - const linkProps = Object.assign({}, props); - - linkProps.href = `https://explorer.lbry.io/#!/transaction/${id}`; - linkProps.label = id.substr(0, 7); - - return ; -}; - -export default LinkTransaction; diff --git a/src/renderer/component/load_screen.js b/src/renderer/component/load_screen.js deleted file mode 100644 index 5c990d37d..000000000 --- a/src/renderer/component/load_screen.js +++ /dev/null @@ -1,57 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import lbry from '../lbry.js'; -import { BusyMessage, Icon } from './common.js'; -import Link from 'component/link'; - -class LoadScreen extends React.PureComponent { - static propTypes = { - message: PropTypes.string.isRequired, - details: PropTypes.string, - isWarning: PropTypes.bool, - }; - - constructor(props) { - super(props); - - this.state = { - message: null, - details: null, - isLagging: false, - }; - } - - static defaultProps = { - isWarning: false, - }; - - render() { - const imgSrc = lbry.imagePath('lbry-white-485x160.png'); - return ( -
- LBRY -
-

- {!this.props.isWarning ? ( - - ) : ( - - - {` ${this.props.message}`} - - )} -

- - {this.props.details} - -
-
- ); - } -} - -export default LoadScreen; diff --git a/src/renderer/component/menu.js b/src/renderer/component/menu.js deleted file mode 100644 index e070f8711..000000000 --- a/src/renderer/component/menu.js +++ /dev/null @@ -1,111 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import Icon from 'component/icon'; -import Link from 'component/link'; - -export class DropDownMenuItem extends React.PureComponent { - static propTypes = { - href: PropTypes.string, - label: PropTypes.string, - icon: PropTypes.string, - onClick: PropTypes.func, - }; - - static defaultProps = { - iconPosition: 'left', - }; - - render() { - const icon = this.props.icon ? : null; - - return ( - - {this.props.iconPosition == 'left' ? icon : null} - {this.props.label} - {this.props.iconPosition == 'left' ? null : icon} - - ); - } -} - -export class DropDownMenu extends React.PureComponent { - constructor(props) { - super(props); - - this._isWindowClickBound = false; - this._menuDiv = null; - - this.state = { - menuOpen: false, - }; - } - - componentWillUnmount() { - if (this._isWindowClickBound) { - window.removeEventListener('click', this.handleWindowClick, false); - } - } - - handleMenuIconClick(e) { - this.setState({ - menuOpen: !this.state.menuOpen, - }); - if (!this.state.menuOpen && !this._isWindowClickBound) { - this._isWindowClickBound = true; - window.addEventListener('click', this.handleWindowClick, false); - e.stopPropagation(); - } - return false; - } - - handleMenuClick(e) { - // Event bubbles up to the menu after a link is clicked - this.setState({ - menuOpen: false, - }); - } - - /* this will force "this" to always be the class, even when passed to an event listener */ - handleWindowClick = e => { - if (this.state.menuOpen && (!this._menuDiv || !this._menuDiv.contains(e.target))) { - this.setState({ - menuOpen: false, - }); - } - }; - - render() { - if (!this.state.menuOpen && this._isWindowClickBound) { - this._isWindowClickBound = false; - window.removeEventListener('click', this.handleWindowClick, false); - } - return ( -
- (this._menuButton = span)} - button="text" - icon="icon-ellipsis-v" - onClick={event => { - this.handleMenuIconClick(event); - }} - /> - {this.state.menuOpen ? ( -
(this._menuDiv = div)} - className="menu" - onClick={event => { - this.handleMenuClick(event); - }} - > - {this.props.children} -
- ) : null} -
- ); - } -} diff --git a/src/renderer/component/nsfwOverlay/view.jsx b/src/renderer/component/nsfwOverlay/view.jsx index c89fe6da9..3c38cdbf8 100644 --- a/src/renderer/component/nsfwOverlay/view.jsx +++ b/src/renderer/component/nsfwOverlay/view.jsx @@ -1,15 +1,11 @@ import React from 'react'; -import Link from 'component/link'; +import Button from 'component/button'; -const NsfwOverlay = props => ( +const NsfwOverlay = () => (

{__('This content is Not Safe For Work. To view adult content, please change your')}{' '} - props.navigateSettings()} - label={__('Settings')} - />. +

); diff --git a/src/renderer/component/page/index.js b/src/renderer/component/page/index.js new file mode 100644 index 000000000..0bf9f77fe --- /dev/null +++ b/src/renderer/component/page/index.js @@ -0,0 +1,31 @@ +import { connect } from 'react-redux'; +import { + selectPageTitle, + selectIsBackDisabled, + selectIsForwardDisabled, + selectNavLinks, +} from 'redux/selectors/navigation'; +import { doNavigate, doHistoryBack, doHistoryForward } from 'redux/actions/navigation'; +import { doDownloadUpgrade } from 'redux/actions/app'; +import { selectIsUpgradeAvailable } from 'redux/selectors/app'; +import { formatCredits } from 'util/formatCredits'; +import { selectBalance } from 'redux/selectors/wallet'; +import Page from './view'; + +const select = state => ({ + pageTitle: selectPageTitle(state), + navLinks: selectNavLinks(state), + isBackDisabled: selectIsBackDisabled(state), + isForwardDisabled: selectIsForwardDisabled(state), + isUpgradeAvailable: selectIsUpgradeAvailable(state), + balance: formatCredits(selectBalance(state) || 0, 2), +}); + +const perform = dispatch => ({ + navigate: path => dispatch(doNavigate(path)), + back: () => dispatch(doHistoryBack()), + forward: () => dispatch(doHistoryForward()), + downloadUpgrade: () => dispatch(doDownloadUpgrade()), +}); + +export default connect(select, perform)(Page); diff --git a/src/renderer/component/page/view.jsx b/src/renderer/component/page/view.jsx new file mode 100644 index 000000000..40ec8564b --- /dev/null +++ b/src/renderer/component/page/view.jsx @@ -0,0 +1,33 @@ +// @flow +import * as React from 'react'; +import classnames from 'classnames'; + +type Props = { + children: React.Node, + pageTitle: ?string, + noPadding: ?boolean, + extraPadding: ?boolean, + notContained: ?boolean, // No max-width, but keep the padding +}; + +const Page = (props: Props) => { + const { pageTitle, children, noPadding, extraPadding, notContained } = props; + return ( +
+ {pageTitle && ( +
+ {pageTitle &&

{pageTitle}

} +
+ )} + {children} +
+ ); +}; + +export default Page; diff --git a/src/renderer/component/publishForm/index.js b/src/renderer/component/publishForm/index.js index de3ba7663..3eb2a7bc4 100644 --- a/src/renderer/component/publishForm/index.js +++ b/src/renderer/component/publishForm/index.js @@ -1,10 +1,5 @@ import React from 'react'; import { connect } from 'react-redux'; import PublishForm from './view'; -import { selectBalance } from 'redux/selectors/wallet'; -const select = state => ({ - balance: selectBalance(state), -}); - -export default connect(select, null)(PublishForm); +export default connect(null, null)(PublishForm); diff --git a/src/renderer/component/publishForm/internal/bid-help-text.jsx b/src/renderer/component/publishForm/internal/bid-help-text.jsx new file mode 100644 index 000000000..8c99118d2 --- /dev/null +++ b/src/renderer/component/publishForm/internal/bid-help-text.jsx @@ -0,0 +1,61 @@ +// @flow +import * as React from 'react'; +import Button from 'component/button'; + +type Props = { + uri: ?string, + editingURI: ?string, + isResolvingUri: boolean, + winningBidForClaimUri: ?number, + claimIsMine: ?boolean, + onEditMyClaim: any => void, +}; + +class BidHelpText extends React.PureComponent { + render() { + const { + uri, + editingURI, + isResolvingUri, + winningBidForClaimUri, + claimIsMine, + onEditMyClaim, + } = this.props; + + if (!uri) { + return __('Create a URL for this content'); + } + + if (uri === editingURI) { + return __('You are currently editing this claim'); + } + + if (isResolvingUri) { + return __('Checking the winning claim amount...'); + } + + if (claimIsMine) { + return ( + + {__('You already have a claim at')} + {` ${uri} `} +
- {!this.state.hasFile && !this.myClaimExists() ? null : ( -
-
- { - this.handleMetadataChange(event); - }} - /> -
-
- { - this.handleMetadataChange(event); - }} - /> -
-
- { - this.handleDescriptionChanged(text); - }} - /> -
-
- { - this.handleMetadataChange(event); - }} - > - - - - - - - - -
-
- { - this.handleMetadataChange(event); - }} - > - {/* */} - - - -
-
- )} + )} + + {!!editingURI && ( +

+ {__("If you don't choose a file, the file from your existing claim")} + {` "${name}" `} + {__('will be used.')} +

+ )} +
+
+
+ + updatePublishForm({ title: e.target.value })} + /> + + + updatePublishForm({ thumbnail: e.target.value })} + /> + + + updatePublishForm({ description: text })} + /> +
-
-
-

{__('Price')}

-
{__('How much does this content cost?')}
-
+
+
{__('Price')}
+
{__('How much will this content cost?')}
- this.handleFeePrefChange(false)} - checked={!this.state.isFee} + name="content_free" + postfix={__('Free')} + checked={contentIsFree} + disabled={formDisabled} + onChange={() => updatePublishForm({ contentIsFree: true })} /> { - this.handleFeePrefChange(true); - }} - checked={this.state.isFee} + name="content_cost" + postfix={__('Choose price')} + checked={!contentIsFree} + disabled={formDisabled} + onChange={() => updatePublishForm({ contentIsFree: false })} /> - - this.handleFeeChange(val)} - /> - - {this.state.isFee && this.state.feeCurrency.toUpperCase() != 'LBC' ? ( -
+ + updatePublishForm({ price: newPrice })} + disabled={formDisabled || contentIsFree} + /> + {price.currency !== 'LBC' && ( +

{__( 'All content fees are charged in LBC. For non-LBC payment methods, the number of credits charged will be adjusted based on the value of LBRY credits at the time of purchase.' )} -

- ) : null} +

+ )}
-
-
-

{__('License')}

-
+ +
+
{__('Anonymous or under a channel?')}
+

+ {__('This is a username or handle that your content can be found under.')}{' '} + {__('Ex. @Marvel, @TheBeatles, @BooksByJoe')} +

+ +
+ +
+
{__('Where can people find this content?')}
+

+ {__( + 'The LBRY URL is the exact address where people find your content (ex. lbry://myvideo).' + )}{' '} +

- - - -
-
-

{__('Content URL')}

-
- {__( - 'This is the exact address where people find your content (ex. lbry://myvideo).' - )}{' '} - . -
-
-
- { - this.handleNameChange(event); - }} - helper={this.getNameBidHelpText()} +
+ this.handleBidChange(parseFloat(event.target.value))} + helper={__('This LBC remains yours and the deposit can be undone at any time.')} + placeholder={winningBidForClaimUri ? winningBidForClaimUri + 0.1 : 0.1} />
- {this.state.rawName ? ( -
- { - this.handleBidChange(event); - }} - value={this.state.bid} - placeholder={this.claim() ? this.topClaimValue() + 10 : 100} - helper={lbcInputHelp} - min="0" - /> -
- ) : ( - '' - )}
-
-
-

{__('Terms of Service')}

-
+
+ + updatePublishForm({ nsfw: event.target.checked })} + /> + + + + updatePublishForm({ language: event.target.value })} + > + + + + + + + + + + + + updatePublishForm({ + licenseType: newLicenseType, + licenseUrl: newLicenseUrl, + }) + } + handleLicenseDescriptionChange={event => + updatePublishForm({ + otherLicenseDescription: event.target.value, + }) + } + handleLicenseUrlChange={event => + updatePublishForm({ licenseUrl: event.target.value }) + } + handleCopyrightNoticeChange={event => + updatePublishForm({ copyrightNotice: event.target.value }) + } + /> +
+ +
+
{__('Terms of Service')}
- {__('I agree to the')}{' '} - } - type="checkbox" - checked={this.state.tosAgree} - onChange={event => { - this.handleTOSChange(event); - }} + onChange={event => updatePublishForm({ tosAccepted: event.target.checked })} />
-
- - +
+ +
- - - { - this.handlePublishStartedConfirmed(event); - }} - > -

- {__('Your file has been published to LBRY at the address')}{' '} - {this.state.uri}! -

-

- {__( - 'The file will take a few minutes to appear for other LBRY users. Until then it will be listed as "pending" under your published files.' - )} -

-
- { - this.closeModal(event); - }} - > - {__('The following error occurred when attempting to publish your file')}:{' '} - {this.state.errorMessage} - - + {!formDisabled && !formValid && this.renderFormErrors()} +
+ ); } } diff --git a/src/renderer/component/rewardLink/view.jsx b/src/renderer/component/rewardLink/view.jsx index f15bb9c99..edb43aefd 100644 --- a/src/renderer/component/rewardLink/view.jsx +++ b/src/renderer/component/rewardLink/view.jsx @@ -1,16 +1,16 @@ import React from 'react'; import Modal from 'modal/modal'; -import Link from 'component/link'; +import Button from 'component/button'; const RewardLink = props => { const { reward, button, claimReward, clearError, errorMessage, label, isPending } = props; - return ( + return !reward ? null : (
- { claimReward(reward); }} diff --git a/src/renderer/component/rewardListClaimed/view.jsx b/src/renderer/component/rewardListClaimed/view.jsx index 63f422fa1..75268f250 100644 --- a/src/renderer/component/rewardListClaimed/view.jsx +++ b/src/renderer/component/rewardListClaimed/view.jsx @@ -1,7 +1,20 @@ +// @flow import React from 'react'; -import LinkTransaction from 'component/linkTransaction'; +import ButtonTransaction from 'component/common/transaction-link'; -const RewardListClaimed = props => { +type Reward = { + id: string, + reward_title: string, + reward_amount: number, + transaction_id: string, + created_at: string, +}; + +type Props = { + rewards: Array, +}; + +const RewardListClaimed = (props: Props) => { const { rewards } = props; if (!rewards || !rewards.length) { @@ -9,34 +22,31 @@ const RewardListClaimed = props => { } return ( -
-
-

Claimed Rewards

-
-
- - - - - - - +
+
Claimed Rewards
+ +
{__('Title')}{__('Amount')}{__('Transaction')}{__('Date')}
+ + + + + + + + + + {rewards.map(reward => ( + + + + + - - - {rewards.map(reward => ( - - - - - - - ))} - -
{__('Title')}{__('Amount')}{__('Transaction')}{__('Date')}
{reward.reward_title}{reward.reward_amount} + + {reward.created_at.replace('Z', ' ').replace('T', ' ')}
{reward.reward_title}{reward.reward_amount} - - {reward.created_at.replace('Z', ' ').replace('T', ' ')}
-
+ ))} + +
); }; diff --git a/src/renderer/component/rewardSummary/view.jsx b/src/renderer/component/rewardSummary/view.jsx index 9fa611902..5436897d6 100644 --- a/src/renderer/component/rewardSummary/view.jsx +++ b/src/renderer/component/rewardSummary/view.jsx @@ -1,7 +1,7 @@ // @flow -import React from 'react'; -import Link from 'component/link'; -import { CreditAmount } from 'component/common'; +import * as React from 'react'; +import Button from 'component/button'; +import CreditAmount from 'component/common/credit-amount'; type Props = { unclaimedRewardAmount: number, @@ -9,29 +9,38 @@ type Props = { const RewardSummary = (props: Props) => { const { unclaimedRewardAmount } = props; + const hasRewards = unclaimedRewardAmount > 0; return ( -
-
-

{__('Rewards')}

-

- {__('Read our')} {__('FAQ')}{' '} - {__('to learn more about LBRY Rewards')}. -

-
-
- {unclaimedRewardAmount > 0 ? ( -

- {__('You have')} {' '} +

+
{__('Rewards')}
+

+ {hasRewards ? ( + + {__('You have')} +   + +   {__('in unclaimed rewards')}. -

+ ) : ( -

{__('There are no rewards available at this time, please check back later')}.

+ + {__('There are no rewards available at this time, please check back later')}. + )} -
+

- +
+

+ {__('Read our')}{' '} +

); }; diff --git a/src/renderer/component/rewardTile/view.jsx b/src/renderer/component/rewardTile/view.jsx index 6cbfcc4cd..b5a9d00a3 100644 --- a/src/renderer/component/rewardTile/view.jsx +++ b/src/renderer/component/rewardTile/view.jsx @@ -1,35 +1,43 @@ +// @flow import React from 'react'; -import { CreditAmount, Icon } from 'component/common'; +import Icon from 'component/common/icon'; import RewardLink from 'component/rewardLink'; -import Link from 'component/link'; +import Button from 'component/button'; import rewards from 'rewards'; +import * as icons from 'constants/icons'; -const RewardTile = props => { +type Props = { + reward: { + id: string, + reward_title: string, + reward_amount: number, + transaction_id: string, + created_at: string, + reward_description: string, + reward_type: string, + }, +}; + +const RewardTile = (props: Props) => { const { reward } = props; - const claimed = !!reward.transaction_id; return ( -
-
-
- -

{reward.reward_title}

-
-
{reward.reward_description}
-
- {reward.reward_type == rewards.TYPE_REFERRAL && ( - - )} - {reward.reward_type !== rewards.TYPE_REFERRAL && - (claimed ? ( - - {__('Reward claimed.')} - - ) : ( - - ))} -
+
+
{reward.reward_title}
+
{reward.reward_description}
+
+ {reward.reward_type === rewards.TYPE_REFERRAL && ( +
); diff --git a/src/renderer/component/router/view.jsx b/src/renderer/component/router/view.jsx index b65e830fe..4b1cf2acc 100644 --- a/src/renderer/component/router/view.jsx +++ b/src/renderer/component/router/view.jsx @@ -13,7 +13,6 @@ import FileListDownloaded from 'page/fileListDownloaded'; import FileListPublished from 'page/fileListPublished'; import TransactionHistoryPage from 'page/transactionHistory'; import ChannelPage from 'page/channel'; -import SearchPage from 'page/search'; import AuthPage from 'page/auth'; import InvitePage from 'page/invite'; import BackupPage from 'page/backup'; @@ -22,7 +21,7 @@ import SubscriptionsPage from 'page/subscriptions'; const route = (page, routesMap) => { const component = routesMap[page]; - return component; + return component || DiscoverPage; }; const Router = props => { @@ -42,7 +41,6 @@ const Router = props => { getcredits: , report: , rewards: , - search: , send: , settings: , show: , diff --git a/src/renderer/component/selectChannel/index.js b/src/renderer/component/selectChannel/index.js new file mode 100644 index 000000000..66d208875 --- /dev/null +++ b/src/renderer/component/selectChannel/index.js @@ -0,0 +1,18 @@ +import { connect } from 'react-redux'; +import SelectChannel from './view'; +import { selectMyChannelClaims, selectFetchingMyChannels } from 'redux/selectors/claims'; +import { doFetchChannelListMine, doCreateChannel } from 'redux/actions/content'; +import { selectBalance } from 'redux/selectors/wallet'; + +const select = state => ({ + channels: selectMyChannelClaims(state), + fetchingChannels: selectFetchingMyChannels(state), + balance: selectBalance(state), +}); + +const perform = dispatch => ({ + createChannel: (name, amount) => dispatch(doCreateChannel(name, amount)), + fetchChannelListMine: () => dispatch(doFetchChannelListMine()), +}); + +export default connect(select, perform)(SelectChannel); diff --git a/src/renderer/component/selectChannel/view.jsx b/src/renderer/component/selectChannel/view.jsx new file mode 100644 index 000000000..88182c49c --- /dev/null +++ b/src/renderer/component/selectChannel/view.jsx @@ -0,0 +1,220 @@ +// @flow +import React from 'react'; +import { isNameValid } from 'lbryURI'; +import { FormRow, FormField } from 'component/common/form'; +import BusyIndicator from 'component/common/busy-indicator'; +import Button from 'component/button'; +import { CHANNEL_NEW, CHANNEL_ANONYMOUS } from 'constants/claim'; + +type Props = { + channel: string, // currently selected channel + channels: Array<{ name: string }>, + balance: number, + onChannelChange: string => void, + createChannel: (string, number) => Promise, + fetchChannelListMine: () => void, + fetchingChannels: boolean, +}; + +type State = { + newChannelName: string, + newChannelBid: number, + addingChannel: boolean, + creatingChannel: boolean, + newChannelNameError: string, + newChannelBidError: string, + createChannelError: ?string, +}; + +class ChannelSection extends React.PureComponent { + constructor(props: Props) { + super(props); + + this.state = { + newChannelName: '', + newChannelBid: 0.1, + addingChannel: false, + creatingChannel: false, + newChannelNameError: '', + newChannelBidError: '', + createChannelError: undefined, + }; + + (this: any).handleChannelChange = this.handleChannelChange.bind(this); + (this: any).handleNewChannelNameChange = this.handleNewChannelNameChange.bind(this); + (this: any).handleNewChannelBidChange = this.handleNewChannelBidChange.bind(this); + (this: any).handleCreateChannelClick = this.handleCreateChannelClick.bind(this); + } + + componentDidMount() { + const { channels, fetchChannelListMine, fetchingChannels } = this.props; + if (!channels.length && !fetchingChannels) { + fetchChannelListMine(); + } + } + + handleChannelChange(event: SyntheticInputEvent<*>) { + const { onChannelChange } = this.props; + const channel = event.target.value; + + if (channel === CHANNEL_NEW) { + this.setState({ addingChannel: true }); + onChannelChange(channel); + } else { + this.setState({ addingChannel: false }); + onChannelChange(channel); + } + } + + handleNewChannelNameChange(event: SyntheticInputEvent<*>) { + let newChannelName = event.target.value; + + if (newChannelName.startsWith('@')) { + newChannelName = newChannelName.slice(1); + } + + let newChannelNameError; + if (newChannelName.length > 1 && !isNameValid(newChannelName.substr(1), false)) { + newChannelNameError = __('LBRY channel names must contain only letters, numbers and dashes.'); + } + + this.setState({ + newChannelNameError, + newChannelName, + }); + } + + handleNewChannelBidChange(event: SyntheticInputEvent<*>) { + const { balance } = this.props; + const newChannelBid = parseFloat(event.target.value); + let newChannelBidError; + if (newChannelBid === balance) { + newChannelBidError = __('Please decrease your bid to account for transaction fees'); + } else if (newChannelBid > balance) { + newChannelBidError = __('Not enough credits'); + } + + this.setState({ + newChannelBid, + newChannelBidError, + }); + } + + handleCreateChannelClick() { + const { balance, createChannel, onChannelChange } = this.props; + const { newChannelBid, newChannelName } = this.state; + + const channelName = `@${newChannelName}`; + + if (newChannelBid > balance) { + return; + } + + this.setState({ + creatingChannel: true, + createChannelError: undefined, + }); + + const success = () => { + this.setState({ + creatingChannel: false, + addingChannel: false, + }); + + onChannelChange(channelName); + }; + + const failure = () => { + this.setState({ + creatingChannel: false, + createChannelError: __('Unable to create channel due to an internal error.'), + }); + }; + + createChannel(channelName, newChannelBid).then(success, failure); + } + + render() { + const channel = this.state.addingChannel ? 'new' : this.props.channel; + const { fetchingChannels, channels = [] } = this.props; + const { + newChannelName, + newChannelNameError, + newChannelBid, + newChannelBidError, + creatingChannel, + createChannelError, + addingChannel, + } = this.state; + + return ( +
+ {createChannelError &&
{createChannelError}
} + {fetchingChannels ? ( + + ) : ( + + + {channels.map(({ name }) => ( + + ))} + + + )} + {addingChannel && ( +
+ + + + + + +
+
+
+ )} +
+ ); + } +} + +export default ChannelSection; diff --git a/src/renderer/component/shapeShift/internal/active-shift.jsx b/src/renderer/component/shapeShift/internal/active-shift.jsx index ae2e83348..bb4524bb7 100644 --- a/src/renderer/component/shapeShift/internal/active-shift.jsx +++ b/src/renderer/component/shapeShift/internal/active-shift.jsx @@ -1,9 +1,10 @@ // @flow import * as React from 'react'; -import QRCode from 'qrcode.react'; +import QRCode from 'component/common/qr-code'; +import { FormRow } from 'component/common/form'; import * as statuses from 'constants/shape_shift'; import Address from 'component/address'; -import Link from 'component/link'; +import Button from 'component/button'; import type { Dispatch } from 'redux/actions/shape_shift'; import ShiftMarketInfo from './market_info'; @@ -92,12 +93,12 @@ class ActiveShapeShift extends React.PureComponent { originCoinDepositMax={originCoinDepositMax} /> -
-
-
+ {shiftDepositAddress && ( + +
-
-
+ + )}
)} @@ -115,9 +116,9 @@ class ActiveShapeShift extends React.PureComponent {

{__('Transaction complete! You should see the new LBC in your wallet.')}

)} -
- +
+
+ +
+
    + {navLinks.primary.map(({ label, path, active, icon }) => ( +
  • +
  • + ))} +
+
+
    + {navLinks.secondary.map(({ label, path, active, icon, subLinks = [] }) => ( +
  • +
  • + ))} +
+ + )} + + ))} + +
+ + ); +}; + +export default SideBar; diff --git a/src/renderer/component/snackBar/view.jsx b/src/renderer/component/snackBar/view.jsx index 2205cab3d..38867c811 100644 --- a/src/renderer/component/snackBar/view.jsx +++ b/src/renderer/component/snackBar/view.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import Link from 'component/link'; +import Button from 'component/button'; class SnackBar extends React.PureComponent { constructor(props) { @@ -32,7 +32,7 @@ class SnackBar extends React.PureComponent { {message} {linkText && linkTarget && ( - +
); diff --git a/src/renderer/component/splash/index.js b/src/renderer/component/splash/index.js index d57d014aa..04cc84e15 100644 --- a/src/renderer/component/splash/index.js +++ b/src/renderer/component/splash/index.js @@ -1,6 +1,4 @@ -import React from 'react'; import { connect } from 'react-redux'; - import { selectCurrentModal, selectDaemonVersionMatched } from 'redux/selectors/app'; import { doCheckDaemonVersion } from 'redux/actions/app'; import SplashScreen from './view'; diff --git a/src/renderer/component/splash/internal/load-screen.jsx b/src/renderer/component/splash/internal/load-screen.jsx new file mode 100644 index 000000000..ee1d120e8 --- /dev/null +++ b/src/renderer/component/splash/internal/load-screen.jsx @@ -0,0 +1,38 @@ +// @flow +import * as React from 'react'; +import Icon from 'component/common/icon'; +import * as icons from 'constants/icons'; + +type Props = { + message: string, + details: ?string, + isWarning: boolean, +}; + +class LoadScreen extends React.PureComponent { + static defaultProps = { + isWarning: false, + }; + + render() { + const { details, message, isWarning } = this.props; + + return ( +
+

{__('LBRY')}

+ {isWarning ? ( + + + {` ${message}`} + + ) : ( +
{message}
+ )} + + {details &&
{details}
} +
+ ); + } +} + +export default LoadScreen; diff --git a/src/renderer/component/splash/view.jsx b/src/renderer/component/splash/view.jsx index 02bb7c237..89c5c82f4 100644 --- a/src/renderer/component/splash/view.jsx +++ b/src/renderer/component/splash/view.jsx @@ -1,19 +1,25 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import lbry from 'lbry.js'; -import LoadScreen from '../load_screen.js'; +import * as React from 'react'; +import lbry from 'lbry'; +import LoadScreen from './internal/load-screen'; import ModalIncompatibleDaemon from 'modal/modalIncompatibleDaemon'; import ModalUpgrade from 'modal/modalUpgrade'; import ModalDownloading from 'modal/modalDownloading'; import * as modals from 'constants/modal_types'; -export class SplashScreen extends React.PureComponent { - static propTypes = { - message: PropTypes.string, - onLoadDone: PropTypes.func, - }; +type Props = { + checkDaemonVersion: () => Promise, + modal: string, +}; - constructor(props) { +type State = { + details: string, + message: string, + isRunning: boolean, + isLagging: boolean, +}; + +export class SplashScreen extends React.PureComponent { + constructor(props: Props) { super(props); this.state = { @@ -75,9 +81,11 @@ export class SplashScreen extends React.PureComponent { } componentDidMount() { + const { checkDaemonVersion } = this.props; + lbry .connect() - .then(this.props.checkDaemonVersion) + .then(checkDaemonVersion) .then(() => { this.updateStatus(); }) @@ -97,15 +105,19 @@ export class SplashScreen extends React.PureComponent { const { message, details, isLagging, isRunning } = this.state; return ( -
+ {/* Temp hack: don't show any modals on splash screen daemon is running; daemon doesn't let you quit during startup, so the "Quit" buttons in the modals won't work. */} - {modal == 'incompatibleDaemon' && isRunning && } - {modal == modals.UPGRADE && isRunning && } - {modal == modals.DOWNLOADING && isRunning && } -
+ {isRunning && ( + + {modal === modals.INCOMPATIBLE_DAEMON && } + {modal === modals.UPGRADE && } + {modal === modals.DOWNLOADING && } + + )} + ); } } diff --git a/src/renderer/component/subscribeButton/index.js b/src/renderer/component/subscribeButton/index.js index 6c93bbb65..933153af8 100644 --- a/src/renderer/component/subscribeButton/index.js +++ b/src/renderer/component/subscribeButton/index.js @@ -2,7 +2,6 @@ import { connect } from 'react-redux'; import { doChannelSubscribe, doChannelUnsubscribe } from 'redux/actions/subscriptions'; import { doOpenModal } from 'redux/actions/app'; import { selectSubscriptions } from 'redux/selectors/subscriptions'; - import SubscribeButton from './view'; const select = (state, props) => ({ diff --git a/src/renderer/component/subscribeButton/view.jsx b/src/renderer/component/subscribeButton/view.jsx index bb0d0c146..f362310c4 100644 --- a/src/renderer/component/subscribeButton/view.jsx +++ b/src/renderer/component/subscribeButton/view.jsx @@ -1,38 +1,54 @@ +// @flow import React from 'react'; -import Link from 'component/link'; import * as modals from 'constants/modal_types'; +import * as icons from 'constants/icons'; +import Button from 'component/button'; +import type { Subscription } from 'redux/reducers/subscriptions'; + +type SubscribtionArgs = { + channelName: string, + uri: string, +}; + +type Props = { + channelName: ?string, + uri: ?string, + subscriptions: Array, + doChannelSubscribe: ({ channelName: string, uri: string }) => void, + doChannelUnsubscribe: SubscribtionArgs => void, + doOpenModal: string => void, +}; + +export default (props: Props) => { + const { + channelName, + uri, + subscriptions, + doChannelSubscribe, + doChannelUnsubscribe, + doOpenModal, + } = props; -export default ({ - channelName, - uri, - subscriptions, - doChannelSubscribe, - doChannelUnsubscribe, - doOpenModal, -}) => { const isSubscribed = subscriptions.map(subscription => subscription.channelName).indexOf(channelName) !== -1; const subscriptionHandler = isSubscribed ? doChannelUnsubscribe : doChannelSubscribe; - const subscriptionLabel = isSubscribed ? __('Unsubscribe') : __('Subscribe'); return channelName && uri ? ( -
- { - if (!subscriptions.length) { - doOpenModal(modals.FIRST_SUBSCRIPTION); - } - subscriptionHandler({ - channelName, - uri, - }); - }} - /> -
+
+ )} + + + + + + + {date ? ( +
+ +
+ +
+
+ ) : ( + {__('Pending')} + )} + + + ); + } +} + +export default TransactionListItem; diff --git a/src/renderer/component/transactionList/view.jsx b/src/renderer/component/transactionList/view.jsx index 335e0d525..6f8521b88 100644 --- a/src/renderer/component/transactionList/view.jsx +++ b/src/renderer/component/transactionList/view.jsx @@ -1,63 +1,111 @@ -import React from 'react'; -import TransactionListItem from './internal/TransactionListItem'; -import FormField from 'component/formField'; -import Link from 'component/link'; -import FileExporter from 'component/file-exporter.js'; +// @flow +import * as React from 'react'; +import { FormField } from 'component/common/form'; +import Button from 'component/button'; +import FileExporter from 'component/common/file-exporter'; import * as icons from 'constants/icons'; import * as modals from 'constants/modal_types'; +import TransactionListItem from './internal/transaction-list-item'; -class TransactionList extends React.PureComponent { - constructor(props) { +export type Transaction = { + amount: number, + claim_id: string, + claim_name: string, + fee: number, + nout: number, + txid: string, + type: string, + date: Date, +}; + +type Props = { + emptyMessage: ?string, + slim?: boolean, + transactions: Array, + rewards: {}, + openModal: (string, any) => void, + myClaims: any, +}; + +type State = { + filter: string, +}; + +class TransactionList extends React.PureComponent { + constructor(props: Props) { super(props); this.state = { - filter: null, + filter: 'all', }; + + (this: any).handleFilterChanged = this.handleFilterChanged.bind(this); + (this: any).filterTransaction = this.filterTransaction.bind(this); + (this: any).revokeClaim = this.revokeClaim.bind(this); + (this: any).isRevokeable = this.isRevokeable.bind(this); } - handleFilterChanged(event) { + handleFilterChanged(event: SyntheticInputEvent<*>) { this.setState({ filter: event.target.value, }); } - filterTransaction(transaction) { + filterTransaction(transaction: Transaction) { const { filter } = this.state; - return !filter || filter == transaction.type; + return filter === 'all' || filter === transaction.type; } - isRevokeable(txid, nout) { + isRevokeable(txid: string, nout: number) { + const { myClaims } = this.props; // a claim/support/update is revokable if it // is in my claim list(claim_list_mine) - return this.props.myClaims.has(`${txid}:${nout}`); + return myClaims.has(`${txid}:${nout}`); } - revokeClaim(txid, nout) { + revokeClaim(txid: string, nout: number) { this.props.openModal(modals.CONFIRM_CLAIM_REVOKE, { txid, nout }); } render() { - const { emptyMessage, rewards, transactions } = this.props; - - const transactionList = transactions.filter(this.filterTransaction.bind(this)); + const { emptyMessage, rewards, transactions, slim } = this.props; + const { filter } = this.state; + const transactionList = transactions.filter(this.filterTransaction); return ( -
- {Boolean(transactionList.length) && ( - + + {!transactionList.length && ( +

{emptyMessage || __('No transactions to list.')}

)} - {(transactionList.length || this.state.filter) && ( - - {__('Filter')}{' '} - - + {!slim && + !!transactionList.length && ( +
+ +
+ )} + {!slim && ( +
+ + } + > + @@ -65,22 +113,18 @@ class TransactionList extends React.PureComponent { - {' '} - - + +
)} - {!transactionList.length && ( -
{emptyMessage || __('No transactions to list.')}
- )} - {Boolean(transactionList.length) && ( - + {!!transactionList.length && ( +
- - + + @@ -90,13 +134,13 @@ class TransactionList extends React.PureComponent { transaction={t} reward={rewards && rewards[t.txid]} isRevokeable={this.isRevokeable(t.txid, t.nout)} - revokeClaim={this.revokeClaim.bind(this)} + revokeClaim={this.revokeClaim} /> ))}
{__('Date')}{__('Amount (Fee)')}{__('Amount')} {__('Type')} {__('Details')} {__('Transaction')}{__('Date')}
)} -
+ ); } } diff --git a/src/renderer/component/transactionListRecent/view.jsx b/src/renderer/component/transactionListRecent/view.jsx index 3bc5b0159..325bbc1cb 100644 --- a/src/renderer/component/transactionListRecent/view.jsx +++ b/src/renderer/component/transactionListRecent/view.jsx @@ -1,11 +1,20 @@ +// @flow import React from 'react'; -import { BusyMessage } from 'component/common'; -import Link from 'component/link'; +import BusyIndicator from 'component/common/busy-indicator'; +import Button from 'component/button'; import TransactionList from 'component/transactionList'; import * as icons from 'constants/icons'; +import type { Transaction } from 'component/transactionList/view'; -class TransactionListRecent extends React.PureComponent { - componentWillMount() { +type Props = { + fetchTransactions: () => void, + fetchingTransactions: boolean, + hasTransactions: boolean, + transactions: Array, +}; + +class TransactionListRecent extends React.PureComponent { + componentDidMount() { this.props.fetchTransactions(); } @@ -13,27 +22,27 @@ class TransactionListRecent extends React.PureComponent { const { fetchingTransactions, hasTransactions, transactions } = this.props; return ( -
-
-

{__('Recent Transactions')}

-
-
- {fetchingTransactions && } - {!fetchingTransactions && ( - - )} -
+
+
{__('Recent Transactions')}
+ {fetchingTransactions && ( +
+ +
+ )} + {!fetchingTransactions && ( + + )} {hasTransactions && ( -
- +
)} diff --git a/src/renderer/component/uriIndicator/view.jsx b/src/renderer/component/uriIndicator/view.jsx index 932ff7e5c..b4e3b3707 100644 --- a/src/renderer/component/uriIndicator/view.jsx +++ b/src/renderer/component/uriIndicator/view.jsx @@ -1,35 +1,46 @@ +// @flow import React from 'react'; -import Icon from 'component/icon'; -import Link from 'component/link'; +import Button from 'component/button'; import { buildURI } from 'lbryURI'; import classnames from 'classnames'; +// import Icon from 'component/common/icon'; -class UriIndicator extends React.PureComponent { +type Props = { + isResolvingUri: boolean, + resolveUri: string => void, + claim: { + channel_name: string, + has_signature: boolean, + signature_is_valid: boolean, + value: { + publisherSignature: { certificateId: string }, + }, + }, + uri: string, + link: ?boolean, +}; + +class UriIndicator extends React.PureComponent { componentWillMount() { this.resolve(this.props); } - componentWillReceiveProps(nextProps) { + componentWillReceiveProps(nextProps: Props) { this.resolve(nextProps); } - resolve(props) { + resolve = (props: Props) => { const { isResolvingUri, resolveUri, claim, uri } = props; if (!isResolvingUri && claim === undefined && uri) { resolveUri(uri); } - } + }; render() { - const { claim, link, uri, isResolvingUri, smallCard, span } = this.props; - - if (isResolvingUri && !claim) { - return Validating...; - } - + const { claim, link, isResolvingUri } = this.props; if (!claim) { - return Unused; + return {isResolvingUri ? 'Validating...' : 'Unused'}; } const { @@ -38,41 +49,28 @@ class UriIndicator extends React.PureComponent { signature_is_valid: signatureIsValid, value, } = claim; + const channelClaimId = value && value.publisherSignature && value.publisherSignature.certificateId; if (!hasSignature || !channelName) { - return Anonymous; + return Anonymous; } - let icon, channelLink, modifier; - + let channelLink; if (signatureIsValid) { - modifier = 'valid'; channelLink = link ? buildURI({ channelName, claimId: channelClaimId }, false) : false; - } else { - icon = 'icon-times-circle'; - modifier = 'invalid'; } const inner = ( {channelName} {' '} - {!signatureIsValid ? ( - - ) : ( - '' - )} ); @@ -81,14 +79,14 @@ class UriIndicator extends React.PureComponent { } return ( - {inner} - + ); } } diff --git a/src/renderer/component/userEmailNew/view.jsx b/src/renderer/component/userEmailNew/view.jsx index 661adb611..16760dc6d 100644 --- a/src/renderer/component/userEmailNew/view.jsx +++ b/src/renderer/component/userEmailNew/view.jsx @@ -1,5 +1,7 @@ +// I'll come back to this +/* eslint-disable */ import React from 'react'; -import { Form, FormRow, Submit } from 'component/form.js'; +import { Form, FormRow, Submit } from 'component/common/form'; class UserEmailNew extends React.PureComponent { constructor(props) { @@ -53,3 +55,4 @@ class UserEmailNew extends React.PureComponent { } export default UserEmailNew; +/* eslint-enable */ diff --git a/src/renderer/component/userEmailVerify/view.jsx b/src/renderer/component/userEmailVerify/view.jsx index 3304730b9..5d6a367fa 100644 --- a/src/renderer/component/userEmailVerify/view.jsx +++ b/src/renderer/component/userEmailVerify/view.jsx @@ -1,6 +1,8 @@ +// I'll come back to this +/* eslint-disable */ import React from 'react'; -import Link from 'component/link'; -import { Form, FormRow, Submit } from 'component/form.js'; +import Button from 'component/button'; +import { Form, FormField, Submit } from 'component/common/form'; class UserEmailVerify extends React.PureComponent { constructor(props) { @@ -29,24 +31,27 @@ class UserEmailVerify extends React.PureComponent { render() { const { cancelButton, errorMessage, email, isPending } = this.props; + // ( + // { + // this.handleCodeChanged(event); + // }} + // /> + // )} + // /> return (

Please enter the verification code emailed to {email}.

- { - this.handleCodeChanged(event); - }} - errorMessage={errorMessage} - /> {/* render help separately so it always shows */}

- {__('Email')} or join our{' '} - {' '} + {__('Email')}

@@ -60,3 +65,4 @@ class UserEmailVerify extends React.PureComponent { } export default UserEmailVerify; +/* eslint-enable */ diff --git a/src/renderer/component/userPhoneNew/view.jsx b/src/renderer/component/userPhoneNew/view.jsx index b9999c746..fefd640de 100644 --- a/src/renderer/component/userPhoneNew/view.jsx +++ b/src/renderer/component/userPhoneNew/view.jsx @@ -1,6 +1,7 @@ +// I'll come back to this +/* eslint-disable */ import React from 'react'; -import { Form, FormRow, Submit } from 'component/form.js'; -import FormField from 'component/formField'; +import { Form, FormRow, FormField } from 'component/common/form'; const os = require('os').type(); const countryCodes = require('country-data') @@ -77,29 +78,36 @@ class UserPhoneNew extends React.PureComponent {

- - {countryCodes.map((country, index) => ( - - ))} - - ( + + )} + /> + { this.handleChanged(event); }} + render={() => ( + + )} />
-
- - {cancelButton} -
+ + {cancelButton}
); @@ -107,3 +115,4 @@ class UserPhoneNew extends React.PureComponent { } export default UserPhoneNew; +/* eslint-enable */ diff --git a/src/renderer/component/userPhoneVerify/view.jsx b/src/renderer/component/userPhoneVerify/view.jsx index 225fad5d1..7e038da06 100644 --- a/src/renderer/component/userPhoneVerify/view.jsx +++ b/src/renderer/component/userPhoneVerify/view.jsx @@ -1,6 +1,8 @@ +// I'll come back to this +/* eslint-disable */ import React from 'react'; -import Link from 'component/link'; -import { Form, FormRow, Submit } from 'component/form.js'; +import Button from 'component/button'; +import { Form, FormElement, Submit } from 'component/common/form'; class UserPhoneVerify extends React.PureComponent { constructor(props) { @@ -35,23 +37,27 @@ class UserPhoneVerify extends React.PureComponent { {__( `Please enter the verification code sent to +${countryCode}${phone}. Didn't receive it? ` )} - +
@@ -65,3 +71,4 @@ class UserPhoneVerify extends React.PureComponent { } export default UserPhoneVerify; +/* eslint-enable */ diff --git a/src/renderer/component/userVerify/view.jsx b/src/renderer/component/userVerify/view.jsx index bf7060e6a..4e730a986 100644 --- a/src/renderer/component/userVerify/view.jsx +++ b/src/renderer/component/userVerify/view.jsx @@ -1,7 +1,9 @@ +/* eslint-disable */ import React from 'react'; -import Link from 'component/link'; +import Button from 'component/button'; import CardVerify from 'component/cardVerify'; import lbryio from 'lbryio.js'; +import * as icons from 'constants/icons'; class UserVerify extends React.PureComponent { constructor(props) { @@ -25,9 +27,9 @@ class UserVerify extends React.PureComponent { render() { const { errorMessage, isPending, navigate, verifyPhone, modal } = this.props; return ( -
-
-
+ +
+

{__('Final Human Proof')}

@@ -36,8 +38,8 @@ class UserVerify extends React.PureComponent {

-
-
+
+

{__('1) Proof via Credit')}

@@ -57,15 +59,15 @@ class UserVerify extends React.PureComponent {
{__('A $1 authorization may temporarily appear with your provider.')}{' '} -
-
-
+
+

{__('2) Proof via Phone')}

@@ -74,24 +76,24 @@ class UserVerify extends React.PureComponent { )}`}
- { verifyPhone(); }} button="alt" - icon="icon-phone" + icon={icons.PHONE} label={__('Submit Phone Number')} />
{__('Standard messaging rates apply. Having trouble?')}{' '} - +
-
+

{__('3) Proof via Chat')}

@@ -107,16 +109,16 @@ class UserVerify extends React.PureComponent {

-
-
-
+
+
{__('Or, Skip It Entirely')}
@@ -127,12 +129,13 @@ class UserVerify extends React.PureComponent {

- navigate('/discover')} button="alt" label={__('Skip Rewards')} /> +
-
+ ); } } export default UserVerify; +/* eslint-enable */ diff --git a/src/renderer/component/video/internal/loading-screen.jsx b/src/renderer/component/video/internal/loading-screen.jsx index 958619b79..ccada9d41 100644 --- a/src/renderer/component/video/internal/loading-screen.jsx +++ b/src/renderer/component/video/internal/loading-screen.jsx @@ -1,14 +1,27 @@ +// @flow import React from 'react'; import Spinner from 'component/common/spinner'; -const LoadingScreen = ({ status, spinner = true }) => ( -
-
- {spinner && } +type Props = { + spinner: boolean, + status: string, +}; -
{status}
-
-
-); +class LoadingScreen extends React.PureComponent { + static defaultProps = { + spinner: true, + }; + + render() { + const { status, spinner } = this.props; + return ( +
+ {spinner && } + + {status} +
+ ); + } +} export default LoadingScreen; diff --git a/src/renderer/component/video/internal/play-button.jsx b/src/renderer/component/video/internal/play-button.jsx index 35f15f636..74e16cf7a 100644 --- a/src/renderer/component/video/internal/play-button.jsx +++ b/src/renderer/component/video/internal/play-button.jsx @@ -1,21 +1,21 @@ +// @flow import React from 'react'; -import Link from 'component/link'; +import Button from 'component/button'; -class VideoPlayButton extends React.PureComponent { - componentDidMount() { - this.keyDownListener = this.onKeyDown.bind(this); - document.addEventListener('keydown', this.keyDownListener); - } +type Props = { + play: string => void, + isLoading: boolean, + uri: string, + mediaType: string, + fileInfo: ?{}, +}; - componentWillUnmount() { - document.removeEventListener('keydown', this.keyDownListener); - } +class VideoPlayButton extends React.PureComponent { + watch: () => void; - onKeyDown(event) { - if (event.target.tagName.toLowerCase() !== 'input' && event.code === 'Space') { - event.preventDefault(); - this.watch(); - } + constructor() { + super(); + this.watch = this.watch.bind(this); } watch() { @@ -23,26 +23,19 @@ class VideoPlayButton extends React.PureComponent { } render() { - const { button, label, fileInfo, mediaType } = this.props; - - /* - title={ - isLoading ? "Video is Loading" : - !costInfo ? "Waiting on cost info..." : - fileInfo === undefined ? "Waiting on file info..." : "" - } - */ - - const icon = ['audio', 'video'].indexOf(mediaType) !== -1 ? 'icon-play' : 'icon-folder-o'; + const { fileInfo, mediaType, isLoading } = this.props; + const disabled = isLoading || fileInfo === undefined; + const doesPlayback = ['audio', 'video'].indexOf(mediaType) !== -1; + const icon = doesPlayback ? 'Play' : 'Folder'; + const label = doesPlayback ? 'Play' : 'View'; return ( - this.watch()} + onClick={this.watch} /> ); } diff --git a/src/renderer/component/video/internal/player.jsx b/src/renderer/component/video/internal/player.jsx index 8bbf2692f..547be16c4 100644 --- a/src/renderer/component/video/internal/player.jsx +++ b/src/renderer/component/video/internal/player.jsx @@ -1,6 +1,7 @@ -import { remote } from 'electron'; +/* eslint-disable */ import React from 'react'; -import { Thumbnail } from 'component/common'; +import { remote } from 'electron'; +import Thumbnail from 'component/common/thumbnail'; import player from 'render-media'; import fs from 'fs'; import LoadingScreen from './loading-screen'; @@ -20,6 +21,11 @@ class VideoPlayer extends React.PureComponent { this.togglePlayListener = this.togglePlay.bind(this); } + componentWillReceiveProps(nextProps) { + const el = this.refs.media.children[0]; + if (!this.props.paused && nextProps.paused && !el.paused) el.pause(); + } + componentDidMount() { const container = this.media; const { contentType, changeVolume, volume, position, claim } = this.props; @@ -161,10 +167,10 @@ class VideoPlayer extends React.PureComponent { const unplayableMessage = "Sorry, looks like we can't play this file."; return ( -
+ {['audio', 'application'].indexOf(mediaType) !== -1 && (!this.playableType() || hasMetadata) && - !unplayable && } + !unplayable && } {this.playableType() && !hasMetadata && !unplayable && } @@ -173,11 +179,11 @@ class VideoPlayer extends React.PureComponent { ref={container => { this.media = container; }} - className="media" /> -
+ ); } } export default VideoPlayer; +/* eslint-disable */ diff --git a/src/renderer/component/video/view.jsx b/src/renderer/component/video/view.jsx index 9a1afe7e4..965bedd03 100644 --- a/src/renderer/component/video/view.jsx +++ b/src/renderer/component/video/view.jsx @@ -1,23 +1,48 @@ +// @flow import React from 'react'; import lbry from 'lbry'; +import classnames from 'classnames'; import VideoPlayer from './internal/player'; import VideoPlayButton from './internal/play-button'; import LoadingScreen from './internal/loading-screen'; -import NsfwOverlay from 'component/nsfwOverlay'; -class Video extends React.PureComponent { - constructor(props) { - super(props); - this.state = { - showNsfwHelp: false, - }; - } +type Props = { + cancelPlay: () => void, + fileInfo: { + outpoint: string, + file_name: string, + written_bytes: number, + download_path: string, + completed: boolean, + }, + metadata: ?{ + nsfw: boolean, + thumbnail: string, + }, + isLoading: boolean, + isDownloading: boolean, + playingUri: ?string, + contentType: string, + changeVolume: number => void, + volume: number, + claim: {}, + uri: string, + doPlay: () => void, + doPause: () => void, + savePosition: (string, number) => void, + mediaPaused: boolean, + mediaPosition: ?number, + className: ?string, + obscureNsfw: boolean, + play: string => void, +}; +class Video extends React.PureComponent { componentWillUnmount() { this.props.cancelPlay(); } - isMediaSame(nextProps) { + isMediaSame(nextProps: Props) { return ( this.props.fileInfo && nextProps.fileInfo && @@ -25,22 +50,6 @@ class Video extends React.PureComponent { ); } - handleMouseOver() { - if (this.props.obscureNsfw && this.props.metadata && this.props.metadata.nsfw) { - this.setState({ - showNsfwHelp: true, - }); - } - } - - handleMouseOut() { - if (this.state.showNsfwHelp) { - this.setState({ - showNsfwHelp: false, - }); - } - } - render() { const { metadata, @@ -58,11 +67,14 @@ class Video extends React.PureComponent { savePosition, mediaPaused, mediaPosition, + className, + obscureNsfw, + play, } = this.props; const isPlaying = playingUri === uri; const isReadyToPlay = fileInfo && fileInfo.written_bytes > 0; - const obscureNsfw = this.props.obscureNsfw && metadata && metadata.nsfw; + const shouldObscureNsfw = obscureNsfw && metadata && metadata.nsfw; const mediaType = lbry.getMediaType(contentType, fileInfo && fileInfo.file_name); let loadStatusMessage = ''; @@ -77,51 +89,49 @@ class Video extends React.PureComponent { loadStatusMessage = __('Downloading stream... not long left now!'); } - const klasses = []; - klasses.push(obscureNsfw ? 'video--obscured ' : ''); - if (isLoading || isDownloading) klasses.push('video-embedded', 'video'); - if (mediaType === 'video') { - klasses.push('video-embedded', 'video'); - klasses.push(isPlaying ? 'video--active' : 'video--hidden'); - } else if (mediaType === 'application') { - klasses.push('video-embedded'); - } else if (!isPlaying) klasses.push('video-embedded'); - const poster = metadata.thumbnail; + const poster = metadata && metadata.thumbnail; return ( -
- {isPlaying && - (!isReadyToPlay ? ( - - ) : ( - - ))} - {!isPlaying && ( -
- +
+ {isPlaying && ( +
+ {!isReadyToPlay ? ( + + ) : ( + + )} +
+ )} + {!isPlaying && ( +
+
)} - {this.state.showNsfwHelp && }
); } diff --git a/src/renderer/component/walletAddress/view.jsx b/src/renderer/component/walletAddress/view.jsx index a062f0bb5..1955f5aaf 100644 --- a/src/renderer/component/walletAddress/view.jsx +++ b/src/renderer/component/walletAddress/view.jsx @@ -1,8 +1,17 @@ +// @flow import React from 'react'; -import Link from 'component/link'; +import Button from 'component/button'; import Address from 'component/address'; +import * as icons from 'constants/icons'; -class WalletAddress extends React.PureComponent { +type Props = { + checkAddressIsMine: string => void, + receiveAddress: string, + getNewAddress: () => void, + gettingNewAddress: boolean, +}; + +class WalletAddress extends React.PureComponent { componentWillMount() { this.props.checkAddressIsMine(this.props.receiveAddress); } @@ -11,21 +20,21 @@ class WalletAddress extends React.PureComponent { const { receiveAddress, getNewAddress, gettingNewAddress } = this.props; return ( -
-
-

{__('Receive Credits')}

-
+
+
{__('Receive Credits')}
+

+ {__('Use this wallet address to receive credits sent by another user (or yourself).')} +

+
-

- {__('Use this wallet address to receive credits sent by another user (or yourself).')} -

+
- diff --git a/src/renderer/component/walletBalance/view.jsx b/src/renderer/component/walletBalance/view.jsx index 9c1b1f6cc..112fc8f9f 100644 --- a/src/renderer/component/walletBalance/view.jsx +++ b/src/renderer/component/walletBalance/view.jsx @@ -1,33 +1,21 @@ +// @flow import React from 'react'; -import Link from 'component/link'; -import { CreditAmount } from 'component/common'; +import CreditAmount from 'component/common/credit-amount'; -const WalletBalance = props => { - const { balance, navigate } = props; - /* -
- navigate("/backup")} - label={__("Backup Your Wallet")} - /> -
- */ +type Props = { + balance: number, +}; + +const WalletBalance = (props: Props) => { + const { balance } = props; return ( -
-
-

{__('Balance')}

+
+
+
{__('Balance')}
+ {__('You currently have')}
- {(balance || balance === 0) && } -
-
- - + {(balance || balance === 0) && }
); diff --git a/src/renderer/component/walletSend/index.js b/src/renderer/component/walletSend/index.js index fa005c0c4..2643c5b57 100644 --- a/src/renderer/component/walletSend/index.js +++ b/src/renderer/component/walletSend/index.js @@ -1,28 +1,14 @@ -import React from 'react'; import { connect } from 'react-redux'; -import { - doSendDraftTransaction, - doSetDraftTransactionAmount, - doSetDraftTransactionAddress, -} from 'redux/actions/wallet'; -import { - selectDraftTransactionAmount, - selectDraftTransactionAddress, - selectDraftTransactionError, -} from 'redux/selectors/wallet'; - +import { doSendDraftTransaction } from 'redux/actions/wallet'; +import { selectBalance } from 'redux/selectors/wallet'; import WalletSend from './view'; -const select = state => ({ - address: selectDraftTransactionAddress(state), - amount: selectDraftTransactionAmount(state), - error: selectDraftTransactionError(state), +const perform = dispatch => ({ + sendToAddress: values => dispatch(doSendDraftTransaction(values)), }); -const perform = dispatch => ({ - sendToAddress: () => dispatch(doSendDraftTransaction()), - setAmount: event => dispatch(doSetDraftTransactionAmount(event.target.value)), - setAddress: event => dispatch(doSetDraftTransactionAddress(event.target.value)), +const select = state => ({ + balance: selectBalance(state), }); export default connect(select, perform)(WalletSend); diff --git a/src/renderer/component/walletSend/view.jsx b/src/renderer/component/walletSend/view.jsx index 7c51953b1..4a124527a 100644 --- a/src/renderer/component/walletSend/view.jsx +++ b/src/renderer/component/walletSend/view.jsx @@ -1,55 +1,93 @@ +// @flow import React from 'react'; -import { Form, FormRow, Submit } from 'component/form'; -import { regexAddress } from 'lbryURI'; +import Button from 'component/button'; +import { Form, FormRow, FormField } from 'component/common/form'; +import { Formik } from 'formik'; +import { validateSendTx } from 'util/form-validation'; -class WalletSend extends React.PureComponent { - handleSubmit() { - const { amount, address, sendToAddress } = this.props; - const validSubmit = parseFloat(amount) > 0.0 && address; +type DraftTransaction = { + address: string, + amount: number | string, // So we can use a placeholder in the input +}; - if (validSubmit) { - sendToAddress(); - } +type Props = { + sendToAddress: DraftTransaction => void, + balance: number, +}; + +class WalletSend extends React.PureComponent { + constructor() { + super(); + + (this: any).handleSubmit = this.handleSubmit.bind(this); + } + + handleSubmit(values: DraftTransaction) { + const { sendToAddress } = this.props; + sendToAddress(values); } render() { - const { closeModal, modal, setAmount, setAddress, amount, address, error } = this.props; + const { balance } = this.props; return ( -
-
-
-

{__('Send Credits')}

-
-
- -
-
- -
- 0.0) || !address} /> -
-
-
+
+
{__('Send Credits')}
+
+ ( +
+ + balance && __('Not enough')) + } + /> + + + +
+
+
+ )} + /> +
); } diff --git a/src/renderer/component/walletSendTip/view.jsx b/src/renderer/component/walletSendTip/view.jsx index d3e106c19..6433d0cc1 100644 --- a/src/renderer/component/walletSendTip/view.jsx +++ b/src/renderer/component/walletSendTip/view.jsx @@ -1,64 +1,89 @@ +// @flow import React from 'react'; -import Link from 'component/link'; -import { FormRow } from 'component/form'; +import Button from 'component/button'; +import { FormField } from 'component/common/form'; import UriIndicator from 'component/uriIndicator'; -class WalletSendTip extends React.PureComponent { - constructor(props) { +type Props = { + claim_id: string, + uri: string, + title: string, + errorMessage: string, + isPending: boolean, + sendSupport: (number, string, string) => void, + onCancel: () => void, + sendTipCallback?: () => void, +}; + +type State = { + amount: number, +}; + +class WalletSendTip extends React.PureComponent { + constructor(props: Props) { super(props); this.state = { - amount: 0.0, + amount: 0, }; + + (this: any).handleSendButtonClicked = this.handleSendButtonClicked.bind(this); } handleSendButtonClicked() { - const { claim_id, uri } = this.props; - const amount = this.state.amount; - this.props.sendSupport(amount, claim_id, uri); + const { claim_id: claimId, uri, sendSupport, sendTipCallback } = this.props; + const { amount } = this.state; + + sendSupport(amount, claimId, uri); + + // ex: close modal + if (sendTipCallback) { + sendTipCallback(); + } } - handleSupportPriceChange(event) { + handleSupportPriceChange(event: SyntheticInputEvent<*>) { this.setState({ amount: Number(event.target.value), }); } render() { - const { errorMessage, isPending, title, uri } = this.props; + const { errorMessage, isPending, title, uri, onCancel } = this.props; return (
-
+

- {__('Support')} + {__('Send a tip to')}

- - {`${__('This will appear as a tip for "%s" located at %s.', title, uri)} `} - - - } placeholder="1.00" onChange={event => this.handleSupportPriceChange(event)} + helper={ + + {__(`This will appear as a tip for ${title} located at ${uri}.`)}{' '} +
diff --git a/src/renderer/component/wunderbar/index.js b/src/renderer/component/wunderbar/index.js index c446a885e..9491c46f3 100644 --- a/src/renderer/component/wunderbar/index.js +++ b/src/renderer/component/wunderbar/index.js @@ -1,19 +1,33 @@ -import React from 'react'; +import * as MODALS from 'constants/modal_types'; import { connect } from 'react-redux'; -import { normalizeURI } from 'lbryURI.js'; -import { selectWunderBarAddress, selectWunderBarIcon } from 'redux/selectors/search'; +import { normalizeURI } from 'lbryURI'; +import { selectState as selectSearch, selectWunderBarAddress } from 'redux/selectors/search'; +import { doUpdateSearchQuery } from 'redux/actions/search'; import { doNavigate } from 'redux/actions/navigation'; +import { doOpenModal } from 'redux/actions/app'; import Wunderbar from './view'; -const select = state => ({ - address: selectWunderBarAddress(state), - icon: selectWunderBarIcon(state), -}); +const select = state => { + const { isActive, searchQuery, ...searchState } = selectSearch(state); + const address = selectWunderBarAddress(state); + + // if we are on the file/channel page + // use the address in the history stack + const wunderbarValue = isActive ? searchQuery : searchQuery || address; + + return { + ...searchState, + wunderbarValue, + }; +}; const perform = dispatch => ({ - onSearch: query => dispatch(doNavigate('/search', { query })), - onSubmit: (query, extraParams) => - dispatch(doNavigate('/show', { uri: normalizeURI(query), ...extraParams })), + onSearch: query => { + dispatch(doUpdateSearchQuery(query)); + dispatch(doOpenModal(MODALS.SEARCH)); + }, + onSubmit: (uri, extraParams) => dispatch(doNavigate('/show', { uri, ...extraParams })), + updateSearchQuery: query => dispatch(doUpdateSearchQuery(query)), }); export default connect(select, perform)(Wunderbar); diff --git a/src/renderer/component/wunderbar/internal/autocomplete.jsx b/src/renderer/component/wunderbar/internal/autocomplete.jsx new file mode 100644 index 000000000..78b3216a9 --- /dev/null +++ b/src/renderer/component/wunderbar/internal/autocomplete.jsx @@ -0,0 +1,604 @@ +/* +This is taken from https://github.com/reactjs/react-autocomplete + +We aren't using that component because (for now) there is no way to autohightlight +the first item if it isn't an exact match from what is in the search bar. + +Our use case is: +value in search bar: "hello" +first suggestion: "lbry://hello" + +I changed the function maybeAutoCompleteText to check if the suggestion contains +the search query anywhere, instead of the suggestion starting with it + +https://github.com/reactjs/react-autocomplete/issues/239 +*/ +/* eslint-disable */ + +const React = require('react'); +const PropTypes = require('prop-types'); +const { findDOMNode } = require('react-dom'); +const scrollIntoView = require('dom-scroll-into-view'); + +const IMPERATIVE_API = [ + 'blur', + 'checkValidity', + 'click', + 'focus', + 'select', + 'setCustomValidity', + 'setSelectionRange', + 'setRangeText', +]; + +function getScrollOffset() { + return { + x: + window.pageXOffset !== undefined + ? window.pageXOffset + : (document.documentElement || document.body.parentNode || document.body).scrollLeft, + y: + window.pageYOffset !== undefined + ? window.pageYOffset + : (document.documentElement || document.body.parentNode || document.body).scrollTop, + }; +} + +export default class Autocomplete extends React.Component { + static propTypes = { + /** + * The items to display in the dropdown menu + */ + items: PropTypes.array.isRequired, + /** + * The value to display in the input field + */ + value: PropTypes.any, + /** + * Arguments: `event: Event, value: String` + * + * Invoked every time the user changes the input's value. + */ + onChange: PropTypes.func, + /** + * Arguments: `value: String, item: Any` + * + * Invoked when the user selects an item from the dropdown menu. + */ + onSelect: PropTypes.func, + /** + * Arguments: `item: Any, value: String` + * + * Invoked for each entry in `items` and its return value is used to + * determine whether or not it should be displayed in the dropdown menu. + * By default all items are always rendered. + */ + shouldItemRender: PropTypes.func, + /** + * Arguments: `itemA: Any, itemB: Any, value: String` + * + * The function which is used to sort `items` before display. + */ + sortItems: PropTypes.func, + /** + * Arguments: `item: Any` + * + * Used to read the display value from each entry in `items`. + */ + getItemValue: PropTypes.func.isRequired, + /** + * Arguments: `item: Any, isHighlighted: Boolean, styles: Object` + * + * Invoked for each entry in `items` that also passes `shouldItemRender` to + * generate the render tree for each item in the dropdown menu. `styles` is + * an optional set of styles that can be applied to improve the look/feel + * of the items in the dropdown menu. + */ + renderItem: PropTypes.func.isRequired, + /** + * Arguments: `items: Array, value: String, styles: Object` + * + * Invoked to generate the render tree for the dropdown menu. Ensure the + * returned tree includes every entry in `items` or else the highlight order + * and keyboard navigation logic will break. `styles` will contain + * { top, left, minWidth } which are the coordinates of the top-left corner + * and the width of the dropdown menu. + */ + renderMenu: PropTypes.func, + /** + * Styles that are applied to the dropdown menu in the default `renderMenu` + * implementation. If you override `renderMenu` and you want to use + * `menuStyle` you must manually apply them (`this.props.menuStyle`). + */ + menuStyle: PropTypes.object, + /** + * Arguments: `props: Object` + * + * Invoked to generate the input element. The `props` argument is the result + * of merging `props.inputProps` with a selection of props that are required + * both for functionality and accessibility. At the very least you need to + * apply `props.ref` and all `props.on` event handlers. Failing to do + * this will cause `Autocomplete` to behave unexpectedly. + */ + renderInput: PropTypes.func, + /** + * Props passed to `props.renderInput`. By default these props will be + * applied to the `` element rendered by `Autocomplete`, unless you + * have specified a custom value for `props.renderInput`. Any properties + * supported by `HTMLInputElement` can be specified, apart from the + * following which are set by `Autocomplete`: value, autoComplete, role, + * aria-autocomplete. `inputProps` is commonly used for (but not limited to) + * placeholder, event handlers (onFocus, onBlur, etc.), autoFocus, etc.. + */ + inputProps: PropTypes.object, + /** + * Props that are applied to the element which wraps the `` and + * dropdown menu elements rendered by `Autocomplete`. + */ + wrapperProps: PropTypes.object, + /** + * This is a shorthand for `wrapperProps={{ style: }}`. + * Note that `wrapperStyle` is applied before `wrapperProps`, so the latter + * will win if it contains a `style` entry. + */ + wrapperStyle: PropTypes.object, + /** + * Whether or not to automatically highlight the top match in the dropdown + * menu. + */ + autoHighlight: PropTypes.bool, + /** + * Whether or not to automatically select the highlighted item when the + * `` loses focus. + */ + selectOnBlur: PropTypes.bool, + /** + * Arguments: `isOpen: Boolean` + * + * Invoked every time the dropdown menu's visibility changes (i.e. every + * time it is displayed/hidden). + */ + onMenuVisibilityChange: PropTypes.func, + /** + * Used to override the internal logic which displays/hides the dropdown + * menu. This is useful if you want to force a certain state based on your + * UX/business logic. Use it together with `onMenuVisibilityChange` for + * fine-grained control over the dropdown menu dynamics. + */ + open: PropTypes.bool, + debug: PropTypes.bool, + }; + + static defaultProps = { + value: '', + wrapperProps: {}, + wrapperStyle: { + display: 'inline-block', + }, + inputProps: {}, + renderInput(props) { + return ; + }, + onChange() {}, + onSelect() {}, + renderMenu(items, value, style) { + return
; + }, + menuStyle: { + borderRadius: '3px', + boxShadow: '0 2px 12px rgba(0, 0, 0, 0.1)', + background: 'rgba(255, 255, 255, 0.9)', + padding: '2px 0', + fontSize: '90%', + position: 'fixed', + overflow: 'hidden', + maxHeight: '50%', // TODO: don't cheat, let it flow to the bottom, + }, + autoHighlight: true, + selectOnBlur: false, + onMenuVisibilityChange() {}, + }; + + constructor(props) { + super(props); + this.state = { + isOpen: false, + highlightedIndex: null, + }; + this._debugStates = []; + this.ensureHighlightedIndex = this.ensureHighlightedIndex.bind(this); + this.exposeAPI = this.exposeAPI.bind(this); + this.handleInputFocus = this.handleInputFocus.bind(this); + this.handleInputBlur = this.handleInputBlur.bind(this); + this.handleChange = this.handleChange.bind(this); + this.handleKeyDown = this.handleKeyDown.bind(this); + this.handleInputClick = this.handleInputClick.bind(this); + this.maybeAutoCompleteText = this.maybeAutoCompleteText.bind(this); + } + + componentWillMount() { + // this.refs is frozen, so we need to assign a new object to it + this.refs = {}; + this._ignoreBlur = false; + this._ignoreFocus = false; + this._scrollOffset = null; + this._scrollTimer = null; + } + + componentWillUnmount() { + clearTimeout(this._scrollTimer); + this._scrollTimer = null; + } + + componentWillReceiveProps(nextProps) { + if (this.state.highlightedIndex !== null) { + this.setState(this.ensureHighlightedIndex); + } + if ( + nextProps.autoHighlight && + (this.props.value !== nextProps.value || this.state.highlightedIndex === null) + ) { + this.setState(this.maybeAutoCompleteText); + } + } + + componentDidMount() { + if (this.isOpen()) { + this.setMenuPositions(); + } + } + + componentDidUpdate(prevProps, prevState) { + if ( + (this.state.isOpen && !prevState.isOpen) || + ('open' in this.props && this.props.open && !prevProps.open) + ) + this.setMenuPositions(); + + this.maybeScrollItemIntoView(); + if (prevState.isOpen !== this.state.isOpen) { + this.props.onMenuVisibilityChange(this.state.isOpen); + } + } + + exposeAPI(el) { + this.refs.input = el; + IMPERATIVE_API.forEach(ev => (this[ev] = el && el[ev] && el[ev].bind(el))); + } + + maybeScrollItemIntoView() { + if (this.isOpen() && this.state.highlightedIndex !== null) { + const itemNode = this.refs[`item-${this.state.highlightedIndex}`]; + const menuNode = this.refs.menu; + scrollIntoView(findDOMNode(itemNode), findDOMNode(menuNode), { + onlyScrollIfNeeded: true, + }); + } + } + + handleKeyDown(event) { + if (Autocomplete.keyDownHandlers[event.key]) + Autocomplete.keyDownHandlers[event.key].call(this, event); + else if (!this.isOpen()) { + this.setState({ + isOpen: true, + }); + } + } + + handleChange(event) { + this.props.onChange(event, event.target.value); + } + + static keyDownHandlers = { + ArrowDown(event) { + event.preventDefault(); + const itemsLength = this.getFilteredItems(this.props).length; + if (!itemsLength) return; + const { highlightedIndex } = this.state; + const index = + highlightedIndex === null || highlightedIndex === itemsLength - 1 + ? 0 + : highlightedIndex + 1; + this.setState({ + highlightedIndex: index, + isOpen: true, + }); + }, + + ArrowUp(event) { + event.preventDefault(); + const itemsLength = this.getFilteredItems(this.props).length; + if (!itemsLength) return; + const { highlightedIndex } = this.state; + const index = + highlightedIndex === 0 || highlightedIndex === null + ? itemsLength - 1 + : highlightedIndex - 1; + this.setState({ + highlightedIndex: index, + isOpen: true, + }); + }, + + Enter(event) { + // Key code 229 is used for selecting items from character selectors (Pinyin, Kana, etc) + if (event.keyCode !== 13) return; + + const inputValue = this.refs.input.value; + if (!inputValue) return; + + if (!this.isOpen() || this.state.highlightedIndex == null) { + // User pressed enter before any search suggestions were populated + this.setState({ isOpen: false }, () => { + this.props.onSelect(inputValue); + this.refs.input.blur(); + }); + } else { + // text entered + menu item has been highlighted + enter is hit -> update value to that of selected menu item, close the menu + event.preventDefault(); + const item = this.getFilteredItems(this.props)[this.state.highlightedIndex]; + const value = this.props.getItemValue(item); + this.setState( + { + isOpen: false, + highlightedIndex: null, + }, + () => { + this.props.onSelect(value, item); + this.refs.input.blur(); + } + ); + } + }, + + Escape() { + // In case the user is currently hovering over the menu + this.setIgnoreBlur(false); + this.setState({ + highlightedIndex: null, + isOpen: false, + }); + }, + + Tab() { + // In case the user is currently hovering over the menu + this.setIgnoreBlur(false); + }, + }; + + getFilteredItems(props) { + let items = props.items; + + if (props.shouldItemRender) { + items = items.filter(item => props.shouldItemRender(item, props.value)); + } + + if (props.sortItems) { + items.sort((a, b) => props.sortItems(a, b, props.value)); + } + + return items; + } + + maybeAutoCompleteText(state, props) { + const { highlightedIndex } = state; + const { value, getItemValue } = props; + const index = highlightedIndex === null ? 0 : highlightedIndex; + const matchedItem = this.getFilteredItems(props)[index]; + if (value !== '' && matchedItem) { + const itemValue = getItemValue(matchedItem); + const itemValueDoesMatch = + itemValue.toLowerCase().indexOf( + value.toLowerCase() + // below line is the the only thing that is changed from the real component + ) !== -1; + if (itemValueDoesMatch) { + return { highlightedIndex: index }; + } + } + return { highlightedIndex: null }; + } + + ensureHighlightedIndex(state, props) { + if (state.highlightedIndex >= this.getFilteredItems(props).length) { + return { highlightedIndex: null }; + } + } + + setMenuPositions() { + const node = this.refs.input; + const rect = node.getBoundingClientRect(); + const computedStyle = global.window.getComputedStyle(node); + const marginBottom = parseInt(computedStyle.marginBottom, 10) || 0; + const marginLeft = parseInt(computedStyle.marginLeft, 10) || 0; + const marginRight = parseInt(computedStyle.marginRight, 10) || 0; + this.setState({ + menuTop: rect.bottom + marginBottom, + menuLeft: rect.left + marginLeft, + menuWidth: rect.width + marginLeft + marginRight, + }); + } + + highlightItemFromMouse(index) { + this.setState({ highlightedIndex: index }); + } + + selectItemFromMouse(item) { + const value = this.props.getItemValue(item); + // The menu will de-render before a mouseLeave event + // happens. Clear the flag to release control over focus + this.setIgnoreBlur(false); + this.setState( + { + isOpen: false, + highlightedIndex: null, + }, + () => { + this.props.onSelect(value, item); + } + ); + } + + setIgnoreBlur(ignore) { + this._ignoreBlur = ignore; + } + + renderMenu() { + const items = this.getFilteredItems(this.props).map((item, index) => { + const element = this.props.renderItem(item, this.state.highlightedIndex === index, { + cursor: 'default', + }); + return React.cloneElement(element, { + onMouseEnter: () => this.highlightItemFromMouse(index), + onClick: () => this.selectItemFromMouse(item), + ref: e => (this.refs[`item-${index}`] = e), + }); + }); + const style = { + left: this.state.menuLeft, + top: this.state.menuTop, + minWidth: this.state.menuWidth, + }; + const menu = this.props.renderMenu(items, this.props.value, style); + return React.cloneElement(menu, { + ref: e => (this.refs.menu = e), + className: 'wunderbar__menu', + // Ignore blur to prevent menu from de-rendering before we can process click + onMouseEnter: () => this.setIgnoreBlur(true), + onMouseLeave: () => this.setIgnoreBlur(false), + }); + } + + handleInputBlur(event) { + if (this._ignoreBlur) { + this._ignoreFocus = true; + this._scrollOffset = getScrollOffset(); + this.refs.input.focus(); + return; + } + let setStateCallback; + const { highlightedIndex } = this.state; + if (this.props.selectOnBlur && highlightedIndex !== null) { + const items = this.getFilteredItems(this.props); + const item = items[highlightedIndex]; + const value = this.props.getItemValue(item); + setStateCallback = () => this.props.onSelect(value, item); + } + this.setState( + { + isOpen: false, + highlightedIndex: null, + }, + setStateCallback + ); + const { onBlur } = this.props.inputProps; + if (onBlur) { + onBlur(event); + } + } + + handleInputFocus(event) { + if (this._ignoreFocus) { + this._ignoreFocus = false; + const { x, y } = this._scrollOffset; + this._scrollOffset = null; + // Focus will cause the browser to scroll the into view. + // This can cause the mouse coords to change, which in turn + // could cause a new highlight to happen, cancelling the click + // event (when selecting with the mouse) + window.scrollTo(x, y); + // Some browsers wait until all focus event handlers have been + // processed before scrolling the into view, so let's + // scroll again on the next tick to ensure we're back to where + // the user was before focus was lost. We could do the deferred + // scroll only, but that causes a jarring split second jump in + // some browsers that scroll before the focus event handlers + // are triggered. + clearTimeout(this._scrollTimer); + this._scrollTimer = setTimeout(() => { + this._scrollTimer = null; + window.scrollTo(x, y); + }, 0); + return; + } + + // Highlight + this.refs.input.select(); + + this.setState({ isOpen: true }); + + const { onFocus } = this.props.inputProps; + if (onFocus) { + onFocus(event); + } + } + + isInputFocused() { + const el = this.refs.input; + return el.ownerDocument && el === el.ownerDocument.activeElement; + } + + handleInputClick() { + // Input will not be focused if it's disabled + if (this.isInputFocused() && !this.isOpen()) this.setState({ isOpen: true }); + } + + composeEventHandlers(internal, external) { + return external + ? e => { + internal(e); + external(e); + } + : internal; + } + + isOpen() { + return 'open' in this.props ? this.props.open : this.state.isOpen; + } + + render() { + if (this.props.debug) { + // you don't like it, you love it + this._debugStates.push({ + id: this._debugStates.length, + state: this.state, + }); + } + + const { inputProps, items } = this.props; + + const open = this.isOpen(); + return ( +
+ {this.props.renderInput({ + ...inputProps, + role: 'combobox', + 'aria-autocomplete': 'list', + 'aria-expanded': open, + autoComplete: 'off', + ref: this.exposeAPI, + onFocus: this.handleInputFocus, + onBlur: this.handleInputBlur, + onChange: this.handleChange, + onKeyDown: this.composeEventHandlers(this.handleKeyDown, inputProps.onKeyDown), + onClick: this.composeEventHandlers(this.handleInputClick, inputProps.onClick), + value: this.props.value, + })} + {open && !!items.length && this.renderMenu()} + {this.props.debug && ( +
+            {JSON.stringify(
+              this._debugStates.slice(
+                Math.max(0, this._debugStates.length - 5),
+                this._debugStates.length
+              ),
+              null,
+              2
+            )}
+          
+ )} +
+ ); + } +} diff --git a/src/renderer/component/wunderbar/view.jsx b/src/renderer/component/wunderbar/view.jsx index 29cbc7418..31b7fdee8 100644 --- a/src/renderer/component/wunderbar/view.jsx +++ b/src/renderer/component/wunderbar/view.jsx @@ -1,166 +1,124 @@ +// @flow import React from 'react'; -import PropTypes from 'prop-types'; -import { normalizeURI } from 'lbryURI'; -import Icon from 'component/icon'; +import classnames from 'classnames'; +import Icon from 'component/common/icon'; +import Autocomplete from './internal/autocomplete'; import { parseQueryParams } from 'util/query_params'; +import * as icons from 'constants/icons'; -class WunderBar extends React.PureComponent { - static TYPING_TIMEOUT = 800; +type Props = { + updateSearchQuery: string => void, + onSearch: string => void, + onSubmit: (string, {}) => void, + wunderbarValue: ?string, + suggestions: Array, +}; - static propTypes = { - onSearch: PropTypes.func.isRequired, - onSubmit: PropTypes.func.isRequired, +class WunderBar extends React.PureComponent { + constructor(props: Props) { + super(props); + + (this: any).handleSubmit = this.handleSubmit.bind(this); + (this: any).handleChange = this.handleChange.bind(this); + this.input = undefined; + } + + getSuggestionIcon = (type: string) => { + switch (type) { + case 'file': + return icons.COMPASS; + case 'channel': + return icons.AT_SIGN; + default: + return icons.SEARCH; + } }; - constructor(props) { - super(props); - this._userTypingTimer = null; - this._isSearchDispatchPending = false; - this._input = null; - this._stateBeforeSearch = null; - this._resetOnNextBlur = true; - this.onChange = this.onChange.bind(this); - this.onFocus = this.onFocus.bind(this); - this.onBlur = this.onBlur.bind(this); - this.onKeyPress = this.onKeyPress.bind(this); - this.onReceiveRef = this.onReceiveRef.bind(this); - this.state = { - address: this.props.address, - icon: this.props.icon, - }; + handleChange(e: SyntheticInputEvent<*>) { + const { updateSearchQuery } = this.props; + const { value } = e.target; + + updateSearchQuery(value); } - componentWillUnmount() { - if (this.userTypingTimer) { - clearTimeout(this._userTypingTimer); - } - } + handleSubmit(value: string, suggestion?: { value: string, type: string }) { + const { onSubmit, onSearch } = this.props; + const query = value.trim(); + const getParams = () => { + const parts = query.split('?'); - onChange(event) { - if (this._userTypingTimer) { - clearTimeout(this._userTypingTimer); - } - - this.setState({ address: event.target.value }); - - this._isSearchDispatchPending = true; - - const searchQuery = event.target.value; - - this._userTypingTimer = setTimeout(() => { - const hasQuery = searchQuery.length === 0; - this._resetOnNextBlur = hasQuery; - this._isSearchDispatchPending = false; - if (searchQuery) { - this.props.onSearch(searchQuery.trim()); + let extraParams = {}; + if (parts.length > 0) { + extraParams = parseQueryParams(parts.join('')); } - }, WunderBar.TYPING_TIMEOUT); // 800ms delay, tweak for faster/slower - } - componentWillReceiveProps(nextProps) { - if ( - nextProps.viewingPage !== this.props.viewingPage || - nextProps.address != this.props.address - ) { - this.setState({ address: nextProps.address, icon: nextProps.icon }); - } - } - - onFocus() { - this._stateBeforeSearch = this.state; - const newState = { - icon: 'icon-search', - isActive: true, + return extraParams; }; - this._focusPending = true; - // below is hacking, improved when we have proper routing - if (!this.state.address.startsWith('lbry://') && this.state.icon !== 'icon-search') { - // onFocus, if they are not on an exact URL or a search page, clear the bar - newState.address = ''; - } - this.setState(newState); - } - - onBlur() { - if (this._isSearchDispatchPending) { - setTimeout(() => { - this.onBlur(); - }, WunderBar.TYPING_TIMEOUT + 1); - } else { - const commonState = { isActive: false }; - if (this._resetOnNextBlur) { - this.setState(Object.assign({}, this._stateBeforeSearch, commonState)); - this._input.value = this.state.address; + // User selected a suggestion + if (suggestion) { + if (suggestion.type === 'search') { + onSearch(query); } else { - this._resetOnNextBlur = true; - this._stateBeforeSearch = this.state; - this.setState(commonState); + const params = getParams(); + const uri = normalizeURI(query); + onSubmit(uri, params); } + + return; + } + + // Currently no suggestion is highlighted. The user may have started + // typing, then lost focus and came back later on the same page + try { + const uri = normalizeURI(query); + const params = getParams(); + onSubmit(uri, params); + } catch (e) { + onSearch(query); } } - componentDidUpdate() { - if (this._input) { - const start = this._input.selectionStart, - end = this._input.selectionEnd; - - this._input.value = this.state.address; // this causes cursor to go to end of input - - this._input.setSelectionRange(start, end); - - if (this._focusPending) { - this._input.select(); - this._focusPending = false; - } - } - } - - onKeyPress(event) { - if (event.charCode == 13 && this._input.value) { - let uri = null, - method = 'onSubmit', - extraParams = {}; - - this._resetOnNextBlur = false; - clearTimeout(this._userTypingTimer); - - const parts = this._input.value.trim().split('?'); - const value = parts.shift(); - if (parts.length > 0) extraParams = parseQueryParams(parts.join('')); - - try { - uri = normalizeURI(value); - this.setState({ value: uri }); - } catch (error) { - // then it's not a valid URL, so let's search - uri = value; - method = 'onSearch'; - } - - this.props[method](uri, extraParams); - this._input.blur(); - } - } - - onReceiveRef(ref) { - this._input = ref; - } + input: ?HTMLInputElement; render() { + const { wunderbarValue, suggestions } = this.props; + return ( -
- {this.state.icon ? : ''} - + + item.value} + onChange={this.handleChange} + onSelect={this.handleSubmit} + renderInput={props => ( + + )} + renderItem={({ value, type, shorthand }, isHighlighted) => ( +
+ + {shorthand || value} + {(true || isHighlighted) && ( + + {'- '} + {type === 'search' ? 'Search' : value} + + )} +
+ )} />
); diff --git a/src/renderer/constants/action_types.js b/src/renderer/constants/action_types.js index 43594a8ce..1c718580c 100644 --- a/src/renderer/constants/action_types.js +++ b/src/renderer/constants/action_types.js @@ -39,8 +39,6 @@ export const FETCH_TRANSACTIONS_COMPLETED = 'FETCH_TRANSACTIONS_COMPLETED'; export const UPDATE_BALANCE = 'UPDATE_BALANCE'; export const CHECK_ADDRESS_IS_MINE_STARTED = 'CHECK_ADDRESS_IS_MINE_STARTED'; export const CHECK_ADDRESS_IS_MINE_COMPLETED = 'CHECK_ADDRESS_IS_MINE_COMPLETED'; -export const SET_DRAFT_TRANSACTION_AMOUNT = 'SET_DRAFT_TRANSACTION_AMOUNT'; -export const SET_DRAFT_TRANSACTION_ADDRESS = 'SET_DRAFT_TRANSACTION_ADDRESS'; export const SEND_TRANSACTION_STARTED = 'SEND_TRANSACTION_STARTED'; export const SEND_TRANSACTION_COMPLETED = 'SEND_TRANSACTION_COMPLETED'; export const SEND_TRANSACTION_FAILED = 'SEND_TRANSACTION_FAILED'; @@ -90,9 +88,11 @@ export const FETCH_AVAILABILITY_COMPLETED = 'FETCH_AVAILABILITY_COMPLETED'; export const FILE_DELETE = 'FILE_DELETE'; // Search -export const SEARCH_STARTED = 'SEARCH_STARTED'; -export const SEARCH_COMPLETED = 'SEARCH_COMPLETED'; -export const SEARCH_CANCELLED = 'SEARCH_CANCELLED'; +export const SEARCH_START = 'SEARCH_START'; +export const SEARCH_SUCCESS = 'SEARCH_SUCCESS'; +export const SEARCH_FAIL = 'SEARCH_FAIL'; +export const UPDATE_SEARCH_QUERY = 'UPDATE_SEARCH_QUERY'; +export const UPDATE_SEARCH_SUGGESTIONS = 'UPDATE_SEARCH_SUGGESTIONS'; // Settings export const DAEMON_SETTINGS_RECEIVED = 'DAEMON_SETTINGS_RECEIVED'; @@ -178,3 +178,13 @@ export const SET_VIDEO_PAUSE = 'SET_VIDEO_PAUSE'; export const MEDIA_PLAY = 'MEDIA_PLAY'; export const MEDIA_PAUSE = 'MEDIA_PAUSE'; export const MEDIA_POSITION = 'MEDIA_POSITION'; + +// Publishing +export const CLEAR_PUBLISH = 'CLEAR_PUBLISH'; +export const UPDATE_PUBLISH_FORM = 'UPDATE_PUBLISH_FORM'; +export const PUBLISH_START = 'PUBLISH_START'; +export const PUBLISH_SUCCESS = 'PUBLISH_SUCCESS'; +export const PUBLISH_FAIL = 'PUBLISH_FAIL'; +export const CLEAR_PUBLISH_ERROR = 'CLEAR_PUBLISH_ERROR'; +export const REMOVE_PENDING_PUBLISH = 'REMOVE_PENDING_PUBLISH'; +export const DO_PREPARE_EDIT = 'DO_PREPARE_EDIT'; diff --git a/src/renderer/constants/claim.js b/src/renderer/constants/claim.js new file mode 100644 index 000000000..3f5db67bf --- /dev/null +++ b/src/renderer/constants/claim.js @@ -0,0 +1,4 @@ +export const MINIMUM_PUBLISH_BID = 0.00000001; + +export const CHANNEL_ANONYMOUS = 'anonymous'; +export const CHANNEL_NEW = 'new'; diff --git a/src/renderer/constants/icons.js b/src/renderer/constants/icons.js index 87b9942ce..5b7b4a8a8 100644 --- a/src/renderer/constants/icons.js +++ b/src/renderer/constants/icons.js @@ -1,6 +1,25 @@ -export const FEATURED = 'rocket'; -export const LOCAL = 'folder'; -export const FILE = 'file'; -export const HISTORY = 'history'; -export const HELP_CIRCLE = 'question-circle'; -export const DOWNLOAD = 'download'; +export const FEATURED = 'Award'; +export const LOCAL = 'Folder'; +export const ALERT = 'AlertCircle'; +export const CLIPBOARD = 'Clipboard'; +export const ARROW_LEFT = 'ChevronLeft'; +export const ARROW_RIGHT = 'ChevronRight'; +export const DOWNLOAD = 'Download'; +export const UPLOAD = 'UploadCloud'; +export const CLOSE = 'X'; +export const EDIT = 'Edit3'; +export const TRASH = 'Trash'; +export const REPORT = 'Flag'; +export const OPEN = 'BookOpen'; +export const HELP = 'HelpCircle'; +export const MESSAGE = 'MessageCircle'; +export const SEND = 'Send'; +export const SEARCH = 'Search'; +export const COMPASS = 'Compass'; +export const AT_SIGN = 'AtSign'; +export const REFRESH = 'RefreshCw'; +export const CLOCK = 'Clock'; +export const HOME = 'Home'; +export const PHONE = 'Phone'; +export const CHECK = 'CheckCircle'; +export const HEART = 'Heart'; diff --git a/src/renderer/constants/licenses.js b/src/renderer/constants/licenses.js new file mode 100644 index 000000000..fbcc7e6a5 --- /dev/null +++ b/src/renderer/constants/licenses.js @@ -0,0 +1,31 @@ +export const CC_LICENSES = [ + { + value: 'Creative Commons Attribution 4.0 International', + url: 'https://creativecommons.org/licenses/by/4.0/legalcode', + }, + { + value: 'Creative Commons Attribution-ShareAlike 4.0 International', + url: 'https://creativecommons.org/licenses/by-sa/4.0/legalcode', + }, + { + value: 'Creative Commons Attribution-NoDerivatives 4.0 International', + url: 'https://creativecommons.org/licenses/by-nd/4.0/legalcode', + }, + { + value: 'Creative Commons Attribution-NonCommercial 4.0 International', + url: 'https://creativecommons.org/licenses/by-nc/4.0/legalcode', + }, + { + value: 'Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International', + url: 'https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode', + }, + { + value: 'Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International', + url: 'https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode', + }, +]; + +export const NONE = 'None'; +export const PUBLIC_DOMAIN = 'Public Domain'; +export const OTHER = 'other'; +export const COPYRIGHT = 'copyright'; diff --git a/src/renderer/constants/modal_types.js b/src/renderer/constants/modal_types.js index 0c2e03da1..3d3a725a2 100644 --- a/src/renderer/constants/modal_types.js +++ b/src/renderer/constants/modal_types.js @@ -1,5 +1,5 @@ -export const CONFIRM_FILE_REMOVE = 'confirmFileRemove'; -export const INCOMPATIBLE_DAEMON = 'incompatibleDaemon'; +export const CONFIRM_FILE_REMOVE = 'confirm_file_remove'; +export const INCOMPATIBLE_DAEMON = 'incompatible_daemon'; export const FILE_TIMEOUT = 'file_timeout'; export const DOWNLOADING = 'downloading'; export const AUTO_UPDATE_DOWNLOADED = 'auto_update_downloaded'; @@ -15,5 +15,8 @@ export const AUTHENTICATION_FAILURE = 'auth_failure'; export const TRANSACTION_FAILED = 'transaction_failed'; export const REWARD_APPROVAL_REQUIRED = 'reward_approval_required'; export const AFFIRM_PURCHASE = 'affirm_purchase'; -export const CONFIRM_CLAIM_REVOKE = 'confirmClaimRevoke'; +export const CONFIRM_CLAIM_REVOKE = 'confirm_claim_revoke'; export const FIRST_SUBSCRIPTION = 'firstSubscription'; +export const SEND_TIP = 'send_tip'; +export const PUBLISH = 'publish'; +export const SEARCH = 'search'; diff --git a/src/renderer/constants/search.js b/src/renderer/constants/search.js new file mode 100644 index 000000000..5bdbcd142 --- /dev/null +++ b/src/renderer/constants/search.js @@ -0,0 +1,3 @@ +export const FILE = 'file'; +export const CHANNEL = 'channel'; +export const SEARCH = 'search'; diff --git a/src/renderer/lbry.js b/src/renderer/lbry.js index 79855b4ce..c3fab9c7d 100644 --- a/src/renderer/lbry.js +++ b/src/renderer/lbry.js @@ -35,78 +35,6 @@ function setLocal(key, value) { localStorage.setItem(key, JSON.stringify(value)); } -/** - * Records a publish attempt in local storage. Returns a dictionary with all the data needed to - * needed to make a dummy claim or file info object. - */ -let pendingId = 0; -function savePendingPublish({ name, channelName }) { - pendingId += 1; - const pendingPublishes = getLocal('pendingPublishes') || []; - const newPendingPublish = { - name, - channelName, - claim_id: `pending-${pendingId}`, - txid: `pending-${pendingId}`, - nout: 0, - outpoint: `pending-${pendingId}:0`, - time: Date.now(), - }; - setLocal('pendingPublishes', [...pendingPublishes, newPendingPublish]); - return newPendingPublish; -} - -/** - * If there is a pending publish with the given name or outpoint, remove it. - * A channel name may also be provided along with name. - */ -function removePendingPublishIfNeeded({ name, channelName, outpoint }) { - function pubMatches(pub) { - return ( - pub.outpoint === outpoint || - (pub.name === name && (!channelName || pub.channel_name === channelName)) - ); - } - - setLocal('pendingPublishes', Lbry.getPendingPublishes().filter(pub => !pubMatches(pub))); -} - -/** - * Gets the current list of pending publish attempts. Filters out any that have timed out and - * removes them from the list. - */ -Lbry.getPendingPublishes = () => { - const pendingPublishes = getLocal('pendingPublishes') || []; - const newPendingPublishes = pendingPublishes.filter( - pub => Date.now() - pub.time <= Lbry.pendingPublishTimeout - ); - setLocal('pendingPublishes', newPendingPublishes); - return newPendingPublishes; -}; - -/** - * Gets a pending publish attempt by its name or (fake) outpoint. A channel name can also be - * provided along withe the name. If no pending publish is found, returns null. - */ -function getPendingPublish({ name, channelName, outpoint }) { - const pendingPublishes = Lbry.getPendingPublishes(); - return ( - pendingPublishes.find( - pub => - pub.outpoint === outpoint || - (pub.name === name && (!channelName || pub.channel_name === channelName)) - ) || null - ); -} - -function pendingPublishToDummyClaim({ channelName, name, outpoint, claimId, txid, nout }) { - return { name, outpoint, claimId, txid, nout, channelName }; -} - -function pendingPublishToDummyFileInfo({ name, outpoint, claimId }) { - return { name, outpoint, claimId, metadata: null }; -} - // core Lbry.connectPromise = null; Lbry.connect = () => { @@ -136,42 +64,6 @@ Lbry.connect = () => { return Lbry.connectPromise; }; -/** - * Publishes a file. The optional fileListedCallback is called when the file becomes available in - * lbry.file_list() during the publish process. - * - * This currently includes a work-around to cache the file in local storage so that the pending - * publish can appear in the UI immediately. - */ -Lbry.publishDeprecated = (params, fileListedCallback, publishedCallback, errorCallback) => { - // Give a short grace period in case publish() returns right away or (more likely) gives an error - const returnPendingTimeout = setTimeout( - () => { - const { name, channel_name: channelName } = params; - if (publishedCallback || fileListedCallback) { - savePendingPublish({ - name, - channelName, - }); - publishedCallback(true); - } - }, - 2000, - { once: true } - ); - - lbryProxy.publish(params).then( - result => { - if (returnPendingTimeout) clearTimeout(returnPendingTimeout); - publishedCallback(result); - }, - err => { - if (returnPendingTimeout) clearTimeout(returnPendingTimeout); - errorCallback(err); - } - ); -}; - Lbry.imagePath = file => `${staticResourcesPath}/img/${file}`; Lbry.getMediaType = (contentType, fileName) => { @@ -217,33 +109,11 @@ Lbry.file_list = (params = {}) => new Promise((resolve, reject) => { const { claim_name: claimName, channel_name: channelName, outpoint } = params; - /** - * If we're searching by outpoint, check first to see if there's a matching pending publish. - * Pending publishes use their own faux outpoints that are always unique, so we don't need - * to check if there's a real file. - */ - if (outpoint) { - const pendingPublish = getPendingPublish({ outpoint }); - if (pendingPublish) { - resolve([pendingPublishToDummyFileInfo(pendingPublish)]); - return; - } - } - apiCall( 'file_list', params, fileInfos => { - removePendingPublishIfNeeded({ name: claimName, channelName, outpoint }); - - // if a naked file_list call, append the pending file infos - if (!claimName && !channelName && !outpoint) { - const dummyFileInfos = Lbry.getPendingPublishes().map(pendingPublishToDummyFileInfo); - - resolve([...fileInfos, ...dummyFileInfos]); - } else { - resolve(fileInfos); - } + resolve(fileInfos); }, reject ); @@ -255,16 +125,7 @@ Lbry.claim_list_mine = (params = {}) => 'claim_list_mine', params, claims => { - claims.forEach(({ name, channel_name: channelName, txid, nout }) => { - removePendingPublishIfNeeded({ - name, - channelName, - outpoint: `${txid}:${nout}`, - }); - }); - - const dummyClaims = Lbry.getPendingPublishes().map(pendingPublishToDummyClaim); - resolve([...claims, ...dummyClaims]); + resolve(claims); }, reject ); diff --git a/src/renderer/modal/modal.js b/src/renderer/modal/modal.js deleted file mode 100644 index 2bae02a6d..000000000 --- a/src/renderer/modal/modal.js +++ /dev/null @@ -1,118 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import ReactModal from 'react-modal'; -import Link from 'component/link/index'; -import app from 'app'; - -export class Modal extends React.PureComponent { - static propTypes = { - type: PropTypes.oneOf(['alert', 'confirm', 'custom']), - overlay: PropTypes.bool, - onConfirmed: PropTypes.func, - onAborted: PropTypes.func, - confirmButtonLabel: PropTypes.string, - abortButtonLabel: PropTypes.string, - confirmButtonDisabled: PropTypes.bool, - abortButtonDisabled: PropTypes.bool, - }; - - static defaultProps = { - type: 'alert', - overlay: true, - confirmButtonLabel: app.i18n.__('OK'), - abortButtonLabel: app.i18n.__('Cancel'), - confirmButtonDisabled: false, - abortButtonDisabled: false, - }; - - render() { - return ( - -
{this.props.children}
- {this.props.type == 'custom' ? null : ( // custom modals define their own buttons -
- - {this.props.type == 'confirm' ? ( - - ) : null} -
- )} -
- ); - } -} - -export class ExpandableModal extends React.PureComponent { - static propTypes = { - expandButtonLabel: PropTypes.string, - extraContent: PropTypes.element, - }; - - static defaultProps = { - confirmButtonLabel: app.i18n.__('OK'), - expandButtonLabel: app.i18n.__('Show More...'), - hideButtonLabel: app.i18n.__('Show Less'), - }; - - constructor(props) { - super(props); - - this.state = { - expanded: false, - }; - } - - toggleExpanded() { - this.setState({ - expanded: !this.state.expanded, - }); - } - - render() { - return ( - - {this.props.children} - {this.state.expanded ? this.props.extraContent : null} -
- - { - this.toggleExpanded(); - }} - /> -
-
- ); - } -} - -export default Modal; diff --git a/src/renderer/modal/modal.jsx b/src/renderer/modal/modal.jsx new file mode 100644 index 000000000..eeed95ef0 --- /dev/null +++ b/src/renderer/modal/modal.jsx @@ -0,0 +1,146 @@ +// @flow +/* eslint-disable react/no-multi-comp */ +// These should probably just be combined into one modal component +import * as React from 'react'; +import ReactModal from 'react-modal'; +import Button from 'component/button'; +import app from 'app'; +import classnames from 'classnames'; + +type ModalProps = { + type: string, + overlay: boolean, + confirmButtonLabel: string, + abortButtonLabel: string, + confirmButtonDisabled: boolean, + abortButtonDisabled: boolean, + onConfirmed?: any => any, + onAborted?: any => any, + className?: string, + overlayClassName?: string, + children?: React.Node, + extraContent?: React.Node, + expandButtonLabel?: string, + hideButtonLabel?: string, + fullScreen: boolean, +}; + +export class Modal extends React.PureComponent { + static defaultProps = { + type: 'alert', + overlay: true, + /* eslint-disable no-underscore-dangle */ + confirmButtonLabel: app.i18n.__('OK'), + abortButtonLabel: app.i18n.__('Cancel'), + /* eslint-enable no-underscore-dangle */ + confirmButtonDisabled: false, + abortButtonDisabled: false, + fullScreen: false, + }; + + render() { + const { + children, + type, + confirmButtonLabel, + confirmButtonDisabled, + onConfirmed, + abortButtonLabel, + abortButtonDisabled, + onAborted, + fullScreen, + className, + overlayClassName, + ...modalProps + } = this.props; + return ( + +
{children}
+ {type === 'custom' ? null : ( // custom modals define their own buttons +
+
+ )} +
+ ); + } +} + +type State = { + expanded: boolean, +}; + +export class ExpandableModal extends React.PureComponent { + static defaultProps = { + /* eslint-disable no-underscore-dangle */ + confirmButtonLabel: app.i18n.__('OK'), + expandButtonLabel: app.i18n.__('Show More...'), + hideButtonLabel: app.i18n.__('Show Less'), + /* eslint-enable no-underscore-dangle */ + }; + + constructor(props: ModalProps) { + super(props); + + this.state = { + expanded: false, + }; + } + + toggleExpanded() { + this.setState({ + expanded: !this.state.expanded, + }); + } + + render() { + return ( + + {this.props.children} + {this.state.expanded ? this.props.extraContent : null} +
+
+
+ ); + } +} + +export default Modal; +/* eslint-enable react/no-multi-comp */ diff --git a/src/renderer/modal/modalAutoUpdateConfirm/view.jsx b/src/renderer/modal/modalAutoUpdateConfirm/view.jsx index f37d59a79..ac2e8d420 100644 --- a/src/renderer/modal/modalAutoUpdateConfirm/view.jsx +++ b/src/renderer/modal/modalAutoUpdateConfirm/view.jsx @@ -1,7 +1,7 @@ import React from 'react'; import { Modal } from 'modal/modal'; import { Line } from 'rc-progress'; -import Link from 'component/link/index'; +import Button from 'component/button'; const { ipcRenderer } = require('electron'); @@ -11,7 +11,7 @@ class ModalAutoUpdateConfirm extends React.PureComponent { return ( {__('Your LBRY update is ready. Restart LBRY now to use it!')}

{__('Want to know what has changed?')} See the{' '} - . +

diff --git a/src/renderer/modal/modalAutoUpdateDownloaded/view.jsx b/src/renderer/modal/modalAutoUpdateDownloaded/view.jsx index c067c24ba..0627d7b51 100644 --- a/src/renderer/modal/modalAutoUpdateDownloaded/view.jsx +++ b/src/renderer/modal/modalAutoUpdateDownloaded/view.jsx @@ -1,7 +1,7 @@ import React from 'react'; import { Modal } from 'modal/modal'; import { Line } from 'rc-progress'; -import Link from 'component/link/index'; +import Button from 'component/button'; const { ipcRenderer } = require('electron'); @@ -11,7 +11,7 @@ class ModalAutoUpdateDownloaded extends React.PureComponent { return ( { const { closeModal, totalRewardValue, currentBalance, addBalance } = props; @@ -33,8 +36,8 @@ const ModalCreditIntro = props => {

- - +
diff --git a/src/renderer/modal/modalIncompatibleDaemon/view.jsx b/src/renderer/modal/modalIncompatibleDaemon/view.jsx index 3526ab4e9..7b056bcbe 100644 --- a/src/renderer/modal/modalIncompatibleDaemon/view.jsx +++ b/src/renderer/modal/modalIncompatibleDaemon/view.jsx @@ -1,6 +1,6 @@ import React from 'react'; import { Modal } from 'modal/modal'; -import Link from 'component/link/index'; +import Button from 'component/button'; class ModalIncompatibleDaemon extends React.PureComponent { render() { @@ -19,7 +19,7 @@ class ModalIncompatibleDaemon extends React.PureComponent { {__( 'This browser is running with an incompatible version of the LBRY protocol and your install must be repaired. ' )} - +
diff --git a/src/renderer/page/auth/view.jsx b/src/renderer/page/auth/view.jsx index 6a7052343..b3379af54 100644 --- a/src/renderer/page/auth/view.jsx +++ b/src/renderer/page/auth/view.jsx @@ -1,9 +1,10 @@ import React from 'react'; -import { BusyMessage } from 'component/common'; -import Link from 'component/link'; +import BusyIndicator from 'component/common/busy-indicator'; +import Button from 'component/button'; import UserEmailNew from 'component/userEmailNew'; import UserEmailVerify from 'component/userEmailVerify'; import UserVerify from 'component/userVerify'; +import Page from 'component/page'; export class AuthPage extends React.PureComponent { componentWillMount() { @@ -43,7 +44,7 @@ export class AuthPage extends React.PureComponent { const { email, isPending, isVerificationCandidate, user } = this.props; if (isPending) { - return [, true]; + return [, true]; } else if (user && !user.has_verified_email && !email) { return [, true]; } else if (user && !user.has_verified_email) { @@ -58,25 +59,27 @@ export class AuthPage extends React.PureComponent { const { email, user, isPending, navigate } = this.props; const [innerContent, useTemplate] = this.renderMain(); - return useTemplate ? ( -
-
-
-

{this.getTitle()}

-
-
{innerContent}
-
-
- {`${__( - 'This information is disclosed only to LBRY, Inc. and not to the LBRY network. It is only required to earn LBRY rewards and may be used to sync usage data across devices.' - )} `} - navigate('/discover')} label={__('Return home')} />. + return ( + + {useTemplate ? ( +
+
+

{this.getTitle()}

-
-
-
- ) : ( - innerContent +
{innerContent}
+
+
+ {`${__( + 'This information is disclosed only to LBRY, Inc. and not to the LBRY network. It is only required to earn LBRY rewards and may be used to sync usage data across devices.' + )} `} +
+
+
+ ) : ( + innerContent + )} + ); } } diff --git a/src/renderer/page/backup/view.jsx b/src/renderer/page/backup/view.jsx index bcb0a0667..3163c0d29 100644 --- a/src/renderer/page/backup/view.jsx +++ b/src/renderer/page/backup/view.jsx @@ -1,63 +1,72 @@ -import React from 'react'; -import SubHeader from 'component/subHeader'; -import Link from 'component/link'; +// @flow +import * as React from 'react'; +import Button from 'component/button'; +import Page from 'component/page'; -class BackupPage extends React.PureComponent { +type Props = { + daemonSettings: { + lbryum_wallet_dir: ?string, + }, +}; + +class BackupPage extends React.PureComponent { render() { const { daemonSettings } = this.props; + const { lbryum_wallet_dir } = daemonSettings; - if (!daemonSettings || Object.keys(daemonSettings).length === 0) { - return ( -
- - {__('Failed to load settings.')} -
- ); - } + const noDaemonSettings = Object.keys(daemonSettings).length === 0; return ( -
- -
-
-

{__('Backup Your LBRY Credits')}

-
-
-

- {__( - 'Your LBRY credits are controllable by you and only you, via wallet file(s) stored locally on your computer.' - )} -

-

- {__( - 'Currently, there is no automatic wallet backup. If you lose access to these files, you will lose your credits permanently.' - )} -

-

- {__( - 'However, it is fairly easy to back up manually. To backup your wallet, make a copy of the folder listed below:' - )} -

-

- {__(`${daemonSettings.lbryum_wallet_dir}`)} -

-

- + +

+ {noDaemonSettings ? ( +
{__('Failed to load settings.')}
+ ) : ( + +
{__('Backup Your LBRY Credits')}
+

{__( - 'Access to these files are equivalent to having access to your credits. Keep any copies you make of your wallet in a secure place.' + 'Your LBRY credits are controllable by you and only you, via wallet file(s) stored locally on your computer.' )} - -

-

- For more details on backing up and best practices,{' '} - . -

-
+

+
+

+ {__( + 'Currently, there is no automatic wallet backup. If you lose access to these files, you will lose your credits permanently.' + )} +

+
+
+

+ {__( + 'However, it is fairly easy to back up manually. To backup your wallet, make a copy of the folder listed below:' + )} +

+
+ {lbryum_wallet_dir} +
+
+
+

+ + {__( + 'Access to these files are equivalent to having access to your credits. Keep any copies you make of your wallet in a secure place.' + )} + +

+

+ For more details on backing up and best practices,{' '} +

+ + )}
-
+ ); } } diff --git a/src/renderer/page/channel/index.js b/src/renderer/page/channel/index.js index c06f42e49..38fabedfe 100644 --- a/src/renderer/page/channel/index.js +++ b/src/renderer/page/channel/index.js @@ -9,6 +9,7 @@ import { import { makeSelectCurrentParam, selectCurrentParams } from 'redux/selectors/navigation'; import { doNavigate } from 'redux/actions/navigation'; import { makeSelectTotalPagesForChannel } from 'redux/selectors/content'; +import { doOpenModal } from 'redux/actions/app'; import ChannelPage from './view'; const select = (state, props) => ({ @@ -24,6 +25,7 @@ const perform = dispatch => ({ fetchClaims: (uri, page) => dispatch(doFetchClaimsByChannel(uri, page)), fetchClaimCount: uri => dispatch(doFetchClaimCountByChannel(uri)), navigate: (path, params) => dispatch(doNavigate(path, params)), + openModal: (modal, props) => dispatch(doOpenModal(modal, props)), }); export default connect(select, perform)(ChannelPage); diff --git a/src/renderer/page/channel/view.jsx b/src/renderer/page/channel/view.jsx index 4614bb5c7..d0ba96394 100644 --- a/src/renderer/page/channel/view.jsx +++ b/src/renderer/page/channel/view.jsx @@ -1,12 +1,35 @@ +// @flow import React from 'react'; import { buildURI } from 'lbryURI'; -import { BusyMessage } from 'component/common'; +import BusyIndicator from 'component/common/busy-indicator'; import FileTile from 'component/fileTile'; import ReactPaginate from 'react-paginate'; -import Link from 'component/link'; +import Button from 'component/button'; import SubscribeButton from 'component/subscribeButton'; +import Page from 'component/page'; +import FileList from 'component/fileList'; +import * as modals from 'constants/modal_types'; -class ChannelPage extends React.PureComponent { +type Props = { + uri: string, + page: number, + totalPages: number, + fetching: boolean, + params: { page: number }, + claim: { + name: string, + claim_id: string, + }, + claimsInChannel: Array<{}>, + fetchClaims: (string, number) => void, + fetchClaimCount: string => void, + navigate: (string, {}) => void, + doChannelSubscribe: string => void, + doChannelUnsubscribe: string => void, + openModal: (string, {}) => void, +}; + +class ChannelPage extends React.PureComponent { componentDidMount() { const { uri, page, fetchClaims, fetchClaimCount } = this.props; @@ -14,7 +37,7 @@ class ChannelPage extends React.PureComponent { fetchClaimCount(uri); } - componentWillReceiveProps(nextProps) { + componentWillReceiveProps(nextProps: Props) { const { page, uri, fetching, fetchClaims, fetchClaimCount } = this.props; if (nextProps.page && page !== nextProps.page) { @@ -25,7 +48,7 @@ class ChannelPage extends React.PureComponent { } } - changePage(pageNumber) { + changePage(pageNumber: number) { const { params } = this.props; const newParams = Object.assign({}, params, { page: pageNumber }); @@ -33,62 +56,37 @@ class ChannelPage extends React.PureComponent { } render() { - const { - fetching, - claimsInChannel, - claim, - uri, - page, - totalPages, - doChannelSubscribe, - doChannelUnsubscribe, - subscriptions, - } = this.props; - + const { fetching, claimsInChannel, claim, uri, page, totalPages, openModal } = this.props; const { name, claim_id: claimId } = claim; const subscriptionUri = buildURI({ channelName: name, claimId }, false); let contentList; if (fetching) { - contentList = ; + contentList = ; } else { contentList = claimsInChannel && claimsInChannel.length ? ( - claimsInChannel.map(claim => ( - - )) + ) : ( {__('No content found.')} ); } return ( -
-
-
-
-

{uri}

-
+ +
+

{name}

+
+
-
-

- {__( - 'Channel pages are empty for all publishers currently, but will be coming in a future update.' - )} -

-
-

{__('Published Content')}

- {contentList} -
+
{contentList}
{(!fetching || (claimsInChannel && claimsInChannel.length)) && totalPages > 1 && ( )} -
+
); } } diff --git a/src/renderer/page/discover/view.jsx b/src/renderer/page/discover/view.jsx index 3280da858..abe0c0f56 100644 --- a/src/renderer/page/discover/view.jsx +++ b/src/renderer/page/discover/view.jsx @@ -1,259 +1,37 @@ +// @flow import React from 'react'; -import ReactDOM from 'react-dom'; -import { normalizeURI } from 'lbryURI'; -import FileCard from 'component/fileCard'; -import { BusyMessage } from 'component/common.js'; -import Icon from 'component/icon'; -import ToolTip from 'component/tooltip.js'; -import SubHeader from 'component/subHeader'; -import classnames from 'classnames'; -import Link from 'component/link'; +import Page from 'component/page'; +import CategoryList from 'component/common/category-list'; -// This should be in a separate file -export class FeaturedCategory extends React.PureComponent { - constructor() { - super(); +type Props = { + fetchFeaturedUris: () => void, + fetchingFeaturedUris: boolean, + featuredUris: {}, +}; - this.state = { - numItems: undefined, - canScrollPrevious: false, - canScrollNext: false, - }; - } - - componentWillMount() { - this.setState({ - numItems: this.props.names.length, - }); - } - - componentDidMount() { - const cardRow = ReactDOM.findDOMNode(this.refs.rowitems); - const cards = cardRow.getElementsByTagName('section'); - - // check if the last card is visible - const lastCard = cards[cards.length - 1]; - const isCompletelyVisible = this.isCardVisible(lastCard, cardRow, false); - - if (!isCompletelyVisible) { - this.setState({ - canScrollNext: true, - }); - } - } - - handleScrollPrevious() { - const cardRow = ReactDOM.findDOMNode(this.refs.rowitems); - if (cardRow.scrollLeft > 0) { - // check the visible cards - const cards = cardRow.getElementsByTagName('section'); - let firstVisibleCard = null; - let firstVisibleIdx = -1; - for (let i = 0; i < cards.length; i++) { - if (this.isCardVisible(cards[i], cardRow, false)) { - firstVisibleCard = cards[i]; - firstVisibleIdx = i; - break; - } - } - - const numDisplayed = this.numDisplayedCards(cardRow); - const scrollToIdx = firstVisibleIdx - numDisplayed; - const animationCallback = () => { - this.setState({ - canScrollPrevious: cardRow.scrollLeft !== 0, - canScrollNext: true, - }); - }; - this.scrollCardItemsLeftAnimated( - cardRow, - scrollToIdx < 0 ? 0 : cards[scrollToIdx].offsetLeft, - 100, - animationCallback - ); - } - } - - handleScrollNext() { - const cardRow = ReactDOM.findDOMNode(this.refs.rowitems); - - // check the visible cards - const cards = cardRow.getElementsByTagName('section'); - let lastVisibleCard = null; - let lastVisibleIdx = -1; - for (let i = 0; i < cards.length; i++) { - if (this.isCardVisible(cards[i], cardRow, true)) { - lastVisibleCard = cards[i]; - lastVisibleIdx = i; - } - } - - if (lastVisibleCard) { - const numDisplayed = this.numDisplayedCards(cardRow); - const animationCallback = () => { - // update last visible index after scroll - for (let i = 0; i < cards.length; i++) { - if (this.isCardVisible(cards[i], cardRow, true)) { - lastVisibleIdx = i; - } - } - - this.setState({ canScrollPrevious: true }); - if (lastVisibleIdx === cards.length - 1) { - this.setState({ canScrollNext: false }); - } - }; - - this.scrollCardItemsLeftAnimated( - cardRow, - Math.min(lastVisibleCard.offsetLeft, cardRow.scrollWidth - cardRow.clientWidth), - 100, - animationCallback - ); - } - } - - scrollCardItemsLeftAnimated(cardRow, target, duration, callback) { - if (!duration || duration <= diff) { - cardRow.scrollLeft = target; - if (callback) { - callback(); - } - return; - } - - const component = this; - const diff = target - cardRow.scrollLeft; - const tick = diff / duration * 10; - setTimeout(() => { - cardRow.scrollLeft += tick; - if (cardRow.scrollLeft === target) { - if (callback) { - callback(); - } - return; - } - component.scrollCardItemsLeftAnimated(cardRow, target, duration - 10, callback); - }, 10); - } - - isCardVisible(section, cardRow, partialVisibility) { - // check if a card is fully or partialy visible in its parent - const cardRowWidth = cardRow.offsetWidth; - const cardRowLeft = cardRow.scrollLeft; - const cardRowEnd = cardRowLeft + cardRow.offsetWidth; - const sectionLeft = section.offsetLeft - cardRowLeft; - const sectionEnd = sectionLeft + section.offsetWidth; - - return ( - (sectionLeft >= 0 && sectionEnd <= cardRowWidth) || - (((sectionLeft < 0 && sectionEnd > 0) || (sectionLeft > 0 && sectionLeft <= cardRowWidth)) && - partialVisibility) - ); - } - - numDisplayedCards(cardRow) { - const cards = cardRow.getElementsByTagName('section'); - const cardRowWidth = cardRow.offsetWidth; - // get the width of the first card and then calculate - const cardWidth = cards.length > 0 ? cards[0].offsetWidth : 0; - - if (cardWidth > 0) { - return Math.ceil(cardRowWidth / cardWidth); - } - - // return a default value of 1 card displayed if the card width couldn't be determined - return 1; - } - - render() { - const { category, names, categoryLink } = this.props; - - return ( -
-

- {categoryLink ? ( - - ) : ( - category - )} - - {category && - category.match(/^community/i) && ( - - )} -

-
- {this.state.canScrollPrevious && ( -
- - - -
- )} - {this.state.canScrollNext && ( -
- - - -
- )} -
- {names && - names.map(name => ( - - ))} -
-
-
- ); - } -} - -class DiscoverPage extends React.PureComponent { +class DiscoverPage extends React.PureComponent { componentWillMount() { this.props.fetchFeaturedUris(); } render() { const { featuredUris, fetchingFeaturedUris } = this.props; - const hasContent = typeof featuredUris === 'object' && Object.keys(featuredUris).length, - failedToLoad = !fetchingFeaturedUris && !hasContent; - + const hasContent = typeof featuredUris === 'object' && Object.keys(featuredUris).length; + const failedToLoad = !fetchingFeaturedUris && !hasContent; + // lbry://fortnite-top-stream-moments-nickatnydte#27395875d68e9d3e53be46edf36d622aa8284441 return ( -
- - {!hasContent && fetchingFeaturedUris && } + {hasContent && Object.keys(featuredUris).map( category => featuredUris[category].length ? ( - + ) : ( '' ) )} {failedToLoad &&
{__('Failed to load landing content.')}
} -
+ ); } } diff --git a/src/renderer/page/file/index.js b/src/renderer/page/file/index.js index f8e515222..08e25e314 100644 --- a/src/renderer/page/file/index.js +++ b/src/renderer/page/file/index.js @@ -2,19 +2,23 @@ import { connect } from 'react-redux'; import { doNavigate } from 'redux/actions/navigation'; import { doFetchFileInfo } from 'redux/actions/file_info'; import { makeSelectFileInfoForUri } from 'redux/selectors/file_info'; -import { selectRewardContentClaimIds } from 'redux/selectors/content'; +import { selectRewardContentClaimIds, selectPlayingUri } from 'redux/selectors/content'; import { doFetchCostInfoForUri } from 'redux/actions/cost_info'; import { doCheckSubscription } from 'redux/actions/subscriptions'; import { makeSelectClaimForUri, makeSelectContentTypeForUri, makeSelectMetadataForUri, + makeSelectClaimIsMine, } from 'redux/selectors/claims'; import { makeSelectCostInfoForUri } from 'redux/selectors/cost_info'; import { selectShowNsfw } from 'redux/selectors/settings'; +import { selectMediaPaused } from 'redux/selectors/media'; +import { doOpenModal } from 'redux/actions/app'; import FilePage from './view'; import { makeSelectCurrentParam } from 'redux/selectors/navigation'; import { selectSubscriptions } from 'redux/selectors/subscriptions'; +import { doPrepareEdit } from 'redux/actions/publish'; const select = (state, props) => ({ claim: makeSelectClaimForUri(props.uri)(state), @@ -22,10 +26,12 @@ const select = (state, props) => ({ costInfo: makeSelectCostInfoForUri(props.uri)(state), metadata: makeSelectMetadataForUri(props.uri)(state), obscureNsfw: !selectShowNsfw(state), - tab: makeSelectCurrentParam('tab')(state), fileInfo: makeSelectFileInfoForUri(props.uri)(state), rewardedContentClaimIds: selectRewardContentClaimIds(state, props), subscriptions: selectSubscriptions(state), + playingUri: selectPlayingUri(state), + isPaused: selectMediaPaused(state), + claimIsMine: makeSelectClaimIsMine(props.uri)(state), }); const perform = dispatch => ({ @@ -33,6 +39,8 @@ const perform = dispatch => ({ fetchFileInfo: uri => dispatch(doFetchFileInfo(uri)), fetchCostInfo: uri => dispatch(doFetchCostInfoForUri(uri)), checkSubscription: subscription => dispatch(doCheckSubscription(subscription)), + openModal: (modal, props) => dispatch(doOpenModal(modal, props)), + prepareEdit: publishData => dispatch(doPrepareEdit(publishData)), }); export default connect(select, perform)(FilePage); diff --git a/src/renderer/page/file/view.jsx b/src/renderer/page/file/view.jsx index c7c29c194..b017ea745 100644 --- a/src/renderer/page/file/view.jsx +++ b/src/renderer/page/file/view.jsx @@ -1,38 +1,74 @@ -import React from 'react'; +// @flow +import * as React from 'react'; import lbry from 'lbry'; import { buildURI, normalizeURI } from 'lbryURI'; import Video from 'component/video'; -import { Thumbnail } from 'component/common'; +import Thumbnail from 'component/common/thumbnail'; import FilePrice from 'component/filePrice'; import FileDetails from 'component/fileDetails'; +import FileActions from 'component/fileActions'; import UriIndicator from 'component/uriIndicator'; -import Icon from 'component/icon'; +import Icon from 'component/common/icon'; import WalletSendTip from 'component/walletSendTip'; import DateTime from 'component/dateTime'; import * as icons from 'constants/icons'; -import Link from 'component/link'; +import Button from 'component/button'; import SubscribeButton from 'component/subscribeButton'; +import Page from 'component/page'; +import player from 'render-media'; +import * as modals from 'constants/modal_types'; -class FilePage extends React.PureComponent { +type Props = { + claim: { + claim_id: string, + height: number, + channel_name: string, + value: { + publisherSignature: ?{ + certificateId: ?string, + }, + }, + }, + fileInfo: {}, + metadata: { + title: string, + thumbnail: string, + nsfw: boolean, + }, + contentType: string, + uri: string, + rewardedContentClaimIds: Array, + obscureNsfw: boolean, + playingUri: ?string, + isPaused: boolean, + claimIsMine: boolean, + costInfo: ?{}, + navigate: (string, ?{}) => void, + openModal: (string, any) => void, + fetchFileInfo: string => void, + fetchCostInfo: string => void, + prepareEdit: ({}) => void, +}; + +class FilePage extends React.Component { componentDidMount() { - this.fetchFileInfo(this.props); - this.fetchCostInfo(this.props); + const { uri, fileInfo, fetchFileInfo, costInfo, fetchCostInfo } = this.props; + + if (fileInfo === undefined) { + fetchFileInfo(uri); + } + + if (costInfo === undefined) { + fetchCostInfo(uri); + } + this.checkSubscription(this.props); } - componentWillReceiveProps(nextProps) { - this.fetchFileInfo(nextProps); - } - - fetchFileInfo(props) { - if (props.fileInfo === undefined) { - props.fetchFileInfo(props.uri); - } - } - - fetchCostInfo(props) { - if (props.costInfo === undefined) { - props.fetchCostInfo(props.uri); + componentWillReceiveProps(nextProps: Props) { + const { fetchFileInfo, uri } = this.props; + if (nextProps.fileInfo === undefined) { + fetchFileInfo(uri); } } @@ -61,75 +97,99 @@ class FilePage extends React.PureComponent { fileInfo, metadata, contentType, - tab, uri, rewardedContentClaimIds, + obscureNsfw, + playingUri, + isPaused, + openModal, + claimIsMine, + prepareEdit, + navigate, } = this.props; - const showTipBox = tab == 'tip'; - - if (!claim || !metadata) { - return {__('Empty claim or metadata info.')}; - } - + // File info const title = metadata.title; const isRewardContent = rewardedContentClaimIds.includes(claim.claim_id); + const shouldObscureThumbnail = obscureNsfw && metadata.nsfw; + const thumbnail = metadata.thumbnail; + const { height, channel_name: channelName, value } = claim; const mediaType = lbry.getMediaType(contentType); - const player = require('render-media'); - const obscureNsfw = this.props.obscureNsfw && metadata && metadata.nsfw; const isPlayable = Object.values(player.mime).indexOf(contentType) !== -1 || mediaType === 'audio'; - const { height, channel_name: channelName, value } = claim; const channelClaimId = value && value.publisherSignature && value.publisherSignature.certificateId; - let subscriptionUri; if (channelName && channelClaimId) { subscriptionUri = buildURI({ channelName, claimId: channelClaimId }, false); } + const isPlaying = playingUri === uri && !isPaused; return ( -
-
- {isPlayable ? ( -
-
- {(!tab || tab === 'details') && ( -
- {' '} -
- {!fileInfo || fileInfo.written_bytes <= 0 ? ( - - - {isRewardContent && ( - - {' '} - - - )} - - ) : null} -

{title}

-
- - - Published on - + + {!claim || !metadata ? ( +
+ {__('Empty claim or metadata info.')} +
+ ) : ( +
+ {isPlayable ? ( +
-
+
+ )} + ); } } diff --git a/src/renderer/page/fileListDownloaded/index.js b/src/renderer/page/fileListDownloaded/index.js index 8361a560f..9fc0fb685 100644 --- a/src/renderer/page/fileListDownloaded/index.js +++ b/src/renderer/page/fileListDownloaded/index.js @@ -1,29 +1,16 @@ -import React from 'react'; import { connect } from 'react-redux'; -import { doFetchFileInfosAndPublishedClaims } from 'redux/actions/file_info'; -import { - selectFileInfosDownloaded, - selectIsFetchingFileListDownloadedOrPublished, -} from 'redux/selectors/file_info'; -import { - selectMyClaimsWithoutChannels, - selectIsFetchingClaimListMine, -} from 'redux/selectors/claims'; -import { doFetchClaimListMine } from 'redux/actions/content'; +import { selectFileInfosDownloaded } from 'redux/selectors/file_info'; +import { selectMyClaimsWithoutChannels } from 'redux/selectors/claims'; import { doNavigate } from 'redux/actions/navigation'; import FileListDownloaded from './view'; const select = state => ({ fileInfos: selectFileInfosDownloaded(state), - isFetching: selectIsFetchingFileListDownloadedOrPublished(state), claims: selectMyClaimsWithoutChannels(state), - isFetchingClaims: selectIsFetchingClaimListMine(state), }); const perform = dispatch => ({ navigate: path => dispatch(doNavigate(path)), - fetchFileInfosDownloaded: () => dispatch(doFetchFileInfosAndPublishedClaims()), - fetchClaims: () => dispatch(doFetchClaimListMine()), }); export default connect(select, perform)(FileListDownloaded); diff --git a/src/renderer/page/fileListDownloaded/view.jsx b/src/renderer/page/fileListDownloaded/view.jsx index f6be896ef..f6b977468 100644 --- a/src/renderer/page/fileListDownloaded/view.jsx +++ b/src/renderer/page/fileListDownloaded/view.jsx @@ -1,41 +1,31 @@ import React from 'react'; -import Link from 'component/link'; +import Button from 'component/button'; import { FileTile } from 'component/fileTile'; -import { BusyMessage, Thumbnail } from 'component/common.js'; import FileList from 'component/fileList'; -import SubHeader from 'component/subHeader'; +import Page from 'component/page'; class FileListDownloaded extends React.PureComponent { - componentWillMount() { - if (!this.props.isFetchingClaims) this.props.fetchClaims(); - if (!this.props.isFetching) this.props.fetchFileInfosDownloaded(); - } - render() { - const { fileInfos, isFetching, navigate } = this.props; - - let content; - if (fileInfos && fileInfos.length > 0) { - content = ; - } else if (isFetching) { - content = ; - } else { - content = ( - - {__("You haven't downloaded anything from LBRY yet. Go")}{' '} - navigate('/discover')} - label={__('search for your first download')} - />! - - ); - } + const { fileInfos, navigate } = this.props; + const hasDownloads = fileInfos && fileInfos.length > 0; return ( -
- - {content} -
+ + {hasDownloads ? ( + + ) : ( +
+ {__("You haven't downloaded anything from LBRY yet.")} +
+
+
+ )} +
); } } diff --git a/src/renderer/page/fileListPublished/index.js b/src/renderer/page/fileListPublished/index.js index a6eb4be3b..a053baa3a 100644 --- a/src/renderer/page/fileListPublished/index.js +++ b/src/renderer/page/fileListPublished/index.js @@ -1,24 +1,18 @@ -import React from 'react'; -import rewards from 'rewards'; import { connect } from 'react-redux'; -import { doFetchClaimListMine } from 'redux/actions/content'; -import { - selectMyClaimsWithoutChannels, - selectIsFetchingClaimListMine, -} from 'redux/selectors/claims'; -import { doClaimRewardType } from 'redux/actions/rewards'; +import { selectMyClaimsWithoutChannels } from 'redux/selectors/claims'; +import { selectPendingPublishes } from 'redux/selectors/publish'; import { doNavigate } from 'redux/actions/navigation'; +import { doCheckPendingPublishes } from 'redux/actions/publish'; import FileListPublished from './view'; const select = state => ({ claims: selectMyClaimsWithoutChannels(state), - isFetching: selectIsFetchingClaimListMine(state), + pendingPublishes: selectPendingPublishes(state), }); const perform = dispatch => ({ navigate: path => dispatch(doNavigate(path)), - fetchClaims: () => dispatch(doFetchClaimListMine()), - claimFirstPublishReward: () => dispatch(doClaimRewardType(rewards.TYPE_FIRST_PUBLISH)), + checkIfPublishesConfirmed: publishes => dispatch(doCheckPendingPublishes(publishes)), }); export default connect(select, perform)(FileListPublished); diff --git a/src/renderer/page/fileListPublished/view.jsx b/src/renderer/page/fileListPublished/view.jsx index e7917f67d..24b0520d0 100644 --- a/src/renderer/page/fileListPublished/view.jsx +++ b/src/renderer/page/fileListPublished/view.jsx @@ -1,52 +1,37 @@ import React from 'react'; -import Link from 'component/link'; -import FileTile from 'component/fileTile'; -import { BusyMessage, Thumbnail } from 'component/common.js'; +import Button from 'component/button'; import FileList from 'component/fileList'; -import SubHeader from 'component/subHeader'; +import Page from 'component/page'; class FileListPublished extends React.PureComponent { - componentWillMount() { - if (!this.props.isFetching) this.props.fetchClaims(); - } - - componentDidUpdate() { - // if (this.props.claims.length > 0) this.props.fetchClaims(); + componentDidMount() { + const { pendingPublishes, checkIfPublishesConfirmed } = this.props; + if (pendingPublishes.length) { + checkIfPublishesConfirmed(pendingPublishes); + } } render() { - const { claims, isFetching, navigate } = this.props; - - let content; - - if (claims && claims.length > 0) { - content = ( - - ); - } else if (isFetching) { - content = ; - } else { - content = ( - - {__("It looks like you haven't published anything to LBRY yet. Go")}{' '} - navigate('/publish')} - label={__('share your beautiful cats with the world')} - />! - - ); - } + const { claims, pendingPublishes, navigate } = this.props; + const fileInfos = [...pendingPublishes, ...claims]; return ( -
- - {content} -
+ + {fileInfos.length ? ( + + ) : ( +
+ {__("It looks like you haven't published anything to LBRY yet.")} +
+
+
+ )} +
); } } diff --git a/src/renderer/page/getCredits/view.jsx b/src/renderer/page/getCredits/view.jsx index b8e670443..e08e77d6b 100644 --- a/src/renderer/page/getCredits/view.jsx +++ b/src/renderer/page/getCredits/view.jsx @@ -1,26 +1,22 @@ import React from 'react'; -import SubHeader from 'component/subHeader'; -import Link from 'component/link'; +import Button from 'component/button'; import RewardSummary from 'component/rewardSummary'; import ShapeShift from 'component/shapeShift'; +import Page from 'component/page'; +import * as icons from 'constants/icons'; const GetCreditsPage = props => ( -
- + -
-
-

{__('From External Wallet')}

-
+
+
{__('From External Wallet')}
- +
-
-
-

{__('More ways to get LBRY Credits')}

-
+
+
{__('More ways to get LBRY Credits')}

{ @@ -29,10 +25,10 @@ const GetCreditsPage = props => (

- +
-
+ ); export default GetCreditsPage; diff --git a/src/renderer/page/help/view.jsx b/src/renderer/page/help/view.jsx index bb22e6fe5..27cd7faec 100644 --- a/src/renderer/page/help/view.jsx +++ b/src/renderer/page/help/view.jsx @@ -1,10 +1,11 @@ // @TODO: Customize advice based on OS import React from 'react'; import lbry from 'lbry.js'; -import Link from 'component/link'; -import SubHeader from 'component/subHeader'; -import { BusyMessage } from 'component/common'; -import Icon from 'component/icon'; +import Button from 'component/button'; +import BusyIndicator from 'component/common/busy-indicator'; +import Icon from 'component/common/icon'; +import Page from 'component/page'; +import * as icons from 'constants/icons'; class HelpPage extends React.PureComponent { constructor(props) { @@ -17,9 +18,11 @@ class HelpPage extends React.PureComponent { upgradeAvailable: null, accessTokenHidden: true, }; + + this.showAccessToken = this.showAccessToken.bind(this); } - componentWillMount() { + componentDidMount() { lbry.getAppVersionInfo().then(({ remoteVersion, localVersion, upgradeAvailable }) => { this.setState({ uiVersion: localVersion, @@ -70,147 +73,127 @@ class HelpPage extends React.PureComponent { } return ( -
- -
-
-

{__('Read the FAQ')}

-
-
-

{__('Our FAQ answers many common questions.')}

-

- -

-
-
-
-
-

{__('Get Live Help')}

-
-
-

- {__('Live help is available most hours in the')} #help{' '} - {__('channel of our Discord chat room.')} -

-

- -

-
-
-
-
-

{__('Report a Bug')}

-
-
-

{__('Did you find something wrong?')}

-

- -

-
{__('Thanks! LBRY is made by its users.')}
+ +
+
{__('Read the FAQ')}
+

{__('Our FAQ answers many common questions.')}

+ +
+
-
-
-

{__('About')}

-
-
- {this.state.upgradeAvailable === null ? ( - '' - ) : this.state.upgradeAvailable ? ( -

- {__('A newer version of LBRY is available.')}{' '} - -

- ) : ( -

{__('Your copy of LBRY is up to date.')}

- )} - {this.state.uiVersion && ver ? ( - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{__('App')}{this.state.uiVersion}
{__('Daemon (lbrynet)')}{ver.lbrynet_version}
{__('Wallet (lbryum)')}{ver.lbryum_version}
{__('Connected Email')} - {user && user.primary_email ? ( - user.primary_email - ) : ( - - {__('none')} - ( doAuth()} label={__('set email')} />) - - )} -
{__('Reward Eligible')} - {user && user.is_reward_approved ? ( - - ) : ( - - )} -
{__('Platform')}{platform}
{__('Installation ID')}{this.state.lbryId}
{__('Access Token')} - {this.state.accessTokenHidden && ( - - )} - {!this.state.accessTokenHidden && - accessToken && ( -
-

{accessToken}

-
- {__('This is equivalent to a password. Do not post or share this.')} -
-
- )} -
- ) : ( - - )} +
+
{__('Get Live Help')}
+

+ {__('Live help is available most hours in the')} #help{' '} + {__('channel of our Discord chat room.')} +

+
+
-
+ +
+
{__('Report a Bug')}
+

{__('Did you find something wrong?')}

+ +
+
+
{__('Thanks! LBRY is made by its users.')}
+
+ +
+
{__('About')}
+ {this.state.upgradeAvailable !== null && this.state.upgradeAvailable ? ( +
+ {__('A newer version of LBRY is available.')}{' '} +
+ ) : ( +
{__('Your LBRY app is up to date.')}
+ )} + + {this.state.uiVersion && ver ? ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{__('App')}{this.state.uiVersion}
{__('Daemon (lbrynet)')}{ver.lbrynet_version}
{__('Wallet (lbryum)')}{ver.lbryum_version}
{__('Connected Email')} + {user && user.primary_email ? ( + user.primary_email + ) : ( + + {__('none')} + (
{__('Reward Eligible')}{user && user.is_reward_approved ? __('Yes') : __('No')}
{__('Platform')}{platform}
{__('Installation ID')}{this.state.lbryId}
{__('Access Token')} + {this.state.accessTokenHidden && ( +
+ ) : ( + + )} +
+ ); } } diff --git a/src/renderer/page/invite/view.jsx b/src/renderer/page/invite/view.jsx index 4199066a5..04aadbe46 100644 --- a/src/renderer/page/invite/view.jsx +++ b/src/renderer/page/invite/view.jsx @@ -1,8 +1,8 @@ import React from 'react'; -import { BusyMessage } from 'component/common'; -import SubHeader from 'component/subHeader'; +import BusyIndicator from 'component/common/busy-indicator'; import InviteNew from 'component/inviteNew'; import InviteList from 'component/inviteList'; +import Page from 'component/page'; class InvitePage extends React.PureComponent { componentWillMount() { @@ -13,14 +13,18 @@ class InvitePage extends React.PureComponent { const { isPending, isFailed } = this.props; return ( -
- - {isPending && } + + {isPending && } {!isPending && isFailed && {__('Failed to retrieve invite status.')}} - {!isPending && !isFailed && } - {!isPending && !isFailed && } -
+ {!isPending && + !isFailed && ( + + + + + )} + ); } } diff --git a/src/renderer/page/publish/index.js b/src/renderer/page/publish/index.js index 01f579e5a..c73a3d492 100644 --- a/src/renderer/page/publish/index.js +++ b/src/renderer/page/publish/index.js @@ -1,43 +1,56 @@ import React from 'react'; import { connect } from 'react-redux'; -import { doNavigate, doHistoryBack } from 'redux/actions/navigation'; +import { doNavigate } from 'redux/actions/navigation'; import { doClaimRewardType } from 'redux/actions/rewards'; -import { - selectMyClaims, - selectFetchingMyChannels, - selectMyChannelClaims, - selectClaimsByUri, -} from 'redux/selectors/claims'; +import { selectMyClaims, selectClaimsByUri } from 'redux/selectors/claims'; import { selectResolvingUris } from 'redux/selectors/content'; -import { - doFetchClaimListMine, - doFetchChannelListMine, - doResolveUri, - doCreateChannel, - doPublish, -} from 'redux/actions/content'; +import { selectPublishFormValues } from 'redux/selectors/publish'; +import { doResolveUri } from 'redux/actions/content'; import { selectBalance } from 'redux/selectors/wallet'; -import rewards from 'rewards'; +import { doClearPublish, doUpdatePublishForm, doPublish } from 'redux/actions/publish'; +import { makeSelectCostInfoForUri } from 'redux/selectors/cost_info'; +import { doPrepareEdit } from 'redux/actions/publish'; import PublishPage from './view'; -const select = state => ({ - balance: selectBalance(state), - myClaims: selectMyClaims(state), - fetchingChannels: selectFetchingMyChannels(state), - channels: selectMyChannelClaims(state), - claimsByUri: selectClaimsByUri(state), - resolvingUris: selectResolvingUris(state), -}); +const select = (state, props) => { + const publishState = selectPublishFormValues(state); + const { uri, name } = publishState; + + const resolvingUris = selectResolvingUris(state); + let isResolvingUri = false; + if (uri) { + isResolvingUri = resolvingUris.includes(uri); + } + + const claimsByUri = selectClaimsByUri(state); + const myClaims = selectMyClaims(state); + + const claimForUri = claimsByUri[uri]; + let winningBidForClaimUri; + let myClaimForUri; + if (claimForUri) { + winningBidForClaimUri = claimForUri.effective_amount; + myClaimForUri = myClaims.find(claim => claim.name === name); + } + + return { + ...publishState, + isResolvingUri, + claimForUri, + winningBidForClaimUri, + myClaimForUri, + costInfo: makeSelectCostInfoForUri(props.uri)(state), + balance: selectBalance(state), + }; +}; const perform = dispatch => ({ - back: () => dispatch(doHistoryBack()), - navigate: path => dispatch(doNavigate(path)), - fetchClaimListMine: () => dispatch(doFetchClaimListMine()), - claimFirstChannelReward: () => dispatch(doClaimRewardType(rewards.TYPE_FIRST_CHANNEL)), - fetchChannelListMine: () => dispatch(doFetchChannelListMine()), + updatePublishForm: value => dispatch(doUpdatePublishForm(value)), + clearPublish: () => dispatch(doClearPublish()), resolveUri: uri => dispatch(doResolveUri(uri)), - createChannel: (name, amount) => dispatch(doCreateChannel(name, amount)), publish: params => dispatch(doPublish(params)), + navigate: path => dispatch(doNavigate(path)), + prepareEdit: claim => dispatch(doPrepareEdit(claim)), }); export default connect(select, perform)(PublishPage); diff --git a/src/renderer/page/publish/view.jsx b/src/renderer/page/publish/view.jsx index c0cc68aab..0745e9430 100644 --- a/src/renderer/page/publish/view.jsx +++ b/src/renderer/page/publish/view.jsx @@ -1,6 +1,23 @@ import React from 'react'; import PublishForm from 'component/publishForm'; +import Page from 'component/page'; -const PublishPage = props => ; +class PublishPage extends React.PureComponent { + scrollToTop = () => { + // #content wraps every + const mainContent = document.getElementById('content'); + if (mainContent) { + mainContent.scrollTop = 0; // It would be nice to animate this + } + }; + + render() { + return ( + + + + ); + } +} export default PublishPage; diff --git a/src/renderer/page/report.js b/src/renderer/page/report.js index 617ca6d3d..1c8eea4b2 100644 --- a/src/renderer/page/report.js +++ b/src/renderer/page/report.js @@ -1,6 +1,6 @@ import React from 'react'; -import Link from 'component/link'; -import { FormRow } from 'component/form'; +import Button from 'component/button'; +import { FormRow } from 'component/common/form'; import { doShowSnackBar } from 'redux/actions/app'; import lbry from '../lbry.js'; @@ -82,7 +82,7 @@ class ReportPage extends React.Component {

{__('Developer?')}

{__('You can also')}{' '} - . diff --git a/src/renderer/page/rewards/view.jsx b/src/renderer/page/rewards/view.jsx index 99375faee..a25b06ec4 100644 --- a/src/renderer/page/rewards/view.jsx +++ b/src/renderer/page/rewards/view.jsx @@ -1,9 +1,10 @@ import React from 'react'; -import { BusyMessage } from 'component/common'; +import BusyIndicator from 'component/common/busy-indicator'; import RewardListClaimed from 'component/rewardListClaimed'; import RewardTile from 'component/rewardTile'; -import SubHeader from 'component/subHeader'; -import Link from 'component/link'; +import Button from 'component/button'; +import Page from 'component/page'; +import classnames from 'classnames'; class RewardsPage extends React.PureComponent { /* @@ -34,18 +35,16 @@ class RewardsPage extends React.PureComponent { if (user && !user.is_reward_approved && daemonSettings.share_usage_data) { if (!user.primary_email || !user.has_verified_email || !user.is_identity_verified) { return ( -
-
-

{__('Humans Only')}

-
-
+
+
{__('Humans Only')}
+

{__('Rewards are for human beings only.')}{' '} {__("You'll have to prove you're one of us before you can claim any rewards.")}

- +
); @@ -70,7 +69,7 @@ class RewardsPage extends React.PureComponent { )}`}

- navigate('/discover')} button="primary" label="Return Home" /> +

); @@ -87,7 +86,7 @@ class RewardsPage extends React.PureComponent { {__( 'Rewards are currently disabled for your account. Turn on diagnostic data sharing, in' )}{' '} - navigate('/settings')} label="Settings" /> +
@@ -95,12 +94,12 @@ class RewardsPage extends React.PureComponent { } else if (fetching) { return (
- +
); } else if (user === null) { return ( -
+

{__('This application is unable to earn rewards due to an authentication failure.')}

@@ -108,13 +107,20 @@ class RewardsPage extends React.PureComponent { ); } else if (!rewards || rewards.length <= 0) { return ( -
+
{__('There are no rewards available at this time, please check back later.')}
); } + + const isNotEligible = + !user.primary_email || !user.has_verified_email || !user.is_identity_verified; return ( -
+
{rewards.map(reward => )}
); @@ -122,12 +128,11 @@ class RewardsPage extends React.PureComponent { render() { return ( -
- + {this.renderPageHeader()} {this.renderUnclaimedRewards()} {} -
+ ); } } diff --git a/src/renderer/page/search/index.js b/src/renderer/page/search/index.js index 202844e07..7946f5378 100644 --- a/src/renderer/page/search/index.js +++ b/src/renderer/page/search/index.js @@ -1,16 +1,18 @@ import React from 'react'; import { connect } from 'react-redux'; -import { selectIsSearching, selectSearchQuery } from 'redux/selectors/search'; +import { selectIsSearching, selectSearchValue } from 'redux/selectors/search'; import { doNavigate } from 'redux/actions/navigation'; +import { doUpdateSearchQuery } from 'redux/actions/search'; import SearchPage from './view'; const select = state => ({ isSearching: selectIsSearching(state), - query: selectSearchQuery(state), + query: selectSearchValue(state), }); const perform = dispatch => ({ navigate: path => dispatch(doNavigate(path)), + updateSearchQuery: query => dispatch(doUpdateSearchQuery(query)), }); export default connect(select, perform)(SearchPage); diff --git a/src/renderer/page/search/view.jsx b/src/renderer/page/search/view.jsx index 4f9cae040..48273e7a4 100644 --- a/src/renderer/page/search/view.jsx +++ b/src/renderer/page/search/view.jsx @@ -1,43 +1,68 @@ -import React from 'react'; +// @flow +import * as React from 'react'; import { isURIValid, normalizeURI } from 'lbryURI'; import FileTile from 'component/fileTile'; import FileListSearch from 'component/fileListSearch'; -import { ToolTip } from 'component/tooltip.js'; +import ToolTip from 'component/common/tooltip'; +import Page from 'component/page'; + +const MODAL_ANIMATION_TIME = 250; + +type Props = { + query: ?string, + updateSearchQuery: string => void, +}; + +class SearchPage extends React.PureComponent { + constructor() { + super(); + + this.input = null; + } + + componentDidMount() { + // Wait for the modal to animate down before focusing + // without this there is an issue with scroll the page down + setTimeout(() => { + if (this.input) { + this.input.focus(); + } + }, MODAL_ANIMATION_TIME); + } + + input: ?HTMLInputElement; -class SearchPage extends React.PureComponent { render() { - const { query } = this.props; - + const { query, updateSearchQuery } = this.props; return ( -
- {isURIValid(query) ? ( -
-

- {__('Exact URL')}{' '} - -

- -
- ) : ( - '' - )} -
-

- {__('Search Results for')} {query}{' '} - -

+ +
+ (this.input = input)} + className="search__input" + value={query} + placeholder={__('Search for anything...')} + onChange={event => updateSearchQuery(event.target.value)} + /> + + {isURIValid(query) && ( + +
+ {__('Exact URL')} + +
+ +
+ )} -
-
+
+ ); } } + export default SearchPage; diff --git a/src/renderer/page/sendCredits/view.jsx b/src/renderer/page/sendCredits/view.jsx index 07df1fd6f..82b038068 100644 --- a/src/renderer/page/sendCredits/view.jsx +++ b/src/renderer/page/sendCredits/view.jsx @@ -1,14 +1,13 @@ import React from 'react'; -import SubHeader from 'component/subHeader'; import WalletSend from 'component/walletSend'; import WalletAddress from 'component/walletAddress'; +import Page from 'component/page'; const SendReceivePage = props => ( -
- + -
+ ); export default SendReceivePage; diff --git a/src/renderer/page/settings/index.js b/src/renderer/page/settings/index.js index ca277df82..e4f4ff930 100644 --- a/src/renderer/page/settings/index.js +++ b/src/renderer/page/settings/index.js @@ -1,4 +1,3 @@ -import React from 'react'; import { connect } from 'react-redux'; import * as settings from 'constants/settings'; import { doClearCache } from 'redux/actions/app'; @@ -6,7 +5,6 @@ import { doSetDaemonSetting, doSetClientSetting, doGetThemes, - doSetTheme, doChangeLanguage, } from 'redux/actions/settings'; import { @@ -23,8 +21,7 @@ const select = state => ({ showUnavailable: makeSelectClientSetting(settings.SHOW_UNAVAILABLE)(state), instantPurchaseEnabled: makeSelectClientSetting(settings.INSTANT_PURCHASE_ENABLED)(state), instantPurchaseMax: makeSelectClientSetting(settings.INSTANT_PURCHASE_MAX)(state), - showUnavailable: makeSelectClientSetting(settings.SHOW_UNAVAILABLE)(state), - theme: makeSelectClientSetting(settings.THEME)(state), + currentTheme: makeSelectClientSetting(settings.THEME)(state), themes: makeSelectClientSetting(settings.THEMES)(state), language: selectCurrentLanguage(state), languages: selectLanguages(state), diff --git a/src/renderer/page/settings/view.jsx b/src/renderer/page/settings/view.jsx index f83fc9bc9..bde2f935e 100644 --- a/src/renderer/page/settings/view.jsx +++ b/src/renderer/page/settings/view.jsx @@ -1,21 +1,118 @@ -import React from 'react'; -import FormField from 'component/formField'; -import { FormRow } from 'component/form.js'; -import SubHeader from 'component/subHeader'; +// @flow +import * as React from 'react'; +import { FormField, FormFieldPrice } from 'component/common/form'; import * as settings from 'constants/settings'; -import lbry from 'lbry.js'; -import Link from 'component/link'; -import FormFieldPrice from 'component/formFieldPrice'; +import * as icons from 'constants/icons'; +import Button from 'component/button'; +import Page from 'component/page'; +import FileSelector from 'component/common/file-selector'; -class SettingsPage extends React.PureComponent { - constructor(props) { +export type Price = { + currency: string, + amount: number, +}; + +type DaemonSettings = { + download_directory: string, + disable_max_key_fee: boolean, + share_usage_data: boolean, +}; + +type Props = { + setDaemonSetting: (string, boolean | string | Price) => void, + setClientSetting: (string, boolean | string | Price) => void, + clearCache: () => Promise, + getThemes: () => void, + daemonSettings: DaemonSettings, + showNsfw: boolean, + instantPurchaseEnabled: boolean, + instantPurchaseMax: Price, + showUnavailable: boolean, + currentTheme: string, + themes: Array, + automaticDarkModeEnabled: boolean, +}; + +type State = { + clearingCache: boolean, +}; + +class SettingsPage extends React.PureComponent { + constructor(props: Props) { super(props); this.state = { clearingCache: false, }; - this.onAutomaticDarkModeChange = this.onAutomaticDarkModeChange.bind(this); + (this: any).onDownloadDirChange = this.onDownloadDirChange.bind(this); + (this: any).onKeyFeeChange = this.onKeyFeeChange.bind(this); + (this: any).onInstantPurchaseMaxChange = this.onInstantPurchaseMaxChange.bind(this); + (this: any).onShowNsfwChange = this.onShowNsfwChange.bind(this); + (this: any).onShowUnavailableChange = this.onShowUnavailableChange.bind(this); + (this: any).onShareDataChange = this.onShareDataChange.bind(this); + (this: any).onThemeChange = this.onThemeChange.bind(this); + (this: any).onAutomaticDarkModeChange = this.onAutomaticDarkModeChange.bind(this); + (this: any).clearCache = this.clearCache.bind(this); + // (this: any).onLanguageChange = this.onLanguageChange.bind(this) + } + + componentDidMount() { + this.props.getThemes(); + } + + onRunOnStartChange(event: SyntheticInputEvent<*>) { + this.setDaemonSetting('run_on_startup', event.target.checked); + } + + onShareDataChange(event: SyntheticInputEvent<*>) { + this.setDaemonSetting('share_usage_data', event.target.checked); + } + + onDownloadDirChange(newDirectory: string) { + this.setDaemonSetting('download_directory', newDirectory); + } + + onKeyFeeChange(newValue: Price) { + this.setDaemonSetting('max_key_fee', newValue); + } + + onKeyFeeDisableChange(isDisabled: boolean) { + this.setDaemonSetting('disable_max_key_fee', isDisabled); + } + + onThemeChange(event: SyntheticInputEvent<*>) { + const { value } = event.target; + + if (value === 'dark') { + this.onAutomaticDarkModeChange(false); + } + + this.props.setClientSetting(settings.THEME, value); + } + + onAutomaticDarkModeChange(value: boolean) { + this.props.setClientSetting(settings.AUTOMATIC_DARK_MODE_ENABLED, value); + } + + onInstantPurchaseEnabledChange(enabled: boolean) { + this.props.setClientSetting(settings.INSTANT_PURCHASE_ENABLED, enabled); + } + + onInstantPurchaseMaxChange(newValue: Price) { + this.props.setClientSetting(settings.INSTANT_PURCHASE_MAX, newValue); + } + + onShowNsfwChange(event: SyntheticInputEvent<*>) { + this.props.setClientSetting(settings.SHOW_NSFW, event.target.checked); + } + + onShowUnavailableChange(event: SyntheticInputEvent<*>) { + this.props.setClientSetting(settings.SHOW_UNAVAILABLE, event.target.checked); + } + + setDaemonSetting(name: string, value: boolean | string | Price) { + this.props.setDaemonSetting(name, value); } clearCache() { @@ -26,343 +123,205 @@ class SettingsPage extends React.PureComponent { this.setState({ clearingCache: false }); window.location.href = 'index.html'; }; - const clear = () => this.props.clearCache().then(success.bind(this)); + const clear = () => this.props.clearCache().then(success); setTimeout(clear, 1000, { once: true }); } - setDaemonSetting(name, value) { - this.props.setDaemonSetting(name, value); - } - - onRunOnStartChange(event) { - this.setDaemonSetting('run_on_startup', event.target.checked); - } - - onShareDataChange(event) { - this.setDaemonSetting('share_usage_data', event.target.checked); - } - - onDownloadDirChange(event) { - this.setDaemonSetting('download_directory', event.target.value); - } - - onKeyFeeChange(newValue) { - const setting = newValue; - - // this is stupid and should be fixed... somewhere - if (setting && (setting.amount === undefined || setting.amount === null)) { - setting.amount = 0; - } - - this.setDaemonSetting('max_key_fee', setting); - } - - onKeyFeeDisableChange(isDisabled) { - this.setDaemonSetting('disable_max_key_fee', isDisabled); - } - - onThemeChange(event) { - const { value } = event.target; - - if (value === 'dark') { - this.onAutomaticDarkModeChange(false); - } - - this.props.setClientSetting(settings.THEME, value); - } - - onAutomaticDarkModeChange(value) { - this.props.setClientSetting(settings.AUTOMATIC_DARK_MODE_ENABLED, value); - } - - onInstantPurchaseEnabledChange(enabled) { - this.props.setClientSetting(settings.INSTANT_PURCHASE_ENABLED, enabled); - } - - onInstantPurchaseMaxChange(newValue) { - this.props.setClientSetting(settings.INSTANT_PURCHASE_MAX, newValue); - } - - // onMaxUploadPrefChange(isLimited) { - // if (!isLimited) { - // this.setDaemonSetting("max_upload", 0.0); - // } - // this.setState({ - // isMaxUpload: isLimited, - // }); - // } - // - // onMaxUploadFieldChange(event) { - // this.setDaemonSetting("max_upload", Number(event.target.value)); - // } - // - // onMaxDownloadPrefChange(isLimited) { - // if (!isLimited) { - // this.setDaemonSetting("max_download", 0.0); - // } - // this.setState({ - // isMaxDownload: isLimited, - // }); - // } - // - // onMaxDownloadFieldChange(event) { - // this.setDaemonSetting("max_download", Number(event.target.value)); - // } - - onShowNsfwChange(event) { - this.props.setClientSetting(settings.SHOW_NSFW, event.target.checked); - } - - onLanguageChange(e) { - this.props.changeLanguage(e.target.value); - this.forceUpdate(); - } - - onShowUnavailableChange(event) { - this.props.setClientSetting(settings.SHOW_UNAVAILABLE, event.target.checked); - } - - componentWillMount() { - this.props.getThemes(); - } - - componentDidMount() {} - render() { const { daemonSettings, - language, - languages, showNsfw, instantPurchaseEnabled, instantPurchaseMax, showUnavailable, - theme, + currentTheme, themes, automaticDarkModeEnabled, } = this.props; - if (!daemonSettings || Object.keys(daemonSettings).length === 0) { - return ( -
- {__('Failed to load settings.')} -
- ); - } + const noDaemonSettings = !daemonSettings || Object.keys(daemonSettings).length === 0; return ( -
- - {/* -
-
-

{__("Language")}

-
-
-
- - - {Object.keys(languages).map(dLang => - - )} - -
-
-
*/} -
-
-

{__('Download Directory')}

-
-
- -
-
-
-
-

{__('Max Purchase Price')}

-
-
- { - this.onKeyFeeDisableChange(true); - }} - defaultChecked={daemonSettings.disable_max_key_fee} - label={__('No Limit')} - /> -
- { - this.onKeyFeeDisableChange(false); - }} - defaultChecked={!daemonSettings.disable_max_key_fee} - label={daemonSettings.disable_max_key_fee ? __('Choose limit') : __('Limit to')} + + {noDaemonSettings ? ( +
+
{__('Failed to load settings.')}
+
+ ) : ( + +
+
{__('Download Directory')}
+ {__('LBRY downloads will be saved here.')} + - {!daemonSettings.disable_max_key_fee && ( +
+
+
{__('Max Purchase Price')}
+ + {__( + 'This will prevent you from purchasing any content over a certain cost, as a safety measure.' + )} + +
+ { + this.onKeyFeeDisableChange(true); + }} + /> + { + this.onKeyFeeDisableChange(false); + }} + checked={!daemonSettings.disable_max_key_fee} + postfix={__('Choose limit')} + /> - )} -
-
- {__( - 'This will prevent you from purchasing any content over this cost, as a safety measure.' - )} -
-
-
+
+
-
-
-

{__('Purchase Confirmations')}

-
-
- { - this.onInstantPurchaseEnabledChange(false); - }} - /> -
- { - this.onInstantPurchaseEnabledChange(true); - }} - /> - {instantPurchaseEnabled && ( - this.onInstantPurchaseMaxChange(val)} - defaultValue={instantPurchaseMax} +
+
{__('Purchase Confirmations')}
+
+ {__( + "When this option is chosen, LBRY won't ask you to confirm downloads below your chosen price." + )} +
+
+ { + this.onInstantPurchaseEnabledChange(false); + }} /> - )} -
-
- When this option is chosen, LBRY won't ask you to confirm downloads below the given - price. -
-
-
-
-
-

{__('Content')}

-
-
- - -
-
+ { + this.onInstantPurchaseEnabledChange(true); + }} + /> + +
+
-
-
-

{__('Share Diagnostic Data')}

-
-
- -
-
- -
-
-

{__('Theme')}

-
-
- - {themes.map((theme, index) => ( - - ))} - - - this.onAutomaticDarkModeChange(e.target.checked)} - checked={automaticDarkModeEnabled} - label={__('Automatic dark mode (9pm to 8am)')} - /> -
-
- -
-
-

{__('Application Cache')}

-
-
-

- +

{__('Content Settings')}
+ -

-
-
- + +
+ +
+
{__('Share Diagnostic Data')}
+
+ +
+
+ + { + // Hiding this for now until we update the dark mode styles + //
+ //
{__('Theme')}
+ // + // {themes.map(theme => ( + // + // ))} + // + // + // this.onAutomaticDarkModeChange(e.target.checked)} + // checked={automaticDarkModeEnabled} + // postfix={__('Automatic dark mode (9pm to 8am)')} + // /> + //
+ } + +
+
{__('Application Cache')}
+ + {__("This will delete your subscriptions, and clar the app's cache")} + +
+
+
+
+ )} + ); } } diff --git a/src/renderer/page/show/view.jsx b/src/renderer/page/show/view.jsx index 65799a7ee..acfae0bed 100644 --- a/src/renderer/page/show/view.jsx +++ b/src/renderer/page/show/view.jsx @@ -1,16 +1,25 @@ +// @flow import React from 'react'; -import { BusyMessage } from 'component/common'; +import BusyIndicator from 'component/common/busy-indicator'; import ChannelPage from 'page/channel'; import FilePage from 'page/file'; +import Page from 'component/page'; -class ShowPage extends React.PureComponent { - componentWillMount() { +type Props = { + isResolvingUri: boolean, + resolveUri: string => void, + uri: string, + claim: { name: string }, +}; + +class ShowPage extends React.PureComponent { + componentDidMount() { const { isResolvingUri, resolveUri, uri } = this.props; if (!isResolvingUri) resolveUri(uri); } - componentWillReceiveProps(nextProps) { + componentWillReceiveProps(nextProps: Props) { const { isResolvingUri, resolveUri, claim, uri } = nextProps; if (!isResolvingUri && claim === undefined && uri) { @@ -25,20 +34,18 @@ class ShowPage extends React.PureComponent { if ((isResolvingUri && !claim) || !claim) { innerContent = ( -
-
-
-

{uri}

+ +
+

{uri}

+
+ {isResolvingUri && } + {claim === null && + !isResolvingUri && ( + {__("There's nothing at this location.")} + )}
-
-
- {isResolvingUri && } - {claim === null && - !isResolvingUri && ( - {__("There's nothing at this location.")} - )} -
-
+
+ ); } else if (claim && claim.name.length && claim.name[0] === '@') { innerContent = ; @@ -46,7 +53,7 @@ class ShowPage extends React.PureComponent { innerContent = ; } - return
{innerContent}
; + return innerContent; } } diff --git a/src/renderer/page/subscriptions/view.jsx b/src/renderer/page/subscriptions/view.jsx index 8f0e56840..27f3fac45 100644 --- a/src/renderer/page/subscriptions/view.jsx +++ b/src/renderer/page/subscriptions/view.jsx @@ -1,10 +1,10 @@ // @flow import React from 'react'; -import SubHeader from 'component/subHeader'; -import { BusyMessage } from 'component/common.js'; -import { FeaturedCategory } from 'page/discover/view'; +import Page from 'component/page'; +import CategoryList from 'component/common/category-list'; import type { Subscription } from 'redux/reducers/subscriptions'; import * as NOTIFICATION_TYPES from 'constants/notification_types'; +import Button from 'component/button'; type SavedSubscriptions = Array; @@ -75,14 +75,13 @@ export default class extends React.PureComponent { (subscriptions.length !== savedSubscriptions.length || someClaimsNotLoaded); return ( -
- + {!savedSubscriptions.length && ( - {__("You haven't subscribed to any channels yet")} - )} - {fetchingSubscriptions && ( -
- +
+ {__("It looks like you aren't subscribed to any channels yet.")} +
+
)} {!!savedSubscriptions.length && ( @@ -97,7 +96,7 @@ export default class extends React.PureComponent { } return ( - { })}
)} -
+ ); } } diff --git a/src/renderer/page/transactionHistory/view.jsx b/src/renderer/page/transactionHistory/view.jsx index 562da6aa5..62d9b394f 100644 --- a/src/renderer/page/transactionHistory/view.jsx +++ b/src/renderer/page/transactionHistory/view.jsx @@ -1,7 +1,7 @@ import React from 'react'; -import { BusyMessage } from 'component/common'; -import SubHeader from 'component/subHeader'; +import BusyIndicator from 'component/common/busy-indicator'; import TransactionList from 'component/transactionList'; +import Page from 'component/page'; class TransactionHistoryPage extends React.PureComponent { componentWillMount() { @@ -12,30 +12,29 @@ class TransactionHistoryPage extends React.PureComponent { const { fetchingTransactions, transactions } = this.props; return ( -
- -
+ +

{__('Transaction History')}

-
- {fetchingTransactions && !transactions.length ? ( - - ) : ( - '' - )} - {transactions && transactions.length ? ( - - ) : ( - '' - )} -
+ {fetchingTransactions && !transactions.length ? ( +
+ +
+ ) : ( + '' + )} + {transactions && transactions.length ? ( + + ) : ( + '' + )}
-
+ ); } } diff --git a/src/renderer/page/wallet/view.jsx b/src/renderer/page/wallet/view.jsx index b98bb80f9..683ba03e7 100644 --- a/src/renderer/page/wallet/view.jsx +++ b/src/renderer/page/wallet/view.jsx @@ -1,18 +1,19 @@ import React from 'react'; -import SubHeader from 'component/subHeader'; import WalletBalance from 'component/walletBalance'; import RewardSummary from 'component/rewardSummary'; import TransactionListRecent from 'component/transactionListRecent'; +import WalletAddress from 'component/walletAddress'; +import Page from 'component/page'; -const WalletPage = props => ( -
- -
+const WalletPage = () => ( + +
+ -
+ ); export default WalletPage; diff --git a/src/renderer/redux/actions/content.js b/src/renderer/redux/actions/content.js index 2fdffc677..afa1ad2ef 100644 --- a/src/renderer/redux/actions/content.js +++ b/src/renderer/redux/actions/content.js @@ -526,24 +526,6 @@ export function doCreateChannel(name, amount) { }; } -export function doPublish(params) { - return dispatch => - new Promise((resolve, reject) => { - const success = claim => { - resolve(claim); - - if (claim === true) dispatch(doFetchClaimListMine()); - else - setTimeout(() => dispatch(doFetchClaimListMine()), 20000, { - once: true, - }); - }; - const failure = err => reject(err); - - Lbry.publishDeprecated(params, null, success, failure); - }); -} - export function doAbandonClaim(txid, nout) { return (dispatch, getState) => { const state = getState(); diff --git a/src/renderer/redux/actions/publish.js b/src/renderer/redux/actions/publish.js new file mode 100644 index 000000000..ba93acb2b --- /dev/null +++ b/src/renderer/redux/actions/publish.js @@ -0,0 +1,181 @@ +// @flow +import Lbry from 'lbry'; +import * as ACTIONS from 'constants/action_types'; +import * as MODALS from 'constants/modal_types'; +import { selectMyClaimsWithoutChannels } from 'redux/selectors/claims'; +import { selectPendingPublishes } from 'redux/selectors/publish'; +import { doOpenModal } from 'redux/actions/app'; +import type { + UpdatePublishFormData, + UpdatePublishFormAction, + PublishParams, +} from 'redux/reducers/publish'; +import { CHANNEL_NEW, CHANNEL_ANONYMOUS } from 'constants/claim'; + +type Action = UpdatePublishFormAction | { type: ACTIONS.CLEAR_PUBLISH }; +type PromiseAction = Promise; +type Dispatch = (action: Action | PromiseAction | Array) => any; +type ThunkAction = (dispatch: Dispatch) => any; +type GetState = () => {}; + +export const doClearPublish = () => (dispatch: Dispatch): Action => + dispatch({ type: ACTIONS.CLEAR_PUBLISH }); + +export const doUpdatePublishForm = (publishFormValue: UpdatePublishFormData) => ( + dispatch: Dispatch +): UpdatePublishFormAction => + dispatch({ + type: ACTIONS.UPDATE_PUBLISH_FORM, + data: { ...publishFormValue }, + }); + +export const doPrepareEdit = (claim: any) => (dispatch: Dispatch) => { + const { name, amount, channel_name: channelName, value: { stream: { metadata } } } = claim; + const { + author, + description, + fee, + language, + license, + licenseUrl, + nsfw, + thumbnail, + title, + } = metadata; + + const publishData = { + name, + channel: channelName, + bid: amount, + price: { amount: fee.amount, currency: fee.currency }, + contentIsFree: !fee.amount, + author, + description, + fee, + language, + license, + licenseUrl, + nsfw, + thumbnail, + title, + }; + + dispatch({ type: ACTIONS.DO_PREPARE_EDIT, data: publishData }); +}; + +export const doPublish = (params: PublishParams): ThunkAction => { + const { + name, + bid, + filePath: file_path, + description, + language, + license, + licenseUrl, + thumbnail, + nsfw, + channel, + title, + contentIsFree, + price, + uri, + } = params; + + const channelName = channel === CHANNEL_ANONYMOUS || channel === CHANNEL_NEW ? '' : channel; + const fee = contentIsFree || !price.amount ? undefined : { ...price }; + + const metadata = { + title, + nsfw, + license, + licenseUrl, + language, + thumbnail, + }; + + if (fee) { + metadata.fee = fee; + } + + if (description) { + metadata.description = description; + } + + const publishPayload = { + file_path, + name, + channel_name: channelName, + bid, + metadata, + }; + + return (dispatch: Dispatch) => { + dispatch({ type: ACTIONS.PUBLISH_START }); + + const success = () => { + dispatch({ + type: ACTIONS.PUBLISH_SUCCESS, + data: { pendingPublish: publishPayload }, + }); + dispatch(doOpenModal(MODALS.PUBLISH, { uri })); + }; + + const failure = error => { + dispatch({ type: ACTIONS.PUBLISH_FAIL }); + dispatch(doOpenModal(MODALS.ERROR, { error: error.message })); + }; + + return Lbry.publish(publishPayload).then(success, failure); + }; +}; + +// Calls claim_list_mine until any pending publishes are confirmed +export const doCheckPendingPublishes = () => { + return (dispatch: Dispatch, getState: GetState) => { + const state = getState(); + const pendingPublishes = selectPendingPublishes(state); + const myClaims = selectMyClaimsWithoutChannels(state); + + let publishCheckInterval; + + const checkFileList = () => { + Lbry.claim_list_mine().then(claims => { + const claimsWithoutChannels = claims.filter(claim => !claim.name.match(/^@/)); + if (myClaims.length !== claimsWithoutChannels.length) { + const pendingPublishMap = {}; + pendingPublishes.forEach(({ name }) => { + pendingPublishMap[name] = name; + }); + + claims.forEach(claim => { + if (pendingPublishMap[claim.name]) { + dispatch({ + type: ACTIONS.REMOVE_PENDING_PUBLISH, + data: { + name: claim.name, + }, + }); + dispatch({ + type: ACTIONS.FETCH_CLAIM_LIST_MINE_COMPLETED, + data: { + claims, + }, + }); + + delete pendingPublishMap[claim.name]; + } + }); + + clearInterval(publishCheckInterval); + } + }); + }; + + if (pendingPublishes.length) { + checkFileList(); + publishCheckInterval = setInterval(() => { + checkFileList(); + }, 10000); + } + }; +}; diff --git a/src/renderer/redux/actions/search.js b/src/renderer/redux/actions/search.js index b4b12cd57..3aac1bf09 100644 --- a/src/renderer/redux/actions/search.js +++ b/src/renderer/redux/actions/search.js @@ -1,67 +1,176 @@ import * as ACTIONS from 'constants/action_types'; -import { buildURI } from 'lbryURI'; +import * as SEARCH_TYPES from 'constants/search'; +import { normalizeURI, buildURI, parseURI } from 'lbryURI'; import { doResolveUri } from 'redux/actions/content'; import { doNavigate } from 'redux/actions/navigation'; import { selectCurrentPage } from 'redux/selectors/navigation'; +import { makeSelectSearchUris } from 'redux/selectors/search'; import batchActions from 'util/batchActions'; +import handleFetchResponse from 'util/handle-fetch'; -// eslint-disable-next-line import/prefer-default-export -export function doSearch(rawQuery) { - return (dispatch, getState) => { - const state = getState(); - const page = selectCurrentPage(state); - - const query = rawQuery.replace(/^lbry:\/\//i, ''); - - if (!query) { - dispatch({ - type: ACTIONS.SEARCH_CANCELLED, - }); - return; - } +export const doSearch = rawQuery => (dispatch, getState) => { + const state = getState(); + const query = rawQuery.replace(/^lbry:\/\//i, ''); + if (!query) { dispatch({ - type: ACTIONS.SEARCH_STARTED, - data: { query }, + type: ACTIONS.SEARCH_FAIL, }); + return; + } - if (page !== 'search') { - dispatch(doNavigate('search', { query })); - } else { - fetch(`https://lighthouse.lbry.io/search?s=${query}`) - .then( - response => - response.status === 200 - ? Promise.resolve(response.json()) - : Promise.reject(new Error(response.statusText)) - ) - .then(data => { - const uris = []; - const actions = []; + // If we have already searched for something, we don't need to do anything + const urisForQuery = makeSelectSearchUris(query)(state); + if (urisForQuery && !!urisForQuery.length) { + return; + } - data.forEach(result => { - const uri = buildURI({ - claimName: result.name, - claimId: result.claimId, - }); - actions.push(doResolveUri(uri)); - uris.push(uri); - }); + dispatch({ + type: ACTIONS.SEARCH_START, + }); - actions.push({ - type: ACTIONS.SEARCH_COMPLETED, - data: { - query, - uris, - }, - }); - dispatch(batchActions(...actions)); - }) - .catch(() => { - dispatch({ - type: ACTIONS.SEARCH_CANCELLED, - }); + // If the user is on the file page with a pre-populated uri and they select + // the search option without typing anything, searchQuery will be empty + // We need to populate it so the input is filled on the search page + if (!state.search.searchQuery) { + dispatch({ + type: ACTIONS.UPDATE_SEARCH_QUERY, + data: { searchQuery: query }, + }); + } + + fetch(`https://lighthouse.lbry.io/search?s=${query}`) + .then(handleFetchResponse) + .then(data => { + const uris = []; + const actions = []; + + data.forEach(result => { + const uri = buildURI({ + claimName: result.name, + claimId: result.claimId, }); - } + actions.push(doResolveUri(uri)); + uris.push(uri); + }); + + actions.push({ + type: ACTIONS.SEARCH_SUCCESS, + data: { + query, + uris, + }, + }); + dispatch(batchActions(...actions)); + }) + .catch(() => { + dispatch({ + type: ACTIONS.SEARCH_FAIL, + }); + }); +}; + +export const doUpdateSearchQuery = (query: string, shouldSkipSuggestions: ?boolean) => dispatch => { + dispatch({ + type: ACTIONS.UPDATE_SEARCH_QUERY, + data: { query }, + }); + + // Don't fetch new suggestions if the user just added a space + if (!query.endsWith(' ') || !shouldSkipSuggestions) { + dispatch(getSearchSuggestions(query)); + } +}; + +export const getSearchSuggestions = (value: string) => dispatch => { + const query = value.trim(); + + const isPrefix = () => { + return query === '@' || query === 'lbry:' || query === 'lbry:/' || query === 'lbry://'; }; -} + + if (!query || isPrefix()) { + dispatch({ + type: ACTIONS.UPDATE_SEARCH_SUGGESTIONS, + data: { suggestions: [] }, + }); + return; + } + + let suggestions = []; + try { + // If the user is about to manually add the claim id ignore it until they + // actually add one. This would hardly ever happen, but then the search + // suggestions won't change just from adding a '#' after a uri + let uriQuery = query; + if (uriQuery.endsWith('#')) { + uriQuery = uriQuery.slice(0, -1); + } + + const uri = normalizeURI(uriQuery); + const { claimName, isChannel } = parseURI(uri); + + suggestions.push( + { + value: uri, + shorthand: isChannel ? claimName.slice(1) : claimName, + type: isChannel ? SEARCH_TYPES.CHANNEL : SEARCH_TYPES.FILE, + }, + { + value: claimName, + type: SEARCH_TYPES.SEARCH, + } + ); + + // If it's a valid url, don't fetch any extra search results + return dispatch({ + type: ACTIONS.UPDATE_SEARCH_SUGGESTIONS, + data: { suggestions }, + }); + } catch (e) { + suggestions.push({ + value: query, + type: SEARCH_TYPES.SEARCH, + }); + } + + // Populate the current search query suggestion before fetching results + dispatch({ + type: ACTIONS.UPDATE_SEARCH_SUGGESTIONS, + data: { suggestions }, + }); + + // strip out any basic stuff for more accurate search results + let searchValue = value.replace(/lbry:\/\//g, '').replace(/-/g, ' '); + if (searchValue.includes('#')) { + // This should probably be more robust, but I think it's fine for now + // Remove everything after # to get rid of the claim id + searchValue = searchValue.substring(0, searchValue.indexOf('#')); + } + + return fetch(`https://lighthouse.lbry.io/autocomplete?s=${searchValue}`) + .then(handleFetchResponse) + .then(apiSuggestions => { + const formattedSuggestions = apiSuggestions.slice(0, 6).map(suggestion => { + // This will need to be more robust when the api starts returning lbry uris + const isChannel = suggestion.startsWith('@'); + const suggestionObj = { + value: isChannel ? `lbry://${suggestion}` : suggestion, + shorthand: isChannel ? suggestion.slice(1) : '', + type: isChannel ? 'channel' : 'search', + }; + + return suggestionObj; + }); + + suggestions = suggestions.concat(formattedSuggestions); + dispatch({ + type: ACTIONS.UPDATE_SEARCH_SUGGESTIONS, + data: { suggestions }, + }); + }) + .catch(() => { + // If the fetch fails, do nothing + // Basic search suggestions are already populated at this point + }); +}; diff --git a/src/renderer/redux/actions/video.js b/src/renderer/redux/actions/video.js deleted file mode 100644 index 4ede45bd0..000000000 --- a/src/renderer/redux/actions/video.js +++ /dev/null @@ -1,10 +0,0 @@ -// @flow -import * as actions from 'constants/action_types'; -import type { Dispatch } from 'redux/reducers/video'; - -// eslint-disable-next-line import/prefer-default-export -export const setVideoPause = (data: boolean) => (dispatch: Dispatch) => - dispatch({ - type: actions.SET_VIDEO_PAUSE, - data, - }); diff --git a/src/renderer/redux/actions/wallet.js b/src/renderer/redux/actions/wallet.js index 6422b6315..a89ca9273 100644 --- a/src/renderer/redux/actions/wallet.js +++ b/src/renderer/redux/actions/wallet.js @@ -3,22 +3,21 @@ import * as MODALS from 'constants/modal_types'; import Lbry from 'lbry'; import { doOpenModal, doShowSnackBar } from 'redux/actions/app'; import { doNavigate } from 'redux/actions/navigation'; -import { - selectBalance, - selectDraftTransaction, - selectDraftTransactionAmount, -} from 'redux/selectors/wallet'; +import { selectBalance } from 'redux/selectors/wallet'; export function doUpdateBalance() { - return dispatch => { - Lbry.wallet_balance().then(balance => - dispatch({ - type: ACTIONS.UPDATE_BALANCE, - data: { - balance, - }, - }) - ); + return (dispatch, getState) => { + const { wallet: { balance: balanceInStore } } = getState(); + Lbry.wallet_balance().then(balance => { + if (balanceInStore !== balance) { + return dispatch({ + type: ACTIONS.UPDATE_BALANCE, + data: { + balance, + }, + }); + } + }); }; } @@ -89,12 +88,10 @@ export function doCheckAddressIsMine(address) { }; } -export function doSendDraftTransaction() { +export function doSendDraftTransaction({ amount, address }) { return (dispatch, getState) => { const state = getState(); - const draftTx = selectDraftTransaction(state); const balance = selectBalance(state); - const amount = selectDraftTransactionAmount(state); if (balance - amount <= 0) { dispatch(doOpenModal(MODALS.INSUFFICIENT_CREDITS)); @@ -135,26 +132,12 @@ export function doSendDraftTransaction() { }; Lbry.wallet_send({ - amount: draftTx.amount, - address: draftTx.address, + amount, + address, }).then(successCallback, errorCallback); }; } -export function doSetDraftTransactionAmount(amount) { - return { - type: ACTIONS.SET_DRAFT_TRANSACTION_AMOUNT, - data: { amount }, - }; -} - -export function doSetDraftTransactionAddress(address) { - return { - type: ACTIONS.SET_DRAFT_TRANSACTION_ADDRESS, - data: { address }, - }; -} - export function doSendSupport(amount, claimId, uri) { return (dispatch, getState) => { const state = getState(); diff --git a/src/renderer/redux/reducers/app.js b/src/renderer/redux/reducers/app.js index fa13a325f..ac8b8f5fb 100644 --- a/src/renderer/redux/reducers/app.js +++ b/src/renderer/redux/reducers/app.js @@ -138,9 +138,8 @@ reducers[ACTIONS.SET_PLAYING_URI] = (state, action) => { return Object.assign({}, state, { modalsAllowed: true, }); - } else { - return state; } + return state; }; reducers[ACTIONS.UPDATE_VERSION] = (state, action) => @@ -162,12 +161,11 @@ reducers[ACTIONS.CHECK_UPGRADE_SUBSCRIBE] = (state, action) => reducers[ACTIONS.OPEN_MODAL] = (state, action) => { if (!state.modalsAllowed) { return state; - } else { - return Object.assign({}, state, { - modal: action.data.modal, - modalProps: action.data.modalProps || {}, - }); } + return Object.assign({}, state, { + modal: action.data.modal, + modalProps: action.data.modalProps || {}, + }); }; reducers[ACTIONS.CLOSE_MODAL] = state => Object.assign({}, state, { @@ -234,6 +232,12 @@ reducers[ACTIONS.VOLUME_CHANGED] = (state, action) => volume: action.data.volume, }); +reducers[ACTIONS.HISTORY_NAVIGATE] = state => + Object.assign({}, state, { + modal: undefined, + modalProps: {}, + }); + export default function reducer(state: AppState = defaultState, action: any) { const handler = reducers[action.type]; if (handler) return handler(state, action); diff --git a/src/renderer/redux/reducers/content.js b/src/renderer/redux/reducers/content.js index e5242b599..e9cbdff99 100644 --- a/src/renderer/redux/reducers/content.js +++ b/src/renderer/redux/reducers/content.js @@ -3,6 +3,7 @@ import * as ACTIONS from 'constants/action_types'; const reducers = {}; const defaultState = { playingUri: null, + currentlyIsPlaying: false, rewardedContentClaimIds: [], channelClaimCounts: {}, }; diff --git a/src/renderer/redux/reducers/publish.js b/src/renderer/redux/reducers/publish.js new file mode 100644 index 000000000..195e8c6cf --- /dev/null +++ b/src/renderer/redux/reducers/publish.js @@ -0,0 +1,167 @@ +// @flow +import { handleActions } from 'util/redux-utils'; +import { buildURI } from 'lbryURI'; +import * as ACTIONS from 'constants/action_types'; +import { CHANNEL_ANONYMOUS } from 'constants/claim'; + +type PublishState = { + editingURI: ?string, + filePath: ?string, + contentIsFree: boolean, + price: { + amount: number, + currency: string, + }, + title: string, + thumbnail: string, + description: string, + language: string, + tosAccepted: boolean, + channel: string, + name: string, + nameError: ?string, + bid: number, + bidError: ?string, + otherLicenseDescription: string, + licenseUrl: string, + copyrightNotice: string, + pendingPublishes: Array, +}; + +export type UpdatePublishFormData = { + filePath?: string, + contentIsFree?: boolean, + price?: { + amount: number, + currency: string, + }, + title?: string, + thumbnail?: string, + description?: string, + language?: string, + tosAccepted?: boolean, + channel?: string, + name?: string, + nameError?: string, + bid?: number, + bidError?: string, + otherLicenseDescription?: string, + licenseUrl?: string, + copyrightNotice?: string, +}; + +export type UpdatePublishFormAction = { + type: ACTIONS.UPDATE_PUBLISH_FORM | ACTIONS.DO_PREPARE_EDIT, + data: UpdatePublishFormData, +}; + +export type PublishParams = { + name: string, + bid: number, + filePath: string, + description: ?string, + language: string, + publishingLicense: string, + publishingLicenseUrl: string, + thumbnail: ?string, + nsfw: boolean, + channel: string, + title: string, + contentIsFree: boolean, + uri: string, + license: ?string, + licenseUrl: ?string, + price: { + currency: string, + amount: number, + }, +}; + +const defaultState: PublishState = { + editingURI: undefined, + filePath: undefined, + contentIsFree: true, + price: { + amount: 1, + currency: 'LBC', + }, + title: '', + thumbnail: '', + description: '', + language: 'en', + nsfw: false, + channel: CHANNEL_ANONYMOUS, + tosAccepted: false, + name: '', + nameError: undefined, + bid: 0.1, + bidError: undefined, + licenseType: 'None', + otherLicenseDescription: '', + licenseUrl: '', + copyrightNotice: 'All rights reserved', + publishing: false, + publishSuccess: false, + publishError: undefined, + pendingPublishes: [], +}; + +export default handleActions( + { + [ACTIONS.UPDATE_PUBLISH_FORM]: (state, action): PublishState => { + const { data } = action; + return { + ...state, + ...data, + }; + }, + [ACTIONS.CLEAR_PUBLISH]: (state: PublishState): PublishState => { + const { pendingPublishes } = state; + return { ...defaultState, pendingPublishes }; + }, + [ACTIONS.PUBLISH_START]: (state: PublishState): PublishState => ({ + ...state, + publishing: true, + }), + [ACTIONS.PUBLISH_FAIL]: (state: PublishState): PublishState => ({ + ...state, + publishing: false, + }), + [ACTIONS.PUBLISH_SUCCESS]: (state: PublishState, action): PublishState => { + const { pendingPublish } = action.data; + + const newPendingPublishes = state.pendingPublishes.slice(); + newPendingPublishes.push(pendingPublish); + + return { + ...state, + publishing: false, + pendingPublishes: newPendingPublishes, + }; + }, + [ACTIONS.REMOVE_PENDING_PUBLISH]: (state: PublishState, action) => { + const { name } = action.data; + const pendingPublishes = state.pendingPublishes.filter(publish => publish.name !== name); + return { + ...state, + pendingPublishes, + }; + }, + [ACTIONS.DO_PREPARE_EDIT]: (state: PublishState, action) => { + const { ...publishData } = action.data; + const { channel, name } = publishData; + + const uri = buildURI({ + channelName: channel, + contentName: name, + }); + + return { + ...defaultState, + editingURI: uri, + ...publishData, + }; + }, + }, + defaultState +); diff --git a/src/renderer/redux/reducers/search.js b/src/renderer/redux/reducers/search.js index b3a0754e4..7a2a92ca1 100644 --- a/src/renderer/redux/reducers/search.js +++ b/src/renderer/redux/reducers/search.js @@ -1,32 +1,103 @@ +// @flow import * as ACTIONS from 'constants/action_types'; +import { handleActions } from 'util/redux-utils'; -const reducers = {}; -const defaultState = { +type SearchSuccess = { + type: ACTIONS.SEARCH_SUCCESS, + data: { + query: string, + uris: Array, + }, +}; + +type UpdateSearchQuery = { + type: ACTIONS.UPDATE_SEARCH_QUERY, + data: { + query: string, + }, +}; + +type SearchSuggestion = { + value: string, + shorthand: string, + type: string, +}; + +type UpdateSearchSuggestions = { + type: ACTIONS.UPDATE_SEARCH_SUGGESTIONS, + data: { + suggestions: Array, + }, +}; + +type SearchState = { + isActive: boolean, + searchQuery: string, + suggestions: Array, urisByQuery: {}, - searching: false, }; -reducers[ACTIONS.SEARCH_STARTED] = state => - Object.assign({}, state, { - searching: true, - }); - -reducers[ACTIONS.SEARCH_COMPLETED] = (state, action) => { - const { query, uris } = action.data; - - return Object.assign({}, state, { - searching: false, - urisByQuery: Object.assign({}, state.urisByQuery, { [query]: uris }), - }); +const defaultState = { + isActive: false, + searchQuery: '', // needs to be an empty string for input focusing + suggestions: [], + urisByQuery: {}, }; -reducers[ACTIONS.SEARCH_CANCELLED] = state => - Object.assign({}, state, { - searching: false, - }); +export default handleActions( + { + [ACTIONS.SEARCH_START]: (state: SearchState): SearchState => ({ + ...state, + searching: true, + }), + [ACTIONS.SEARCH_SUCCESS]: (state: SearchState, action: SearchSuccess): SearchState => { + const { query, uris } = action.data; -export default function reducer(state = defaultState, action) { - const handler = reducers[action.type]; - if (handler) return handler(state, action); - return state; -} + return { + ...state, + searching: false, + urisByQuery: Object.assign({}, state.urisByQuery, { [query]: uris }), + }; + }, + + [ACTIONS.SEARCH_FAIL]: (state: SearchState): SearchState => ({ + ...state, + searching: false, + }), + + [ACTIONS.UPDATE_SEARCH_QUERY]: ( + state: SearchState, + action: UpdateSearchQuery + ): SearchState => ({ + ...state, + searchQuery: action.data.query, + isActive: true, + }), + + [ACTIONS.UPDATE_SEARCH_SUGGESTIONS]: ( + state: SearchState, + action: UpdateSearchSuggestions + ): SearchState => ({ + ...state, + suggestions: action.data.suggestions, + }), + + // clear the searchQuery on back/forward + // it may be populated by the page title for search/file pages + // if going home, it should be blank + [ACTIONS.HISTORY_NAVIGATE]: (state: SearchState): SearchState => ({ + ...state, + searchQuery: '', + suggestions: [], + isActive: false, + }), + // sets isActive to false so the uri will be populated correctly if the + // user is on a file page. The search query will still be present on any + // other page + [ACTIONS.CLOSE_MODAL]: (state: SearchState): SearchState => ({ + ...state, + isActive: false, + }), + }, + defaultState +); diff --git a/src/renderer/redux/reducers/settings.js b/src/renderer/redux/reducers/settings.js index 73cf69209..eecba6083 100644 --- a/src/renderer/redux/reducers/settings.js +++ b/src/renderer/redux/reducers/settings.js @@ -27,6 +27,7 @@ const defaultState = { }, isNight: false, languages: {}, + daemonSettings: {}, }; reducers[ACTIONS.DAEMON_SETTINGS_RECEIVED] = (state, action) => diff --git a/src/renderer/redux/reducers/video.js b/src/renderer/redux/reducers/video.js deleted file mode 100644 index 4025c0d77..000000000 --- a/src/renderer/redux/reducers/video.js +++ /dev/null @@ -1,25 +0,0 @@ -// @flow -import * as ACTIONS from 'constants/action_types'; -import { handleActions } from 'util/redux-utils'; - -export type VideoState = { videoPause: boolean }; - -type setVideoPause = { - type: ACTIONS.SET_VIDEO_PAUSE, - data: boolean, -}; - -export type Action = setVideoPause; -export type Dispatch = (action: Action) => any; - -const defaultState = { videoPause: false }; - -export default handleActions( - { - [ACTIONS.SET_VIDEO_PAUSE]: (state: VideoState, action: setVideoPause): VideoState => ({ - ...state, - videoPause: action.data, - }), - }, - defaultState -); diff --git a/src/renderer/redux/reducers/wallet.js b/src/renderer/redux/reducers/wallet.js index bc5761c6c..590404ce8 100644 --- a/src/renderer/redux/reducers/wallet.js +++ b/src/renderer/redux/reducers/wallet.js @@ -2,10 +2,6 @@ import * as ACTIONS from 'constants/action_types'; const reducers = {}; const receiveAddress = localStorage.getItem('receiveAddress'); -const buildDraftTransaction = () => ({ - amount: undefined, - address: undefined, -}); const defaultState = { balance: undefined, @@ -14,8 +10,8 @@ const defaultState = { fetchingTransactions: false, receiveAddress, gettingNewAddress: false, - draftTransaction: buildDraftTransaction(), sendingSupport: false, + sendingTx: false, }; reducers[ACTIONS.FETCH_TRANSACTIONS_STARTED] = state => @@ -68,51 +64,21 @@ reducers[ACTIONS.CHECK_ADDRESS_IS_MINE_COMPLETED] = state => checkingAddressOwnership: false, }); -reducers[ACTIONS.SET_DRAFT_TRANSACTION_AMOUNT] = (state, action) => { - const oldDraft = state.draftTransaction; - const newDraft = Object.assign({}, oldDraft, { - amount: parseFloat(action.data.amount), - }); - - return Object.assign({}, state, { - draftTransaction: newDraft, - }); -}; - -reducers[ACTIONS.SET_DRAFT_TRANSACTION_ADDRESS] = (state, action) => { - const oldDraft = state.draftTransaction; - const newDraft = Object.assign({}, oldDraft, { - address: action.data.address, - }); - - return Object.assign({}, state, { - draftTransaction: newDraft, - }); -}; - reducers[ACTIONS.SEND_TRANSACTION_STARTED] = state => { - const newDraftTransaction = Object.assign({}, state.draftTransaction, { - sending: true, - }); - return Object.assign({}, state, { - draftTransaction: newDraftTransaction, + sendingTx: true, }); }; reducers[ACTIONS.SEND_TRANSACTION_COMPLETED] = state => Object.assign({}, state, { - draftTransaction: buildDraftTransaction(), + sendingTx: false, }); reducers[ACTIONS.SEND_TRANSACTION_FAILED] = (state, action) => { - const newDraftTransaction = Object.assign({}, state.draftTransaction, { - sending: false, - error: action.data.error, - }); - return Object.assign({}, state, { - draftTransaction: newDraftTransaction, + sendingTx: false, + error: action.data.error, }); }; diff --git a/src/renderer/redux/selectors/claims.js b/src/renderer/redux/selectors/claims.js index 9da8a6d51..bb3c7ae04 100644 --- a/src/renderer/redux/selectors/claims.js +++ b/src/renderer/redux/selectors/claims.js @@ -6,6 +6,12 @@ const selectState = state => state.claims || {}; export const selectClaimsById = createSelector(selectState, state => state.byId || {}); +export const selectClaimById = id => + createSelector(selectClaimsById, claims => { + const claimById = claims[id]; + return claimById; + }); + export const selectClaimsByUri = createSelector(selectState, selectClaimsById, (state, byId) => { const byUri = state.claimsByUri || {}; const claims = {}; diff --git a/src/renderer/redux/selectors/file_info.js b/src/renderer/redux/selectors/file_info.js index f760bb3be..f13c0c9ae 100644 --- a/src/renderer/redux/selectors/file_info.js +++ b/src/renderer/redux/selectors/file_info.js @@ -4,6 +4,7 @@ import { selectMyClaims, } from 'redux/selectors/claims'; import { createSelector } from 'reselect'; +import { buildURI } from 'lbryURI'; export const selectState = state => state.fileInfo || {}; @@ -27,7 +28,6 @@ export const makeSelectFileInfoForUri = uri => createSelector(selectClaimsByUri, selectFileInfosByOutpoint, (claims, byOutpoint) => { const claim = claims[uri]; const outpoint = claim ? `${claim.txid}:${claim.nout}` : undefined; - return outpoint ? byOutpoint[outpoint] : undefined; }); @@ -104,3 +104,92 @@ export const selectTotalDownloadProgress = createSelector(selectDownloadingFileI if (fileInfos.length > 0) return totalProgress / fileInfos.length / 100.0; return -1; }); + +export const selectSearchDownloadUris = query => + createSelector(selectFileInfosDownloaded, fileInfos => { + if (!query || !fileInfos.length) { + return null; + } + + const queryParts = query.toLowerCase().split(' '); + const searchQueryDictionary = {}; + queryParts.forEach(subQuery => { + searchQueryDictionary[subQuery] = subQuery; + }); + + const arrayContainsQueryPart = array => { + for (let i = 0; i < array.length; i += 1) { + const subQuery = array[i]; + if (searchQueryDictionary[subQuery]) { + return true; + } + } + return false; + }; + + const downloadResultsFromQuery = []; + fileInfos.forEach(fileInfo => { + const { channel_name, claim_name, metadata } = fileInfo; + const { author, description, title } = metadata; + + if (channel_name) { + const channelName = channel_name.toLowerCase(); + const strippedOutChannelName = channelName.slice(1); // trim off the @ + if (searchQueryDictionary[channel_name] || searchQueryDictionary[strippedOutChannelName]) { + downloadResultsFromQuery.push(fileInfo); + return; + } + } + + const nameParts = claim_name.toLowerCase().split('-'); + if (arrayContainsQueryPart(nameParts)) { + downloadResultsFromQuery.push(fileInfo); + return; + } + + const titleParts = title.toLowerCase().split(' '); + if (arrayContainsQueryPart(titleParts)) { + downloadResultsFromQuery.push(fileInfo); + return; + } + + if (author) { + const authorParts = author.toLowerCase().split(' '); + if (arrayContainsQueryPart(authorParts)) { + downloadResultsFromQuery.push(fileInfo); + return; + } + } + + if (description) { + const descriptionParts = description.toLowerCase().split(' '); + if (arrayContainsQueryPart(descriptionParts)) { + downloadResultsFromQuery.push(fileInfo); + } + } + }); + + return downloadResultsFromQuery.length + ? downloadResultsFromQuery.map(fileInfo => { + const { + channel_name: channelName, + claim_id: claimId, + claim_name: claimName, + value, + metadata, + } = fileInfo; + const uriParams = {}; + + if (channelName) { + uriParams.channelName = channelName; + } + + uriParams.claimId = claimId; + uriParams.claimId = claimId; + uriParams.contentName = claimName; + + const uri = buildURI(uriParams); + return uri; + }) + : null; + }); diff --git a/src/renderer/redux/selectors/navigation.js b/src/renderer/redux/selectors/navigation.js index fdee0783d..f4acc3034 100644 --- a/src/renderer/redux/selectors/navigation.js +++ b/src/renderer/redux/selectors/navigation.js @@ -1,6 +1,5 @@ import { createSelector } from 'reselect'; -import { parseQueryParams, toQueryString } from 'util/query_params'; -import { normalizeURI } from 'lbryURI'; +import { parseQueryParams } from 'util/query_params'; export const selectState = state => state.navigation || {}; @@ -22,103 +21,6 @@ export const selectCurrentParams = createSelector(selectCurrentPath, path => { export const makeSelectCurrentParam = param => createSelector(selectCurrentParams, params => (params ? params[param] : undefined)); -export const selectHeaderLinks = createSelector(selectCurrentPage, page => { - // This contains intentional fall throughs - switch (page) { - case 'wallet': - case 'history': - case 'send': - case 'getcredits': - case 'invite': - case 'rewards': - case 'backup': - return { - wallet: __('Overview'), - getcredits: __('Get Credits'), - send: __('Send / Receive'), - rewards: __('Rewards'), - invite: __('Invites'), - history: __('History'), - }; - case 'downloaded': - case 'published': - return { - downloaded: __('Downloaded'), - published: __('Published'), - }; - case 'settings': - case 'help': - return { - settings: __('Settings'), - help: __('Help'), - }; - case 'discover': - case 'subscriptions': - return { - discover: __('Discover'), - subscriptions: __('Subscriptions'), - }; - default: - return null; - } -}); - -export const selectPageTitle = createSelector( - selectCurrentPage, - selectCurrentParams, - (page, params) => { - switch (page) { - case 'settings': - return __('Settings'); - case 'report': - return __('Report'); - case 'wallet': - return __('Wallet'); - case 'send': - return __('Send or Receive LBRY Credits'); - case 'getcredits': - return __('Get LBRY Credits'); - case 'backup': - return __('Backup Your Wallet'); - case 'rewards': - return __('Rewards'); - case 'invite': - return __('Invites'); - case 'start': - return __('Start'); - case 'publish': - return params.id ? __('Edit') : __('Publish'); - case 'help': - return __('Help'); - case 'developer': - return __('Developer'); - case 'show': { - const parts = [normalizeURI(params.uri)]; - // If the params has any keys other than "uri" - if (Object.keys(params).length > 1) { - parts.push(toQueryString(Object.assign({}, params, { uri: null }))); - } - return parts.join('?'); - } - case 'downloaded': - return __('Downloads & Purchases'); - case 'published': - return __('Publications'); - case 'search': - return params.query ? __('Search results for %s', params.query) : __('Search'); - case 'subscriptions': - return __('Your Subscriptions'); - case 'discover': - case false: - case null: - case '': - return ''; - default: - return page[0].toUpperCase() + (page.length > 0 ? page.substr(1) : ''); - } - } -); - export const selectPathAfterAuth = createSelector(selectState, state => state.pathAfterAuth); export const selectIsBackDisabled = createSelector(selectState, state => state.index === 0); @@ -128,6 +30,8 @@ export const selectIsForwardDisabled = createSelector( state => state.index === state.stack.length - 1 ); +export const selectIsHome = createSelector(selectCurrentPage, page => page === 'discover'); + export const selectHistoryIndex = createSelector(selectState, state => state.index); export const selectHistoryStack = createSelector(selectState, state => state.stack); @@ -137,3 +41,162 @@ export const selectActiveHistoryEntry = createSelector( selectState, state => state.stack[state.index] ); + +export const selectPageTitle = createSelector(selectCurrentPage, page => { + switch (page) { + default: + return ''; + } +}); + +export const selectNavLinks = createSelector( + selectCurrentPage, + selectHistoryStack, + (currentPage, historyStack) => { + const isWalletPage = page => + page === 'wallet' || + page === 'send' || + page === 'getcredits' || + page === 'rewards' || + page === 'history' || + page === 'invite'; + + const isMyLbryPage = page => + page === 'downloaded' || page === 'published' || page === 'settings'; + + const previousStack = historyStack.slice().reverse(); + + const getPreviousSubLinkPath = checkIfValidPage => { + for (let i = 0; i < previousStack.length; i += 1) { + const currentStackItem = previousStack[i]; + + // Trim off the "/" from the path + const pageInStack = currentStackItem.path.slice(1); + if (checkIfValidPage(pageInStack)) { + return currentStackItem.path; + } + } + + return undefined; + }; + + // Gets the last active sublink in a section + const getActiveSublink = category => { + if (category === 'wallet') { + const previousPath = getPreviousSubLinkPath(isWalletPage); + return previousPath || '/wallet'; + } else if (category === 'myLbry') { + const previousPath = getPreviousSubLinkPath(isMyLbryPage); + return previousPath || '/downloaded'; + } + + return undefined; + }; + + const isCurrentlyWalletPage = isWalletPage(currentPage); + const isCurrentlyMyLbryPage = isMyLbryPage(currentPage); + + const walletSubLinks = [ + { + label: 'Overview', + path: '/wallet', + active: currentPage === 'wallet', + }, + { + label: 'Send & Recieve', + path: '/send', + active: currentPage === 'send', + }, + { + label: 'Get Credits', + path: '/getcredits', + active: currentPage === 'getcredits', + }, + { + label: 'Rewards', + path: '/rewards', + active: currentPage === 'rewards', + }, + { + label: 'Invites', + path: '/invite', + active: currentPage === 'invite', + }, + { + label: 'Transactions', + path: '/history', + active: currentPage === 'history', + }, + ]; + + const myLbrySubLinks = [ + { + label: 'Downloads', + path: '/downloaded', + active: currentPage === 'downloaded', + }, + { + label: 'Publishes', + path: '/published', + active: currentPage === 'published', + }, + { + label: 'Settings', + path: '/settings', + active: currentPage === 'settings', + }, + { + label: 'Backup', + path: '/backup', + active: currentPage === 'backup', + }, + ]; + + const navLinks = { + primary: [ + { + label: 'Explore', + path: '/discover', + active: currentPage === 'discover', + icon: 'Compass', + }, + { + label: 'Subscriptions', + path: '/subscriptions', + active: currentPage === 'subscriptions', + icon: 'AtSign', + }, + ], + secondary: [ + { + label: 'Wallet', + icon: 'CreditCard', + subLinks: walletSubLinks, + path: isCurrentlyWalletPage ? '/wallet' : getActiveSublink('wallet'), + active: isWalletPage(currentPage), + }, + { + label: 'My LBRY', + icon: 'Settings', + subLinks: myLbrySubLinks, + path: isCurrentlyMyLbryPage ? '/downloaded' : getActiveSublink('myLbry'), + active: isMyLbryPage(currentPage), + }, + { + label: 'Publish', + icon: 'UploadCloud', + path: '/publish', + active: currentPage === 'publish', + }, + { + label: 'Help', + path: '/help', + active: currentPage === 'help', + icon: 'HelpCircle', + }, + ], + }; + + return navLinks; + } +); diff --git a/src/renderer/redux/selectors/publish.js b/src/renderer/redux/selectors/publish.js new file mode 100644 index 000000000..38d7c67cc --- /dev/null +++ b/src/renderer/redux/selectors/publish.js @@ -0,0 +1,26 @@ +import { createSelector } from 'reselect'; +import { parseURI } from 'lbryURI'; + +const selectState = state => state.publish || {}; + +export const selectPendingPublishes = createSelector(selectState, state => { + return state.pendingPublishes.map(pendingClaim => ({ ...pendingClaim, pending: true })) || []; +}); + +export const selectPublishFormValues = createSelector(selectState, state => { + const { pendingPublish, ...formValues } = state; + return formValues; +}); + +export const selectPendingPublish = uri => + createSelector(selectPendingPublishes, pendingPublishes => { + const { claimName, contentName } = parseURI(uri); + + if (!pendingPublishes.length) { + return null; + } + + return pendingPublishes.filter( + publish => publish.name === claimName || publish.name === contentName + )[0]; + }); diff --git a/src/renderer/redux/selectors/search.js b/src/renderer/redux/selectors/search.js index 4e49f47d8..c7e983ced 100644 --- a/src/renderer/redux/selectors/search.js +++ b/src/renderer/redux/selectors/search.js @@ -1,12 +1,12 @@ -import { - selectCurrentPage, - selectCurrentParams, - selectPageTitle, -} from 'redux/selectors/navigation'; +import { selectCurrentPage, selectCurrentParams } from 'redux/selectors/navigation'; import { createSelector } from 'reselect'; export const selectState = state => state.search || {}; +export const selectSearchValue = createSelector(selectState, state => { + return state.searchQuery; +}); + export const selectSearchQuery = createSelector( selectCurrentPage, selectCurrentParams, @@ -26,54 +26,14 @@ export const makeSelectSearchUris = query => export const selectWunderBarAddress = createSelector( selectCurrentPage, - selectPageTitle, selectSearchQuery, - (page, title, query) => (page !== 'search' ? title : query || title) -); - -export const selectWunderBarIcon = createSelector( - selectCurrentPage, selectCurrentParams, - (page, params) => { - switch (page) { - case 'auth': - return 'icon-user'; - case 'settings': - return 'icon-gear'; - case 'help': - return 'icon-question'; - case 'report': - return 'icon-file'; - case 'downloaded': - return 'icon-folder'; - case 'published': - return 'icon-folder'; - case 'history': - return 'icon-history'; - case 'send': - return 'icon-send'; - case 'rewards': - return 'icon-rocket'; - case 'invite': - return 'icon-envelope-open'; - case 'getcredits': - return 'icon-shopping-cart'; - case 'wallet': - case 'backup': - return 'icon-bank'; - case 'show': - return 'icon-file'; - case 'publish': - return params.id ? __('icon-pencil') : __('icon-upload'); - case 'developer': - return 'icon-code'; - case 'discover': - case 'search': - return 'icon-search'; - case 'subscriptions': - return 'icon-th-list'; - default: - return 'icon-file'; + (page, query, params) => { + // only populate the wunderbar address if we are on the file/channel pages + // or show the search query + if (page === 'show') { + return params.uri; } + return query; } ); diff --git a/src/renderer/redux/selectors/video.js b/src/renderer/redux/selectors/video.js deleted file mode 100644 index 62534be6b..000000000 --- a/src/renderer/redux/selectors/video.js +++ /dev/null @@ -1,6 +0,0 @@ -import { createSelector } from 'reselect'; - -const selectState = state => state.video || {}; - -// eslint-disable-next-line import/prefer-default-export -export const selectVideoPause = createSelector(selectState, state => state.videoPause); diff --git a/src/renderer/redux/selectors/wallet.js b/src/renderer/redux/selectors/wallet.js index bddedb8f4..d5fd9326d 100644 --- a/src/renderer/redux/selectors/wallet.js +++ b/src/renderer/redux/selectors/wallet.js @@ -96,26 +96,6 @@ export const selectGettingNewAddress = createSelector( state => state.gettingNewAddress ); -export const selectDraftTransaction = createSelector( - selectState, - state => state.draftTransaction || {} -); - -export const selectDraftTransactionAmount = createSelector( - selectDraftTransaction, - draft => draft.amount -); - -export const selectDraftTransactionAddress = createSelector( - selectDraftTransaction, - draft => draft.address -); - -export const selectDraftTransactionError = createSelector( - selectDraftTransaction, - draft => draft.error -); - export const selectBlocks = createSelector(selectState, state => state.blocks); export const makeSelectBlockDate = block => diff --git a/src/renderer/scss/_gui.scss b/src/renderer/scss/_gui.scss index 92b82d146..3a6bdae70 100644 --- a/src/renderer/scss/_gui.scss +++ b/src/renderer/scss/_gui.scss @@ -1,14 +1,235 @@ -@import url(https://fonts.googleapis.com/css?family=Roboto:400,400i,500,500i,700); +// Generic html styles used accross the App +// component specific styling should go in the component scss file + +@font-face { + font-family: 'metropolis-bold'; + src: url('../../../static/font/metropolis/bold.eot'); + src: url('../../../static/font/metropolis/bold.eot?#iefix') format('embedded-opentype'), + url('../../../static/font/metropolis/bold.woff') format('woff'), + url('../../../static/font/metropolis/bold.ttf') format('truetype'), + url('../../../static/font/metropolis/bold.svg#metropolis-bold') format('svg'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'metropolis-semibold'; + src: url('../../../static/font/metropolis/semibold.eot'); + src: url('../../../static/font/metropolis/semibold.eot?#iefix') format('embedded-opentype'), + url('../../../static/font/metropolis/semibold.woff') format('woff'), + url('../../../static/font/metropolis/semibold.ttf') format('truetype'), + url('../../../static/font/metropolis/semibold.svg#metropolis-semibold') format('svg'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'metropolis-medium'; + src: url('../../../static/font/metropolis/medium.eot'); + src: url('../../../static/font/metropolis/medium.eot?#iefix') format('embedded-opentype'), + url('../../../static/font/metropolis/medium.woff') format('woff'), + url('../../../static/font/metropolis/medium.ttf') format('truetype'), + url('../../../static/font/metropolis/medium.svg#metropolis-medium') format('svg'); + font-weight: normal; + font-style: normal; +} html { height: 100%; - font-size: var(--font-size); } body { + font-family: 'metropolis-semibold'; + font-weight: 400; + font-size: 16px; + line-height: 1.5; color: var(--text-color); - font-family: 'Roboto', sans-serif; - line-height: var(--font-line-height); + height: 100%; + overflow: hidden; +} + +* { + box-sizing: border-box; +} + +code { + font: 1.5em Consolas, 'Lucida Console', 'Source Sans', monospace; + background-color: var(--color-bg-alt); +} + +// Without this buttons don't have the Metropolis font +button { + font-weight: inherit; + font-family: inherit; +} + +ul { + list-style-type: none; + padding: 0; +} + +input { + border-bottom: var(--input-border-size) dotted var(--input-border-color); + color: var(--input-color); + line-height: 1; + cursor: text; + background-color: transparent; + font-family: 'metropolis-medium'; + + &[type='radio'], + &[type='checkbox'], + &[type='file'], + &[type='select'] { + cursor: pointer; + } + + &[type='file'] { + border-bottom: none; + } + + &.input-copyable { + flex: 1; + background: var(--input-copyable-bg); + color: var(--input-copyable-color); + padding: 10px 16px; + border: 1px dashed var(--input-copyable-border); + } + + &:not(.input-copyable):not(.wunderbar__input):not(:placeholder-shown) { + border-bottom: var(--input-border-size) solid var(--input-border-color); + } + + &:disabled { + color: var(--input-disabled-color); + border-bottom: var(--input-border-size) solid var(--input-disabled-color); + cursor: default; + } +} + +input::placeholder { + opacity: 0.5; +} + +button + input { + margin-left: $spacing-vertical * 2/3; +} + +dl { + width: 100%; + overflow: hidden; + padding: 0; + margin: 0; + overflow-x: scroll; +} + +dt { + float: left; + width: 20%; + padding: 0; + margin: 0; +} + +dd { + float: left; + width: 80%; + padding: 0; + margin: 0; +} + +p { + font-family: 'metropolis-medium'; +} + +.page { + display: grid; + grid-template-rows: var(--header-height) calc(100vh - var(--header-height)); + grid-template-columns: var(--side-nav-width) auto; + grid-template-areas: + 'nav header' + 'nav content'; + background-color: var(--color-bg); + + @media only screen and (min-width: $medium-breakpoint) { + grid-template-columns: var(--side-nav-width-m) auto; + } + + @media only screen and (min-width: $large-breakpoint) { + grid-template-columns: var(--side-nav-width-l) auto; + } +} + +/* + Page content +*/ +.content { + grid-area: content; + overflow: auto; +} + +.main { + padding: $spacing-width $spacing-width; + margin: auto; +} + +.main--contained { + max-width: 1000px; + margin: 0 80px - $spacing-width; + + @media only screen and (min-width: $medium-breakpoint) { + margin: 0 120px - $spacing-width; + } + + @media only screen and (min-width: $large-breakpoint) { + margin: 0 200px - $spacing-width; + } +} + +.main--no-padding { + padding-left: 0; + padding-right: 0; + margin: 0; +} + +.main--extra-padding { + padding-left: 100px; + padding-right: 100px; +} + +.page__header { + padding: $spacing-vertical * 2/3; + padding-bottom: 0; +} + +.page__title { + // not currently using page titles on any page +} + +.page__empty { + margin-top: 200px; + text-align: center; + font-family: 'metropolis-medium'; +} + +.columns { + display: flex; + justify-content: space-between; + + > * { + flex-grow: 1; + flex-basis: 0; + + &:not(:first-of-type):not(:last-of-type) { + margin: 0 $spacing-vertical / 3; + } + + &:first-of-type { + margin-right: $spacing-vertical / 3; + } + + &:last-of-type { + margin-left: $spacing-vertical / 3; + } + } } /* Custom text selection */ @@ -17,111 +238,47 @@ body { color: var(--text-selection-color); } -#window { - min-height: 100vh; - background: var(--window-bg); +.credit-amount { + padding: 5px; + border-radius: 5px; + font-family: 'metropolis-bold'; + font-size: 8px; } -.credit-amount--indicator { - font-weight: 500; - color: var(--color-money); -} -.credit-amount--fee { - font-size: 0.9em; - color: var(--color-meta-light); +.credit-amount--large { + font-family: 'metropolis-semibold'; + font-size: 36px; } -.credit-amount--bold { - font-weight: 700; +.credit-amount--free { + color: var(--color-dark-blue); + background-color: var(--color-secondary); } -#main-content { - margin: auto; - display: flex; - flex-direction: column; - overflow: overlay; - padding: $spacing-vertical; - position: absolute; - top: var(--header-height); - bottom: 0; - left: 4px; - right: 4px; - main { - margin-left: auto; - margin-right: auto; - max-width: 100%; - } - main.main--single-column { - width: $width-page-constrained; - } - - main.main--no-margin { - margin-left: 0; - margin-right: 0; - } +.credit-amount--cost { + color: var(--color-black); + background-color: var(--color-yellow); } -.reloading { - &:before { - $width: 30px; - position: absolute; - background: url('../../../static/img/busy.gif') no-repeat center center; - width: $width; - height: $spacing-vertical; - content: ''; - left: 50%; - margin-left: -1 / 2 * $width; - display: inline-block; - } +.credit-amount--plain { + background-color: inherit; + color: inherit; + font-weight: inherit; + font-size: inherit; } -.icon-fixed-width { - /* This borrowed is from a component of Font Awesome we're not using, maybe add it? */ - width: (18em / 14); - text-align: center; +.credit-amount.credit-amount--no-style { + padding: 0; + font-size: inherit; + font-weight: inherit; + color: inherit; + background-color: transparent; + font-family: 'metropolis-medium'; } -.icon--left-pad { - padding-left: 3px; -} - -h2 { - font-size: 1.75em; -} - -h3 { - font-size: 1.4em; -} - -h4 { - font-size: 1.2em; -} - -h5 { - font-size: 1.1em; -} -sup, -sub { - vertical-align: baseline; - position: relative; -} -sup { - top: -0.4em; -} -sub { - top: 0.4em; -} - -code { - font: 0.8em Consolas, 'Lucida Console', 'Source Sans', monospace; - background-color: var(--color-bg-alt); -} - -p { - margin-bottom: 0.8em; - &:last-child { - margin-bottom: 0; - } +.divider__horizontal { + border-top: var(--color-divider); + margin: 16px 0; } .hidden { @@ -141,6 +298,10 @@ p { } .busy-indicator { + font-family: 'metropolis-medium'; +} + +.busy-indicator__loader { background: url('../../../static/img/busy.gif') no-repeat center center; display: inline-block; margin: -1em 0; @@ -157,12 +318,18 @@ p { } .help { - font-size: 0.85em; + font-size: 12px; + font-family: 'metropolis-medium'; color: var(--color-help); } +.help--padded { + padding-top: $spacing-vertical * 2/3; +} + .meta { - font-size: 0.9em; + font-family: 'metropolis-medium'; + font-size: 14px; color: var(--color-meta-light); } @@ -170,29 +337,3 @@ p { color: var(--color-meta-light); font-style: italic; } - -/*should be redone/moved*/ -.file-list__header { - .busy-indicator { - float: left; - margin-top: 12px; - } -} - -.sort-section { - display: block; - margin-bottom: $spacing-vertical * 2/3; - - text-align: right; - line-height: 1; - font-size: 0.85em; - color: var(--color-help); -} - -section.section-spaced { - margin-bottom: $spacing-vertical; -} - -.text-center { - text-align: center; -} diff --git a/src/renderer/scss/_icons.scss b/src/renderer/scss/_icons.scss deleted file mode 100644 index c589a1ac5..000000000 --- a/src/renderer/scss/_icons.scss +++ /dev/null @@ -1,1678 +0,0 @@ -@font-face { - font-family: 'FontAwesome'; - src: url('../../../static/font/fontawesome-webfont.eot?v=4.7.0'); - src: url('../../../static/font/fontawesome-webfont.eot?#iefix&v=4.7.0') - format('embedded-opentype'), - url('../../../static/font/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), - url('../../../static/font/fontawesome-webfont.woff?v=4.7.0') format('woff'), - url('../../../static/font/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), - url('../../../static/font/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg'); - font-weight: normal; - font-style: normal; -} - -[class*='icon-'] { - display: inline-block; - text-align: center; - font-family: 'FontAwesome'; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - speak: none; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - font-size: inherit; - text-rendering: auto; - transform: translate(0, 0); -} - -/* Adjustments for icon size and alignment */ -.icon-rocket { - color: orangered; - font-size: 0.95em; - position: relative; - top: -0.04em; - margin-left: 0.025em; - margin-right: 0.025em; -} - -/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen - readers do not read off random characters that represent icons */ -.icon-glass:before { - content: '\f000'; -} -.icon-music:before { - content: '\f001'; -} -.icon-search:before { - content: '\f002'; -} -.icon-envelope-o:before { - content: '\f003'; -} -.icon-heart:before { - content: '\f004'; -} -.icon-star:before { - content: '\f005'; -} -.icon-star-o:before { - content: '\f006'; -} -.icon-user:before { - content: '\f007'; -} -.icon-film:before { - content: '\f008'; -} -.icon-th-large:before { - content: '\f009'; -} -.icon-th:before { - content: '\f00a'; -} -.icon-th-list:before { - content: '\f00b'; -} -.icon-check:before { - content: '\f00c'; -} -.icon-remove:before, -.icon-close:before, -.icon-times:before { - content: '\f00d'; -} -.icon-search-plus:before { - content: '\f00e'; -} -.icon-search-minus:before { - content: '\f010'; -} -.icon-power-off:before { - content: '\f011'; -} -.icon-signal:before { - content: '\f012'; -} -.icon-gear:before, -.icon-cog:before { - content: '\f013'; -} -.icon-trash-o:before { - content: '\f014'; -} -.icon-home:before { - content: '\f015'; -} -.icon-file-o:before { - content: '\f016'; -} -.icon-clock-o:before { - content: '\f017'; -} -.icon-road:before { - content: '\f018'; -} -.icon-download:before { - content: '\f019'; -} -.icon-arrow-circle-o-down:before { - content: '\f01a'; -} -.icon-arrow-circle-o-up:before { - content: '\f01b'; -} -.icon-inbox:before { - content: '\f01c'; -} -.icon-play-circle-o:before { - content: '\f01d'; -} -.icon-rotate-right:before, -.icon-repeat:before { - content: '\f01e'; -} -.icon-refresh:before { - content: '\f021'; -} -.icon-list-alt:before { - content: '\f022'; -} -.icon-lock:before { - content: '\f023'; -} -.icon-flag:before { - content: '\f024'; -} -.icon-headphones:before { - content: '\f025'; -} -.icon-volume-off:before { - content: '\f026'; -} -.icon-volume-down:before { - content: '\f027'; -} -.icon-volume-up:before { - content: '\f028'; -} -.icon-qrcode:before { - content: '\f029'; -} -.icon-barcode:before { - content: '\f02a'; -} -.icon-tag:before { - content: '\f02b'; -} -.icon-tags:before { - content: '\f02c'; -} -.icon-book:before { - content: '\f02d'; -} -.icon-bookmark:before { - content: '\f02e'; -} -.icon-print:before { - content: '\f02f'; -} -.icon-camera:before { - content: '\f030'; -} -.icon-font:before { - content: '\f031'; -} -.icon-bold:before { - content: '\f032'; -} -.icon-italic:before { - content: '\f033'; -} -.icon-text-height:before { - content: '\f034'; -} -.icon-text-width:before { - content: '\f035'; -} -.icon-align-left:before { - content: '\f036'; -} -.icon-align-center:before { - content: '\f037'; -} -.icon-align-right:before { - content: '\f038'; -} -.icon-align-justify:before { - content: '\f039'; -} -.icon-list:before { - content: '\f03a'; -} -.icon-dedent:before, -.icon-outdent:before { - content: '\f03b'; -} -.icon-indent:before { - content: '\f03c'; -} -.icon-video-camera:before { - content: '\f03d'; -} -.icon-photo:before, -.icon-image:before, -.icon-picture-o:before { - content: '\f03e'; -} -.icon-pencil:before { - content: '\f040'; -} -.icon-map-marker:before { - content: '\f041'; -} -.icon-adjust:before { - content: '\f042'; -} -.icon-tint:before { - content: '\f043'; -} -.icon-edit:before, -.icon-pencil-square-o:before { - content: '\f044'; -} -.icon-share-square-o:before { - content: '\f045'; -} -.icon-check-square-o:before { - content: '\f046'; -} -.icon-arrows:before { - content: '\f047'; -} -.icon-step-backward:before { - content: '\f048'; -} -.icon-fast-backward:before { - content: '\f049'; -} -.icon-backward:before { - content: '\f04a'; -} -.icon-play:before { - content: '\f04b'; -} -.icon-pause:before { - content: '\f04c'; -} -.icon-stop:before { - content: '\f04d'; -} -.icon-forward:before { - content: '\f04e'; -} -.icon-fast-forward:before { - content: '\f050'; -} -.icon-step-forward:before { - content: '\f051'; -} -.icon-eject:before { - content: '\f052'; -} -.icon-chevron-left:before { - content: '\f053'; -} -.icon-chevron-right:before { - content: '\f054'; -} -.icon-plus-circle:before { - content: '\f055'; -} -.icon-minus-circle:before { - content: '\f056'; -} -.icon-times-circle:before { - content: '\f057'; -} -.icon-check-circle:before { - content: '\f058'; -} -.icon-question-circle:before { - content: '\f059'; -} -.icon-info-circle:before { - content: '\f05a'; -} -.icon-crosshairs:before { - content: '\f05b'; -} -.icon-times-circle-o:before { - content: '\f05c'; -} -.icon-check-circle-o:before { - content: '\f05d'; -} -.icon-ban:before { - content: '\f05e'; -} -.icon-arrow-left:before { - content: '\f060'; -} -.icon-arrow-right:before { - content: '\f061'; -} -.icon-arrow-up:before { - content: '\f062'; -} -.icon-arrow-down:before { - content: '\f063'; -} -.icon-mail-forward:before, -.icon-share:before { - content: '\f064'; -} -.icon-expand:before { - content: '\f065'; -} -.icon-compress:before { - content: '\f066'; -} -.icon-plus:before { - content: '\f067'; -} -.icon-minus:before { - content: '\f068'; -} -.icon-asterisk:before { - content: '\f069'; -} -.icon-exclamation-circle:before { - content: '\f06a'; -} -.icon-gift:before { - content: '\f06b'; -} -.icon-leaf:before { - content: '\f06c'; -} -.icon-fire:before { - content: '\f06d'; -} -.icon-eye:before { - content: '\f06e'; -} -.icon-eye-slash:before { - content: '\f070'; -} -.icon-warning:before, -.icon-exclamation-triangle:before { - content: '\f071'; -} -.icon-plane:before { - content: '\f072'; -} -.icon-calendar:before { - content: '\f073'; -} -.icon-random:before { - content: '\f074'; -} -.icon-comment:before { - content: '\f075'; -} -.icon-magnet:before { - content: '\f076'; -} -.icon-chevron-up:before { - content: '\f077'; -} -.icon-chevron-down:before { - content: '\f078'; -} -.icon-retweet:before { - content: '\f079'; -} -.icon-shopping-cart:before { - content: '\f07a'; -} -.icon-folder:before { - content: '\f07b'; -} -.icon-folder-open:before { - content: '\f07c'; -} -.icon-arrows-v:before { - content: '\f07d'; -} -.icon-arrows-h:before { - content: '\f07e'; -} -.icon-bar-chart-o:before, -.icon-bar-chart:before { - content: '\f080'; -} -.icon-twitter-square:before { - content: '\f081'; -} -.icon-facebook-square:before { - content: '\f082'; -} -.icon-camera-retro:before { - content: '\f083'; -} -.icon-key:before { - content: '\f084'; -} -.icon-gears:before, -.icon-cogs:before { - content: '\f085'; -} -.icon-comments:before { - content: '\f086'; -} -.icon-thumbs-o-up:before { - content: '\f087'; -} -.icon-thumbs-o-down:before { - content: '\f088'; -} -.icon-star-half:before { - content: '\f089'; -} -.icon-heart-o:before { - content: '\f08a'; -} -.icon-sign-out:before { - content: '\f08b'; -} -.icon-linkedin-square:before { - content: '\f08c'; -} -.icon-thumb-tack:before { - content: '\f08d'; -} -.icon-external-link:before { - content: '\f08e'; -} -.icon-sign-in:before { - content: '\f090'; -} -.icon-trophy:before { - content: '\f091'; -} -.icon-github-square:before { - content: '\f092'; -} -.icon-upload:before { - content: '\f093'; -} -.icon-lemon-o:before { - content: '\f094'; -} -.icon-phone:before { - content: '\f095'; -} -.icon-square-o:before { - content: '\f096'; -} -.icon-bookmark-o:before { - content: '\f097'; -} -.icon-phone-square:before { - content: '\f098'; -} -.icon-twitter:before { - content: '\f099'; -} -.icon-facebook-f:before, -.icon-facebook:before { - content: '\f09a'; -} -.icon-github:before { - content: '\f09b'; -} -.icon-unlock:before { - content: '\f09c'; -} -.icon-credit-card:before { - content: '\f09d'; -} -.icon-rss:before { - content: '\f09e'; -} -.icon-hdd-o:before { - content: '\f0a0'; -} -.icon-bullhorn:before { - content: '\f0a1'; -} -.icon-bell:before { - content: '\f0f3'; -} -.icon-certificate:before { - content: '\f0a3'; -} -.icon-hand-o-right:before { - content: '\f0a4'; -} -.icon-hand-o-left:before { - content: '\f0a5'; -} -.icon-hand-o-up:before { - content: '\f0a6'; -} -.icon-hand-o-down:before { - content: '\f0a7'; -} -.icon-arrow-circle-left:before { - content: '\f0a8'; -} -.icon-arrow-circle-right:before { - content: '\f0a9'; -} -.icon-arrow-circle-up:before { - content: '\f0aa'; -} -.icon-arrow-circle-down:before { - content: '\f0ab'; -} -.icon-globe:before { - content: '\f0ac'; -} -.icon-wrench:before { - content: '\f0ad'; -} -.icon-tasks:before { - content: '\f0ae'; -} -.icon-filter:before { - content: '\f0b0'; -} -.icon-briefcase:before { - content: '\f0b1'; -} -.icon-arrows-alt:before { - content: '\f0b2'; -} -.icon-group:before, -.icon-users:before { - content: '\f0c0'; -} -.icon-chain:before, -.icon-link:before { - content: '\f0c1'; -} -.icon-cloud:before { - content: '\f0c2'; -} -.icon-flask:before { - content: '\f0c3'; -} -.icon-cut:before, -.icon-scissors:before { - content: '\f0c4'; -} -.icon-copy:before, -.icon-files-o:before { - content: '\f0c5'; -} -.icon-paperclip:before { - content: '\f0c6'; -} -.icon-save:before, -.icon-floppy-o:before { - content: '\f0c7'; -} -.icon-square:before { - content: '\f0c8'; -} -.icon-navicon:before, -.icon-reorder:before, -.icon-bars:before { - content: '\f0c9'; -} -.icon-list-ul:before { - content: '\f0ca'; -} -.icon-list-ol:before { - content: '\f0cb'; -} -.icon-strikethrough:before { - content: '\f0cc'; -} -.icon-underline:before { - content: '\f0cd'; -} -.icon-table:before { - content: '\f0ce'; -} -.icon-magic:before { - content: '\f0d0'; -} -.icon-truck:before { - content: '\f0d1'; -} -.icon-pinterest:before { - content: '\f0d2'; -} -.icon-pinterest-square:before { - content: '\f0d3'; -} -.icon-google-plus-square:before { - content: '\f0d4'; -} -.icon-google-plus:before { - content: '\f0d5'; -} -.icon-money:before { - content: '\f0d6'; -} -.icon-caret-down:before { - content: '\f0d7'; -} -.icon-caret-up:before { - content: '\f0d8'; -} -.icon-caret-left:before { - content: '\f0d9'; -} -.icon-caret-right:before { - content: '\f0da'; -} -.icon-columns:before { - content: '\f0db'; -} -.icon-unsorted:before, -.icon-sort:before { - content: '\f0dc'; -} -.icon-sort-down:before, -.icon-sort-desc:before { - content: '\f0dd'; -} -.icon-sort-up:before, -.icon-sort-asc:before { - content: '\f0de'; -} -.icon-envelope:before { - content: '\f0e0'; -} -.icon-linkedin:before { - content: '\f0e1'; -} -.icon-rotate-left:before, -.icon-undo:before { - content: '\f0e2'; -} -.icon-legal:before, -.icon-gavel:before { - content: '\f0e3'; -} -.icon-dashboard:before, -.icon-tachometer:before { - content: '\f0e4'; -} -.icon-comment-o:before { - content: '\f0e5'; -} -.icon-comments-o:before { - content: '\f0e6'; -} -.icon-flash:before, -.icon-bolt:before { - content: '\f0e7'; -} -.icon-sitemap:before { - content: '\f0e8'; -} -.icon-umbrella:before { - content: '\f0e9'; -} -.icon-paste:before, -.icon-clipboard:before { - content: '\f0ea'; -} -.icon-lightbulb-o:before { - content: '\f0eb'; -} -.icon-exchange:before { - content: '\f0ec'; -} -.icon-cloud-download:before { - content: '\f0ed'; -} -.icon-cloud-upload:before { - content: '\f0ee'; -} -.icon-user-md:before { - content: '\f0f0'; -} -.icon-stethoscope:before { - content: '\f0f1'; -} -.icon-suitcase:before { - content: '\f0f2'; -} -.icon-bell-o:before { - content: '\f0a2'; -} -.icon-coffee:before { - content: '\f0f4'; -} -.icon-cutlery:before { - content: '\f0f5'; -} -.icon-file-text-o:before { - content: '\f0f6'; -} -.icon-building-o:before { - content: '\f0f7'; -} -.icon-hospital-o:before { - content: '\f0f8'; -} -.icon-ambulance:before { - content: '\f0f9'; -} -.icon-medkit:before { - content: '\f0fa'; -} -.icon-fighter-jet:before { - content: '\f0fb'; -} -.icon-beer:before { - content: '\f0fc'; -} -.icon-h-square:before { - content: '\f0fd'; -} -.icon-plus-square:before { - content: '\f0fe'; -} -.icon-angle-double-left:before { - content: '\f100'; -} -.icon-angle-double-right:before { - content: '\f101'; -} -.icon-angle-double-up:before { - content: '\f102'; -} -.icon-angle-double-down:before { - content: '\f103'; -} -.icon-angle-left:before { - content: '\f104'; -} -.icon-angle-right:before { - content: '\f105'; -} -.icon-angle-up:before { - content: '\f106'; -} -.icon-angle-down:before { - content: '\f107'; -} -.icon-desktop:before { - content: '\f108'; -} -.icon-laptop:before { - content: '\f109'; -} -.icon-tablet:before { - content: '\f10a'; -} -.icon-mobile-phone:before, -.icon-mobile:before { - content: '\f10b'; -} -.icon-circle-o:before { - content: '\f10c'; -} -.icon-quote-left:before { - content: '\f10d'; -} -.icon-quote-right:before { - content: '\f10e'; -} -.icon-spinner:before { - content: '\f110'; -} -.icon-circle:before { - content: '\f111'; -} -.icon-mail-reply:before, -.icon-reply:before { - content: '\f112'; -} -.icon-github-alt:before { - content: '\f113'; -} -.icon-folder-o:before { - content: '\f114'; -} -.icon-folder-open-o:before { - content: '\f115'; -} -.icon-smile-o:before { - content: '\f118'; -} -.icon-frown-o:before { - content: '\f119'; -} -.icon-meh-o:before { - content: '\f11a'; -} -.icon-gamepad:before { - content: '\f11b'; -} -.icon-keyboard-o:before { - content: '\f11c'; -} -.icon-flag-o:before { - content: '\f11d'; -} -.icon-flag-checkered:before { - content: '\f11e'; -} -.icon-terminal:before { - content: '\f120'; -} -.icon-code:before { - content: '\f121'; -} -.icon-mail-reply-all:before, -.icon-reply-all:before { - content: '\f122'; -} -.icon-star-half-empty:before, -.icon-star-half-full:before, -.icon-star-half-o:before { - content: '\f123'; -} -.icon-location-arrow:before { - content: '\f124'; -} -.icon-crop:before { - content: '\f125'; -} -.icon-code-fork:before { - content: '\f126'; -} -.icon-unlink:before, -.icon-chain-broken:before { - content: '\f127'; -} -.icon-question:before { - content: '\f128'; -} -.icon-info:before { - content: '\f129'; -} -.icon-exclamation:before { - content: '\f12a'; -} -.icon-superscript:before { - content: '\f12b'; -} -.icon-subscript:before { - content: '\f12c'; -} -.icon-eraser:before { - content: '\f12d'; -} -.icon-puzzle-piece:before { - content: '\f12e'; -} -.icon-microphone:before { - content: '\f130'; -} -.icon-microphone-slash:before { - content: '\f131'; -} -.icon-shield:before { - content: '\f132'; -} -.icon-calendar-o:before { - content: '\f133'; -} -.icon-fire-extinguisher:before { - content: '\f134'; -} -.icon-rocket:before { - content: '\f135'; -} -.icon-maxcdn:before { - content: '\f136'; -} -.icon-chevron-circle-left:before { - content: '\f137'; -} -.icon-chevron-circle-right:before { - content: '\f138'; -} -.icon-chevron-circle-up:before { - content: '\f139'; -} -.icon-chevron-circle-down:before { - content: '\f13a'; -} -.icon-html5:before { - content: '\f13b'; -} -.icon-css3:before { - content: '\f13c'; -} -.icon-anchor:before { - content: '\f13d'; -} -.icon-unlock-alt:before { - content: '\f13e'; -} -.icon-bullseye:before { - content: '\f140'; -} -.icon-ellipsis-h:before { - content: '\f141'; -} -.icon-ellipsis-v:before { - content: '\f142'; -} -.icon-rss-square:before { - content: '\f143'; -} -.icon-play-circle:before { - content: '\f144'; -} -.icon-ticket:before { - content: '\f145'; -} -.icon-minus-square:before { - content: '\f146'; -} -.icon-minus-square-o:before { - content: '\f147'; -} -.icon-level-up:before { - content: '\f148'; -} -.icon-level-down:before { - content: '\f149'; -} -.icon-check-square:before { - content: '\f14a'; -} -.icon-pencil-square:before { - content: '\f14b'; -} -.icon-external-link-square:before { - content: '\f14c'; -} -.icon-share-square:before { - content: '\f14d'; -} -.icon-compass:before { - content: '\f14e'; -} -.icon-toggle-down:before, -.icon-caret-square-o-down:before { - content: '\f150'; -} -.icon-toggle-up:before, -.icon-caret-square-o-up:before { - content: '\f151'; -} -.icon-toggle-right:before, -.icon-caret-square-o-right:before { - content: '\f152'; -} -.icon-euro:before, -.icon-eur:before { - content: '\f153'; -} -.icon-gbp:before { - content: '\f154'; -} -.icon-dollar:before, -.icon-usd:before { - content: '\f155'; -} -.icon-rupee:before, -.icon-inr:before { - content: '\f156'; -} -.icon-cny:before, -.icon-rmb:before, -.icon-yen:before, -.icon-jpy:before { - content: '\f157'; -} -.icon-ruble:before, -.icon-rouble:before, -.icon-rub:before { - content: '\f158'; -} -.icon-won:before, -.icon-krw:before { - content: '\f159'; -} -.icon-bitcoin:before, -.icon-btc:before { - content: '\f15a'; -} -.icon-file:before { - content: '\f15b'; -} -.icon-file-text:before { - content: '\f15c'; -} -.icon-sort-alpha-asc:before { - content: '\f15d'; -} -.icon-sort-alpha-desc:before { - content: '\f15e'; -} -.icon-sort-amount-asc:before { - content: '\f160'; -} -.icon-sort-amount-desc:before { - content: '\f161'; -} -.icon-sort-numeric-asc:before { - content: '\f162'; -} -.icon-sort-numeric-desc:before { - content: '\f163'; -} -.icon-thumbs-up:before { - content: '\f164'; -} -.icon-thumbs-down:before { - content: '\f165'; -} -.icon-youtube-square:before { - content: '\f166'; -} -.icon-youtube:before { - content: '\f167'; -} -.icon-xing:before { - content: '\f168'; -} -.icon-xing-square:before { - content: '\f169'; -} -.icon-youtube-play:before { - content: '\f16a'; -} -.icon-dropbox:before { - content: '\f16b'; -} -.icon-stack-overflow:before { - content: '\f16c'; -} -.icon-instagram:before { - content: '\f16d'; -} -.icon-flickr:before { - content: '\f16e'; -} -.icon-adn:before { - content: '\f170'; -} -.icon-bitbucket:before { - content: '\f171'; -} -.icon-bitbucket-square:before { - content: '\f172'; -} -.icon-tumblr:before { - content: '\f173'; -} -.icon-tumblr-square:before { - content: '\f174'; -} -.icon-long-arrow-down:before { - content: '\f175'; -} -.icon-long-arrow-up:before { - content: '\f176'; -} -.icon-long-arrow-left:before { - content: '\f177'; -} -.icon-long-arrow-right:before { - content: '\f178'; -} -.icon-apple:before { - content: '\f179'; -} -.icon-windows:before { - content: '\f17a'; -} -.icon-android:before { - content: '\f17b'; -} -.icon-linux:before { - content: '\f17c'; -} -.icon-dribbble:before { - content: '\f17d'; -} -.icon-skype:before { - content: '\f17e'; -} -.icon-foursquare:before { - content: '\f180'; -} -.icon-trello:before { - content: '\f181'; -} -.icon-female:before { - content: '\f182'; -} -.icon-male:before { - content: '\f183'; -} -.icon-gittip:before, -.icon-gratipay:before { - content: '\f184'; -} -.icon-sun-o:before { - content: '\f185'; -} -.icon-moon-o:before { - content: '\f186'; -} -.icon-archive:before { - content: '\f187'; -} -.icon-bug:before { - content: '\f188'; -} -.icon-vk:before { - content: '\f189'; -} -.icon-weibo:before { - content: '\f18a'; -} -.icon-renren:before { - content: '\f18b'; -} -.icon-pagelines:before { - content: '\f18c'; -} -.icon-stack-exchange:before { - content: '\f18d'; -} -.icon-arrow-circle-o-right:before { - content: '\f18e'; -} -.icon-arrow-circle-o-left:before { - content: '\f190'; -} -.icon-toggle-left:before, -.icon-caret-square-o-left:before { - content: '\f191'; -} -.icon-dot-circle-o:before { - content: '\f192'; -} -.icon-wheelchair:before { - content: '\f193'; -} -.icon-vimeo-square:before { - content: '\f194'; -} -.icon-turkish-lira:before, -.icon-try:before { - content: '\f195'; -} -.icon-plus-square-o:before { - content: '\f196'; -} -.icon-space-shuttle:before { - content: '\f197'; -} -.icon-slack:before { - content: '\f198'; -} -.icon-envelope-square:before { - content: '\f199'; -} -.icon-wordpress:before { - content: '\f19a'; -} -.icon-openid:before { - content: '\f19b'; -} -.icon-institution:before, -.icon-bank:before, -.icon-university:before { - content: '\f19c'; -} -.icon-mortar-board:before, -.icon-graduation-cap:before { - content: '\f19d'; -} -.icon-yahoo:before { - content: '\f19e'; -} -.icon-google:before { - content: '\f1a0'; -} -.icon-reddit:before { - content: '\f1a1'; -} -.icon-reddit-square:before { - content: '\f1a2'; -} -.icon-stumbleupon-circle:before { - content: '\f1a3'; -} -.icon-stumbleupon:before { - content: '\f1a4'; -} -.icon-delicious:before { - content: '\f1a5'; -} -.icon-digg:before { - content: '\f1a6'; -} -.icon-pied-piper:before { - content: '\f1a7'; -} -.icon-pied-piper-alt:before { - content: '\f1a8'; -} -.icon-drupal:before { - content: '\f1a9'; -} -.icon-joomla:before { - content: '\f1aa'; -} -.icon-language:before { - content: '\f1ab'; -} -.icon-fax:before { - content: '\f1ac'; -} -.icon-building:before { - content: '\f1ad'; -} -.icon-child:before { - content: '\f1ae'; -} -.icon-paw:before { - content: '\f1b0'; -} -.icon-spoon:before { - content: '\f1b1'; -} -.icon-cube:before { - content: '\f1b2'; -} -.icon-cubes:before { - content: '\f1b3'; -} -.icon-behance:before { - content: '\f1b4'; -} -.icon-behance-square:before { - content: '\f1b5'; -} -.icon-steam:before { - content: '\f1b6'; -} -.icon-steam-square:before { - content: '\f1b7'; -} -.icon-recycle:before { - content: '\f1b8'; -} -.icon-automobile:before, -.icon-car:before { - content: '\f1b9'; -} -.icon-cab:before, -.icon-taxi:before { - content: '\f1ba'; -} -.icon-tree:before { - content: '\f1bb'; -} -.icon-spotify:before { - content: '\f1bc'; -} -.icon-deviantart:before { - content: '\f1bd'; -} -.icon-soundcloud:before { - content: '\f1be'; -} -.icon-database:before { - content: '\f1c0'; -} -.icon-file-pdf-o:before { - content: '\f1c1'; -} -.icon-file-word-o:before { - content: '\f1c2'; -} -.icon-file-excel-o:before { - content: '\f1c3'; -} -.icon-file-powerpoint-o:before { - content: '\f1c4'; -} -.icon-file-photo-o:before, -.icon-file-picture-o:before, -.icon-file-image-o:before { - content: '\f1c5'; -} -.icon-file-zip-o:before, -.icon-file-archive-o:before { - content: '\f1c6'; -} -.icon-file-sound-o:before, -.icon-file-audio-o:before { - content: '\f1c7'; -} -.icon-file-movie-o:before, -.icon-file-video-o:before { - content: '\f1c8'; -} -.icon-file-code-o:before { - content: '\f1c9'; -} -.icon-vine:before { - content: '\f1ca'; -} -.icon-codepen:before { - content: '\f1cb'; -} -.icon-jsfiddle:before { - content: '\f1cc'; -} -.icon-life-bouy:before, -.icon-life-buoy:before, -.icon-life-saver:before, -.icon-support:before, -.icon-life-ring:before { - content: '\f1cd'; -} -.icon-circle-o-notch:before { - content: '\f1ce'; -} -.icon-ra:before, -.icon-rebel:before { - content: '\f1d0'; -} -.icon-ge:before, -.icon-empire:before { - content: '\f1d1'; -} -.icon-git-square:before { - content: '\f1d2'; -} -.icon-git:before { - content: '\f1d3'; -} -.icon-hacker-news:before { - content: '\f1d4'; -} -.icon-tencent-weibo:before { - content: '\f1d5'; -} -.icon-qq:before { - content: '\f1d6'; -} -.icon-wechat:before, -.icon-weixin:before { - content: '\f1d7'; -} -.icon-send:before, -.icon-paper-plane:before { - content: '\f1d8'; -} -.icon-send-o:before, -.icon-paper-plane-o:before { - content: '\f1d9'; -} -.icon-history:before { - content: '\f1da'; -} -.icon-genderless:before, -.icon-circle-thin:before { - content: '\f1db'; -} -.icon-header:before { - content: '\f1dc'; -} -.icon-paragraph:before { - content: '\f1dd'; -} -.icon-sliders:before { - content: '\f1de'; -} -.icon-share-alt:before { - content: '\f1e0'; -} -.icon-share-alt-square:before { - content: '\f1e1'; -} -.icon-bomb:before { - content: '\f1e2'; -} -.icon-soccer-ball-o:before, -.icon-futbol-o:before { - content: '\f1e3'; -} -.icon-tty:before { - content: '\f1e4'; -} -.icon-binoculars:before { - content: '\f1e5'; -} -.icon-plug:before { - content: '\f1e6'; -} -.icon-slideshare:before { - content: '\f1e7'; -} -.icon-twitch:before { - content: '\f1e8'; -} -.icon-yelp:before { - content: '\f1e9'; -} -.icon-newspaper-o:before { - content: '\f1ea'; -} -.icon-wifi:before { - content: '\f1eb'; -} -.icon-calculator:before { - content: '\f1ec'; -} -.icon-paypal:before { - content: '\f1ed'; -} -.icon-google-wallet:before { - content: '\f1ee'; -} -.icon-cc-visa:before { - content: '\f1f0'; -} -.icon-cc-mastercard:before { - content: '\f1f1'; -} -.icon-cc-discover:before { - content: '\f1f2'; -} -.icon-cc-amex:before { - content: '\f1f3'; -} -.icon-cc-paypal:before { - content: '\f1f4'; -} -.icon-cc-stripe:before { - content: '\f1f5'; -} -.icon-bell-slash:before { - content: '\f1f6'; -} -.icon-bell-slash-o:before { - content: '\f1f7'; -} -.icon-trash:before { - content: '\f1f8'; -} -.icon-copyright:before { - content: '\f1f9'; -} -.icon-at:before { - content: '\f1fa'; -} -.icon-eyedropper:before { - content: '\f1fb'; -} -.icon-paint-brush:before { - content: '\f1fc'; -} -.icon-birthday-cake:before { - content: '\f1fd'; -} -.icon-area-chart:before { - content: '\f1fe'; -} -.icon-pie-chart:before { - content: '\f200'; -} -.icon-line-chart:before { - content: '\f201'; -} -.icon-lastfm:before { - content: '\f202'; -} -.icon-lastfm-square:before { - content: '\f203'; -} -.icon-toggle-off:before { - content: '\f204'; -} -.icon-toggle-on:before { - content: '\f205'; -} -.icon-bicycle:before { - content: '\f206'; -} -.icon-bus:before { - content: '\f207'; -} -.icon-ioxhost:before { - content: '\f208'; -} -.icon-angellist:before { - content: '\f209'; -} -.icon-cc:before { - content: '\f20a'; -} -.icon-shekel:before, -.icon-sheqel:before, -.icon-ils:before { - content: '\f20b'; -} -.icon-meanpath:before { - content: '\f20c'; -} -.icon-buysellads:before { - content: '\f20d'; -} -.icon-connectdevelop:before { - content: '\f20e'; -} -.icon-dashcube:before { - content: '\f210'; -} -.icon-forumbee:before { - content: '\f211'; -} -.icon-leanpub:before { - content: '\f212'; -} -.icon-sellsy:before { - content: '\f213'; -} -.icon-shirtsinbulk:before { - content: '\f214'; -} -.icon-simplybuilt:before { - content: '\f215'; -} -.icon-skyatlas:before { - content: '\f216'; -} -.icon-cart-plus:before { - content: '\f217'; -} -.icon-cart-arrow-down:before { - content: '\f218'; -} -.icon-diamond:before { - content: '\f219'; -} -.icon-ship:before { - content: '\f21a'; -} -.icon-user-secret:before { - content: '\f21b'; -} -.icon-motorcycle:before { - content: '\f21c'; -} -.icon-street-view:before { - content: '\f21d'; -} -.icon-heartbeat:before { - content: '\f21e'; -} -.icon-venus:before { - content: '\f221'; -} -.icon-mars:before { - content: '\f222'; -} -.icon-mercury:before { - content: '\f223'; -} -.icon-transgender:before { - content: '\f224'; -} -.icon-transgender-alt:before { - content: '\f225'; -} -.icon-venus-double:before { - content: '\f226'; -} -.icon-mars-double:before { - content: '\f227'; -} -.icon-venus-mars:before { - content: '\f228'; -} -.icon-mars-stroke:before { - content: '\f229'; -} -.icon-mars-stroke-v:before { - content: '\f22a'; -} -.icon-mars-stroke-h:before { - content: '\f22b'; -} -.icon-neuter:before { - content: '\f22c'; -} -.icon-facebook-official:before { - content: '\f230'; -} -.icon-pinterest-p:before { - content: '\f231'; -} -.icon-whatsapp:before { - content: '\f232'; -} -.icon-server:before { - content: '\f233'; -} -.icon-user-plus:before { - content: '\f234'; -} -.icon-user-times:before { - content: '\f235'; -} -.icon-hotel:before, -.icon-bed:before { - content: '\f236'; -} -.icon-viacoin:before { - content: '\f237'; -} -.icon-train:before { - content: '\f238'; -} -.icon-subway:before { - content: '\f239'; -} -.icon-medium:before { - content: '\f23a'; -} -.icon-address-book:before { - content: '\f2b9'; -} -.icon-envelope-open:before { - content: '\f2b6'; -} diff --git a/src/renderer/scss/_reset.scss b/src/renderer/scss/_reset.scss index b93394c96..b9e3eca1c 100644 --- a/src/renderer/scss/_reset.scss +++ b/src/renderer/scss/_reset.scss @@ -68,7 +68,7 @@ select { border: 0 none; } img { - width: auto\9; + width: auto; height: auto; vertical-align: middle; -ms-interpolation-mode: bicubic; diff --git a/src/renderer/scss/_vars.scss b/src/renderer/scss/_vars.scss index f05049912..0f0b4e797 100644 --- a/src/renderer/scss/_vars.scss +++ b/src/renderer/scss/_vars.scss @@ -2,69 +2,74 @@ Both of these should probably die and become variables as well */ $spacing-vertical: 24px; -$width-page-constrained: 800px; -$text-color: #000; +$spacing-width: 36px; + +$medium-breakpoint: 1280px; +$large-breakpoint: 1760px; :root { + /* Widths & spacings */ + --side-nav-width: 220px; + --side-nav-width-m: 240px; + --side-nav-width-l: 320px; + + --video-aspect-ratio: 56.25%; // 9 x 16 + --snack-bar-width: 756px; + /* Colors */ - --color-brand: #155b4a; - --color-primary: #155b4a; - --color-primary-light: saturate(lighten(#155b4a, 50%), 20%); - --color-light-alt: hsl(hue(#155b4a), 15, 85); + --color-white: #fff; + --color-black: #000; + --color-grey: #d6d6d6; + --color-grey-light: #f6f6f6; + --color-grey-dark: #888; + --color-primary: #44b098; + --color-primary-dark: #2c6e60; + --color-primary-light: #64c9b2; + --color-secondary: #6afbda; + --color-teal: #19a6a3; + --color-dark-blue: #2f6f61; + --color-light-blue: #49b2e2; + --color-red: #e2495e; + --color-yellow: #fbd55e; + --color-divider: #e3e3e3; + + --text-color: var(--color-black); + --text-color-inverse: var(--color-white); + --color-dark-overlay: rgba(32, 32, 32, 0.9); --color-help: rgba(0, 0, 0, 0.54); - --color-notice: #8a6d3b; --color-error: #a94442; - --color-load-screen-text: #c3c3c3; - --color-meta-light: #505050; - --color-money: #216c2a; - --color-download: rgba(0, 0, 0, 0.75); - --color-canvas: #f5f5f5; - --color-bg: #ffffff; - --color-bg-alt: #d9d9d9; - - /* Misc */ - --content-max-width: 1000px; - --nsfw-blur-intensity: 20px; - --height-video-embedded: $width-page-constrained * 9 / 16; - - /* Font */ - --font-size: 16px; - --font-line-height: 1.3333; - --font-size-subtext-multiple: 0.82; + --color-download: var(--color-white); + --color-download-overlay: var(--color-black); + --color-bg: #fafafa; + --color-bg-alt: var(--color-grey-light); + --color-placeholder: #ececec; + --color-nav-bg: var(--color-grey-light); /* Shadows */ - --box-shadow-layer: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); - --box-shadow-focus: 2px 4px 4px 0 rgba(0, 0, 0, 0.14), 2px 5px 3px -2px rgba(0, 0, 0, 0.2), - 2px 3px 7px 0 rgba(0, 0, 0, 0.12); - - /* Transition */ - --transition-duration: 0.225s; - --transition-type: ease; + --box-shadow-layer: 0 4px 9px -2px var(--color-grey); + --box-shadow-button: 0 10px 20px rgba(0, 0, 0, 0.1); + --box-shadow-wunderbar: 0px 10px 20px rgba(0, 0, 0, 0.03); /* Text */ - --text-color: $text-color; --text-help-color: #eee; --text-max-width: 660px; --text-link-padding: 4px; --text-selection-bg: rgba(saturate(lighten(#155b4a, 20%), 20%), 1); // temp color --text-selection-color: #fff; - /* Window */ - --window-bg: var(--color-canvas); - /* Form */ --form-label-color: rgba(0, 0, 0, 0.54); /* Input */ --input-bg: transparent; - --input-width: 330px; + --input-label-color: var(--color-grey-dark); --input-color: var(--text-color); - --input-border-size: 2px; - --input-border-color: rgba(0, 0, 0, 0.54); - - /* input:active */ - --input-active-bg: transparent; + --input-border-size: 1px; + --input-border-color: var(--color-grey-dark); + --input-copyable-bg: var(--color-grey-light); + --input-copyable-color: var(--color-grey-dark); + --input-copyable-border: var(--color-grey); /* input:disabled */ --input-disabled-border-color: rgba(0, 0, 0, 0.42); @@ -82,36 +87,32 @@ $text-color: #000; --select-height: 30px; /* Button */ - --button-bg: var(--color-bg-alt); - --button-color: #fff; - --button-primary-bg: var(--color-primary); - --button-primary-color: #fff; - --button-padding: $spacing-vertical * 2/3; - --button-height: $spacing-vertical * 1.5; - --button-intra-margin: $spacing-vertical; - --button-radius: 3px; + --btn-bg-primary: var(--color-primary); + --btn-color-primary: var(--color-white); + --btn-bg-primary-hover: var(--color-primary-light); + --btn-bg-alt: var(--color-white); + --btn-color-alt: var(--text-color); + --btn-color-inverse: var(--color-primary); + --btn-external-color: var(--color-light-blue); + --btn-bg-secondary: var(--color-teal); + --btn-bg-danger: var(--color-red); + --btn-radius: 20px; + --btn-height: 36px; /* Header */ - --header-bg: var(--color-bg); - --header-color: #666; + --header-bg: var(--color-white); + --header-color: var(--color-text); --header-active-color: rgba(0, 0, 0, 0.85); - --header-height: $spacing-vertical * 2.5; - --header-button-bg: transparent; //var(--button-bg); + --header-height: $spacing-width * 3; + --header-button-bg: transparent; --header-button-hover-bg: rgba(100, 100, 100, 0.15); /* Header -> search */ - --search-bg: rgba(255, 255, 255, 0.7); - --search-border: 1px solid #ccc; --search-color: #666; + --search-bg-color: #fff; --search-active-color: var(--header-active-color); - --search-active-shadow: 0 0 3px 0px var(--text-selection-bg); - - /* Tabs */ - --tab-bg: transparent; - --tab-color: rgba(0, 0, 0, 0.5); - --tab-active-color: var(--color-primary); - --tab-border-size: 2px; - --tab-border: var(--tab-border-size) solid var(--tab-active-color); + --search-active-shadow: 0 6px 9px -2px var(--color-grey--dark); + --search-modal-input-height: 70px; /* Table */ --table-border: 1px solid #e2e2e2; @@ -119,14 +120,12 @@ $text-color: #000; --table-item-odd: #f4f4f4; /* Card */ - --card-bg: var(--color-bg); - --card-hover-translate: 10px; - --card-margin: $spacing-vertical * 2/3; - --card-max-width: $width-page-constrained; - --card-padding: $spacing-vertical * 2/3; --card-radius: 2px; - --card-link-scaling: 1.1; - --card-small-width: $spacing-vertical * 10; + --card-margin: $spacing-vertical * 2/3; + --card-wallet-color: var(--text-color-inverse); + + /* File Tile Card */ + --file-tile--media-size: 60px; /* Modal */ --modal-width: 440px; @@ -134,16 +133,10 @@ $text-color: #000; --modal-overlay-bg: rgba(#f5f5f5, 0.75); // --color-canvas: #F5F5F5 --modal-border: 1px solid rgb(204, 204, 204); - /* Menu */ - --menu-bg: var(--color-bg); - --menu-radius: 2px; - --menu-item-hover-bg: var(--color-bg-alt); - - /* Tooltip */ + // /* Tooltip */ --tooltip-width: 300px; --tooltip-bg: var(--color-bg); --tooltip-color: var(--text-color); - --tooltip-border: 1px solid #aaa; /* Scrollbar */ --scrollbar-radius: 10px; @@ -152,10 +145,7 @@ $text-color: #000; --scrollbar-thumb-active-bg: var(--color-primary); --scrollbar-track-bg: transparent; - /* Divider */ - --divider: 1px solid rgba(0, 0, 0, 0.12); - - /* Animation :) */ + // /* Animation :) */ --animation-duration: 0.3s; --animation-style: cubic-bezier(0.55, 0, 0.1, 1); } diff --git a/src/renderer/scss/all.scss b/src/renderer/scss/all.scss index 7d39cb43a..db8defe00 100644 --- a/src/renderer/scss/all.scss +++ b/src/renderer/scss/all.scss @@ -1,14 +1,11 @@ @charset "UTF-8"; @import '_reset'; @import '_vars'; -@import '_icons'; @import '_gui'; @import 'component/_table'; @import 'component/_button.scss'; @import 'component/_card.scss'; @import 'component/_file-download.scss'; -@import 'component/_file-selector.scss'; -@import 'component/_file-tile.scss'; @import 'component/_form-field.scss'; @import 'component/_header.scss'; @import 'component/_menu.scss'; @@ -18,14 +15,11 @@ @import 'component/_notice.scss'; @import 'component/_modal.scss'; @import 'component/_snack-bar.scss'; -@import 'component/_video.scss'; +@import 'component/_content.scss'; @import 'component/_pagination.scss'; @import 'component/_markdown-editor.scss'; @import 'component/_scrollbar.scss'; -@import 'component/_tabs.scss'; -@import 'component/_divider.scss'; -@import 'component/_checkbox.scss'; -@import 'component/_radio.scss'; -@import 'component/_shapeshift.scss'; @import 'component/_spinner.scss'; -@import 'page/_show.scss'; +@import 'component/_nav.scss'; +@import 'component/_file-list.scss'; +@import 'component/_search.scss'; diff --git a/src/renderer/scss/component/__divider.scss b/src/renderer/scss/component/__divider.scss deleted file mode 100644 index 00fbb74eb..000000000 --- a/src/renderer/scss/component/__divider.scss +++ /dev/null @@ -1,8 +0,0 @@ -.divider__horizontal { - border-top: var(--divider); - margin: 16px 0; -} - -.divider__vertical { - margin: 10px; -} diff --git a/src/renderer/scss/component/_button.scss b/src/renderer/scss/component/_button.scss index 576ca4c33..8b19a4be9 100644 --- a/src/renderer/scss/component/_button.scss +++ b/src/renderer/scss/component/_button.scss @@ -1,89 +1,193 @@ -@import '../mixin/link.scss'; - -$button-focus-shift: 12%; - -.button-set-item { - position: relative; - display: inline-block; - - + .button-set-item { - margin-left: var(--button-intra-margin); - } +button:disabled { + cursor: default; } -.button-block, -.faux-button-block { - display: inline-block; - height: var(--button-height); - line-height: var(--button-height); +.btn { + border: none; text-decoration: none; - border: 0 none; - text-align: center; - border-radius: var(--button-radius); - text-transform: uppercase; - .icon { - top: 0em; + cursor: pointer; + position: relative; + padding: 10px; + height: var(--btn-height); + min-width: var(--btn-height); + border-radius: var(--btn-radius); + background-color: var(--btn-bg-primary); + color: var(--btn-color-primary); + display: flex; + align-items: center; + justify-content: center; + fill: currentColor; // for proper icon color + font-size: 12px; + transition: all var(--animation-duration) var(--animation-style); + font-family: 'metropolis-medium'; + + &:not(:disabled) { + box-shadow: var(--box-shadow-button); } - .icon:first-child { - padding-right: 5px; + + &:hover { + box-shadow: none; + background-color: var(--btn-bg-primary-hover); } - .icon:last-child { + + .icon + .btn__label { padding-left: 5px; } - .icon:only-child { - padding-left: 0; - padding-right: 0; - } -} -.button-block { - cursor: pointer; - font-weight: 500; - font-size: 14px; - user-select: none; - transition: background var(--animation-duration) var(--animation-style); } -.button__content { - margin: 0 var(--button-padding); - display: flex; - .link-label { - text-decoration: none !important; +.btn.btn--alt { + color: var(--btn-color-alt); + background-color: var(--btn-bg-alt); + + &:disabled { + color: var(--color-help); + background-color: transparent; } } -.button-primary { - color: var(--button-primary-color); - background-color: var(--button-primary-bg); - box-shadow: var(--box-shadow-layer); - - &:focus { - //color: var(--button-primary-active-color); - //background-color:color: var(--button-primary-active-bg); - //box-shadow: $box-shadow-focus; - } -} -.button-alt { - background-color: var(--button-bg); - box-shadow: var(--box-shadow-layer); +.btn.btn--danger { + background-color: var(--btn-bg-danger); } -.button-text { - @include text-link(); +.btn.btn--inverse { + background-color: transparent; + box-shadow: none; + color: var(--btn-color-inverse); +} + +.btn.btn--link { + padding: 0; + margin: 0; + background-color: inherit; + font-size: 1em; + color: var(--btn-color-inverse); + border-radius: 0; display: inline-block; + min-width: 0; + box-shadow: none; + text-align: left; +} - .button__content { - margin: 0 var(--text-link-padding); +.btn.btn--external-link { + color: var(--btn-external-color); +} + +.btn.btn--secondary { + background-color: var(--btn-bg-secondary); +} + +.btn.btn--no-style { + font-size: inherit; + font-weight: inherit; + color: inherit; + background-color: inherit; + border-radius: 0; + padding: 0; + margin: 0; + box-shadow: none; + min-width: 0; +} + +.btn--link, +.btn--no-style { + height: auto; + + .btn__label, + .btn__content { + padding: 0; } } -.button-text-help { - @include text-link(var(--text-help-color)); - font-size: 0.8em; -} -.button--flat { - box-shadow: none !important; + +.btn.btn--disabled:disabled { + cursor: default; + + &.btn--primary { + background-color: rgba(0, 0, 0, 0.5); + } + + &:hover { + box-shadow: none; + } } -.button--submit { - font-family: inherit; - line-height: 0; +.btn.btn--uppercase { + text-transform: uppercase; +} + +.btn:not(.btn--no-padding):not(.btn--link) { + .btn__content { + padding: 0 8px; + display: flex; + align-items: center; + } +} + +.icon + .btn__label, +.btn__label + .icon { + margin-left: 5px; +} + +/* + Everything below this is variations of the default button classes + You must pass in a className, props will not set these classes, + if you use these in several different places they should probably + be applied via props +*/ + +.btn.btn--home-nav { + box-shadow: none; + + .btn__content { + padding: 0; + } +} + +.btn.btn--arrow { + width: var(--btn-arrow-width); + + &:disabled { + opacity: 0.3; + } +} + +.btn--uri-indicator { + transition: color var(--animation-duration) var(--animation-duration); + + &:hover { + color: var(--color-light-blue); + } +} + +.btn.btn--header-balance { + font-family: 'metropolis-medium'; + font-size: 13px; + + @media only screen and (min-width: $medium-breakpoint) { + font-size: 18px; + } + + @media only screen and (min-width: $large-breakpoint) { + font-size: 21px; + } + + .btn__label--balance { + color: var(--color-grey-dark); + } + + &:hover { + background-color: transparent; + + .btn__label--balance { + color: var(--btn-primary-bg); + } + } +} + +.btn.btn--file-actions { + background-color: var(--color-black); + color: var(--color-white); + opacity: 0.8; + border-radius: var(--btn-radius); + height: var(--btn-height); + padding: 0 3px; } diff --git a/src/renderer/scss/component/_card.scss b/src/renderer/scss/component/_card.scss index cef50a1fb..5cb1baae9 100644 --- a/src/renderer/scss/component/_card.scss +++ b/src/renderer/scss/component/_card.scss @@ -1,322 +1,400 @@ .card { margin-left: auto; margin-right: auto; - max-width: var(--card-max-width); - background: var(--card-bg); - box-shadow: var(--box-shadow-layer); border-radius: var(--card-radius); - margin-bottom: var(--card-margin); overflow: auto; user-select: text; - - //below added to prevent scrollbar on long titles when show page loads, would prefer a cleaner CSS solution - overflow-x: hidden; -} -.card--obscured { - position: relative; -} -.card--obscured .card__inner { - filter: blur(var(--nsfw-blur-intensity)); -} -.card__title-primary, -.card__title-identity, -.card__content, -.card__subtext, -.card__actions { - padding: 0 var(--card-padding); -} - -.card--small { - .card__title-primary, - .card__title-identity, - .card__actions, - .card__content, - .card__subtext { - padding: 0 calc(var(--card-padding) / 2); - } -} -.card__title-primary { - margin-top: var(--card-margin); - margin-bottom: var(--card-margin); -} -.card__title-primary .meta { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} -.card__title-identity { - margin: 16px 0; -} -.card__actions { - margin-top: var(--card-margin); - margin-bottom: var(--card-margin); - user-select: none; -} -.card__actions--bottom { - margin-top: $spacing-vertical * 1/3; - margin-bottom: $spacing-vertical * 1/3; - border-top: var(--divider); -} -.card__actions--form-submit { - margin-top: $spacing-vertical; - margin-bottom: var(--card-margin); -} -.card__action--right { - float: right; -} -.card__content { - margin-top: var(--card-margin); - margin-bottom: var(--card-margin); - table:not(:last-child) { - margin-bottom: var(--card-margin); - } -} - -.card__actions--only-vertical { - margin-left: 0; - margin-right: 0; - padding-left: 0; - padding-right: 0; -} - -.card__content--extra-vertical-space { - margin: $spacing-vertical 0; -} - -$font-size-subtext-multiple: 0.82; -.card__subtext { - color: var(--color-meta-light); - font-size: calc(var(--font-size-subtext-multiple) * 1em); - margin-top: $spacing-vertical * 1/3; - margin-bottom: $spacing-vertical * 1/3; -} -.card__subtext--allow-newlines { - white-space: pre-wrap; -} -.card__subtext--two-lines { - height: calc( - var(--font-size) * var(--font-size-subtext-multiple) * var(--font-line-height) * 2 - ); /*this is so one line text still has the proper height*/ -} -.card-overlay { - position: absolute; - left: 0px; - right: 0px; - top: 0px; - bottom: 0px; - padding: 20px; - background-color: var(--color-dark-overlay); - color: #fff; display: flex; - align-items: center; - font-weight: 600; -} - -.card__link { - display: block; - cursor: pointer; -} -.card--link { - transition: transform 0.2s var(--animation-style); -} -.card--link:hover { position: relative; - z-index: 1; - box-shadow: var(--box-shadow-focus); - transform: scale(var(--card-link-scaling)) translateX(var(--card-hover-translate)); - transform-origin: 50% 50%; - overflow-x: visible; - overflow-y: visible; -} -.card--link:hover ~ .card--link { - transform: translateX(calc(var(--card-hover-translate) * 2)); + flex-direction: column; } -.card__media { - background-size: cover; - background-repeat: no-repeat; - background-position: 50% 50%; -} - -.card__media--autothumb { - position: relative; -} -.card__media--autothumb.purple { - background-color: #9c27b0; -} -.card__media--autothumb.red { - background-color: #e53935; -} -.card__media--autothumb.pink { - background-color: #e91e63; -} -.card__media--autothumb.indigo { - background-color: #3f51b5; -} -.card__media--autothumb.blue { - background-color: #2196f3; -} -.card__media--autothumb.light-blue { - background-color: #039be5; -} -.card__media--autothumb.cyan { - background-color: #00acc1; -} -.card__media--autothumb.teal { - background-color: #009688; -} -.card__media--autothumb.green { - background-color: #43a047; -} -.card__media--autothumb.yellow { - background-color: #ffeb3b; -} -.card__media--autothumb.orange { - background-color: #ffa726; -} - -.card__media--autothumb .card__autothumb__text { - font-size: 2em; - width: 100%; - color: #ffffff; - text-align: center; - position: absolute; - top: 36%; -} - -.card__indicators { - float: right; +.card--section { + background-color: var(--color-white); + padding: $spacing-vertical; + margin-top: $spacing-vertical * 2/3; } .card--small { width: var(--card-small-width); overflow-x: hidden; white-space: normal; -} -.card--small .card__media { - height: calc(var(--card-small-width) * 9 / 16); + + .card__media { + padding-top: var(--video-aspect-ratio); + } + + .card__media-text { + // for the weird padding required for dynamic height + // this lets the text sit in the middle instead of the bottom + margin-top: calc(var(--video-aspect-ratio) * -1); + } + + .channel-name { + font-size: 12px; + } } -.card--form { - width: calc(var(--input-width) + var(--card-padding) * 2); +.card--link { + cursor: pointer; +} + +.card--pending { + opacity: 0.5; +} + +.card--wallet-balance { + background: url('../../../static/img/stripe-background.png') no-repeat; + background-size: cover; + color: var(--card-wallet-color); + justify-content: space-between; + + .card__subtitle { + color: var(--card-wallet-color); + } +} + +.card--disabled { + opacity: 0.3; +} + +.card__media { + background-size: cover; + background-repeat: no-repeat; + background-position: 50% 50%; + background-color: var(--color-placeholder); +} + +.card__media--no-img { + display: flex; + justify-content: center; + align-items: center; + position: relative; +} + +.card__media--nsfw { + background-color: var(--color-error); +} + +.card__title-identity--file { + display: flex; + align-items: center; + + .credit-amount, + .icon { + margin-top: $spacing-vertical * 1/3; + margin-left: $spacing-vertical * 2/3; + } +} + +.card__title-identity-icons { + display: flex; + align-items: center; + align-self: flex-start; +} + +.card__title { + font-size: 18px; +} + +.card__title--file { + font-family: 'metropolis-bold'; + font-size: 28px; + line-height: 36px; + padding-top: 20px; +} + +.card__title--small { + font-size: 14px; + line-height: 18px; + padding-top: 20px; +} + +.card__title--file { + padding-top: 0; + padding-bottom: 5px; } .card__subtitle { color: var(--color-help); - font-size: 0.85em; - line-height: calc(var(--font-line-height) * 1 / 0.85); + font-size: 14px; + font-family: 'metropolis-medium'; + + .icon { + margin-left: $spacing-vertical * 1/3; + } } -.card--file-subtitle { +.card__subtitle--file-info { display: flex; + align-items: center; } -// this is too specific -// it should be a helper class -// ex. ".m-padding-left" -// will come back to this during the redesign - sean -.card__publish-date { - padding-left: 20px; +.card__subtitle--block { + display: block; } -.card-series-submit { - margin-left: auto; - margin-right: auto; - max-width: var(--card-max-width); - padding: $spacing-vertical / 2; +.card__meta { + color: var(--color-help); + font-size: 14px; + font-family: 'metropolis-medium'; + padding-top: $spacing-vertical * 2/3; } -.card-row { - + .card-row { +// .card-media__internal__links should always be inside a card +.card { + .card-media__internal-links { + position: absolute; + top: $spacing-vertical * 2/3; + right: $spacing-vertical * 2/3; + } +} + +.card--small { + .card-media__internal-links { + top: $spacing-vertical * 1/3; + right: $spacing-vertical * 1/3; + } +} + +// Channel info with buttons on the right side +.card__channel-info { + display: flex; + justify-content: space-between; + align-items: center; + padding: $spacing-width 0; +} + +.card__channel-info--large { + padding-top: 0; + padding-bottom: $spacing-width; +} + +.card__content { + margin-top: var(--card-margin); +} + +.card__subtext-title { + color: var(--color-black); + font-size: calc(var(--font-size-subtext-multiple) * 1.5em); + + &:not(:first-of-type) { + margin-top: $spacing-vertical * 3/2; + } +} + +.card__subtext { + color: var(--color-grey-dark); + font-size: calc(var(--font-size-subtext-multiple) * 1em); + padding-top: $spacing-vertical * 1/3; + word-break: break-word; + font-family: 'metropolis-medium'; + font-size: 13px; +} + +.card__actions { + margin-top: var(--card-margin); + display: flex; + + &:not(.card__actions--vertical) .btn:nth-child(n + 2) { + margin-left: $spacing-vertical / 3; + } +} + +.card__actions--no-margin { + margin-top: 0; +} + +.card__actions--vertical { + flex-direction: column; + margin-top: 0; + align-items: flex-end; + + .btn:not(:first-child) { margin-top: $spacing-vertical * 1/3; } } -.card-row__placeholder { - padding-bottom: $spacing-vertical; -} +.card__actions--center { + align-items: center; + justify-content: center; -$padding-top-card-hover-hack: 20px; -$padding-right-card-hover-hack: 30px; - -.card-row__items { - width: 100%; - overflow: hidden; - - /*hacky way to give space for hover */ - padding-top: $padding-top-card-hover-hack; - margin-top: -1 * $padding-top-card-hover-hack; - padding-right: $padding-right-card-hover-hack; - margin-right: -1 * $padding-right-card-hover-hack; - > .card { - vertical-align: top; - display: inline-block; - } - > .card + .card { - margin-left: 16px; + .btn { + margin: 0 $spacing-vertical / 3; } } -.card-row--small { +.card__actions-top-corner { + position: absolute; + top: $spacing-vertical; + right: $spacing-vertical; +} + +/* + .card-row is used on the discover/subscriptions page + It is a list of cards that extend past the right edge of the screen + There are left/right arrows to scroll the cards and view hidden content +*/ +.card-row { overflow: hidden; white-space: nowrap; width: 100%; min-width: var(--card-small-width); - margin-right: $spacing-vertical; + padding-top: $spacing-vertical; + + &:first-of-type { + padding-top: 0; + } + + &:last-of-type { + padding-bottom: $spacing-vertical * 2/3; + } } + .card-row__header { - margin-bottom: 16px; + display: flex; + flex-direction: row; + justify-content: space-between; + // specific padding-left styling is needed here + // this needs to be used on a page with noPadding + // doing so allows the content to scroll to the edge of the screen + padding-left: $spacing-width; +} + +.card-row__title { + display: flex; + align-items: center; + font-size: 18px; + line-height: 24px; +} + +.card-row__scroll-btns { + display: flex; + padding-right: $spacing-width - 10px; // page padding - 1/2 width of arrow button } .card-row__scrollhouse { - position: relative; - /*hacky way to give space for hover */ - padding-right: $padding-right-card-hover-hack; -} + padding-top: $spacing-vertical * 2/3; + overflow: hidden; -.card-row__nav { - position: absolute; - padding: 0 var(--card-margin); - height: 100%; - top: calc($padding-top-card-hover-hack - var(--card-margin)); -} -.card-row__nav .card-row__scroll-button { - background: var(--card-bg); - color: var(--color-help); - box-shadow: var(--box-shadow-layer); - padding: $spacing-vertical $spacing-vertical / 2; - position: absolute; - cursor: pointer; - left: 0; - top: 36%; - z-index: 2; - opacity: 0.8; - transition: transform 0.2s var(--animation-style); - - &:hover { - opacity: 1; - transform: scale(calc(var(--card-link-scaling) * 1.1)); + .card:first-of-type { + margin-left: $spacing-width; + } + + .card:last-of-type { + margin-right: $spacing-vertical * 2/3; } -} -.card-row__nav--left { - left: 0; -} -.card-row__nav--right { - right: 0; } /* -if we keep doing things like this, we should add a real grid system, but I'm going to be a selective dick about it - Jeremy - */ -.card-grid { - $margin-card-grid: $spacing-vertical * 2/3; - display: flex; - flex-wrap: wrap; - > .card { - width: $width-page-constrained / 2 - $margin-card-grid / 2; - flex-grow: 1; + How cards are displayed in lists +*/ +.card__list { + .card { + display: inline-block; + vertical-align: top; + margin-bottom: 60px; + + @media only screen and (max-width: $medium-breakpoint) { + width: calc((100% / 3) - (40px / 3)); + + &:not(:nth-child(3n + 1)) { + margin-left: 20px; + } + } } - > .card:nth-of-type(2n - 1):not(:last-child) { - margin-right: $margin-card-grid; + + @media only screen and (min-width: $medium-breakpoint) { + .card { + width: calc((100% / 4) - (60px / 4)); + + &:not(:nth-child(4n + 1)) { + margin-left: 20px; + } + } + } +} + +.card__list--rewards { + .card { + display: inline-block; + width: calc(50% - 10px); + margin-bottom: 20px; + vertical-align: top; + + &:not(:nth-child(2n + 1)) { + margin-left: 20px; + } + } +} + +.card-row__scrollhouse { + padding-top: $spacing-vertical * 2/3; + overflow: hidden; + + .card { + display: inline-block; + vertical-align: top; + overflow: visible; + // -- three cards on a screen + // -- minus 12px for 1/3 of the page padding (36px) + // -- minus 20px for the card's margin + // Ideally we should be able to use $spacing-width / 3, but I'm not sure + // how inside the calc function + width: calc((100% / 3) - 12px - 20px); + } + + .card:not(:first-of-type) { + margin-left: 20px; + } + + .card:last-of-type { + margin-right: 20px; + } + + @media only screen and (min-width: $medium-breakpoint) { + .card { + width: calc((100% / 4) - 12px - 20px); + } + } +} + +.card__media--autothumb { + color: red !important; +} + +.card__media { + &.card__media--autothumb.purple { + background-color: #9c27b0; + } + &.card__media--autothumb.red { + background-color: #e53935; + } + &.card__media--autothumb.pink { + background-color: #e91e63; + } + &.card__media--autothumb.indigo { + background-color: #3f51b5; + } + &.card__media--autothumb.blue { + background-color: #2196f3; + } + &.card__media--autothumb.light-blue { + background-color: #039be5; + } + &.card__media--autothumb.cyan { + background-color: #00acc1; + } + &.card__media--autothumb.teal { + background-color: #009688; + } + &.card__media--autothumb.green { + background-color: #43a047; + } + &.card__media--autothumb.yellow { + background-color: #ffeb3b; + } + &.card__media--autothumb.orange { + background-color: #ffa726; } } diff --git a/src/renderer/scss/component/_channel-indicator.scss b/src/renderer/scss/component/_channel-indicator.scss index 7c437780c..2291cc933 100644 --- a/src/renderer/scss/component/_channel-indicator.scss +++ b/src/renderer/scss/component/_channel-indicator.scss @@ -5,12 +5,6 @@ text-overflow: ellipsis; } -// this shouldn't know about the card width -// will come back to this for the redesign - sean -.channel-name--small { - width: calc(var(--card-small-width) * 2 / 3); -} - .channel-indicator__icon--invalid { color: var(--color-error); } diff --git a/src/renderer/scss/component/_checkbox.scss b/src/renderer/scss/component/_checkbox.scss deleted file mode 100644 index d4796afe6..000000000 --- a/src/renderer/scss/component/_checkbox.scss +++ /dev/null @@ -1,69 +0,0 @@ -*, -*:before, -*:after { - box-sizing: border-box; -} - -$md-checkbox-checked-color: var(--color-primary); -$md-checkbox-border-color: var(--input-border-color); -$md-checkbox-size: 20px; -$md-checkbox-padding: 4px; -$md-checkmark-width: 2px; -$md-checkmark-color: #fff; - -.form-field--checkbox { - position: relative; - - label { - cursor: pointer; - &:before, - &:after { - content: ''; - position: absolute; - left: 0; - top: 0; - } - - &:before { - // box - width: $md-checkbox-size; - height: $md-checkbox-size; - background: transparent; - border: 2px solid $md-checkbox-border-color; - border-radius: 2px; - cursor: pointer; - transition: background 0.3s; - } - - &:after { - // checkmark - } - } - - input[type='checkbox'] { - outline: 0; - visibility: hidden; - margin-right: 16px; - - &:checked { - + label:before { - background: $md-checkbox-checked-color; - border: none; - } - + label:after { - $md-checkmark-size: $md-checkbox-size - 2 * $md-checkbox-padding; - - transform: rotate(-45deg); - - top: ($md-checkbox-size / 2) - ($md-checkmark-size / 4) - $md-checkbox-size/10; - left: $md-checkbox-padding; - width: $md-checkmark-size; - height: $md-checkmark-size / 2; - - border: $md-checkmark-width solid $md-checkmark-color; - border-top-style: none; - border-right-style: none; - } - } - } -} diff --git a/src/renderer/scss/component/_content.scss b/src/renderer/scss/component/_content.scss new file mode 100644 index 000000000..11a16cbdf --- /dev/null +++ b/src/renderer/scss/component/_content.scss @@ -0,0 +1,56 @@ +.content__embedded { + background-color: var(--color-black); + width: 100%; + padding-top: var(--video-aspect-ratio); + position: relative; + display: flex; + align-items: center; + justify-content: center; + + video { + height: 100%; + width: 100%; + position: absolute; + top: 0; + left: 0; + } +} + +// Video thumbnail with play/download button +.content__cover { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-size: cover; + background-repeat: no-repeat; + background-position: 50% 50%; + display: flex; + align-items: center; + justify-content: center; + + &:not(.card__media--nsfw) { + background-color: var(--color-black); + } +} + +.content__view { + margin-top: -56.25%; +} + +.content__loading { + display: flex; + flex-direction: column; + align-items: center; + padding: 0 20px; +} + +.content__loading-text { + color: var(--color-white); +} + +img { + max-height: 100%; + max-width: 100%; +} diff --git a/src/renderer/scss/component/_file-download.scss b/src/renderer/scss/component/_file-download.scss index 04eb6fc90..642d6be7e 100644 --- a/src/renderer/scss/component/_file-download.scss +++ b/src/renderer/scss/component/_file-download.scss @@ -1,17 +1,19 @@ .file-download, .file-download__overlay { - .button__content { - margin: 0 var(--text-link-padding); - } + padding: 5px; } .file-download { position: relative; color: var(--color-download); + font-size: 12px; + font-family: 'metropolis-medium'; } + .file-download__overlay { background: var(--color-download); - color: var(--color-bg); + color: var(--color-download-overlay); + border-radius: var(--btn-radius); position: absolute; white-space: nowrap; overflow: hidden; diff --git a/src/renderer/scss/component/_file-list.scss b/src/renderer/scss/component/_file-list.scss new file mode 100644 index 000000000..a35ac115b --- /dev/null +++ b/src/renderer/scss/component/_file-list.scss @@ -0,0 +1,44 @@ +.file-list { + display: grid; + grid-gap: $spacing-vertical * 2/3; + grid-template-columns: repeat(auto-fill, var(--card-small-width)); + margin-top: $spacing-vertical * 2/3; +} + +.file-list__sort { + display: flex; + justify-content: flex-end; + padding-bottom: 20px; +} + +.file-list__header { + margin-top: $spacing-vertical * 4/3; + font-size: 18px; +} + +.file-tile { + display: flex; + margin-top: $spacing-vertical; + max-width: 260px; + height: var(--file-tile--media-size); + + .card__media { + flex: 0 0 var(--file-tile--media-size); + } + + .card__subtitle { + line-height: 1; + } +} + +.file-tile--fullwidth { + max-width: none; +} + +.file-tile__info { + margin-left: $spacing-vertical * 1/3; +} + +.file-tile__uri { + color: var(--color-grey-dark); +} diff --git a/src/renderer/scss/component/_file-selector.scss b/src/renderer/scss/component/_file-selector.scss deleted file mode 100644 index 8172da203..000000000 --- a/src/renderer/scss/component/_file-selector.scss +++ /dev/null @@ -1,23 +0,0 @@ -.form-field--file, -.form-field--directory { - width: 100%; -} - -.file-selector { - display: flex; -} - -.file-selector__choose-button { - font-family: inherit; - line-height: 0; - color: inherit; - margin-right: 16px; -} - -.file-selector__path { - font-size: 14px; - flex-grow: 2; - .input-copyable { - width: 100%; - } -} diff --git a/src/renderer/scss/component/_file-tile.scss b/src/renderer/scss/component/_file-tile.scss deleted file mode 100644 index eccb74446..000000000 --- a/src/renderer/scss/component/_file-tile.scss +++ /dev/null @@ -1,22 +0,0 @@ -$height-file-tile: $spacing-vertical * 6; -.file-tile__row { - overflow: hidden; - height: $height-file-tile; - //also a hack - .card__media { - height: $height-file-tile; - max-width: $height-file-tile; - width: $height-file-tile; - margin-right: $spacing-vertical / 2; - float: left; - } - //basically everything here is a hack now - .file-tile__content { - padding-top: $spacing-vertical * 1/3; - margin-left: $height-file-tile + $spacing-vertical / 2; - } - - .card__title-primary { - margin-top: 0; - } -} diff --git a/src/renderer/scss/component/_form-field.scss b/src/renderer/scss/component/_form-field.scss index a63352589..e4c9d4287 100644 --- a/src/renderer/scss/component/_form-field.scss +++ b/src/renderer/scss/component/_form-field.scss @@ -1,195 +1,89 @@ -.form-row-submit { - margin-top: $spacing-vertical; -} -.form-row-submit--with-footer { - margin-bottom: $spacing-vertical; -} - -.form-row-phone { +.form-row { display: flex; + flex-direction: row; + align-items: flex-end; - .form-field__input-text { - margin-left: 5px; - width: calc(0.85 * var(--input-width)); - } -} - -.form-row__label-row { - margin-top: $spacing-vertical * 5/6; - margin-bottom: 0px; - line-height: 1; - font-size: calc(0.9 * var(--font-size)); -} -.form-row__label-row--prefix { - float: left; - margin-right: 5px; -} - -.form-row--focus { - .form-field__label, - .form-field__prefix { - color: var(--color-primary) !important; - } -} - -.form-field { - display: inline-block; - margin: 8px 0; - - select { - transition: outline var(--transition-duration) var(--transition-type); - box-sizing: border-box; - padding-left: 5px; - padding-right: 5px; - height: var(--select-height); - background: var(--select-bg); - color: var(--select-color); - &:focus { - outline: var(--input-border-size) solid var(--color-primary); - } + .form-field:not(:first-of-type) { + padding-left: $spacing-vertical; } - input[type='radio'], - input[type='checkbox'] { - &:checked + .form-field__label { - color: var(--text-color); - } + &.form-row--padded { + padding-top: $spacing-vertical * 2/3; } - input[type='text'].input-copyable { - background: var(--input-bg); - color: var(--input-disabled-color); - line-height: 1; - padding-top: $spacing-vertical * 1/3; - padding-bottom: $spacing-vertical * 1/3; - padding-left: 5px; - padding-right: 5px; + &.form-row--centered { + align-items: center; + } + + .form-field.form-field--stretch { width: 100%; - font-family: 'Consolas', 'Lucida Console', 'Adobe Source Code Pro', monospace; - &.input-copyable--with-copy-btn { - width: 85%; + input { + width: 100%; + max-width: 400px; } } - input[readonly] { - color: var(--input-disabled-color) !important; - border-bottom: 1px dashed var(--input-disabled-border-color) !important; + input + .btn { + margin-left: $spacing-vertical * 1/3; } - - input[readonly]:focus { - background: var(--input-bg) !important; - border-bottom: 1px dashed var(--input-disabled-border-color) !important; - } - - textarea, - input[type='text'], - input[type='password'], - input[type='email'], - input[type='number'], - input[type='search'], - input[type='date'] { - background: var(--input-bg); - border-bottom: var(--input-border-size) solid var(--input-border-color); - caret-color: var(--color-primary); - color: var(--input-color); - cursor: pointer; - line-height: 1; - padding: 0 1px 8px 1px; - box-sizing: border-box; - -webkit-appearance: none; - transition: all var(--transition-duration) var(--transition-type); - - &::-webkit-input-placeholder { - color: var(--input-placeholder-color); - opacity: var(--input-placeholder-opacity) !important; - } - - &:focus { - border-color: var(--color-primary); - background: var(--input-active-bg); - } - - &:hover:not(:focus) { - border-color: var(--input-hover-border-color); - } - - &.form-field__input--error { - border-color: var(--color-error); - } - - &.form-field__input--inline { - padding-top: 0; - padding-bottom: 0; - border-bottom-width: var(--input-border-size); - margin-left: 8px; - margin-right: 8px; - } - } - - textarea { - padding: 2px; - border: var(--input-border-size) solid var(--input-border-color); - } -} -.form-field--address { - width: 100%; } .form-field--SimpleMDE { display: block; + width: 100%; } -.form-field__label, -.form-row__label { - color: var(--form-label-color); - &[for] { - cursor: pointer; +.form-field__input { + display: flex; + padding-top: $spacing-vertical / 3; + height: 36px; + + input[type='checkbox'], + input[type='radio'] { + margin-top: 5px; } } -.form-row__label-row .form-field__label--error { - /*the row restriction is to prevent coloring checkboxes and radio labels*/ - color: var(--color-error); +.form-field__help, +.form-field__label, +.form-field__error { + font-size: 12px; + font-family: 'metropolis-medium'; } -.form-field__input-text { - width: var(--input-width); +.form-field__label { + color: var(--color-black); } -.form-field__prefix { - margin-right: 4px; -} -.form-field__postfix { - margin-left: 4px; -} - -.form-field__input-number { - width: 70px; - text-align: right; -} - -.form-field--textarea { - width: 100%; -} -.form-field__input-textarea { - width: 100%; -} - -.form-field__error, -.form-field__helper { - margin-top: $spacing-vertical * 1/3; - font-size: 0.8em; - transition: opacity var(--transition-duration) var(--transition-type); +.form-field__help { + color: var(--color-grey-dark); + padding-top: $spacing-vertical * 1/3; } .form-field__error { color: var(--color-error); } -.form-field__helper { - color: var(--color-help); + +.form-field__prefix, +.form-field__postfix { + font-family: 'metropolis-medium'; } -.form-field__input.form-field__input-SimpleMDE .CodeMirror-scroll { - height: auto; +.form-field__prefix { + padding-right: $spacing-vertical * 1/3; +} + +.form-field__postfix { + padding-left: $spacing-vertical * 1/3; +} + +// Not sure if I like these +// Maybe this should be in gui.scss? +.input--price-amount { + width: 60px; +} + +.input--address { + width: 370px; } diff --git a/src/renderer/scss/component/_header.scss b/src/renderer/scss/component/_header.scss index a8967d0eb..6df42f34e 100644 --- a/src/renderer/scss/component/_header.scss +++ b/src/renderer/scss/component/_header.scss @@ -1,64 +1,19 @@ -#header { - color: var(--header-color); - background: var(--header-bg); +.header { + grid-area: header; display: flex; - align-items: center; - justify-content: space-around; - position: fixed; - box-shadow: var(--box-shadow-layer); - top: 0; - left: 0; - width: 100%; - z-index: 3; - padding: $spacing-vertical / 2; - box-sizing: border-box; -} -.header__item { - padding-left: $spacing-vertical / 4; - padding-right: $spacing-vertical / 4; - .button-alt { - background: var(--header-button-bg) !important; - font-size: 1em; - } - .button-alt:hover { - background: var(--header-button-hover-bg) !important; - } + z-index: 1; + justify-content: space-between; + padding: $spacing-width $spacing-width 0 $spacing-width; + background-color: var(--color-bg); + // height: 100px; } -.header__item--wunderbar { - flex-grow: 1; -} +.header__actions-right { + margin-left: auto; + padding-left: $spacing-vertical / 2; + display: flex; -.wunderbar { - position: relative; - .icon { - position: absolute; - left: 10px; - top: $spacing-vertical / 2 - 4px; //hacked - } -} - -.wunderbar--active .icon-search { - color: var(--color-primary); -} - -// below styles should be inside the common input styling -// will come back to this with the redesign - sean -.wunderbar__input { - background: var(--search-bg); - width: 100%; - color: var(--search-color); - height: $spacing-vertical * 1.5; - line-height: $spacing-vertical * 1.5; - padding-left: 38px; - padding-right: 5px; - border-radius: 2px; - border: var(--search-border); - transition: box-shadow var(--transition-duration) var(--transition-type); - &:focus { - background: var(--search-active-bg); - color: var(--search-active-color); - box-shadow: var(--search-active-shadow); - border-color: var(--color-primary); + .btn { + margin-left: $spacing-vertical * 1/3; } } diff --git a/src/renderer/scss/component/_load-screen.scss b/src/renderer/scss/component/_load-screen.scss index 05cce635e..a34dd2d89 100644 --- a/src/renderer/scss/component/_load-screen.scss +++ b/src/renderer/scss/component/_load-screen.scss @@ -1,6 +1,6 @@ .load-screen { color: white; - background: var(--color-brand); + background: var(--color-primary); background-size: cover; min-height: 100vh; min-width: 100vw; @@ -10,20 +10,24 @@ justify-content: center; } +.load-screen__title { + font-family: 'metropolis-bold'; + font-size: 60px; + line-height: 100px; +} + .load-screen__message { - margin-top: 24px; - width: 325px; + font-family: 'metropolis-semibold'; + font-size: 16px; + line-height: 20px; + margin-top: $spacing-vertical * 2/3; text-align: center; } .load-screen__details { - color: var(--color-load-screen-text); -} - -.load-screen__details--warning { - color: white; -} - -.load-screen__cancel-link { - color: white; + font-family: 12px 'metropolis-medium'; + font-size: 12px; + line-height: 1; + padding-top: $spacing-vertical * 2/3; + max-width: 400px; } diff --git a/src/renderer/scss/component/_modal.scss b/src/renderer/scss/component/_modal.scss index d5a561334..5d58e46d7 100644 --- a/src/renderer/scss/component/_modal.scss +++ b/src/renderer/scss/component/_modal.scss @@ -30,10 +30,45 @@ padding: $spacing-vertical; box-shadow: var(--box-shadow-layer); max-width: var(--modal-width); - word-break: break-word; } +.modal--fullscreen { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: $spacing-vertical; + background: var(--modal-bg); + overflow-y: scroll; + + .main { + // I will come back to these when I do media queries + // They should be variables + padding: 130px 80px 0 80px; + } +} + +// For slide down animation on the search modal +// Slide down isn't possible without doing a lot of re-work to the modal component +.ReactModal__Overlay { + .modal--fullscreen { + transition: height var(--animation-style) var(--animation-style); + height: 0; + } + + &--after-open { + .modal--fullscreen { + height: 100vh; + } + } + + &--before-close { + height: 0; + } +} + .modal__header { margin-bottom: $spacing-vertical * 2/3; text-align: center; @@ -72,6 +107,7 @@ max-width: none; width: var(--modal-width); } + .error-modal__error-list { /*shitty hack/temp fix for long errors making modal unusable*/ border: 1px solid var(--input-border-color); @@ -81,3 +117,7 @@ max-width: var(--modal-width); overflow-y: hidden; } + +.error-modal__content p { + padding: 0 0 $spacing-vertical $spacing-vertical; +} diff --git a/src/renderer/scss/component/_nav.scss b/src/renderer/scss/component/_nav.scss new file mode 100644 index 000000000..54c432142 --- /dev/null +++ b/src/renderer/scss/component/_nav.scss @@ -0,0 +1,98 @@ +.nav { + grid-area: nav; + background-color: var(--color-nav-bg); + padding: $spacing-width; + + hr { + width: 24px; + margin: 36px 0; + // width: 40px; + border: solid 1px var(--color-grey); + margin: $spacing-vertical $spacing-vertical * 2/3; + } +} + +.nav__actions-top { + display: flex; + justify-content: space-between; +} + +.nav__actions-history { + display: flex; +} + +// Sidebar links +.nav__primary { + padding-top: 80px; +} + +.nav__link { + // padding-top: $spacing-vertical / 3; + color: var(--color-grey-dark); + white-space: nowrap; + + .btn__label { + margin-left: $spacing-vertical * 1/3; + } + + .btn { + font: normal 400 16px/36px 'metropolis-semibold'; + + @media only screen and (min-width: $medium-breakpoint) { + font: normal 400 18px/40px 'metropolis-semibold'; + } + + @media only screen and (min-width: $large-breakpoint) { + font: normal 400 21px/50px 'metropolis-semibold'; + } + } + + .btn:hover { + color: var(--color-black); + } +} + +.nav__link--sub { + margin-left: 5px; + padding-left: $spacing-vertical * 2/3; + + .btn { + font: normal 400 14px/30px 'metropolis-medium'; + + @media only screen and (min-width: $medium-breakpoint) { + font: normal 400 15px/30px 'metropolis-semibold'; + } + + @media only screen and (min-width: $large-breakpoint) { + font: normal 400 18px/40px 'metropolis-medium'; + } + } +} + +.nav__link--active { + color: var(--color-black); +} + +.nav__sub-links { + padding-bottom: $spacing-vertical * 1/3; +} + +// Sub links animations +// The -appear, -leave classes are added by 'react-transition-group' +.nav__sub-appear, +.nav__sub-leave { + max-height: 0; + opacity: 0; +} + +.nav__sub-appear.nav__sub-appear-active { + // using max-height is a hack to animate to height "auto" + // Needs to be some arbitrarily large height + max-height: 500px; + opacity: 1; + transition: all var(--animation-duration) var(--animation-style); +} + +.nav__sub { + padding-top: 5px; +} diff --git a/src/renderer/scss/component/_radio.scss b/src/renderer/scss/component/_radio.scss deleted file mode 100644 index 4d511816f..000000000 --- a/src/renderer/scss/component/_radio.scss +++ /dev/null @@ -1,54 +0,0 @@ -$md-radio-checked-color: var(--color-primary); -$md-radio-border-color: var(--input-border-color); -$md-radio-size: 20px; -$md-radio-checked-size: 10px; -$md-radio-ripple-size: 15px; - -.form-field--radio { - position: relative; - - label { - cursor: pointer; - - &:before, - &:after { - content: ''; - position: absolute; - left: 0; - top: 0; - border-radius: 50%; - transition: all 0.3s ease; - transition-property: transform, border-color; - } - - &:before { - width: $md-radio-size; - height: $md-radio-size; - background: transparent; - border: 2px solid $md-radio-border-color; - cursor: pointer; - } - - &:after { - top: $md-radio-size / 2 - $md-radio-checked-size / 2; - left: $md-radio-size / 2 - $md-radio-checked-size / 2; - width: $md-radio-checked-size; - height: $md-radio-checked-size; - transform: scale(0); - background: $md-radio-checked-color; - } - } - - input[type='radio'] { - visibility: hidden; - margin-right: 16px; - - &:checked + label:before { - border-color: $md-radio-checked-color; - } - - &:checked + label:after { - transform: scale(1); - } - } -} diff --git a/src/renderer/scss/component/_search.scss b/src/renderer/scss/component/_search.scss new file mode 100644 index 000000000..b172f67a4 --- /dev/null +++ b/src/renderer/scss/component/_search.scss @@ -0,0 +1,97 @@ +.wunderbar { + z-index: 1; + flex: 1; + display: flex; + min-width: 175px; + cursor: text; + position: relative; + + > .icon { + position: absolute; + left: 10px; + top: 10px; + } +} + +.wunderbar__input { + height: var(--btn-height); + border-radius: var(--btn-radius); + width: 100%; + max-width: 700px; + color: var(--search-color); + background-color: var(--search-bg-color); + box-shadow: var(--box-shadow-wunderbar); + padding: 10px; + padding-left: 30px; + font-size: 13px; + font-family: 'metropolis-medium'; + display: flex; + align-items: center; + justify-content: center; + border-bottom: none; + + &:focus { + background-color: var(--color-bg); + border-radius: 0; + border-bottom: 1px solid var(--color-grey); + box-shadow: var(--box-shadow-button); + } +} + +.wunderbar__menu { + max-width: 100px; + overflow-x: hidden; +} + +.wunderbar__suggestion { + padding: 5px 10px; + background-color: var(--header-bg); + cursor: pointer; + display: flex; + align-items: center; + text-overflow: ellipsis; + font-family: 'metropolis-medium'; + + &:not(:first-of-type) { + border-top: 1px solid var(--color-divider); + } +} + +.wunderbar__suggestion-label { + padding-left: $spacing-vertical; +} + +.wunderbar__suggestion-label--action { + margin-left: $spacing-vertical * 1/3; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.wunderbar__active-suggestion { + background-color: var(--color-secondary); +} + +// Search modal +// Input field used inside search modal +.search__wrapper { + height: var(--search-modal-input-height); +} + +.search__input { + font-family: 'metropolis-bold'; + background: var(--color-black); + font-size: var(--search-modal-input-height); + color: var(--color-black); + background: var(--modal-bg); + width: 100%; +} + +.search__results { + display: flex; + padding-bottom: $spacing-vertical; + + .search-result__column { + flex: 0 0 270px; + } +} diff --git a/src/renderer/scss/component/_shapeshift.scss b/src/renderer/scss/component/_shapeshift.scss deleted file mode 100644 index cbe040180..000000000 --- a/src/renderer/scss/component/_shapeshift.scss +++ /dev/null @@ -1,39 +0,0 @@ -// Can't think of a better way to do this -// The initial shapeshift form is 311px tall -// the .shapeshift__initial-wrapper class is only added when the form is being loaded -// Once the form is rendered, there is a very smooth transition because the height doesn't change -.shapeshift__wrapper.shapeshift__initial-wrapper { - min-height: 346px; -} - -.shapeshift__content { - .spinner { - margin-top: $spacing-vertical * 3; - } -} - -.shapeshift__tx-info { - min-height: 63px; -} - -.shapeshift__deposit-address-wrapper { - display: flex; - flex-direction: row; - - * { - align-self: center; - } -} - -// this should be pulled out into it's own styling when we add more qr codes -.shapeshift__qrcode { - // don't use a variable here. adds a white border for easier reading in dark mode - // needs to stay the same no matter what theme is present - background-color: #fff; - padding: 2px; - margin-left: 40px; -} - -.shapeshift__link { - padding-left: 10px; -} diff --git a/src/renderer/scss/component/_snack-bar.scss b/src/renderer/scss/component/_snack-bar.scss index ccc81e0b9..3ded1d68a 100644 --- a/src/renderer/scss/component/_snack-bar.scss +++ b/src/renderer/scss/component/_snack-bar.scss @@ -1,11 +1,5 @@ -$padding-snack-horizontal: $spacing-vertical; - .snack-bar { - $height-snack: $spacing-vertical * 2; - $padding-snack-vertical: $spacing-vertical / 4; - - line-height: $height-snack - $padding-snack-vertical * 2; - padding: $padding-snack-vertical $padding-snack-horizontal; + padding: $spacing-vertical; position: fixed; top: $spacing-vertical; left: 0; @@ -13,18 +7,14 @@ $padding-snack-horizontal: $spacing-vertical; margin-left: auto; margin-right: auto; min-width: 300px; - max-width: $width-page-constrained - $spacing-vertical * 2; + max-width: var(--snack-bar-width); background: var(--color-dark-overlay); color: #f0f0f0; - display: flex; justify-content: space-between; align-items: center; - border-radius: 2px; - transition: all var(--transition-duration) var(--transition-type); - z-index: 10000; /*hack to get it over react modal */ } @@ -32,7 +22,7 @@ $padding-snack-horizontal: $spacing-vertical; display: inline-block; text-transform: uppercase; color: var(--color-primary-light); - margin: 0px 0px 0px $padding-snack-horizontal; + margin: 0px 0px 0px $spacing-vertical; min-width: min-content; &:hover { text-decoration: underline; diff --git a/src/renderer/scss/component/_spinner.scss b/src/renderer/scss/component/_spinner.scss index f3e0485f7..09433cbb1 100644 --- a/src/renderer/scss/component/_spinner.scss +++ b/src/renderer/scss/component/_spinner.scss @@ -1,58 +1,49 @@ .spinner { - position: relative; - width: 11em; - height: 11em; - margin: 20px auto; - font-size: 3px; - border-radius: 50%; + margin: $spacing-vertical * 1/3; + width: 50px; + height: 40px; + text-align: center; + font-size: 10px; - background: linear-gradient(to right, #fff 10%, rgba(255, 255, 255, 0) 50%); - animation: spin 1.4s infinite linear; - transform: translateZ(0); + .rect { + display: inline-block; + height: 100%; + width: 6px; + margin: 0 2px; + background-color: var(--color-white); + animation: sk-stretchdelay 1.2s infinite ease-in-out; - @keyframes spin { - from { - transform: rotate(0deg); + &.rect2 { + animation-delay: -1.1s; } - to { - transform: rotate(360deg); + + &.rect3 { + animation-delay: -1s; } - } - &:before, - &:after { - content: ''; - position: absolute; - top: 0; - left: 0; - } + &.rect4 { + animation-delay: -0.9s; + } - &:before { - width: 50%; - height: 50%; - background: #fff; - border-radius: 100% 0 0 0; - } - - &:after { - height: 75%; - width: 75%; - margin: auto; - bottom: 0; - right: 0; - background: #000; - border-radius: 50%; + &.rect5 { + animation-delay: -0.8s; + } } } -.spinner.spinner--dark { - background: linear-gradient(to right, var(--button-primary-bg) 10%, var(--color-bg) 50%); - - &:before { - background: var(--button-primary-bg); - } - - &:after { - background: var(--color-bg); +.spinner--dark { + .rect { + background-color: var(--color-black); + } +} + +@keyframes sk-stretchdelay { + 0%, + 40%, + 100% { + transform: scaleY(0.4); + } + 20% { + transform: scaleY(1); } } diff --git a/src/renderer/scss/component/_table.scss b/src/renderer/scss/component/_table.scss index 428c5d152..c5df4f48e 100644 --- a/src/renderer/scss/component/_table.scss +++ b/src/renderer/scss/component/_table.scss @@ -1,40 +1,51 @@ -table.table-standard { +table.table { word-wrap: break-word; max-width: 100%; + text-align: left; + margin-top: $spacing-width; + + tr td:first-of-type, + tr th:first-of-type { + padding-left: $spacing-vertical * 2/3; + } + + tr td:last-of-type, + tr th:last-of-type { + padding-right: $spacing-vertical * 2/3; + } + + thead { + border-bottom: 1px solid var(--color-grey); + } th, td { - padding: $spacing-vertical/2 8px; + font-size: 13px; } + th { - font-weight: 500; - font-size: 0.9em; + font-family: 'metropolis-semibold'; } + td { - vertical-align: top; - } - thead th, - > tr:first-child th { - vertical-align: bottom; - font-weight: 500; - font-size: 0.9em; - padding: $spacing-vertical/4 + 1 8px $spacing-vertical/4-2; - text-align: left; - border-bottom: var(--table-border); - img { - vertical-align: text-bottom; - } - &.text-center { - text-align: center; + font-family: 'metropolis-medium'; + color: var(--color-grey-dark); + padding: $spacing-vertical * 1/6 0; + + .btn:not(.btn--link) { + display: inline; + margin-left: $spacing-vertical * 1/3; } } - tr.thead:not(:first-child) th { - border-top: var(--table-border); + + .table__item-label { + font-size: 12px; } - tfoot td { - padding: $spacing-vertical / 2 8px; - font-size: 0.85em; + + .table__item--actionable span + .btn { + padding-left: $spacing-vertical * 1/3; } + tbody { tr { &:nth-child(even):not(.odd) { @@ -52,28 +63,31 @@ table.table-standard { } } } -.table-standard--definition-list { - th { - text-align: right; - } -} -table.table-stretch { +table.table--stretch { width: 100%; } -table.table-transactions { +table.table--help { td:nth-of-type(1) { - width: 15%; + color: var(--color-black); + font-family: 'metropolis-semibold'; + min-width: 130px; + } +} + +table.table--transactions { + td:nth-of-type(1) { + width: 17.5%; } td:nth-of-type(2) { - width: 15%; + width: 27.5%; } td:nth-of-type(3) { - width: 15%; + width: 22.5%; } td:nth-of-type(4) { - width: 40%; + width: 17.5%; } td:nth-of-type(5) { width: 15%; diff --git a/src/renderer/scss/component/_tabs.scss b/src/renderer/scss/component/_tabs.scss deleted file mode 100644 index 69f6bc7a3..000000000 --- a/src/renderer/scss/component/_tabs.scss +++ /dev/null @@ -1,64 +0,0 @@ -/* Tabs */ - -nav.sub-header { - text-transform: uppercase; - max-width: $width-page-constrained; - margin-bottom: 40px; - border-bottom: var(--divider); - user-select: none; - > a { - height: 38px; - line-height: 38px; - text-align: center; - font-weight: 500; - text-transform: uppercase; - display: inline-block; - vertical-align: baseline; - margin: 0 12px; - padding: 0 8px; - color: var(--tab-color); - position: relative; - - &:first-child { - margin-left: 0; - } - &:last-child { - margin-right: 0; - } - &.sub-header-selected { - color: var(--tab-active-color); - &:before { - width: 100%; - height: var(--tab-border-size); - background: var(--tab-active-color); - position: absolute; - bottom: 0; - left: 0; - content: ''; - animation-name: activeTab; - animation-duration: var(--animation-duration); - animation-timing-function: var(--animation-style); - } - } - &:hover { - color: var(--tab-active-color); - } - } - - &.sub-header--full-width { - max-width: 100%; - } - - &.sub-header--small-margin { - margin-bottom: $spacing-vertical; - } -} - -@keyframes activeTab { - from { - width: 0; - } - to { - width: 100%; - } -} diff --git a/src/renderer/scss/component/_tooltip.scss b/src/renderer/scss/component/_tooltip.scss index 91fbe3f2f..504880b09 100644 --- a/src/renderer/scss/component/_tooltip.scss +++ b/src/renderer/scss/component/_tooltip.scss @@ -2,10 +2,8 @@ .tooltip { position: relative; -} - -.tooltip__link { - @include text-link(); + padding: 0 $spacing-vertical / 3; + font-size: 12px; } .tooltip__body { @@ -17,16 +15,15 @@ box-sizing: border-box; padding: $spacing-vertical / 2; width: var(--tooltip-width); - border: var(--tooltip-border); color: var(--tooltip-color); background-color: var(--tooltip-bg); font-size: calc(var(--font-size) * 7 / 8); line-height: var(--font-line-height); box-shadow: var(--box-shadow-layer); + border-radius: var(--card-radius); } -.tooltip--header .tooltip__link { - @include text-link(#aaa); +.tooltip__link { font-size: calc(var(--font-size) * 3 / 4); margin-left: var(--button-padding); vertical-align: middle; diff --git a/src/renderer/scss/component/_video.scss b/src/renderer/scss/component/_video.scss deleted file mode 100644 index aa449c48e..000000000 --- a/src/renderer/scss/component/_video.scss +++ /dev/null @@ -1,83 +0,0 @@ -$height-video-embedded: $width-page-constrained * 9 / 16; - -video { - object-fit: contain; - box-sizing: border-box; - max-height: 100%; - max-width: 100%; - background-size: contain; - background-position: center center; - background-repeat: no-repeat; -} - -.video { - background: #000; - color: white; -} - -.video-embedded { - max-width: $width-page-constrained; - max-height: $height-video-embedded; - height: $height-video-embedded; - position: relative; - video { - height: 100%; - width: 100%; - position: absolute; - top: 0; - left: 0; - } - &.video--hidden { - height: $height-video-embedded; - } -} -.video--obscured .video__cover { - position: relative; - filter: blur(var(--nsfw-blur-intensity)); -} - -.video__loading-screen { - height: 100%; - display: flex; - justify-content: center; - align-items: center; -} - -.video__loading-status { - padding-top: 20px; - color: white; -} - -.video__cover { - text-align: center; - height: 100%; - width: 100%; - background-size: auto 100%; - background-position: center center; - background-repeat: no-repeat; - position: relative; - .video__play-button { - display: flex; - align-items: center; - justify-content: center; - } -} - -.video__play-button { - position: absolute; - width: 100%; - height: 100%; - cursor: pointer; - display: none; - font-size: $spacing-vertical * 3; - color: white; - z-index: 1; - background: var(--color-dark-overlay); - opacity: 0.6; - left: 0; - top: 0; - &:hover { - opacity: 1; - transition: opacity var(--transition-duration) var(--transition-type); - } -} diff --git a/src/renderer/scss/page/_show.scss b/src/renderer/scss/page/_show.scss deleted file mode 100644 index 88ec2b7dd..000000000 --- a/src/renderer/scss/page/_show.scss +++ /dev/null @@ -1,13 +0,0 @@ -.show-page-media { - text-align: center; - margin-bottom: 16px; - overflow: auto; - img { - max-width: 100%; - } - - iframe { - width: 100%; - min-height: 500px; - } -} diff --git a/src/renderer/store.js b/src/renderer/store.js index ca6db3afd..b7ab9c01d 100644 --- a/src/renderer/store.js +++ b/src/renderer/store.js @@ -14,6 +14,7 @@ import walletReducer from 'redux/reducers/wallet'; import shapeShiftReducer from 'redux/reducers/shape_shift'; import subscriptionsReducer from 'redux/reducers/subscriptions'; import mediaReducer from 'redux/reducers/media'; +import publishReducer from 'redux/reducers/publish'; import { persistStore, autoRehydrate } from 'redux-persist'; import createCompressor from 'redux-persist-transform-compress'; import createFilter from 'redux-persist-transform-filter'; @@ -65,6 +66,7 @@ const reducers = combineReducers({ shapeShift: shapeShiftReducer, subscriptions: subscriptionsReducer, media: mediaReducer, + publish: publishReducer, }); const bulkThunk = createBulkThunkMiddleware(); @@ -96,7 +98,7 @@ const saveClaimsFilter = createFilter('claims', ['byId', 'claimsByUri']); const subscriptionsFilter = createFilter('subscriptions', ['subscriptions']); const persistOptions = { - whitelist: ['claims', 'subscriptions'], + whitelist: ['claims', 'subscriptions', 'navigation', 'publish'], // Order is important. Needs to be compressed last or other transforms can't // read the data transforms: [saveClaimsFilter, subscriptionsFilter, compressor], @@ -106,7 +108,7 @@ const persistOptions = { window.cacheStore = persistStore(store, persistOptions, err => { if (err) { - console.error('Unable to load saved SETTINGS'); + console.error('Unable to load saved settings'); // eslint-disable-line no-console } }); diff --git a/src/renderer/util/debounce.js b/src/renderer/util/debounce.js new file mode 100644 index 000000000..f702f7b0b --- /dev/null +++ b/src/renderer/util/debounce.js @@ -0,0 +1,21 @@ +// Returns a function, that, as long as it continues to be invoked, will not +// be triggered. The function will be called after it stops being called for +// N milliseconds. If `immediate` is passed, trigger the function on the +// leading edge, instead of the trailing. +export default function debouce(func, wait, immediate) { + let timeout; + + return function() { + const context = this; + const args = arguments; + const later = () => { + timeout = null; + if (!immediate) func.apply(context, args); + }; + + const callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + if (callNow) func.apply(context, args); + }; +} diff --git a/src/renderer/util/form-validation.js b/src/renderer/util/form-validation.js new file mode 100644 index 000000000..161e628d6 --- /dev/null +++ b/src/renderer/util/form-validation.js @@ -0,0 +1,23 @@ +// @flow +/* eslint-disable prefer-default-export */ +import { regexAddress } from 'lbryURI'; + +type DraftTxValues = { + address: string, + // amount: number +}; + +export const validateSendTx = (formValues: DraftTxValues) => { + const { address } = formValues; + const errors = {}; + + // All we need to check is if the address is valid + // If values are missing, users wont' be able to submit the form + if (address && !regexAddress.test(address)) { + errors.address = __('Not a valid LBRY address'); + } + + return errors; +}; + +/* eslint-enable prefer-default-export */ diff --git a/src/renderer/util/handle-fetch.js b/src/renderer/util/handle-fetch.js new file mode 100644 index 000000000..96ce44acb --- /dev/null +++ b/src/renderer/util/handle-fetch.js @@ -0,0 +1,5 @@ +export default function handleFetchResponse(response) { + return response.status === 200 + ? Promise.resolve(response.json()) + : Promise.reject(new Error(response.statusText)); +} diff --git a/static/font/.DS_Store b/static/font/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..c4dae0a21a66747e7e4db8fe9e26f75ba8516ebf GIT binary patch literal 6148 zcmeHKyG{c^3>-s>h%_lF_ZRqsRTRE}ABZ3nNQVv)=&#Cm@o9`7LPQrDBpNi9?Ai5s zZnaaK&j4)mzP|z10G4z|96ij0VyB_z7+89L!&$P!YMI69Sku75Eo2` zaUHV+v3Y{n3#UY8XqHrBQmsY|OFHwd>U!anm~>bTA66$@O(+(p^ZhN#VLee%3P^!d z1uk>D_WplM|6%?=C21!Gq`<#Yz!uxP?S@yX-a5OS_u59^(Y@w_?#6Xc7@{2$qaAbO f?f5#1vab1>&wJsN7mri^f33hLXg?Ls literal 0 HcmV?d00001 diff --git a/static/font/FontAwesome.otf b/static/font/FontAwesome.otf deleted file mode 100644 index 401ec0f36e4f73b8efa40bd6f604fe80d286db70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134808 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 diff --git a/static/font/fontawesome-webfont.eot b/static/font/fontawesome-webfont.eot deleted file mode 100644 index e9f60ca953f93e35eab4108bd414bc02ddcf3928..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165742 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 G*yFsbY~cLNXLP73aA74Mq6M9f^&YV`isWW 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

5q!RY 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 - - - -Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 - By ,,, -Copyright Dave Gandy 2016. All rights reserved. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/font/fontawesome-webfont.ttf b/static/font/fontawesome-webfont.ttf deleted file mode 100644 index 35acda2fa1196aad98c2adf4378a7611dd713aa3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165548 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 z 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 d0mRO}xo^G_%I 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 SdSQM28?+M|D(2r_;{O0|uQ74} diff --git a/static/font/fontawesome-webfont.woff2 b/static/font/fontawesome-webfont.woff2 deleted file mode 100644 index 4d13fc60404b91e398a37200c4a77b645cfd9586..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77160 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 diff --git a/static/font/metropolis/bold.eot b/static/font/metropolis/bold.eot new file mode 100644 index 0000000000000000000000000000000000000000..48ded273f33fa5996b9864dee163c48e62a76ed8 GIT binary patch literal 35022 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%0D&#~No7ycDc^<;bpflv_G+u!sbi?td9XTd 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 IU<&{KKmU-WHUIzs literal 0 HcmV?d00001 diff --git a/static/font/metropolis/bold.svg b/static/font/metropolis/bold.svg new file mode 100644 index 000000000..92af03602 --- /dev/null +++ b/static/font/metropolis/bold.svg @@ -0,0 +1,875 @@ + + + + +Created by FontForge 20090622 at Fri Dec 8 09:51:27 2017 + By deploy user +Copyright © 2016 by Chris Simpson. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/font/metropolis/bold.ttf b/static/font/metropolis/bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f67993325505a60be9356782c68c1aa0872e5e07 GIT binary patch literal 34744 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 literal 0 HcmV?d00001 diff --git a/static/font/metropolis/medium.eot b/static/font/metropolis/medium.eot new file mode 100644 index 0000000000000000000000000000000000000000..b8d6eb90e0abbb6c3da08e085567f125ff1e0d85 GIT binary patch literal 35582 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 literal 0 HcmV?d00001 diff --git a/static/font/metropolis/medium.otf b/static/font/metropolis/medium.otf new file mode 100644 index 0000000000000000000000000000000000000000..aee4d98c48a94810291c69913f2b0c764403efde GIT binary patch literal 23916 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 + + + +Created by FontForge 20090622 at Fri Dec 8 10:34:17 2017 + By deploy user +Copyright © 2016 by Chris Simpson. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/font/metropolis/medium.ttf b/static/font/metropolis/medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1bb9493cdd199f6a7a6ff2437cd0724cdd29d484 GIT binary patch literal 35280 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

  • Srwfz$1 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 literal 0 HcmV?d00001 diff --git a/static/font/metropolis/medium.woff b/static/font/metropolis/medium.woff new file mode 100644 index 0000000000000000000000000000000000000000..6e8b41eed538dab25ba720fd2b2c90e80bcd7e86 GIT binary patch literal 16964 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 DIqu)n literal 0 HcmV?d00001 diff --git a/static/font/metropolis/semibold.otf b/static/font/metropolis/semibold.otf new file mode 100644 index 0000000000000000000000000000000000000000..2fb1be69d87044ace3e95d497dfda9fdb34af41b GIT binary patch literal 24160 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 + + + +Created by FontForge 20090622 at Fri Dec 8 09:52:08 2017 + By deploy user +Copyright © 2016 by Chris Simpson. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/font/metropolis/semibold.ttf b/static/font/metropolis/semibold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..febf889f3b22c014eb84c27ae365e321299e5482 GIT binary patch literal 35136 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 Date: Mon, 26 Mar 2018 17:54:50 -0400 Subject: [PATCH 141/192] chore: clean-up after redesign --- .eslintrc.json | 3 +-- .gitignore | 1 - package.json | 5 +---- static/font/.DS_Store | Bin 6148 -> 0 bytes yarn.lock | 28 ++++++++++------------------ 5 files changed, 12 insertions(+), 25 deletions(-) delete mode 100644 static/font/.DS_Store diff --git a/.eslintrc.json b/.eslintrc.json index 009c389de..69a674b7a 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -33,7 +33,6 @@ "printWidth": 100, "singleQuote": true }], - "func-names": ["warn", "as-needed"], - "arrow-body-style": "off" + "func-names": ["warn", "as-needed"] } } diff --git a/.gitignore b/.gitignore index ce340404f..e8d5eb911 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,3 @@ /static/daemon/lbrynet* /static/locales yarn-error.log -npm-debug.log* diff --git a/package.json b/package.json index 992a96788..f8c984853 100644 --- a/package.json +++ b/package.json @@ -47,10 +47,7 @@ "electron-window-state": "^4.1.1", "find-process": "^1.1.0", "formik": "^0.10.4", - "from2": "^2.3.0", - "install": "^0.10.2", - "jshashes": "^1.0.7", - "keytar-prebuild": "4.1.1", + "keytar-prebuild": "4.0.4", "localforage": "^1.5.0", "mixpanel-browser": "^2.17.1", "moment": "^2.20.1", diff --git a/static/font/.DS_Store b/static/font/.DS_Store deleted file mode 100644 index c4dae0a21a66747e7e4db8fe9e26f75ba8516ebf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKyG{c^3>-s>h%_lF_ZRqsRTRE}ABZ3nNQVv)=&#Cm@o9`7LPQrDBpNi9?Ai5s zZnaaK&j4)mzP|z10G4z|96ij0VyB_z7+89L!&$P!YMI69Sku75Eo2` zaUHV+v3Y{n3#UY8XqHrBQmsY|OFHwd>U!anm~>bTA66$@O(+(p^ZhN#VLee%3P^!d z1uk>D_WplM|6%?=C21!Gq`<#Yz!uxP?S@yX-a5OS_u59^(Y@w_?#6Xc7@{2$qaAbO f?f5#1vab1>&wJsN7mri^f33hLXg?Ls diff --git a/yarn.lock b/yarn.lock index 51eca2179..5c0aeb3d2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3953,7 +3953,7 @@ fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" -from2@^2.1.0, from2@^2.3.0: +from2@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" dependencies: @@ -4699,10 +4699,6 @@ inquirer@^3.0.6: strip-ansi "^4.0.0" through "^2.3.6" -install@^0.10.2: - version "0.10.4" - resolved "https://registry.yarnpkg.com/install/-/install-0.10.4.tgz#9cb09115768b93a582d1450a6ba3f275975b49aa" - internal-ip@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-1.2.0.tgz#ae9fbf93b984878785d50a8de1b356956058cf5c" @@ -5316,10 +5312,6 @@ jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" -jshashes@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/jshashes/-/jshashes-1.0.7.tgz#bed8c97a0e9632fd0513916f55f76dd5486be59f" - json-loader@^0.5.4: version "0.5.7" resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" @@ -5403,12 +5395,12 @@ jsx-ast-utils@^2.0.0, jsx-ast-utils@^2.0.1: dependencies: array-includes "^3.0.3" -keytar-prebuild@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/keytar-prebuild/-/keytar-prebuild-4.1.1.tgz#f31cd3b2e5de743303f8c2f607f29f0117981295" +keytar-prebuild@4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/keytar-prebuild/-/keytar-prebuild-4.0.4.tgz#eb6354c68f2b3609dc325ef8709844632652d602" dependencies: - nan "2.8.0" - prebuild-install "^2.5.0" + nan "2.7.0" + prebuild-install "^2.2.2" killable@^1.0.0: version "1.0.0" @@ -6087,9 +6079,9 @@ mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" -nan@2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" +nan@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46" nan@^2.3.0, nan@^2.3.2: version "2.10.0" @@ -7024,7 +7016,7 @@ postcss@^6.0.1: source-map "^0.6.1" supports-color "^5.3.0" -prebuild-install@^2.5.0: +prebuild-install@^2.2.2: version "2.5.1" resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.5.1.tgz#0f234140a73760813657c413cdccdda58296b1da" dependencies: -- 2.45.3 From 7e62cb5b73f48764c31848ad26ffe90defe8341e Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Tue, 27 Mar 2018 14:25:23 -0700 Subject: [PATCH 142/192] fix for navigating with enter key --- src/renderer/component/wunderbar/view.jsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/renderer/component/wunderbar/view.jsx b/src/renderer/component/wunderbar/view.jsx index 31b7fdee8..583ed54e6 100644 --- a/src/renderer/component/wunderbar/view.jsx +++ b/src/renderer/component/wunderbar/view.jsx @@ -1,10 +1,11 @@ // @flow import React from 'react'; import classnames from 'classnames'; +import { normalizeURI } from 'lbryURI'; import Icon from 'component/common/icon'; -import Autocomplete from './internal/autocomplete'; import { parseQueryParams } from 'util/query_params'; import * as icons from 'constants/icons'; +import Autocomplete from './internal/autocomplete'; type Props = { updateSearchQuery: string => void, -- 2.45.3 From 2df37c4fa6931c280dbcd6f27cff0ca64a44c637 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Tue, 27 Mar 2018 18:42:26 -0400 Subject: [PATCH 143/192] chore: move downloaded daemon zip file to dist folder --- .gitignore | 1 - build/downloadDaemon.js | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index e8d5eb911..f57e421ea 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ /node_modules /dist -/build/daemon.zip /static/daemon/lbrynet* /static/locales yarn-error.log diff --git a/build/downloadDaemon.js b/build/downloadDaemon.js index 6bf649544..754b986b7 100644 --- a/build/downloadDaemon.js +++ b/build/downloadDaemon.js @@ -23,7 +23,7 @@ const downloadDaemon = targetPlatform => const daemonURL = daemonURLTemplate .replace(/DAEMONVER/g, daemonVersion) .replace(/OSNAME/g, daemonPlatform); - const tmpZipPath = 'build/daemon.zip'; + const tmpZipPath = 'dist/daemon.zip'; console.log('\x1b[34minfo\x1b[0m Downloading daemon...'); axios -- 2.45.3 From 3bb530411deaa97f133dc562849d68c2ef5f73ef Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Tue, 27 Mar 2018 21:59:35 -0700 Subject: [PATCH 144/192] align category-list with buttons --- src/renderer/page/discover/view.jsx | 2 +- src/renderer/scss/component/_button.scss | 2 +- src/renderer/scss/component/_card.scss | 12 ++++-------- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/src/renderer/page/discover/view.jsx b/src/renderer/page/discover/view.jsx index abe0c0f56..28adf330c 100644 --- a/src/renderer/page/discover/view.jsx +++ b/src/renderer/page/discover/view.jsx @@ -18,7 +18,7 @@ class DiscoverPage extends React.PureComponent { const { featuredUris, fetchingFeaturedUris } = this.props; const hasContent = typeof featuredUris === 'object' && Object.keys(featuredUris).length; const failedToLoad = !fetchingFeaturedUris && !hasContent; - // lbry://fortnite-top-stream-moments-nickatnydte#27395875d68e9d3e53be46edf36d622aa8284441 + return ( {hasContent && diff --git a/src/renderer/scss/component/_button.scss b/src/renderer/scss/component/_button.scss index 8b19a4be9..e4e08977d 100644 --- a/src/renderer/scss/component/_button.scss +++ b/src/renderer/scss/component/_button.scss @@ -114,7 +114,7 @@ button:disabled { text-transform: uppercase; } -.btn:not(.btn--no-padding):not(.btn--link) { +.btn:not(.btn--no-padding):not(.btn--link):not(.btn--no-style) { .btn__content { padding: 0 8px; display: flex; diff --git a/src/renderer/scss/component/_card.scss b/src/renderer/scss/component/_card.scss index 5cb1baae9..9c5f125c6 100644 --- a/src/renderer/scss/component/_card.scss +++ b/src/renderer/scss/component/_card.scss @@ -282,7 +282,7 @@ } .card:last-of-type { - margin-right: $spacing-vertical * 2/3; + margin-right: $spacing-width; } } @@ -336,12 +336,8 @@ display: inline-block; vertical-align: top; overflow: visible; - // -- three cards on a screen - // -- minus 12px for 1/3 of the page padding (36px) - // -- minus 20px for the card's margin - // Ideally we should be able to use $spacing-width / 3, but I'm not sure - // how inside the calc function - width: calc((100% / 3) - 12px - 20px); + // we should use $spacing-width - 1px here, not sure why it isn't working + width: calc((100% / 3) - 35px); } .card:not(:first-of-type) { @@ -354,7 +350,7 @@ @media only screen and (min-width: $medium-breakpoint) { .card { - width: calc((100% / 4) - 12px - 20px); + width: calc((100% / 4) - 31px); } } } -- 2.45.3 From 1fc35d1175d5263bb77f761fe2c6d4198767ed41 Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Thu, 29 Mar 2018 15:57:17 -0400 Subject: [PATCH 145/192] fix: daemon fails to download when dist directory doesn't exist --- build/downloadDaemon.js | 2 +- package.json | 1 + yarn.lock | 10 ++++++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/build/downloadDaemon.js b/build/downloadDaemon.js index 754b986b7..11b0b5ba2 100644 --- a/build/downloadDaemon.js +++ b/build/downloadDaemon.js @@ -1,6 +1,6 @@ /* eslint-disable no-console,import/no-extraneous-dependencies,import/no-commonjs */ const path = require('path'); -const fs = require('fs'); +const fs = require('fs-path'); const packageJSON = require('../package.json'); const axios = require('axios'); const decompress = require('decompress'); diff --git a/package.json b/package.json index f8c984853..9ca818787 100644 --- a/package.json +++ b/package.json @@ -103,6 +103,7 @@ "flow-babel-webpack-plugin": "^1.1.1", "flow-bin": "^0.68.0", "flow-typed": "^2.3.0", + "fs-path": "^0.0.24", "husky": "^0.14.3", "i18n-extract": "^0.5.1", "json-loader": "^0.5.4", diff --git a/yarn.lock b/yarn.lock index 5c0aeb3d2..cc0d9922f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -472,6 +472,10 @@ async@^2.1.2, async@^2.4.1: dependencies: lodash "^4.14.0" +async@~0.9.0: + version "0.9.2" + resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -3993,6 +3997,12 @@ fs-extra@^5.0.0: jsonfile "^4.0.0" universalify "^0.1.0" +fs-path@^0.0.24: + version "0.0.24" + resolved "https://registry.yarnpkg.com/fs-path/-/fs-path-0.0.24.tgz#21a4b8d7dce5bae6d208261955dbc2bcf1e75c06" + dependencies: + async "~0.9.0" + fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" -- 2.45.3 From bb5e950ec7f1329c26130f22ad3b25cd140d8f9f Mon Sep 17 00:00:00 2001 From: Igor Gassmann Date: Thu, 29 Mar 2018 16:43:35 -0400 Subject: [PATCH 146/192] docs: add Suggested Solutions to GitHub issue template --- .github/ISSUE_TEMPLATE.md | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index d38ed0632..5bea4bef0 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,5 +1,5 @@ +--> ## The Issue -### Steps to reproduce +### Steps to Reproduce 1. 2. 3. -### Expected behaviour -Tell us what should happen +### Expected Behaviour +Tell us what should happen. -### Actual behaviour -Tell us what happens instead +### Actual Behaviour +Tell us what happens instead. +### Suggested Solutions +Tell us your suggested solutions if you have any. ## System Configuration - +