Merge remote-tracking branch 'origin/master' into revoke_claims

This commit is contained in:
Jeremy Kauffman 2017-11-08 17:42:51 -05:00
commit a6946b4930
21 changed files with 398 additions and 139 deletions

View file

@ -9,6 +9,7 @@ Web UI version numbers should always match the corresponding version of LBRY App
## [Unreleased] ## [Unreleased]
### Added ### Added
* Now you can revoke your claims from the txns list itself.(#581) * Now you can revoke your claims from the txns list itself.(#581)
* The app now closes to the system tray unless specifically requested to quit. (#374)
* Added new window menu options for reloading and help. * Added new window menu options for reloading and help.
* Rewards are now marked in transaction history (#660) * Rewards are now marked in transaction history (#660)
* *
@ -19,6 +20,8 @@ Web UI version numbers should always match the corresponding version of LBRY App
### Fixed ### Fixed
* Fixed console errors on settings page related to improper React input properties. * Fixed console errors on settings page related to improper React input properties.
* Fixed modals being too narrow after font change (#709)
* Fixed bug that prevented new channel and first publish rewards from being claimed (#290)
### Deprecated ### Deprecated
* *

View file

@ -1,4 +1,5 @@
const {app, BrowserWindow, ipcMain} = require('electron'); module.exports = { safeQuit }
const {app, BrowserWindow, ipcMain, Menu, Tray, globalShortcut} = require('electron');
const url = require('url'); const url = require('url');
const isDebug = process.env.NODE_ENV === 'development'; const isDebug = process.env.NODE_ENV === 'development';
const setMenu = require('./menu/main-menu.js'); const setMenu = require('./menu/main-menu.js');
@ -55,6 +56,13 @@ let readyToQuit = false;
// sendCredits it to, it's cached in this variable. // sendCredits it to, it's cached in this variable.
let openUri = null; let openUri = null;
// Set this to true to minimize on clicking close
// false for normal action
let minimize = true;
// Keep the tray also, it is getting GC'd if put in createTray()
let tray = null;
function processRequestedUri(uri) { function processRequestedUri(uri) {
// Windows normalizes URIs when they're passed in from other apps. On Windows, // Windows normalizes URIs when they're passed in from other apps. On Windows,
// this function tries to restore the original URI that was typed. // this function tries to restore the original URI that was typed.
@ -167,10 +175,47 @@ function createWindow () {
}); });
} }
win.removeAllListeners();
win.on('close', function(event) {
if (minimize) {
event.preventDefault();
win.hide();
}
})
win.on('closed', () => { win.on('closed', () => {
win = null win = null
}) })
win.on("hide", () => {
// Checks what to show in the tray icon menu
if (minimize) updateTray();
});
win.on("show", () => {
// Checks what to show in the tray icon menu
if (minimize) updateTray();
});
win.on("blur", () => {
// Checks what to show in the tray icon menu
if (minimize) updateTray();
// Unregisters Alt+F4 shortcut
globalShortcut.unregister('Alt+F4');
});
win.on("focus", () => {
// Checks what to show in the tray icon menu
if (minimize) updateTray();
// Registers shortcut for closing(quitting) the app
globalShortcut.register('Alt+F4', () => safeQuit());
win.webContents.send('window-is-focused', null);
});
// Menu bar // Menu bar
win.setAutoHideMenuBar(true); win.setAutoHideMenuBar(true);
win.setMenuBarVisibility(isDebug); win.setMenuBarVisibility(isDebug);
@ -178,14 +223,65 @@ function createWindow () {
}; };
function createTray () {
// Minimize to tray logic follows:
// Set the tray icon
const iconPath = path.join(app.getAppPath(), "/dist/img/fav/32x32.png");
tray = new Tray(iconPath);
tray.setToolTip("LBRY App");
tray.setTitle("LBRY");
tray.on('double-click', () => {
win.show()
})
}
// This needs to be done as for linux the context menu doesn't update automatically(docs)
function updateTray() {
let contextMenu = Menu.buildFromTemplate(getMenuTemplate());
if (tray) {
tray.setContextMenu(contextMenu);
} else {
console.log("How did update tray get called without a tray?");
}
}
function getMenuTemplate () {
return [
getToggleItem(),
{
label: "Quit",
click: () => safeQuit(),
},
]
function getToggleItem () {
if (win.isVisible() && win.isFocused()) {
return {
label: 'Hide LBRY App',
click: () => win.hide()
}
} else {
return {
label: 'Show LBRY App',
click: () => win.show()
}
}
}
}
function handleOpenUriRequested(uri) { function handleOpenUriRequested(uri) {
if (!win) { if (!win) {
// Window not created yet, so store up requested URI for when it is // Window not created yet, so store up requested URI for when it is
openUri = processRequestedUri(uri); openUri = processRequestedUri(uri);
} else { } else {
if (win.isMinimized()) { if (win.isMinimized()) {
win.restore(); win.restore()
} else if (!win.isVisible()) {
win.show()
} }
win.focus(); win.focus();
win.webContents.send('open-uri-requested', processRequestedUri(uri)); win.webContents.send('open-uri-requested', processRequestedUri(uri));
} }
@ -224,6 +320,15 @@ function launchDaemon() {
daemonSubprocess.on('exit', handleDaemonSubprocessExited); daemonSubprocess.on('exit', handleDaemonSubprocessExited);
} }
/*
* Quits by first killing the daemon, the calling quitting for real.
*/
function safeQuit() {
minimize = false;
app.quit();
}
/* /*
* Quits without any preparation. When a quit is requested (either through the * Quits without any preparation. When a quit is requested (either through the
* interface or through app.quit()), we abort the quit, try to shut down the daemon, * interface or through app.quit()), we abort the quit, try to shut down the daemon,
@ -231,7 +336,7 @@ function launchDaemon() {
*/ */
function quitNow() { function quitNow() {
readyToQuit = true; readyToQuit = true;
app.quit(); safeQuit();
} }
const isSecondaryInstance = app.makeSingleInstance((argv) => { const isSecondaryInstance = app.makeSingleInstance((argv) => {
@ -240,6 +345,8 @@ const isSecondaryInstance = app.makeSingleInstance((argv) => {
} else if (win) { } else if (win) {
if (win.isMinimized()) { if (win.isMinimized()) {
win.restore(); win.restore();
} else if (!win.isVisible()) {
win.show();
} }
win.focus(); win.focus();
} }
@ -252,6 +359,14 @@ if (isSecondaryInstance) { // We're not in the original process, so quit
app.on('ready', function(){ app.on('ready', function(){
launchDaemonIfNotRunning(); launchDaemonIfNotRunning();
if (process.platform === "linux") {
checkLinuxTraySupport( err => {
if (!err) createTray();
else minimize = false;
})
} else {
createTray();
}
createWindow(); createWindow();
}); });
@ -385,6 +500,22 @@ function upgrade(event, installerPath) {
console.log('After the install is complete, please reopen the app.'); console.log('After the install is complete, please reopen the app.');
} }
// Taken from webtorrent-desktop
function checkLinuxTraySupport (cb) {
// Check that we're on Ubuntu (or another debian system) and that we have
// libappindicator1.
child_process.exec('dpkg --get-selections libappindicator1', function (err, stdout) {
if (err) return cb(err)
// Unfortunately there's no cleaner way, as far as I can tell, to check
// whether a debian package is installed:
if (stdout.endsWith('\tinstall\n')) {
cb(null)
} else {
cb(new Error('debian package not installed'))
}
})
}
ipcMain.on('upgrade', upgrade); ipcMain.on('upgrade', upgrade);
app.setAsDefaultProtocolClient('lbry'); app.setAsDefaultProtocolClient('lbry');

View file

@ -1,6 +1,18 @@
const { app, shell, Menu } = require('electron'); const { app, shell, Menu } = require('electron');
const { safeQuit } = require('../main.js')
const baseTemplate = [ const baseTemplate = [
{
label: 'File',
submenu: [
{
label: 'Quit',
accelerator: "CommandOrControl+Q",
click: () => safeQuit(),
},
]
},
{ {
label: 'Edit', label: 'Edit',
submenu: [ submenu: [

View file

@ -20,7 +20,7 @@
"electron-rebuild": "^1.5.11" "electron-rebuild": "^1.5.11"
}, },
"lbrySettings": { "lbrySettings": {
"lbrynetDaemonVersion": "0.17.1", "lbrynetDaemonVersion": "0.18.0rc1",
"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"
}, },
"license": "MIT" "license": "MIT"

View file

@ -41,7 +41,7 @@ set -eu
if $LINUX; then if $LINUX; then
INSTALL="$SUDO apt-get install --no-install-recommends -y" INSTALL="$SUDO apt-get install --no-install-recommends -y"
$INSTALL build-essential libssl-dev libffi-dev libgmp3-dev python2.7-dev libsecret-1-dev $INSTALL build-essential libssl-dev libffi-dev libgmp3-dev python2.7-dev libsecret-1-dev wget
elif $OSX && ! cmd_exists brew ; then elif $OSX && ! cmd_exists brew ; then
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
fi fi

View file

@ -29,7 +29,7 @@ def get_asset_filename():
def upload_to_s3(folder): def upload_to_s3(folder):
tag = subprocess.check_output(['git', 'describe', '--always', 'HEAD']).strip() tag = subprocess.check_output(['git', 'describe', '--always', '--abbrev=8', 'HEAD']).strip()
commit_date = subprocess.check_output([ commit_date = subprocess.check_output([
'git', 'show', '-s', '--format=%cd', '--date=format:%Y%m%d-%H%I%S', 'HEAD']).strip() 'git', 'show', '-s', '--format=%cd', '--date=format:%Y%m%d-%H%I%S', 'HEAD']).strip()

BIN
ui/dist/img/fav/32x32.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -78,25 +78,18 @@ export function doFetchFeaturedUris() {
type: types.FETCH_FEATURED_CONTENT_STARTED, type: types.FETCH_FEATURED_CONTENT_STARTED,
}); });
const success = ({ Categories, Uris }) => { const success = ({ Uris }) => {
let featuredUris = {};
let urisToResolve = []; let urisToResolve = [];
Categories.forEach(category => { for (let category in Uris) {
if (Uris[category] && Uris[category].length) { urisToResolve = [...urisToResolve, ...Uris[category]];
const uris = Uris[category]; }
featuredUris[category] = uris;
urisToResolve = [...urisToResolve, ...uris];
}
});
const actions = [ const actions = [
doResolveUris(urisToResolve), doResolveUris(urisToResolve),
{ {
type: types.FETCH_FEATURED_CONTENT_COMPLETED, type: types.FETCH_FEATURED_CONTENT_COMPLETED,
data: { data: {
categories: Categories, uris: Uris,
uris: featuredUris,
success: true, success: true,
}, },
}, },
@ -108,15 +101,12 @@ export function doFetchFeaturedUris() {
dispatch({ dispatch({
type: types.FETCH_FEATURED_CONTENT_COMPLETED, type: types.FETCH_FEATURED_CONTENT_COMPLETED,
data: { data: {
categories: [],
uris: {}, uris: {},
}, },
}); });
}; };
lbryio lbryio.call("file", "list_homepage").then(success, failure);
.call("file", "list_homepage", { version: "early-access" })
.then(success, failure);
}; };
} }

View file

@ -73,9 +73,7 @@ class Video extends React.PureComponent {
"It looks like you deleted or moved this file. We're rebuilding it now. It will only take a few seconds." "It looks like you deleted or moved this file. We're rebuilding it now. It will only take a few seconds."
); );
} else if (isLoading) { } else if (isLoading) {
loadStatusMessage = __( loadStatusMessage = __("Requesting stream...");
"Requesting stream... it may sit here for like 15-20 seconds in a really awkward way... we're working on it"
);
} else if (isDownloading) { } else if (isDownloading) {
loadStatusMessage = __("Downloading stream... not long left now!"); loadStatusMessage = __("Downloading stream... not long left now!");
} }

View file

@ -37,6 +37,14 @@ ipcRenderer.on("open-menu", (event, uri) => {
} }
}); });
const dock = remote.app.dock;
ipcRenderer.on("window-is-focused", (event, data) => {
if (!dock) return;
app.store.dispatch({ type: types.WINDOW_FOCUSED });
dock.setBadge("");
});
document.addEventListener("click", event => { document.addEventListener("click", event => {
var target = event.target; var target = event.target;
while (target && target !== document) { while (target && target !== document) {
@ -52,21 +60,6 @@ document.addEventListener("click", event => {
} }
}); });
const application = remote.app;
const dock = application.dock;
const win = remote.getCurrentWindow();
// Tear down previous event listeners when reload
win.removeAllListeners();
// Clear the badge when the window is focused
win.on("focus", () => {
if (!dock) return;
app.store.dispatch({ type: types.WINDOW_FOCUSED });
dock.setBadge("");
});
const initialState = app.store.getState(); const initialState = app.store.getState();
var init = function() { var init = function() {

View file

@ -4,8 +4,7 @@ import { CreditAmount, CurrencySymbol } from "component/common";
import Link from "component/link/index"; import Link from "component/link/index";
const ModalCreditIntro = props => { const ModalCreditIntro = props => {
const { closeModal, currentBalance, totalRewardValue, verifyAccount } = props; const { closeModal, totalRewardValue, verifyAccount } = props;
const totalRewardRounded = Math.round(totalRewardValue / 10) * 10; const totalRewardRounded = Math.round(totalRewardValue / 10) * 10;
return ( return (

View file

@ -1,4 +1,3 @@
const hashes = require("jshashes");
import lbry from "lbry"; import lbry from "lbry";
import lbryio from "lbryio"; import lbryio from "lbryio";
import { doShowSnackBar } from "actions/app"; import { doShowSnackBar } from "actions/app";
@ -37,54 +36,6 @@ function rewardMessage(type, amount) {
}[type]; }[type];
} }
function toHex(s) {
let h = "";
for (var i = 0; i < s.length; i++) {
let c = s.charCodeAt(i).toString(16);
if (c.length < 2) {
c = "0".concat(c);
}
h += c;
}
return h;
}
function fromHex(h) {
let s = "";
for (let i = 0; i < h.length; i += 2) {
s += String.fromCharCode(parseInt(h.substr(i, 2), 16));
}
return s;
}
function reverseString(s) {
let o = "";
for (let i = s.length - 1; i >= 0; i--) {
o += s[i];
}
return o;
}
function pack(num) {
return (
"" +
String.fromCharCode(num & 0xff) +
String.fromCharCode((num >> 8) & 0xff) +
String.fromCharCode((num >> 16) & 0xff) +
String.fromCharCode((num >> 24) & 0xff)
);
}
// Returns true if claim is an initial claim, false if it's an update to an existing claim
function isInitialClaim(claim) {
const reversed = reverseString(fromHex(claim.txid));
const concat = reversed.concat(pack(claim.nout));
const sha256 = new hashes.SHA256({ utf8: false }).raw(concat);
const ripemd160 = new hashes.RMD160({ utf8: false }).raw(sha256);
const hash = toHex(reverseString(ripemd160));
return hash == claim.claim_id;
}
const rewards = {}; const rewards = {};
rewards.TYPE_NEW_DEVELOPER = "new_developer"; rewards.TYPE_NEW_DEVELOPER = "new_developer";
@ -149,7 +100,7 @@ rewards.claimReward = function(type) {
claim.name.length && claim.name.length &&
claim.name[0] == "@" && claim.name[0] == "@" &&
claim.txid.length && claim.txid.length &&
isInitialClaim(claim) claim.category == "claim"
); );
}); });
if (claim) { if (claim) {
@ -173,7 +124,7 @@ rewards.claimReward = function(type) {
claim.name.length && claim.name.length &&
claim.name[0] != "@" && claim.name[0] != "@" &&
claim.txid.length && claim.txid.length &&
isInitialClaim(claim) claim.category == "claim"
); );
}); });
if (claim) { if (claim) {

View file

@ -70,8 +70,9 @@
"node-loader": "^0.6.0", "node-loader": "^0.6.0",
"prettier": "^1.4.2", "prettier": "^1.4.2",
"style-loader": "^0.18.2", "style-loader": "^0.18.2",
"webpack": "^2.6.1", "webpack": "^3.0.0",
"webpack-dev-server": "^2.4.4", "webpack-dev-server": "^2.4.4",
"webpack-merge": "^4.1.1",
"webpack-notifier": "^1.5.0", "webpack-notifier": "^1.5.0",
"webpack-target-electron-renderer": "^0.4.0" "webpack-target-electron-renderer": "^0.4.0"
}, },

View file

@ -128,6 +128,7 @@ $text-color: #000;
--card-small-width: $spacing-vertical * 10; --card-small-width: $spacing-vertical * 10;
/* Modal */ /* Modal */
--modal-width: 420px;
--modal-bg: var(--color-bg); --modal-bg: var(--color-bg);
--modal-overlay-bg: rgba(#F5F5F5, 0.75); // --color-canvas: #F5F5F5 --modal-overlay-bg: rgba(#F5F5F5, 0.75); // --color-canvas: #F5F5F5
--modal-border: 1px solid rgb(204, 204, 204); --modal-border: 1px solid rgb(204, 204, 204);

View file

@ -29,7 +29,7 @@
border-radius: 4px; border-radius: 4px;
padding: $spacing-vertical; padding: $spacing-vertical;
box-shadow: var(--box-shadow-layer); box-shadow: var(--box-shadow-layer);
max-width: 400px; max-width: var(--modal-width);
word-break: break-word; word-break: break-word;
} }
@ -70,13 +70,13 @@
.error-modal { .error-modal {
max-width: none; max-width: none;
width: 400px; width: var(--modal-width);
} }
.error-modal__error-list { /*shitty hack/temp fix for long errors making modal unusable*/ .error-modal__error-list { /*shitty hack/temp fix for long errors making modal unusable*/
border: 1px solid var(--input-border-color); border: 1px solid var(--input-border-color);
padding: 8px; padding: 8px;
list-style: none; list-style: none;
max-height: 400px; max-height: 400px;
max-width: 400px; max-width: var(--modal-width);
overflow-y: hidden; overflow-y: hidden;
} }

View file

@ -21,5 +21,5 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
node_modules/.bin/node-sass --output $DIR/../app/dist/css --sourcemap=none $DIR/scss/ node_modules/.bin/node-sass --output $DIR/../app/dist/css --sourcemap=none $DIR/scss/
node_modules/.bin/node-sass --output $DIR/../app/dist/css --sourcemap=none --watch $DIR/scss/ & node_modules/.bin/node-sass --output $DIR/../app/dist/css --sourcemap=none --watch $DIR/scss/ &
node_modules/.bin/webpack --config webpack.dev.config.js --progress --colors --watch node_modules/.bin/webpack --config webpack.dev.js --progress --colors --watch
) )

55
ui/webpack.common.js Normal file
View file

@ -0,0 +1,55 @@
const path = require("path");
const webpack = require("webpack")
const appPath = path.resolve(__dirname, "js");
process.traceDeprecation = true;
const PATHS = {
app: path.join(__dirname, "app"),
dist: path.join(__dirname, "dist")
};
module.exports = {
entry: ["babel-polyfill", "./js/main.js"],
output: {
path: path.join(PATHS.dist, "js"),
publicPath: "/js/",
filename: "bundle.js"
},
resolve: {
modules: [appPath, "node_modules"],
extensions: [".js", ".jsx", ".css"]
},
module: {
rules: [
{
test: /\.jsx?$/,
enforce: "pre",
loaders: ["eslint"],
// define an include so we check just the files we need
include: PATHS.app
},
{
test: /\.node$/,
use: ["node-loader"]
},
{
test: /\.css$/,
use: ["style-loader", "css-loader"]
},
{
test: /\.jsx?$/,
exclude: /node_modules/,
use: {
loader: "babel-loader",
options: {
cacheDirectory: true,
presets: [ "es2015", "react", "stage-2" ]
}
}
}
]
},
target: "electron-main",
};

22
ui/webpack.dev.js Normal file
View file

@ -0,0 +1,22 @@
const path = require("path");
const webpack = require("webpack")
const WebpackNotifierPlugin = require("webpack-notifier")
const merge = require('webpack-merge');
const common = require('./webpack.common.js');
module.exports = merge(common, {
output: {
pathinfo: true
},
cache: true,
devtool: "eval",
plugins: [
new WebpackNotifierPlugin(),
new webpack.DefinePlugin({
ENV: JSON.stringify("development"),
}),
new webpack.LoaderOptionsPlugin({
debug: true
})
]
});

11
ui/webpack.prod.js Normal file
View file

@ -0,0 +1,11 @@
const webpack = require("webpack")
const merge = require('webpack-merge');
const common = require('./webpack.common.js');
module.exports = merge(common, {
plugins: [
new webpack.DefinePlugin({
ENV: JSON.stringify("production")
})
]
});

View file

@ -41,10 +41,14 @@ acorn@^5.0.0, acorn@^5.0.1:
version "5.0.3" version "5.0.3"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d"
ajv-keywords@^1.0.0, ajv-keywords@^1.1.1: ajv-keywords@^1.0.0:
version "1.5.1" version "1.5.1"
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
ajv-keywords@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762"
ajv@^4.7.0, ajv@^4.9.1: ajv@^4.7.0, ajv@^4.9.1:
version "4.11.8" version "4.11.8"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
@ -61,6 +65,15 @@ ajv@^5.0.0:
json-schema-traverse "^0.3.0" json-schema-traverse "^0.3.0"
json-stable-stringify "^1.0.1" json-stable-stringify "^1.0.1"
ajv@^5.1.5:
version "5.3.0"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.3.0.tgz#4414ff74a50879c208ee5fdc826e32c303549eda"
dependencies:
co "^4.6.0"
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: align-text@^0.1.1, align-text@^0.1.3:
version "0.1.4" version "0.1.4"
resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
@ -1127,6 +1140,10 @@ camelcase@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
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: caniuse-api@^1.5.2:
version "1.6.1" version "1.6.1"
resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c"
@ -1168,7 +1185,7 @@ chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3:
strip-ansi "^3.0.0" strip-ansi "^3.0.0"
supports-color "^2.0.0" supports-color "^2.0.0"
chokidar@^1.0.0, chokidar@^1.4.3, chokidar@^1.6.0, chokidar@^1.6.1: chokidar@^1.0.0, chokidar@^1.6.0, chokidar@^1.6.1, chokidar@^1.7.0:
version "1.7.0" version "1.7.0"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468"
dependencies: dependencies:
@ -1891,14 +1908,14 @@ end-of-stream@^1.1.0:
dependencies: dependencies:
once "^1.4.0" once "^1.4.0"
enhanced-resolve@^3.0.0: enhanced-resolve@^3.4.0:
version "3.1.0" version "3.4.1"
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.1.0.tgz#9f4b626f577245edcf4b2ad83d86e17f4f421dec" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e"
dependencies: dependencies:
graceful-fs "^4.1.2" graceful-fs "^4.1.2"
memory-fs "^0.4.0" memory-fs "^0.4.0"
object-assign "^4.0.1" object-assign "^4.0.1"
tapable "^0.2.5" tapable "^0.2.7"
enhanced-resolve@~0.9.0: enhanced-resolve@~0.9.0:
version "0.9.1" version "0.9.1"
@ -2312,6 +2329,14 @@ fast-deep-equal@^0.1.0:
version "0.1.0" version "0.1.0"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-0.1.0.tgz#5c6f4599aba6b333ee3342e2ed978672f1001f8d" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-0.1.0.tgz#5c6f4599aba6b333ee3342e2ed978672f1001f8d"
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"
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: fast-levenshtein@~2.0.4:
version "2.0.6" version "2.0.6"
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
@ -3411,7 +3436,7 @@ loader-runner@^2.3.0:
version "2.3.0" version "2.3.0"
resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2"
loader-utils@^0.2.11, loader-utils@^0.2.16: loader-utils@^0.2.11:
version "0.2.17" version "0.2.17"
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
dependencies: dependencies:
@ -3420,7 +3445,7 @@ loader-utils@^0.2.11, loader-utils@^0.2.16:
json5 "^0.5.0" json5 "^0.5.0"
object-assign "^4.0.1" object-assign "^4.0.1"
loader-utils@^1.0.2: loader-utils@^1.0.2, loader-utils@^1.1.0:
version "1.1.0" version "1.1.0"
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd"
dependencies: dependencies:
@ -3663,6 +3688,12 @@ mediasource@^2.0.0, mediasource@^2.1.0:
readable-stream "^2.0.5" readable-stream "^2.0.5"
to-arraybuffer "^1.0.1" 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: memory-fs@^0.2.0:
version "0.2.0" version "0.2.0"
resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290"
@ -4206,6 +4237,14 @@ os-locale@^1.4.0:
dependencies: dependencies:
lcid "^1.0.0" 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.0, os-tmpdir@^1.0.1:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
@ -5423,9 +5462,9 @@ source-list-map@^0.1.7, source-list-map@~0.1.7:
version "0.1.8" version "0.1.8"
resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106"
source-list-map@^1.1.1: source-list-map@^2.0.0:
version "1.1.2" version "2.0.0"
resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-1.1.2.tgz#9889019d1024cce55cdc069498337ef6186a11a1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085"
source-map-support@^0.4.2: source-map-support@^0.4.2:
version "0.4.15" version "0.4.15"
@ -5445,10 +5484,14 @@ source-map@^0.4.2, source-map@~0.4.1:
dependencies: dependencies:
amdefine ">=0.0.4" amdefine ">=0.0.4"
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.3: 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.6" version "0.5.6"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
source-map@~0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
spawn-rx@^2.0.10: spawn-rx@^2.0.10:
version "2.0.11" version "2.0.11"
resolved "https://registry.yarnpkg.com/spawn-rx/-/spawn-rx-2.0.11.tgz#65451ad65662801daea75549832a782de0048dbf" resolved "https://registry.yarnpkg.com/spawn-rx/-/spawn-rx-2.0.11.tgz#65451ad65662801daea75549832a782de0048dbf"
@ -5653,6 +5696,12 @@ supports-color@^4.0.0:
dependencies: dependencies:
has-flag "^2.0.0" has-flag "^2.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"
svgo@^0.7.0: svgo@^0.7.0:
version "0.7.2" version "0.7.2"
resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5"
@ -5684,9 +5733,9 @@ tapable@^0.1.8, tapable@~0.1.8:
version "0.1.10" version "0.1.10"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4"
tapable@^0.2.5, tapable@~0.2.5: tapable@^0.2.7:
version "0.2.6" version "0.2.8"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.6.tgz#206be8e188860b514425375e6f1ae89bfb01fd8d" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22"
tar-pack@^3.4.0: tar-pack@^3.4.0:
version "3.4.0" version "3.4.0"
@ -5811,7 +5860,7 @@ ua-parser-js@^0.7.9:
version "0.7.13" version "0.7.13"
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.13.tgz#cd9dd2f86493b3f44dbeeef3780fda74c5ee14be" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.13.tgz#cd9dd2f86493b3f44dbeeef3780fda74c5ee14be"
uglify-js@^2.8.27: uglify-js@^2.8.29:
version "2.8.29" version "2.8.29"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
dependencies: dependencies:
@ -5833,6 +5882,14 @@ uglify-to-browserify@~1.0.0:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" 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"
uid-number@^0.0.6: uid-number@^0.0.6:
version "0.0.6" version "0.0.6"
resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
@ -5974,12 +6031,12 @@ watchpack@^0.2.1:
chokidar "^1.0.0" chokidar "^1.0.0"
graceful-fs "^4.1.2" graceful-fs "^4.1.2"
watchpack@^1.3.1: watchpack@^1.4.0:
version "1.3.1" version "1.4.0"
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.3.1.tgz#7d8693907b28ce6013e7f3610aa2a1acf07dad87" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac"
dependencies: dependencies:
async "^2.1.2" async "^2.1.2"
chokidar "^1.4.3" chokidar "^1.7.0"
graceful-fs "^4.1.2" graceful-fs "^4.1.2"
wbuf@^1.1.0, wbuf@^1.7.2: wbuf@^1.1.0, wbuf@^1.7.2:
@ -6030,6 +6087,12 @@ webpack-dev-server@^2.4.4:
webpack-dev-middleware "^1.10.2" webpack-dev-middleware "^1.10.2"
yargs "^6.0.0" yargs "^6.0.0"
webpack-merge@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.1.tgz#f1197a0a973e69c6fbeeb6d658219aa8c0c13555"
dependencies:
lodash "^4.17.4"
webpack-notifier@^1.5.0: webpack-notifier@^1.5.0:
version "1.5.0" version "1.5.0"
resolved "https://registry.yarnpkg.com/webpack-notifier/-/webpack-notifier-1.5.0.tgz#c010007d448cebc34defc99ecf288fa5e8c6baf6" resolved "https://registry.yarnpkg.com/webpack-notifier/-/webpack-notifier-1.5.0.tgz#c010007d448cebc34defc99ecf288fa5e8c6baf6"
@ -6038,12 +6101,12 @@ webpack-notifier@^1.5.0:
object-assign "^4.1.0" object-assign "^4.1.0"
strip-ansi "^3.0.1" strip-ansi "^3.0.1"
webpack-sources@^0.2.3: webpack-sources@^1.0.1:
version "0.2.3" version "1.0.2"
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.2.3.tgz#17c62bfaf13c707f9d02c479e0dcdde8380697fb" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.0.2.tgz#d0148ec083b3b5ccef1035a6b3ec16442983b27a"
dependencies: dependencies:
source-list-map "^1.1.1" source-list-map "^2.0.0"
source-map "~0.5.3" source-map "~0.6.1"
webpack-target-electron-renderer@^0.4.0: webpack-target-electron-renderer@^0.4.0:
version "0.4.0" version "0.4.0"
@ -6071,31 +6134,32 @@ webpack@^1.12.0:
watchpack "^0.2.1" watchpack "^0.2.1"
webpack-core "~0.6.9" webpack-core "~0.6.9"
webpack@^2.6.1: webpack@^3.0.0:
version "2.6.1" version "3.8.1"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.6.1.tgz#2e0457f0abb1ac5df3ab106c69c672f236785f07" resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.8.1.tgz#b16968a81100abe61608b0153c9159ef8bb2bd83"
dependencies: dependencies:
acorn "^5.0.0" acorn "^5.0.0"
acorn-dynamic-import "^2.0.0" acorn-dynamic-import "^2.0.0"
ajv "^4.7.0" ajv "^5.1.5"
ajv-keywords "^1.1.1" ajv-keywords "^2.0.0"
async "^2.1.2" async "^2.1.2"
enhanced-resolve "^3.0.0" enhanced-resolve "^3.4.0"
escope "^3.6.0"
interpret "^1.0.0" interpret "^1.0.0"
json-loader "^0.5.4" json-loader "^0.5.4"
json5 "^0.5.1" json5 "^0.5.1"
loader-runner "^2.3.0" loader-runner "^2.3.0"
loader-utils "^0.2.16" loader-utils "^1.1.0"
memory-fs "~0.4.1" memory-fs "~0.4.1"
mkdirp "~0.5.0" mkdirp "~0.5.0"
node-libs-browser "^2.0.0" node-libs-browser "^2.0.0"
source-map "^0.5.3" source-map "^0.5.3"
supports-color "^3.1.0" supports-color "^4.2.1"
tapable "~0.2.5" tapable "^0.2.7"
uglify-js "^2.8.27" uglifyjs-webpack-plugin "^0.4.6"
watchpack "^1.3.1" watchpack "^1.4.0"
webpack-sources "^0.2.3" webpack-sources "^1.0.1"
yargs "^6.0.0" yargs "^8.0.2"
websocket-driver@>=0.5.1: websocket-driver@>=0.5.1:
version "0.6.5" version "0.6.5"
@ -6123,6 +6187,10 @@ which-module@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" 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@1, which@^1.0.5, which@^1.2.10, which@^1.2.9: which@1, which@^1.0.5, which@^1.2.10, which@^1.2.9:
version "1.2.14" version "1.2.14"
resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5"
@ -6196,6 +6264,12 @@ yargs-parser@^5.0.0:
dependencies: dependencies:
camelcase "^3.0.0" 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@^6.0.0: yargs@^6.0.0:
version "6.6.0" version "6.6.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208"
@ -6232,6 +6306,24 @@ yargs@^7.0.0, yargs@^7.0.2:
y18n "^3.2.1" y18n "^3.2.1"
yargs-parser "^5.0.0" 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: yargs@~3.10.0:
version "3.10.0" version "3.10.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"

View file

@ -311,13 +311,13 @@ debug@2.2.0:
dependencies: dependencies:
ms "0.7.1" ms "0.7.1"
debug@2.6.0, debug@^2.3.2, debug@^2.6.0: debug@2.6.0:
version "2.6.0" version "2.6.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b"
dependencies: dependencies:
ms "0.7.2" ms "0.7.2"
debug@^2.1.3, debug@^2.2.0, debug@^2.6.8: debug@^2.1.3, debug@^2.2.0, debug@^2.3.2, debug@^2.6.0, debug@^2.6.8:
version "2.6.8" version "2.6.8"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc"
dependencies: dependencies: