Xterm v3 integration (#2573)

This commit is contained in:
CHaBou 2018-01-09 17:33:24 +01:00 committed by GitHub
parent 5700690e0b
commit dd780e6fe7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 310 additions and 2365 deletions

View file

@ -17,6 +17,9 @@ module.exports = {
// terminal cursor background color and opacity (hex, rgb, hsl, hsv, hwb or cmyk) // terminal cursor background color and opacity (hex, rgb, hsl, hsv, hwb or cmyk)
cursorColor: 'rgba(248,28,229,0.8)', cursorColor: 'rgba(248,28,229,0.8)',
// terminal text color under BLOCK cursor
cursorAccentColor: '#000',
// `'BEAM'` for |, `'UNDERLINE'` for _, `'BLOCK'` for █ // `'BEAM'` for |, `'UNDERLINE'` for _, `'BLOCK'` for █
cursorShape: 'BLOCK', cursorShape: 'BLOCK',
@ -30,6 +33,9 @@ module.exports = {
// opacity is only supported on macOS // opacity is only supported on macOS
backgroundColor: '#000', backgroundColor: '#000',
// terminal selection color
selectionColor: 'rgba(248,28,229,0.3)',
// border color (window, tabs) // border color (window, tabs)
borderColor: '#333', borderColor: '#333',

File diff suppressed because it is too large Load diff

View file

@ -59,8 +59,13 @@ class TermGroup_ extends PureComponent {
const props = getTermProps(uid, this.props, { const props = getTermProps(uid, this.props, {
isTermActive: uid === this.props.activeSession, isTermActive: uid === this.props.activeSession,
term: termRef ? termRef.term : null, term: termRef ? termRef.term : null,
backgroundColor: this.props.backgroundColor,
foregroundColor: this.props.foregroundColor,
colors: this.props.colors,
cursorBlink: this.props.cursorBlink, cursorBlink: this.props.cursorBlink,
cursorShape: this.props.cursorShape, cursorShape: this.props.cursorShape,
cursorColor: this.props.cursorColor,
cursorAccentColor: this.props.cursorAccentColor,
fontSize: this.props.fontSize, fontSize: this.props.fontSize,
fontFamily: this.props.fontFamily, fontFamily: this.props.fontFamily,
uiFontFamily: this.props.uiFontFamily, uiFontFamily: this.props.uiFontFamily,
@ -81,6 +86,7 @@ class TermGroup_ extends PureComponent {
onURLAbort: this.bind(this.props.onURLAbort, null, uid), onURLAbort: this.bind(this.props.onURLAbort, null, uid),
onContextMenu: this.bind(this.props.onContextMenu, null, uid), onContextMenu: this.bind(this.props.onContextMenu, null, uid),
borderColor: this.props.borderColor, borderColor: this.props.borderColor,
selectionColor: this.props.selectionColor,
quickEdit: this.props.quickEdit, quickEdit: this.props.quickEdit,
uid uid
}); });

View file

@ -1,7 +1,8 @@
/* global Blob,URL,requestAnimationFrame */ /* global Blob,URL,requestAnimationFrame */
import React from 'react'; import React from 'react';
import Terminal from 'xterm'; import {Terminal} from 'xterm';
import {clipboard} from 'electron'; import {clipboard} from 'electron';
import * as Color from 'color';
import {PureComponent} from '../base-components'; import {PureComponent} from '../base-components';
import terms from '../terms'; import terms from '../terms';
import processClipboard from '../utils/paste'; import processClipboard from '../utils/paste';
@ -13,6 +14,41 @@ const CURSOR_STYLES = {
BLOCK: 'block' BLOCK: 'block'
}; };
const getTermOptions = props => {
// Set a background color only if it is opaque
const backgroundColor = Color(props.backgroundColor).alpha() < 1 ? 'transparent' : props.backgroundColor;
return {
cursorStyle: CURSOR_STYLES[props.cursorShape],
cursorBlink: props.cursorBlink,
fontFamily: props.fontFamily,
fontSize: props.fontSize,
allowTransparency: true,
theme: {
foreground: props.foregroundColor,
background: backgroundColor,
cursor: props.cursorColor,
cursorAccent: props.cursorAccentColor,
selection: props.selectionColor,
black: props.colors.black,
red: props.colors.red,
green: props.colors.green,
yellow: props.colors.yellow,
blue: props.colors.blue,
magenta: props.colors.magenta,
cyan: props.colors.cyan,
white: props.colors.white,
brightBlack: props.colors.lightBlack,
brightRed: props.colors.lightRed,
brightGreen: props.colors.lightGreen,
brightYellow: props.colors.lightYellow,
brightBlue: props.colors.lightBlue,
brightMagenta: props.colors.lightMagenta,
brightCyan: props.colors.lightCyan,
brightWhite: props.colors.lightWhite
}
};
};
export default class Term extends PureComponent { export default class Term extends PureComponent {
constructor(props) { constructor(props) {
super(props); super(props);
@ -26,30 +62,23 @@ export default class Term extends PureComponent {
this.onTermRef = this.onTermRef.bind(this); this.onTermRef = this.onTermRef.bind(this);
this.onTermWrapperRef = this.onTermWrapperRef.bind(this); this.onTermWrapperRef = this.onTermWrapperRef.bind(this);
this.onMouseUp = this.onMouseUp.bind(this); this.onMouseUp = this.onMouseUp.bind(this);
this.termOptions = {};
} }
componentDidMount() { componentDidMount() {
const {props} = this; const {props} = this;
// we need to use this hack to retain the term reference this.termOptions = getTermOptions(props);
// as we move the term around splits, until xterm adds this.term = props.term || new Terminal(this.termOptions);
// support for getState / setState this.term.attachCustomKeyEventHandler(this.keyboardHandler);
this.term.open(this.termRef);
if (props.term) { if (props.term) {
this.term = props.term; //We need to set options again after reattaching an existing term
this.termRef.appendChild(this.term.element); Object.keys(this.termOptions).forEach(option => this.term.setOption(option, this.termOptions[option]));
this.onOpen();
} else {
this.term =
props.term ||
new Terminal({
cursorStyle: CURSOR_STYLES[props.cursorShape],
cursorBlink: props.cursorBlink
});
this.term.attachCustomKeyEventHandler(this.keyboardHandler);
this.term.open(this.termRef);
this.onOpen();
} }
this.onOpen(this.termOptions);
if (props.onTitle) { if (props.onTitle) {
this.term.on('title', props.onTitle); this.term.on('title', props.onTitle);
} }
@ -84,7 +113,7 @@ export default class Term extends PureComponent {
terms[this.props.uid] = this; terms[this.props.uid] = this;
} }
onOpen() { onOpen(termOptions) {
// we need to delay one frame so that aphrodite styles // we need to delay one frame so that aphrodite styles
// get applied and we can make an accurate measurement // get applied and we can make an accurate measurement
// of the container width and height // of the container width and height
@ -93,7 +122,9 @@ export default class Term extends PureComponent {
// measurement to have taken place but it seems that // measurement to have taken place but it seems that
// xterm.js might be doing this asynchronously, so // xterm.js might be doing this asynchronously, so
// we force it instead // we force it instead
this.term.charMeasure.measure(); // eslint-disable-next-line no-debugger
//debugger;
this.term.charMeasure.measure(termOptions);
this.fitResize(); this.fitResize();
}); });
} }
@ -179,10 +210,28 @@ export default class Term extends PureComponent {
if (!this.props.cleared && nextProps.cleared) { if (!this.props.cleared && nextProps.cleared) {
this.clear(); this.clear();
} }
const nextTermOptions = getTermOptions(nextProps);
// Update only options that have changed.
Object.keys(nextTermOptions)
.filter(option => option !== 'theme' && nextTermOptions[option] !== this.termOptions[option])
.forEach(option => this.term.setOption(option, nextTermOptions[option]));
// Do we need to update theme?
const shouldUpdateTheme =
!this.termOptions.theme ||
Object.keys(nextTermOptions.theme).some(option => {
nextTermOptions.theme[option] !== this.termOptions.theme[option];
});
if (shouldUpdateTheme) {
this.term.setOption('theme', nextTermOptions.theme);
}
this.termOptions = nextTermOptions;
if (!this.props.isTermActive && nextProps.isTermActive) { if (!this.props.isTermActive && nextProps.isTermActive) {
requestAnimationFrame(() => { requestAnimationFrame(() => {
this.term.charMeasure.measure(); this.term.charMeasure.measure(this.termOptions);
this.fitResize(); this.fitResize();
}); });
} }
@ -190,7 +239,7 @@ export default class Term extends PureComponent {
if (this.props.fontSize !== nextProps.fontSize || this.props.fontFamily !== nextProps.fontFamily) { if (this.props.fontSize !== nextProps.fontSize || this.props.fontFamily !== nextProps.fontFamily) {
// invalidate xterm cache about how wide each // invalidate xterm cache about how wide each
// character is // character is
this.term.charMeasure.measure(); this.term.charMeasure.measure(this.termOptions);
// resize to fit the container // resize to fit the container
this.fitResize(); this.fitResize();

View file

@ -90,9 +90,13 @@ export default class Terms extends Component {
activeSession: this.props.activeSession, activeSession: this.props.activeSession,
sessions: this.props.sessions, sessions: this.props.sessions,
backgroundColor: this.props.backgroundColor, backgroundColor: this.props.backgroundColor,
foregroundColor: this.props.foregroundColor,
borderColor: this.props.borderColor, borderColor: this.props.borderColor,
selectionColor: this.props.selectionColor,
colors: this.props.colors,
cursorShape: this.props.cursorShape, cursorShape: this.props.cursorShape,
cursorBlink: this.props.cursorBlink, cursorBlink: this.props.cursorBlink,
cursorColor: this.props.cursorColor,
fontSize: this.props.fontSize, fontSize: this.props.fontSize,
fontFamily: this.props.fontFamily, fontFamily: this.props.fontFamily,
uiFontFamily: this.props.uiFontFamily, uiFontFamily: this.props.uiFontFamily,
@ -119,13 +123,9 @@ export default class Terms extends Component {
})} })}
{this.props.customChildren} {this.props.customChildren}
<StyleSheet <StyleSheet
colors={this.props.colors}
backgroundColor={this.props.backgroundColor} backgroundColor={this.props.backgroundColor}
customCSS={this.props.customCSS} customCSS={this.props.customCSS}
cursorColor={this.props.cursorColor}
fontSize={this.props.fontSize}
fontFamily={this.props.fontFamily} fontFamily={this.props.fontFamily}
fontSmoothing={this.props.fontSmoothing}
foregroundColor={this.props.foregroundColor} foregroundColor={this.props.foregroundColor}
borderColor={this.props.borderColor} borderColor={this.props.borderColor}
/> />

View file

@ -28,9 +28,11 @@ const TermsContainer = connect(
fontSmoothing: state.ui.fontSmoothingOverride, fontSmoothing: state.ui.fontSmoothingOverride,
padding: state.ui.padding, padding: state.ui.padding,
cursorColor: state.ui.cursorColor, cursorColor: state.ui.cursorColor,
cursorAccentColor: state.ui.cursorAccentColor,
cursorShape: state.ui.cursorShape, cursorShape: state.ui.cursorShape,
cursorBlink: state.ui.cursorBlink, cursorBlink: state.ui.cursorBlink,
borderColor: state.ui.borderColor, borderColor: state.ui.borderColor,
selectionColor: state.ui.selectionColor,
colors: state.ui.colors, colors: state.ui.colors,
foregroundColor: state.ui.foregroundColor, foregroundColor: state.ui.foregroundColor,
backgroundColor: state.ui.backgroundColor, backgroundColor: state.ui.backgroundColor,

View file

@ -34,9 +34,11 @@ const initial = Immutable({
rows: null, rows: null,
activeUid: null, activeUid: null,
cursorColor: '#F81CE5', cursorColor: '#F81CE5',
cursorAccentColor: '#000',
cursorShape: 'BLOCK', cursorShape: 'BLOCK',
cursorBlink: false, cursorBlink: false,
borderColor: '#333', borderColor: '#333',
selectionColor: 'rgba(248,28,229,0.3)',
fontSize: 12, fontSize: 12,
padding: '12px 14px', padding: '12px 14px',
fontFamily: 'Menlo, "DejaVu Sans Mono", "Lucida Console", monospace', fontFamily: 'Menlo, "DejaVu Sans Mono", "Lucida Console", monospace',
@ -131,6 +133,10 @@ const reducer = (state = initial, action) => {
ret.cursorColor = config.cursorColor; ret.cursorColor = config.cursorColor;
} }
if (config.cursorAccentColor) {
ret.cursorAccentColor = config.cursorAccentColor;
}
if (allowedCursorShapes.has(config.cursorShape)) { if (allowedCursorShapes.has(config.cursorShape)) {
ret.cursorShape = config.cursorShape; ret.cursorShape = config.cursorShape;
} }
@ -143,6 +149,10 @@ const reducer = (state = initial, action) => {
ret.borderColor = config.borderColor; ret.borderColor = config.borderColor;
} }
if (config.selectionColor) {
ret.selectionColor = config.selectionColor;
}
if (typeof config.padding !== 'undefined' && config.padding !== null) { if (typeof config.padding !== 'undefined' && config.padding !== null) {
ret.padding = config.padding; ret.padding = config.padding;
} }

View file

@ -1,7 +1,8 @@
{ {
"repository": "zeit/hyper", "repository": "zeit/hyper",
"scripts": { "scripts": {
"start": "echo 'please run `yarn run dev` in one tab and then `yarn run app` in another one'", "start":
"echo 'please run `yarn run dev` in one tab and then `yarn run app` in another one'",
"app": "electron app", "app": "electron app",
"dev": "webpack -w", "dev": "webpack -w",
"build": "cross-env NODE_ENV=production webpack", "build": "cross-env NODE_ENV=production webpack",
@ -10,21 +11,18 @@
"test:unit": "ava test/unit", "test:unit": "ava test/unit",
"test:unit:watch": "yarn run test:unit -- --watch", "test:unit:watch": "yarn run test:unit -- --watch",
"prepush": "yarn test", "prepush": "yarn test",
"postinstall": "electron-builder install-app-deps && yarn run rebuild-node-pty", "postinstall":
"rebuild-node-pty": "electron-rebuild -f -w app/node_modules/node-pty -m app", "electron-builder install-app-deps && yarn run rebuild-node-pty && yarn --cwd node_modules/xterm",
"dist": "yarn run build && cross-env BABEL_ENV=production babel --out-file app/renderer/bundle.js --no-comments --minified app/renderer/bundle.js && build", "rebuild-node-pty":
"clean": "node ./bin/rimraf-standalone.js node_modules && node ./bin/rimraf-standalone.js ./app/node_modules && node ./bin/rimraf-standalone.js ./app/renderer" "electron-rebuild -f -w app/node_modules/node-pty -m app",
"dist":
"yarn run build && cross-env BABEL_ENV=production babel --out-file app/renderer/bundle.js --no-comments --minified app/renderer/bundle.js && build",
"clean":
"node ./bin/rimraf-standalone.js node_modules && node ./bin/rimraf-standalone.js ./app/node_modules && node ./bin/rimraf-standalone.js ./app/renderer"
}, },
"eslintConfig": { "eslintConfig": {
"plugins": [ "plugins": ["react", "prettier"],
"react", "extends": ["eslint:recommended", "plugin:react/recommended", "prettier"],
"prettier"
],
"extends": [
"eslint:recommended",
"plugin:react/recommended",
"prettier"
],
"parserOptions": { "parserOptions": {
"ecmaVersion": 8, "ecmaVersion": 8,
"sourceType": "module", "sourceType": "module",
@ -41,10 +39,7 @@
"node": true "node": true
}, },
"rules": { "rules": {
"func-names": [ "func-names": ["error", "as-needed"],
"error",
"as-needed"
],
"no-shadow": "error", "no-shadow": "error",
"no-extra-semi": 0, "no-extra-semi": 0,
"react/prop-types": 0, "react/prop-types": 0,
@ -90,9 +85,7 @@
] ]
}, },
"babel": { "babel": {
"presets": [ "presets": ["react"],
"react"
],
"env": { "env": {
"production": { "production": {
"plugins": [ "plugins": [
@ -137,28 +130,20 @@
"target": [ "target": [
{ {
"target": "deb", "target": "deb",
"arch": [ "arch": ["x64"]
"x64"
]
}, },
{ {
"target": "AppImage", "target": "AppImage",
"arch": [ "arch": ["x64"]
"x64"
]
}, },
{ {
"target": "rpm", "target": "rpm",
"arch": [ "arch": ["x64"]
"x64"
]
} }
] ]
}, },
"win": { "win": {
"target": [ "target": ["squirrel"]
"squirrel"
]
}, },
"mac": { "mac": {
"category": "public.app-category.developer-tools", "category": "public.app-category.developer-tools",
@ -204,7 +189,7 @@
"semver": "5.4.1", "semver": "5.4.1",
"shebang-loader": "false0.0.1", "shebang-loader": "false0.0.1",
"uuid": "3.1.0", "uuid": "3.1.0",
"xterm": "2.9.2" "xterm": "chabou/xterm.js#hyper"
}, },
"devDependencies": { "devDependencies": {
"ava": "0.24.0", "ava": "0.24.0",

140
yarn.lock
View file

@ -14,15 +14,7 @@
version "2.1.1" version "2.1.1"
resolved "https://registry.yarnpkg.com/7zip-bin-win/-/7zip-bin-win-2.1.1.tgz#8acfc28bb34e53a9476b46ae85a97418e6035c20" resolved "https://registry.yarnpkg.com/7zip-bin-win/-/7zip-bin-win-2.1.1.tgz#8acfc28bb34e53a9476b46ae85a97418e6035c20"
"7zip-bin@^2.2.7": "7zip-bin@^2.2.7", "7zip-bin@^2.3.4":
version "2.3.3"
resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-2.3.3.tgz#20fef9e4b7500ebfa13df2742782cdfd1151e628"
optionalDependencies:
"7zip-bin-linux" "^1.1.0"
"7zip-bin-mac" "^1.0.1"
"7zip-bin-win" "^2.1.1"
"7zip-bin@^2.3.4":
version "2.3.4" version "2.3.4"
resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-2.3.4.tgz#0861a3c99793dd794f4dd6175ec4ddfa6af8bc9d" resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-2.3.4.tgz#0861a3c99793dd794f4dd6175ec4ddfa6af8bc9d"
optionalDependencies: optionalDependencies:
@ -85,8 +77,8 @@
arrify "^1.0.1" arrify "^1.0.1"
"@types/node@^7.0.18": "@types/node@^7.0.18":
version "7.0.48" version "7.0.49"
resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.48.tgz#24bfdc0aa82e8f6dbd017159c58094a2e06d0abb" resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.49.tgz#f43777edd31822d6bcb50735a76c7f301d7b3121"
abbrev@1: abbrev@1:
version "1.1.1" version "1.1.1"
@ -1252,7 +1244,7 @@ buffer@^4.3.0:
ieee754 "^1.1.4" ieee754 "^1.1.4"
isarray "^1.0.0" isarray "^1.0.0"
builder-util-runtime@3.3.0, builder-util-runtime@^3.3.0: builder-util-runtime@3.3.0:
version "3.3.0" version "3.3.0"
resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-3.3.0.tgz#6374029211544f1a380fc7275658b0616b0e9ae1" resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-3.3.0.tgz#6374029211544f1a380fc7275658b0616b0e9ae1"
dependencies: dependencies:
@ -1261,7 +1253,16 @@ builder-util-runtime@3.3.0, builder-util-runtime@^3.3.0:
fs-extra-p "^4.4.4" fs-extra-p "^4.4.4"
sax "^1.2.4" sax "^1.2.4"
builder-util@3.4.3, builder-util@^3.4.2, builder-util@^3.4.3: builder-util-runtime@^3.3.0, builder-util-runtime@^3.3.1:
version "3.4.0"
resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-3.4.0.tgz#34883f50a3bbf6502abc40902926a1a8dfef5d43"
dependencies:
bluebird-lst "^1.0.5"
debug "^3.1.0"
fs-extra-p "^4.5.0"
sax "^1.2.4"
builder-util@3.4.3:
version "3.4.3" version "3.4.3"
resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-3.4.3.tgz#c7d6908ffc56fa3c4de0ec804dbcb9bbf6aa2ab4" resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-3.4.3.tgz#c7d6908ffc56fa3c4de0ec804dbcb9bbf6aa2ab4"
dependencies: dependencies:
@ -1282,6 +1283,27 @@ builder-util@3.4.3, builder-util@^3.4.2, builder-util@^3.4.3:
temp-file "^3.0.0" temp-file "^3.0.0"
tunnel-agent "^0.6.0" tunnel-agent "^0.6.0"
builder-util@^3.4.2, builder-util@^3.4.3:
version "3.4.4"
resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-3.4.4.tgz#cab30f37c1ee4fb23d33b20ac71e76e3c8451d28"
dependencies:
"7zip-bin" "^2.3.4"
bluebird-lst "^1.0.5"
builder-util-runtime "^3.3.1"
chalk "^2.3.0"
debug "^3.1.0"
fs-extra-p "^4.4.5"
ini "^1.3.5"
is-ci "^1.0.10"
js-yaml "^3.10.0"
lazy-val "^1.0.3"
node-emoji "^1.8.1"
semver "^5.4.1"
source-map-support "^0.5.0"
stat-mode "^0.2.2"
temp-file "^3.0.0"
tunnel-agent "^0.6.0"
builtin-modules@^1.0.0: builtin-modules@^1.0.0:
version "1.1.1" version "1.1.1"
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
@ -1354,8 +1376,8 @@ caniuse-api@^1.5.2:
lodash.uniq "^4.5.0" lodash.uniq "^4.5.0"
caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
version "1.0.30000778" version "1.0.30000782"
resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000778.tgz#167c60e9542a2aa60537c446fb3881d853a3072a" resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000782.tgz#d8815bce1578c350aced1132507301205e0fab53"
capture-stack-trace@^1.0.0: capture-stack-trace@^1.0.0:
version "1.0.0" version "1.0.0"
@ -2255,8 +2277,8 @@ electron-rebuild@1.6.0:
yargs "^7.0.2" yargs "^7.0.2"
electron-to-chromium@^1.2.7: electron-to-chromium@^1.2.7:
version "1.3.27" version "1.3.28"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz#78ecb8a399066187bb374eede35d9c70565a803d" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.28.tgz#8dd4e6458086644e9f9f0a1cf32e2a1f9dffd9ee"
electron@1.7.9: electron@1.7.9:
version "1.7.9" version "1.7.9"
@ -2319,10 +2341,10 @@ equal-length@^1.0.0:
resolved "https://registry.yarnpkg.com/equal-length/-/equal-length-1.0.1.tgz#21ca112d48ab24b4e1e7ffc0e5339d31fdfc274c" resolved "https://registry.yarnpkg.com/equal-length/-/equal-length-1.0.1.tgz#21ca112d48ab24b4e1e7ffc0e5339d31fdfc274c"
errno@^0.1.3: errno@^0.1.3:
version "0.1.4" version "0.1.6"
resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.6.tgz#c386ce8a6283f14fc09563b71560908c9bf53026"
dependencies: dependencies:
prr "~0.0.0" prr "~1.0.1"
error-ex@^1.2.0: error-ex@^1.2.0:
version "1.3.1" version "1.3.1"
@ -2451,8 +2473,8 @@ eslint-scope@^3.7.1:
estraverse "^4.1.1" estraverse "^4.1.1"
eslint@^4.7.2: eslint@^4.7.2:
version "4.12.1" version "4.13.1"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.12.1.tgz#5ec1973822b4a066b353770c3c6d69a2a188e880" resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.13.1.tgz#0055e0014464c7eb7878caf549ef2941992b444f"
dependencies: dependencies:
ajv "^5.3.0" ajv "^5.3.0"
babel-code-frame "^6.22.0" babel-code-frame "^6.22.0"
@ -2761,12 +2783,12 @@ form-data@~2.3.1:
combined-stream "^1.0.5" combined-stream "^1.0.5"
mime-types "^2.1.12" mime-types "^2.1.12"
fs-extra-p@^4.4.4: fs-extra-p@^4.4.4, fs-extra-p@^4.4.5, fs-extra-p@^4.5.0:
version "4.4.4" version "4.5.0"
resolved "https://registry.yarnpkg.com/fs-extra-p/-/fs-extra-p-4.4.4.tgz#396ad6f914eb2954e1700fd0e18288301ed45f04" resolved "https://registry.yarnpkg.com/fs-extra-p/-/fs-extra-p-4.5.0.tgz#b79f3f3fcc0b5e57b7e7caeb06159f958ef15fe8"
dependencies: dependencies:
bluebird-lst "^1.0.4" bluebird-lst "^1.0.5"
fs-extra "^4.0.2" fs-extra "^5.0.0"
fs-extra@^0.30.0: fs-extra@^0.30.0:
version "0.30.0" version "0.30.0"
@ -2793,9 +2815,17 @@ fs-extra@^3.0.1:
jsonfile "^3.0.0" jsonfile "^3.0.0"
universalify "^0.1.0" universalify "^0.1.0"
fs-extra@^4.0.1, fs-extra@^4.0.2: fs-extra@^4.0.1:
version "4.0.2" version "4.0.3"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.2.tgz#f91704c53d1b461f893452b0c307d9997647ab6b" 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: dependencies:
graceful-fs "^4.1.2" graceful-fs "^4.1.2"
jsonfile "^4.0.0" jsonfile "^4.0.0"
@ -2925,8 +2955,8 @@ global-dirs@^0.1.0:
ini "^1.3.4" ini "^1.3.4"
globals@^11.0.1: globals@^11.0.1:
version "11.0.1" version "11.1.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-11.0.1.tgz#12a87bb010e5154396acc535e1e43fc753b0e5e8" resolved "https://registry.yarnpkg.com/globals/-/globals-11.1.0.tgz#632644457f5f0e3ae711807183700ebf2e4633e4"
globals@^9.18.0: globals@^9.18.0:
version "9.18.0" version "9.18.0"
@ -3730,9 +3760,9 @@ lazy-cache@^1.0.3:
version "1.0.4" version "1.0.4"
resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
lazy-val@^1.0.2: lazy-val@^1.0.2, lazy-val@^1.0.3:
version "1.0.2" version "1.0.3"
resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.2.tgz#d9b07fb1fce54cbc99b3c611de431b83249369b6" resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.3.tgz#bb97b200ef00801d94c317e29dc6ed39e31c5edc"
lazystream@^1.0.0: lazystream@^1.0.0:
version "1.0.0" version "1.0.0"
@ -4867,8 +4897,8 @@ postcss@^6.0.1:
supports-color "^4.4.0" supports-color "^4.4.0"
prebuild-install@^2.3.0: prebuild-install@^2.3.0:
version "2.3.0" version "2.4.1"
resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.3.0.tgz#19481247df728b854ab57b187ce234211311b485" resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.4.1.tgz#c28ba1d1eedc17fbd6b3229a657ffc0fba479b49"
dependencies: dependencies:
expand-template "^1.0.2" expand-template "^1.0.2"
github-from-package "0.0.0" github-from-package "0.0.0"
@ -4962,9 +4992,9 @@ prop-types@^15.5.10, prop-types@^15.6.0:
loose-envify "^1.3.1" loose-envify "^1.3.1"
object-assign "^4.1.1" object-assign "^4.1.1"
prr@~0.0.0: prr@~1.0.1:
version "0.0.0" version "1.0.1"
resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
pseudomap@^1.0.2: pseudomap@^1.0.2:
version "1.0.2" version "1.0.2"
@ -5219,8 +5249,8 @@ regenerator-runtime@^0.10.5:
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658"
regenerator-runtime@^0.11.0: regenerator-runtime@^0.11.0:
version "0.11.0" version "0.11.1"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
regex-cache@^0.4.2: regex-cache@^0.4.2:
version "0.4.4" version "0.4.4"
@ -5433,10 +5463,10 @@ rx-lite@*, rx-lite@^4.0.8:
resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
rxjs@^5.1.1: rxjs@^5.1.1:
version "5.5.3" version "5.5.5"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.3.tgz#b62227e74b84f4e77bdf440e50b5ee01a1bc7dcd" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.5.tgz#e164f11d38eaf29f56f08c3447f74ff02dd84e97"
dependencies: dependencies:
symbol-observable "^1.0.1" symbol-observable "1.0.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: 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" version "5.1.1"
@ -5824,7 +5854,13 @@ supports-color@^4.0.0, supports-color@^4.2.1, supports-color@^4.4.0:
dependencies: dependencies:
has-flag "^2.0.0" has-flag "^2.0.0"
supports-color@^5.0.0, supports-color@~5.0.0: supports-color@^5.0.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.1.0.tgz#058a021d1b619f7ddf3980d712ea3590ce7de3d5"
dependencies:
has-flag "^2.0.0"
supports-color@~5.0.0:
version "5.0.1" version "5.0.1"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.0.1.tgz#1c5331f22250c84202805b2f17adf16699f3a39a" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.0.1.tgz#1c5331f22250c84202805b2f17adf16699f3a39a"
dependencies: dependencies:
@ -5842,11 +5878,15 @@ svgo@^0.7.0:
sax "~1.2.1" sax "~1.2.1"
whet.extend "~0.9.9" 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: symbol-observable@^0.2.2:
version "0.2.4" version "0.2.4"
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40"
symbol-observable@^1.0.1, symbol-observable@^1.0.3, symbol-observable@^1.0.4, symbol-observable@^1.1.0: symbol-observable@^1.0.3, symbol-observable@^1.0.4, symbol-observable@^1.1.0:
version "1.1.0" version "1.1.0"
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.1.0.tgz#5c68fd8d54115d9dfb72a84720549222e8db9b32" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.1.0.tgz#5c68fd8d54115d9dfb72a84720549222e8db9b32"
@ -6409,9 +6449,9 @@ xtend@~2.1.1:
dependencies: dependencies:
object-keys "~0.4.0" object-keys "~0.4.0"
xterm@2.9.2: xterm@chabou/xterm.js#hyper:
version "2.9.2" version "3.0.0"
resolved "https://registry.yarnpkg.com/xterm/-/xterm-2.9.2.tgz#ec3e7c636ba67af4a7026be2cff7bdf08e56400a" resolved "https://codeload.github.com/chabou/xterm.js/tar.gz/87b1d5276bb72298210021217165ab847a0886ec"
y18n@^3.2.1: y18n@^3.2.1:
version "3.2.1" version "3.2.1"