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)
cursorColor: 'rgba(248,28,229,0.8)',
// terminal text color under BLOCK cursor
cursorAccentColor: '#000',
// `'BEAM'` for |, `'UNDERLINE'` for _, `'BLOCK'` for █
cursorShape: 'BLOCK',
@ -30,6 +33,9 @@ module.exports = {
// opacity is only supported on macOS
backgroundColor: '#000',
// terminal selection color
selectionColor: 'rgba(248,28,229,0.3)',
// border color (window, tabs)
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, {
isTermActive: uid === this.props.activeSession,
term: termRef ? termRef.term : null,
backgroundColor: this.props.backgroundColor,
foregroundColor: this.props.foregroundColor,
colors: this.props.colors,
cursorBlink: this.props.cursorBlink,
cursorShape: this.props.cursorShape,
cursorColor: this.props.cursorColor,
cursorAccentColor: this.props.cursorAccentColor,
fontSize: this.props.fontSize,
fontFamily: this.props.fontFamily,
uiFontFamily: this.props.uiFontFamily,
@ -81,6 +86,7 @@ class TermGroup_ extends PureComponent {
onURLAbort: this.bind(this.props.onURLAbort, null, uid),
onContextMenu: this.bind(this.props.onContextMenu, null, uid),
borderColor: this.props.borderColor,
selectionColor: this.props.selectionColor,
quickEdit: this.props.quickEdit,
uid
});

View file

@ -1,7 +1,8 @@
/* global Blob,URL,requestAnimationFrame */
import React from 'react';
import Terminal from 'xterm';
import {Terminal} from 'xterm';
import {clipboard} from 'electron';
import * as Color from 'color';
import {PureComponent} from '../base-components';
import terms from '../terms';
import processClipboard from '../utils/paste';
@ -13,6 +14,41 @@ const CURSOR_STYLES = {
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 {
constructor(props) {
super(props);
@ -26,30 +62,23 @@ export default class Term extends PureComponent {
this.onTermRef = this.onTermRef.bind(this);
this.onTermWrapperRef = this.onTermWrapperRef.bind(this);
this.onMouseUp = this.onMouseUp.bind(this);
this.termOptions = {};
}
componentDidMount() {
const {props} = this;
// we need to use this hack to retain the term reference
// as we move the term around splits, until xterm adds
// support for getState / setState
if (props.term) {
this.term = props.term;
this.termRef.appendChild(this.term.element);
this.onOpen();
} else {
this.term =
props.term ||
new Terminal({
cursorStyle: CURSOR_STYLES[props.cursorShape],
cursorBlink: props.cursorBlink
});
this.termOptions = getTermOptions(props);
this.term = props.term || new Terminal(this.termOptions);
this.term.attachCustomKeyEventHandler(this.keyboardHandler);
this.term.open(this.termRef);
this.onOpen();
if (props.term) {
//We need to set options again after reattaching an existing term
Object.keys(this.termOptions).forEach(option => this.term.setOption(option, this.termOptions[option]));
}
this.onOpen(this.termOptions);
if (props.onTitle) {
this.term.on('title', props.onTitle);
}
@ -84,7 +113,7 @@ export default class Term extends PureComponent {
terms[this.props.uid] = this;
}
onOpen() {
onOpen(termOptions) {
// we need to delay one frame so that aphrodite styles
// get applied and we can make an accurate measurement
// 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
// xterm.js might be doing this asynchronously, so
// we force it instead
this.term.charMeasure.measure();
// eslint-disable-next-line no-debugger
//debugger;
this.term.charMeasure.measure(termOptions);
this.fitResize();
});
}
@ -179,10 +210,28 @@ export default class Term extends PureComponent {
if (!this.props.cleared && nextProps.cleared) {
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) {
requestAnimationFrame(() => {
this.term.charMeasure.measure();
this.term.charMeasure.measure(this.termOptions);
this.fitResize();
});
}
@ -190,7 +239,7 @@ export default class Term extends PureComponent {
if (this.props.fontSize !== nextProps.fontSize || this.props.fontFamily !== nextProps.fontFamily) {
// invalidate xterm cache about how wide each
// character is
this.term.charMeasure.measure();
this.term.charMeasure.measure(this.termOptions);
// resize to fit the container
this.fitResize();

View file

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

View file

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

View file

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

View file

@ -1,7 +1,8 @@
{
"repository": "zeit/hyper",
"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",
"dev": "webpack -w",
"build": "cross-env NODE_ENV=production webpack",
@ -10,21 +11,18 @@
"test:unit": "ava test/unit",
"test:unit:watch": "yarn run test:unit -- --watch",
"prepush": "yarn test",
"postinstall": "electron-builder install-app-deps && yarn run rebuild-node-pty",
"rebuild-node-pty": "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"
"postinstall":
"electron-builder install-app-deps && yarn run rebuild-node-pty && yarn --cwd node_modules/xterm",
"rebuild-node-pty":
"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": {
"plugins": [
"react",
"prettier"
],
"extends": [
"eslint:recommended",
"plugin:react/recommended",
"prettier"
],
"plugins": ["react", "prettier"],
"extends": ["eslint:recommended", "plugin:react/recommended", "prettier"],
"parserOptions": {
"ecmaVersion": 8,
"sourceType": "module",
@ -41,10 +39,7 @@
"node": true
},
"rules": {
"func-names": [
"error",
"as-needed"
],
"func-names": ["error", "as-needed"],
"no-shadow": "error",
"no-extra-semi": 0,
"react/prop-types": 0,
@ -90,9 +85,7 @@
]
},
"babel": {
"presets": [
"react"
],
"presets": ["react"],
"env": {
"production": {
"plugins": [
@ -137,28 +130,20 @@
"target": [
{
"target": "deb",
"arch": [
"x64"
]
"arch": ["x64"]
},
{
"target": "AppImage",
"arch": [
"x64"
]
"arch": ["x64"]
},
{
"target": "rpm",
"arch": [
"x64"
]
"arch": ["x64"]
}
]
},
"win": {
"target": [
"squirrel"
]
"target": ["squirrel"]
},
"mac": {
"category": "public.app-category.developer-tools",
@ -204,7 +189,7 @@
"semver": "5.4.1",
"shebang-loader": "false0.0.1",
"uuid": "3.1.0",
"xterm": "2.9.2"
"xterm": "chabou/xterm.js#hyper"
},
"devDependencies": {
"ava": "0.24.0",

140
yarn.lock
View file

@ -14,15 +14,7 @@
version "2.1.1"
resolved "https://registry.yarnpkg.com/7zip-bin-win/-/7zip-bin-win-2.1.1.tgz#8acfc28bb34e53a9476b46ae85a97418e6035c20"
"7zip-bin@^2.2.7":
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":
"7zip-bin@^2.2.7", "7zip-bin@^2.3.4":
version "2.3.4"
resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-2.3.4.tgz#0861a3c99793dd794f4dd6175ec4ddfa6af8bc9d"
optionalDependencies:
@ -85,8 +77,8 @@
arrify "^1.0.1"
"@types/node@^7.0.18":
version "7.0.48"
resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.48.tgz#24bfdc0aa82e8f6dbd017159c58094a2e06d0abb"
version "7.0.49"
resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.49.tgz#f43777edd31822d6bcb50735a76c7f301d7b3121"
abbrev@1:
version "1.1.1"
@ -1252,7 +1244,7 @@ buffer@^4.3.0:
ieee754 "^1.1.4"
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"
resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-3.3.0.tgz#6374029211544f1a380fc7275658b0616b0e9ae1"
dependencies:
@ -1261,7 +1253,16 @@ builder-util-runtime@3.3.0, builder-util-runtime@^3.3.0:
fs-extra-p "^4.4.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"
resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-3.4.3.tgz#c7d6908ffc56fa3c4de0ec804dbcb9bbf6aa2ab4"
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"
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:
version "1.1.1"
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"
caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
version "1.0.30000778"
resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000778.tgz#167c60e9542a2aa60537c446fb3881d853a3072a"
version "1.0.30000782"
resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000782.tgz#d8815bce1578c350aced1132507301205e0fab53"
capture-stack-trace@^1.0.0:
version "1.0.0"
@ -2255,8 +2277,8 @@ electron-rebuild@1.6.0:
yargs "^7.0.2"
electron-to-chromium@^1.2.7:
version "1.3.27"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz#78ecb8a399066187bb374eede35d9c70565a803d"
version "1.3.28"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.28.tgz#8dd4e6458086644e9f9f0a1cf32e2a1f9dffd9ee"
electron@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"
errno@^0.1.3:
version "0.1.4"
resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
version "0.1.6"
resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.6.tgz#c386ce8a6283f14fc09563b71560908c9bf53026"
dependencies:
prr "~0.0.0"
prr "~1.0.1"
error-ex@^1.2.0:
version "1.3.1"
@ -2451,8 +2473,8 @@ eslint-scope@^3.7.1:
estraverse "^4.1.1"
eslint@^4.7.2:
version "4.12.1"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.12.1.tgz#5ec1973822b4a066b353770c3c6d69a2a188e880"
version "4.13.1"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.13.1.tgz#0055e0014464c7eb7878caf549ef2941992b444f"
dependencies:
ajv "^5.3.0"
babel-code-frame "^6.22.0"
@ -2761,12 +2783,12 @@ form-data@~2.3.1:
combined-stream "^1.0.5"
mime-types "^2.1.12"
fs-extra-p@^4.4.4:
version "4.4.4"
resolved "https://registry.yarnpkg.com/fs-extra-p/-/fs-extra-p-4.4.4.tgz#396ad6f914eb2954e1700fd0e18288301ed45f04"
fs-extra-p@^4.4.4, fs-extra-p@^4.4.5, fs-extra-p@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/fs-extra-p/-/fs-extra-p-4.5.0.tgz#b79f3f3fcc0b5e57b7e7caeb06159f958ef15fe8"
dependencies:
bluebird-lst "^1.0.4"
fs-extra "^4.0.2"
bluebird-lst "^1.0.5"
fs-extra "^5.0.0"
fs-extra@^0.30.0:
version "0.30.0"
@ -2793,9 +2815,17 @@ fs-extra@^3.0.1:
jsonfile "^3.0.0"
universalify "^0.1.0"
fs-extra@^4.0.1, fs-extra@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.2.tgz#f91704c53d1b461f893452b0c307d9997647ab6b"
fs-extra@^4.0.1:
version "4.0.3"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94"
dependencies:
graceful-fs "^4.1.2"
jsonfile "^4.0.0"
universalify "^0.1.0"
fs-extra@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd"
dependencies:
graceful-fs "^4.1.2"
jsonfile "^4.0.0"
@ -2925,8 +2955,8 @@ global-dirs@^0.1.0:
ini "^1.3.4"
globals@^11.0.1:
version "11.0.1"
resolved "https://registry.yarnpkg.com/globals/-/globals-11.0.1.tgz#12a87bb010e5154396acc535e1e43fc753b0e5e8"
version "11.1.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-11.1.0.tgz#632644457f5f0e3ae711807183700ebf2e4633e4"
globals@^9.18.0:
version "9.18.0"
@ -3730,9 +3760,9 @@ lazy-cache@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
lazy-val@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.2.tgz#d9b07fb1fce54cbc99b3c611de431b83249369b6"
lazy-val@^1.0.2, lazy-val@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.3.tgz#bb97b200ef00801d94c317e29dc6ed39e31c5edc"
lazystream@^1.0.0:
version "1.0.0"
@ -4867,8 +4897,8 @@ postcss@^6.0.1:
supports-color "^4.4.0"
prebuild-install@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.3.0.tgz#19481247df728b854ab57b187ce234211311b485"
version "2.4.1"
resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.4.1.tgz#c28ba1d1eedc17fbd6b3229a657ffc0fba479b49"
dependencies:
expand-template "^1.0.2"
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"
object-assign "^4.1.1"
prr@~0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
prr@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
pseudomap@^1.0.2:
version "1.0.2"
@ -5219,8 +5249,8 @@ regenerator-runtime@^0.10.5:
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658"
regenerator-runtime@^0.11.0:
version "0.11.0"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1"
version "0.11.1"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
regex-cache@^0.4.2:
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"
rxjs@^5.1.1:
version "5.5.3"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.3.tgz#b62227e74b84f4e77bdf440e50b5ee01a1bc7dcd"
version "5.5.5"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.5.tgz#e164f11d38eaf29f56f08c3447f74ff02dd84e97"
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:
version "5.1.1"
@ -5824,7 +5854,13 @@ supports-color@^4.0.0, supports-color@^4.2.1, supports-color@^4.4.0:
dependencies:
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"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.0.1.tgz#1c5331f22250c84202805b2f17adf16699f3a39a"
dependencies:
@ -5842,11 +5878,15 @@ svgo@^0.7.0:
sax "~1.2.1"
whet.extend "~0.9.9"
symbol-observable@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4"
symbol-observable@^0.2.2:
version "0.2.4"
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40"
symbol-observable@^1.0.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"
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.1.0.tgz#5c68fd8d54115d9dfb72a84720549222e8db9b32"
@ -6409,9 +6449,9 @@ xtend@~2.1.1:
dependencies:
object-keys "~0.4.0"
xterm@2.9.2:
version "2.9.2"
resolved "https://registry.yarnpkg.com/xterm/-/xterm-2.9.2.tgz#ec3e7c636ba67af4a7026be2cff7bdf08e56400a"
xterm@chabou/xterm.js#hyper:
version "3.0.0"
resolved "https://codeload.github.com/chabou/xterm.js/tar.gz/87b1d5276bb72298210021217165ab847a0886ec"
y18n@^3.2.1:
version "3.2.1"