Merge remote-tracking branch 'origin/master' into revoke_claims
This commit is contained in:
commit
a6946b4930
21 changed files with 398 additions and 139 deletions
|
@ -9,6 +9,7 @@ Web UI version numbers should always match the corresponding version of LBRY App
|
|||
## [Unreleased]
|
||||
### Added
|
||||
* 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.
|
||||
* 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 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
|
||||
*
|
||||
|
|
137
app/main.js
137
app/main.js
|
@ -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 isDebug = process.env.NODE_ENV === 'development';
|
||||
const setMenu = require('./menu/main-menu.js');
|
||||
|
@ -55,6 +56,13 @@ let readyToQuit = false;
|
|||
// sendCredits it to, it's cached in this variable.
|
||||
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) {
|
||||
// Windows normalizes URIs when they're passed in from other apps. On Windows,
|
||||
// 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 = 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
|
||||
win.setAutoHideMenuBar(true);
|
||||
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) {
|
||||
if (!win) {
|
||||
// Window not created yet, so store up requested URI for when it is
|
||||
openUri = processRequestedUri(uri);
|
||||
} else {
|
||||
|
||||
if (win.isMinimized()) {
|
||||
win.restore();
|
||||
win.restore()
|
||||
} else if (!win.isVisible()) {
|
||||
win.show()
|
||||
}
|
||||
|
||||
win.focus();
|
||||
win.webContents.send('open-uri-requested', processRequestedUri(uri));
|
||||
}
|
||||
|
@ -224,6 +320,15 @@ function launchDaemon() {
|
|||
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
|
||||
* interface or through app.quit()), we abort the quit, try to shut down the daemon,
|
||||
|
@ -231,7 +336,7 @@ function launchDaemon() {
|
|||
*/
|
||||
function quitNow() {
|
||||
readyToQuit = true;
|
||||
app.quit();
|
||||
safeQuit();
|
||||
}
|
||||
|
||||
const isSecondaryInstance = app.makeSingleInstance((argv) => {
|
||||
|
@ -240,6 +345,8 @@ const isSecondaryInstance = app.makeSingleInstance((argv) => {
|
|||
} else if (win) {
|
||||
if (win.isMinimized()) {
|
||||
win.restore();
|
||||
} else if (!win.isVisible()) {
|
||||
win.show();
|
||||
}
|
||||
win.focus();
|
||||
}
|
||||
|
@ -252,6 +359,14 @@ if (isSecondaryInstance) { // We're not in the original process, so quit
|
|||
|
||||
app.on('ready', function(){
|
||||
launchDaemonIfNotRunning();
|
||||
if (process.platform === "linux") {
|
||||
checkLinuxTraySupport( err => {
|
||||
if (!err) createTray();
|
||||
else minimize = false;
|
||||
})
|
||||
} else {
|
||||
createTray();
|
||||
}
|
||||
createWindow();
|
||||
});
|
||||
|
||||
|
@ -385,6 +500,22 @@ function upgrade(event, installerPath) {
|
|||
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);
|
||||
|
||||
app.setAsDefaultProtocolClient('lbry');
|
||||
|
|
|
@ -1,6 +1,18 @@
|
|||
const { app, shell, Menu } = require('electron');
|
||||
const { safeQuit } = require('../main.js')
|
||||
|
||||
|
||||
const baseTemplate = [
|
||||
{
|
||||
label: 'File',
|
||||
submenu: [
|
||||
{
|
||||
label: 'Quit',
|
||||
accelerator: "CommandOrControl+Q",
|
||||
click: () => safeQuit(),
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
label: 'Edit',
|
||||
submenu: [
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
"electron-rebuild": "^1.5.11"
|
||||
},
|
||||
"lbrySettings": {
|
||||
"lbrynetDaemonVersion": "0.17.1",
|
||||
"lbrynetDaemonVersion": "0.18.0rc1",
|
||||
"lbrynetDaemonUrlTemplate": "https://github.com/lbryio/lbry/releases/download/vDAEMONVER/lbrynet-daemon-vDAEMONVER-OSNAME.zip"
|
||||
},
|
||||
"license": "MIT"
|
||||
|
|
|
@ -41,7 +41,7 @@ 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
|
||||
$INSTALL build-essential libssl-dev libffi-dev libgmp3-dev python2.7-dev libsecret-1-dev wget
|
||||
elif $OSX && ! cmd_exists brew ; then
|
||||
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
|
||||
fi
|
||||
|
|
|
@ -29,7 +29,7 @@ def get_asset_filename():
|
|||
|
||||
|
||||
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([
|
||||
'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
BIN
ui/dist/img/fav/32x32.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
|
@ -78,25 +78,18 @@ export function doFetchFeaturedUris() {
|
|||
type: types.FETCH_FEATURED_CONTENT_STARTED,
|
||||
});
|
||||
|
||||
const success = ({ Categories, Uris }) => {
|
||||
let featuredUris = {};
|
||||
const success = ({ Uris }) => {
|
||||
let urisToResolve = [];
|
||||
Categories.forEach(category => {
|
||||
if (Uris[category] && Uris[category].length) {
|
||||
const uris = Uris[category];
|
||||
|
||||
featuredUris[category] = uris;
|
||||
urisToResolve = [...urisToResolve, ...uris];
|
||||
}
|
||||
});
|
||||
for (let category in Uris) {
|
||||
urisToResolve = [...urisToResolve, ...Uris[category]];
|
||||
}
|
||||
|
||||
const actions = [
|
||||
doResolveUris(urisToResolve),
|
||||
{
|
||||
type: types.FETCH_FEATURED_CONTENT_COMPLETED,
|
||||
data: {
|
||||
categories: Categories,
|
||||
uris: featuredUris,
|
||||
uris: Uris,
|
||||
success: true,
|
||||
},
|
||||
},
|
||||
|
@ -108,15 +101,12 @@ export function doFetchFeaturedUris() {
|
|||
dispatch({
|
||||
type: types.FETCH_FEATURED_CONTENT_COMPLETED,
|
||||
data: {
|
||||
categories: [],
|
||||
uris: {},
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
lbryio
|
||||
.call("file", "list_homepage", { version: "early-access" })
|
||||
.then(success, failure);
|
||||
lbryio.call("file", "list_homepage").then(success, failure);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -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."
|
||||
);
|
||||
} else if (isLoading) {
|
||||
loadStatusMessage = __(
|
||||
"Requesting stream... it may sit here for like 15-20 seconds in a really awkward way... we're working on it"
|
||||
);
|
||||
loadStatusMessage = __("Requesting stream...");
|
||||
} else if (isDownloading) {
|
||||
loadStatusMessage = __("Downloading stream... not long left now!");
|
||||
}
|
||||
|
|
|
@ -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 => {
|
||||
var target = event.target;
|
||||
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();
|
||||
|
||||
var init = function() {
|
||||
|
|
|
@ -4,8 +4,7 @@ import { CreditAmount, CurrencySymbol } from "component/common";
|
|||
import Link from "component/link/index";
|
||||
|
||||
const ModalCreditIntro = props => {
|
||||
const { closeModal, currentBalance, totalRewardValue, verifyAccount } = props;
|
||||
|
||||
const { closeModal, totalRewardValue, verifyAccount } = props;
|
||||
const totalRewardRounded = Math.round(totalRewardValue / 10) * 10;
|
||||
|
||||
return (
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
const hashes = require("jshashes");
|
||||
import lbry from "lbry";
|
||||
import lbryio from "lbryio";
|
||||
import { doShowSnackBar } from "actions/app";
|
||||
|
@ -37,54 +36,6 @@ function rewardMessage(type, amount) {
|
|||
}[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 = {};
|
||||
|
||||
rewards.TYPE_NEW_DEVELOPER = "new_developer";
|
||||
|
@ -149,7 +100,7 @@ rewards.claimReward = function(type) {
|
|||
claim.name.length &&
|
||||
claim.name[0] == "@" &&
|
||||
claim.txid.length &&
|
||||
isInitialClaim(claim)
|
||||
claim.category == "claim"
|
||||
);
|
||||
});
|
||||
if (claim) {
|
||||
|
@ -173,7 +124,7 @@ rewards.claimReward = function(type) {
|
|||
claim.name.length &&
|
||||
claim.name[0] != "@" &&
|
||||
claim.txid.length &&
|
||||
isInitialClaim(claim)
|
||||
claim.category == "claim"
|
||||
);
|
||||
});
|
||||
if (claim) {
|
||||
|
|
|
@ -70,8 +70,9 @@
|
|||
"node-loader": "^0.6.0",
|
||||
"prettier": "^1.4.2",
|
||||
"style-loader": "^0.18.2",
|
||||
"webpack": "^2.6.1",
|
||||
"webpack": "^3.0.0",
|
||||
"webpack-dev-server": "^2.4.4",
|
||||
"webpack-merge": "^4.1.1",
|
||||
"webpack-notifier": "^1.5.0",
|
||||
"webpack-target-electron-renderer": "^0.4.0"
|
||||
},
|
||||
|
|
|
@ -128,6 +128,7 @@ $text-color: #000;
|
|||
--card-small-width: $spacing-vertical * 10;
|
||||
|
||||
/* Modal */
|
||||
--modal-width: 420px;
|
||||
--modal-bg: var(--color-bg);
|
||||
--modal-overlay-bg: rgba(#F5F5F5, 0.75); // --color-canvas: #F5F5F5
|
||||
--modal-border: 1px solid rgb(204, 204, 204);
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
border-radius: 4px;
|
||||
padding: $spacing-vertical;
|
||||
box-shadow: var(--box-shadow-layer);
|
||||
max-width: 400px;
|
||||
max-width: var(--modal-width);
|
||||
|
||||
word-break: break-word;
|
||||
}
|
||||
|
@ -70,13 +70,13 @@
|
|||
|
||||
.error-modal {
|
||||
max-width: none;
|
||||
width: 400px;
|
||||
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);
|
||||
padding: 8px;
|
||||
list-style: none;
|
||||
max-height: 400px;
|
||||
max-width: 400px;
|
||||
max-width: var(--modal-width);
|
||||
overflow-y: hidden;
|
||||
}
|
||||
|
|
|
@ -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 --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
55
ui/webpack.common.js
Normal 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
22
ui/webpack.dev.js
Normal 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
11
ui/webpack.prod.js
Normal 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")
|
||||
})
|
||||
]
|
||||
});
|
168
ui/yarn.lock
168
ui/yarn.lock
|
@ -41,10 +41,14 @@ acorn@^5.0.0, acorn@^5.0.1:
|
|||
version "5.0.3"
|
||||
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"
|
||||
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:
|
||||
version "4.11.8"
|
||||
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-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:
|
||||
version "0.1.4"
|
||||
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"
|
||||
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:
|
||||
version "1.6.1"
|
||||
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"
|
||||
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"
|
||||
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468"
|
||||
dependencies:
|
||||
|
@ -1891,14 +1908,14 @@ end-of-stream@^1.1.0:
|
|||
dependencies:
|
||||
once "^1.4.0"
|
||||
|
||||
enhanced-resolve@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.1.0.tgz#9f4b626f577245edcf4b2ad83d86e17f4f421dec"
|
||||
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.5"
|
||||
tapable "^0.2.7"
|
||||
|
||||
enhanced-resolve@~0.9.0:
|
||||
version "0.9.1"
|
||||
|
@ -2312,6 +2329,14 @@ fast-deep-equal@^0.1.0:
|
|||
version "0.1.0"
|
||||
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:
|
||||
version "2.0.6"
|
||||
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"
|
||||
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"
|
||||
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
|
||||
dependencies:
|
||||
|
@ -3420,7 +3445,7 @@ loader-utils@^0.2.11, loader-utils@^0.2.16:
|
|||
json5 "^0.5.0"
|
||||
object-assign "^4.0.1"
|
||||
|
||||
loader-utils@^1.0.2:
|
||||
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:
|
||||
|
@ -3663,6 +3688,12 @@ mediasource@^2.0.0, mediasource@^2.1.0:
|
|||
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"
|
||||
|
@ -4206,6 +4237,14 @@ os-locale@^1.4.0:
|
|||
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:
|
||||
version "1.0.2"
|
||||
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"
|
||||
resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106"
|
||||
|
||||
source-list-map@^1.1.1:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-1.1.2.tgz#9889019d1024cce55cdc069498337ef6186a11a1"
|
||||
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-support@^0.4.2:
|
||||
version "0.4.15"
|
||||
|
@ -5445,10 +5484,14 @@ source-map@^0.4.2, source-map@~0.4.1:
|
|||
dependencies:
|
||||
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"
|
||||
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:
|
||||
version "2.0.11"
|
||||
resolved "https://registry.yarnpkg.com/spawn-rx/-/spawn-rx-2.0.11.tgz#65451ad65662801daea75549832a782de0048dbf"
|
||||
|
@ -5653,6 +5696,12 @@ supports-color@^4.0.0:
|
|||
dependencies:
|
||||
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:
|
||||
version "0.7.2"
|
||||
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"
|
||||
resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4"
|
||||
|
||||
tapable@^0.2.5, tapable@~0.2.5:
|
||||
version "0.2.6"
|
||||
resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.6.tgz#206be8e188860b514425375e6f1ae89bfb01fd8d"
|
||||
tapable@^0.2.7:
|
||||
version "0.2.8"
|
||||
resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22"
|
||||
|
||||
tar-pack@^3.4.0:
|
||||
version "3.4.0"
|
||||
|
@ -5811,7 +5860,7 @@ ua-parser-js@^0.7.9:
|
|||
version "0.7.13"
|
||||
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"
|
||||
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
|
||||
dependencies:
|
||||
|
@ -5833,6 +5882,14 @@ 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"
|
||||
|
||||
uid-number@^0.0.6:
|
||||
version "0.0.6"
|
||||
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"
|
||||
graceful-fs "^4.1.2"
|
||||
|
||||
watchpack@^1.3.1:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.3.1.tgz#7d8693907b28ce6013e7f3610aa2a1acf07dad87"
|
||||
watchpack@^1.4.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac"
|
||||
dependencies:
|
||||
async "^2.1.2"
|
||||
chokidar "^1.4.3"
|
||||
chokidar "^1.7.0"
|
||||
graceful-fs "^4.1.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"
|
||||
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:
|
||||
version "1.5.0"
|
||||
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"
|
||||
strip-ansi "^3.0.1"
|
||||
|
||||
webpack-sources@^0.2.3:
|
||||
version "0.2.3"
|
||||
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.2.3.tgz#17c62bfaf13c707f9d02c479e0dcdde8380697fb"
|
||||
webpack-sources@^1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.0.2.tgz#d0148ec083b3b5ccef1035a6b3ec16442983b27a"
|
||||
dependencies:
|
||||
source-list-map "^1.1.1"
|
||||
source-map "~0.5.3"
|
||||
source-list-map "^2.0.0"
|
||||
source-map "~0.6.1"
|
||||
|
||||
webpack-target-electron-renderer@^0.4.0:
|
||||
version "0.4.0"
|
||||
|
@ -6071,31 +6134,32 @@ webpack@^1.12.0:
|
|||
watchpack "^0.2.1"
|
||||
webpack-core "~0.6.9"
|
||||
|
||||
webpack@^2.6.1:
|
||||
version "2.6.1"
|
||||
resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.6.1.tgz#2e0457f0abb1ac5df3ab106c69c672f236785f07"
|
||||
webpack@^3.0.0:
|
||||
version "3.8.1"
|
||||
resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.8.1.tgz#b16968a81100abe61608b0153c9159ef8bb2bd83"
|
||||
dependencies:
|
||||
acorn "^5.0.0"
|
||||
acorn-dynamic-import "^2.0.0"
|
||||
ajv "^4.7.0"
|
||||
ajv-keywords "^1.1.1"
|
||||
ajv "^5.1.5"
|
||||
ajv-keywords "^2.0.0"
|
||||
async "^2.1.2"
|
||||
enhanced-resolve "^3.0.0"
|
||||
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 "^0.2.16"
|
||||
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 "^3.1.0"
|
||||
tapable "~0.2.5"
|
||||
uglify-js "^2.8.27"
|
||||
watchpack "^1.3.1"
|
||||
webpack-sources "^0.2.3"
|
||||
yargs "^6.0.0"
|
||||
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.6.5"
|
||||
|
@ -6123,6 +6187,10 @@ 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@1, which@^1.0.5, which@^1.2.10, which@^1.2.9:
|
||||
version "1.2.14"
|
||||
resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5"
|
||||
|
@ -6196,6 +6264,12 @@ yargs-parser@^5.0.0:
|
|||
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@^6.0.0:
|
||||
version "6.6.0"
|
||||
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"
|
||||
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"
|
||||
|
|
|
@ -311,13 +311,13 @@ debug@2.2.0:
|
|||
dependencies:
|
||||
ms "0.7.1"
|
||||
|
||||
debug@2.6.0, debug@^2.3.2, debug@^2.6.0:
|
||||
debug@2.6.0:
|
||||
version "2.6.0"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b"
|
||||
dependencies:
|
||||
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"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc"
|
||||
dependencies:
|
||||
|
|
Loading…
Add table
Reference in a new issue