=this._reconnectionAttempts)h("reconnect failed"),this.backoff.reset(),this.emitAll("reconnect_failed"),this.reconnecting=!1;else{var e=this.backoff.duration();h("will wait %dms before reconnect attempt",e),this.reconnecting=!0;var n=setTimeout(function(){t.skipReconnect||(h("attempting reconnect"),t.emitAll("reconnect_attempt",t.backoff.attempts),t.emitAll("reconnecting",t.backoff.attempts),t.skipReconnect||t.open(function(e){e?(h("reconnect attempt error"),t.reconnecting=!1,t.reconnect(),t.emitAll("reconnect_error",e.data)):(h("reconnect success"),t.onreconnect())}))},e);this.subs.push({destroy:function(){clearTimeout(n)}})}},r.prototype.onreconnect=function(){var t=this.backoff.attempts;this.reconnecting=!1,this.backoff.reset(),this.updateSocketIds(),this.emitAll("reconnect",t)}},function(t,e,n){t.exports=n(14),t.exports.parser=n(21)},function(t,e,n){function r(t,e){return this instanceof r?(e=e||{},t&&"object"==typeof t&&(e=t,t=null),t?(t=u(t),e.hostname=t.host,e.secure="https"===t.protocol||"wss"===t.protocol,e.port=t.port,t.query&&(e.query=t.query)):e.host&&(e.hostname=u(e.host).host),this.secure=null!=e.secure?e.secure:"undefined"!=typeof location&&"https:"===location.protocol,e.hostname&&!e.port&&(e.port=this.secure?"443":"80"),this.agent=e.agent||!1,this.hostname=e.hostname||("undefined"!=typeof location?location.hostname:"localhost"),this.port=e.port||("undefined"!=typeof location&&location.port?location.port:this.secure?443:80),this.query=e.query||{},"string"==typeof this.query&&(this.query=h.decode(this.query)),this.upgrade=!1!==e.upgrade,this.path=(e.path||"/engine.io").replace(/\/$/,"")+"/",this.forceJSONP=!!e.forceJSONP,this.jsonp=!1!==e.jsonp,this.forceBase64=!!e.forceBase64,this.enablesXDR=!!e.enablesXDR,this.timestampParam=e.timestampParam||"t",this.timestampRequests=e.timestampRequests,this.transports=e.transports||["polling","websocket"],this.transportOptions=e.transportOptions||{},this.readyState="",this.writeBuffer=[],this.prevBufferLen=0,this.policyPort=e.policyPort||843,this.rememberUpgrade=e.rememberUpgrade||!1,this.binaryType=null,this.onlyBinaryUpgrades=e.onlyBinaryUpgrades,this.perMessageDeflate=!1!==e.perMessageDeflate&&(e.perMessageDeflate||{}),!0===this.perMessageDeflate&&(this.perMessageDeflate={}),this.perMessageDeflate&&null==this.perMessageDeflate.threshold&&(this.perMessageDeflate.threshold=1024),this.pfx=e.pfx||null,this.key=e.key||null,this.passphrase=e.passphrase||null,this.cert=e.cert||null,this.ca=e.ca||null,this.ciphers=e.ciphers||null,this.rejectUnauthorized=void 0===e.rejectUnauthorized||e.rejectUnauthorized,this.forceNode=!!e.forceNode,this.isReactNative="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase(),("undefined"==typeof self||this.isReactNative)&&(e.extraHeaders&&Object.keys(e.extraHeaders).length>0&&(this.extraHeaders=e.extraHeaders),e.localAddress&&(this.localAddress=e.localAddress)),this.id=null,this.upgrades=null,this.pingInterval=null,this.pingTimeout=null,this.pingIntervalTimer=null,this.pingTimeoutTimer=null,void this.open()):new r(t,e)}function o(t){var e={};for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}var i=n(15),s=n(8),a=n(3)("engine.io-client:socket"),c=n(35),p=n(21),u=n(2),h=n(29);t.exports=r,r.priorWebsocketSuccess=!1,s(r.prototype),r.protocol=p.protocol,r.Socket=r,r.Transport=n(20),r.transports=n(15),r.parser=n(21),r.prototype.createTransport=function(t){a('creating transport "%s"',t);var e=o(this.query);e.EIO=p.protocol,e.transport=t;var n=this.transportOptions[t]||{};this.id&&(e.sid=this.id);var r=new i[t]({query:e,socket:this,agent:n.agent||this.agent,hostname:n.hostname||this.hostname,port:n.port||this.port,secure:n.secure||this.secure,path:n.path||this.path,forceJSONP:n.forceJSONP||this.forceJSONP,jsonp:n.jsonp||this.jsonp,forceBase64:n.forceBase64||this.forceBase64,enablesXDR:n.enablesXDR||this.enablesXDR,timestampRequests:n.timestampRequests||this.timestampRequests,timestampParam:n.timestampParam||this.timestampParam,policyPort:n.policyPort||this.policyPort,pfx:n.pfx||this.pfx,key:n.key||this.key,passphrase:n.passphrase||this.passphrase,cert:n.cert||this.cert,ca:n.ca||this.ca,ciphers:n.ciphers||this.ciphers,rejectUnauthorized:n.rejectUnauthorized||this.rejectUnauthorized,perMessageDeflate:n.perMessageDeflate||this.perMessageDeflate,extraHeaders:n.extraHeaders||this.extraHeaders,forceNode:n.forceNode||this.forceNode,localAddress:n.localAddress||this.localAddress,requestTimeout:n.requestTimeout||this.requestTimeout,protocols:n.protocols||void 0,isReactNative:this.isReactNative});return r},r.prototype.open=function(){var t;if(this.rememberUpgrade&&r.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1)t="websocket";else{if(0===this.transports.length){var e=this;return void setTimeout(function(){e.emit("error","No transports available")},0)}t=this.transports[0]}this.readyState="opening";try{t=this.createTransport(t)}catch(n){return this.transports.shift(),void this.open()}t.open(),this.setTransport(t)},r.prototype.setTransport=function(t){a("setting transport %s",t.name);var e=this;this.transport&&(a("clearing existing transport %s",this.transport.name),this.transport.removeAllListeners()),this.transport=t,t.on("drain",function(){e.onDrain()}).on("packet",function(t){e.onPacket(t)}).on("error",function(t){e.onError(t)}).on("close",function(){e.onClose("transport close")})},r.prototype.probe=function(t){function e(){if(f.onlyBinaryUpgrades){var e=!this.supportsBinary&&f.transport.supportsBinary;h=h||e}h||(a('probe transport "%s" opened',t),u.send([{type:"ping",data:"probe"}]),u.once("packet",function(e){if(!h)if("pong"===e.type&&"probe"===e.data){if(a('probe transport "%s" pong',t),f.upgrading=!0,f.emit("upgrading",u),!u)return;r.priorWebsocketSuccess="websocket"===u.name,a('pausing current transport "%s"',f.transport.name),f.transport.pause(function(){h||"closed"!==f.readyState&&(a("changing transport and sending upgrade packet"),p(),f.setTransport(u),u.send([{type:"upgrade"}]),f.emit("upgrade",u),u=null,f.upgrading=!1,f.flush())})}else{a('probe transport "%s" failed',t);var n=new Error("probe error");n.transport=u.name,f.emit("upgradeError",n)}}))}function n(){h||(h=!0,p(),u.close(),u=null)}function o(e){var r=new Error("probe error: "+e);r.transport=u.name,n(),a('probe transport "%s" failed because of error: %s',t,e),f.emit("upgradeError",r)}function i(){o("transport closed")}function s(){o("socket closed")}function c(t){u&&t.name!==u.name&&(a('"%s" works - aborting "%s"',t.name,u.name),n())}function p(){u.removeListener("open",e),u.removeListener("error",o),u.removeListener("close",i),f.removeListener("close",s),f.removeListener("upgrading",c)}a('probing transport "%s"',t);var u=this.createTransport(t,{probe:1}),h=!1,f=this;r.priorWebsocketSuccess=!1,u.once("open",e),u.once("error",o),u.once("close",i),this.once("close",s),this.once("upgrading",c),u.open()},r.prototype.onOpen=function(){if(a("socket open"),this.readyState="open",r.priorWebsocketSuccess="websocket"===this.transport.name,this.emit("open"),this.flush(),"open"===this.readyState&&this.upgrade&&this.transport.pause){a("starting upgrade probes");for(var t=0,e=this.upgrades.length;t1?{type:b[o],data:t.substring(1)}:{type:b[o]}:w}var i=new Uint8Array(t),o=i[0],s=f(t,1);return k&&"blob"===n&&(s=new k([s])),{type:b[o],data:s}},e.decodeBase64Packet=function(t,e){var n=b[t.charAt(0)];if(!p)return{type:n,data:{base64:!0,data:t.substr(1)}};var r=p.decode(t.substr(1));return"blob"===e&&k&&(r=new k([r])),{type:n,data:r}},e.encodePayload=function(t,n,r){function o(t){return t.length+":"+t}function i(t,r){e.encodePacket(t,!!s&&n,!1,function(t){r(null,o(t))})}"function"==typeof n&&(r=n,n=null);var s=h(t);return n&&s?k&&!g?e.encodePayloadAsBlob(t,r):e.encodePayloadAsArrayBuffer(t,r):t.length?void c(t,i,function(t,e){return r(e.join(""))}):r("0:")},e.decodePayload=function(t,n,r){if("string"!=typeof t)return e.decodePayloadAsBinary(t,n,r);"function"==typeof n&&(r=n,n=null);var o;if(""===t)return r(w,0,1);for(var i,s,a="",c=0,p=t.length;c0;){for(var s=new Uint8Array(o),a=0===s[0],c="",p=1;255!==s[p];p++){if(c.length>310)return r(w,0,1);c+=s[p]}o=f(o,2+c.length),c=parseInt(c);var u=f(o,0,c);if(a)try{u=String.fromCharCode.apply(null,new Uint8Array(u))}catch(h){var l=new Uint8Array(u);u="";for(var p=0;pr&&(n=r),e>=r||e>=n||0===r)return new ArrayBuffer(0);for(var o=new Uint8Array(t),i=new Uint8Array(n-e),s=e,a=0;s=55296&&e<=56319&&o65535&&(e-=65536,o+=d(e>>>10&1023|55296),e=56320|1023&e),o+=d(e);return o}function o(t,e){if(t>=55296&&t<=57343){if(e)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value");return!1}return!0}function i(t,e){return d(t>>e&63|128)}function s(t,e){if(0==(4294967168&t))return d(t);var n="";return 0==(4294965248&t)?n=d(t>>6&31|192):0==(4294901760&t)?(o(t,e)||(t=65533),n=d(t>>12&15|224),n+=i(t,6)):0==(4292870144&t)&&(n=d(t>>18&7|240),n+=i(t,12),n+=i(t,6)),n+=d(63&t|128)}function a(t,e){e=e||{};for(var r,o=!1!==e.strict,i=n(t),a=i.length,c=-1,p="";++c=f)throw Error("Invalid byte index");var t=255&h[l];if(l++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function p(t){var e,n,r,i,s;if(l>f)throw Error("Invalid byte index");if(l==f)return!1;if(e=255&h[l],l++,0==(128&e))return e;if(192==(224&e)){if(n=c(),s=(31&e)<<6|n,s>=128)return s;throw Error("Invalid continuation byte")}if(224==(240&e)){if(n=c(),r=c(),s=(15&e)<<12|n<<6|r,s>=2048)return o(s,t)?s:65533;throw Error("Invalid continuation byte")}if(240==(248&e)&&(n=c(),r=c(),i=c(),s=(7&e)<<18|n<<12|r<<6|i,s>=65536&&s<=1114111))return s;throw Error("Invalid UTF-8 detected")}function u(t,e){e=e||{};var o=!1!==e.strict;h=n(t),f=h.length,l=0;for(var i,s=[];(i=p(o))!==!1;)s.push(i);return r(s)}/*! https://mths.be/utf8js v2.1.2 by @mathias */
+var h,f,l,d=String.fromCharCode;t.exports={version:"2.1.2",encode:a,decode:u}},function(t,e){!function(){"use strict";for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n=new Uint8Array(256),r=0;r>2],i+=t[(3&r[n])<<4|r[n+1]>>4],i+=t[(15&r[n+1])<<2|r[n+2]>>6],i+=t[63&r[n+2]];return o%3===2?i=i.substring(0,i.length-1)+"=":o%3===1&&(i=i.substring(0,i.length-2)+"=="),i},e.decode=function(t){var e,r,o,i,s,a=.75*t.length,c=t.length,p=0;"="===t[t.length-1]&&(a--,"="===t[t.length-2]&&a--);var u=new ArrayBuffer(a),h=new Uint8Array(u);for(e=0;e>4,h[p++]=(15&o)<<4|i>>2,h[p++]=(3&i)<<6|63&s;return u}}()},function(t,e){function n(t){return t.map(function(t){if(t.buffer instanceof ArrayBuffer){var e=t.buffer;if(t.byteLength!==e.byteLength){var n=new Uint8Array(t.byteLength);n.set(new Uint8Array(e,t.byteOffset,t.byteLength)),e=n.buffer}return e}return t})}function r(t,e){e=e||{};var r=new i;return n(t).forEach(function(t){r.append(t)}),e.type?r.getBlob(e.type):r.getBlob()}function o(t,e){return new Blob(n(t),e||{})}var i="undefined"!=typeof i?i:"undefined"!=typeof WebKitBlobBuilder?WebKitBlobBuilder:"undefined"!=typeof MSBlobBuilder?MSBlobBuilder:"undefined"!=typeof MozBlobBuilder&&MozBlobBuilder,s=function(){try{var t=new Blob(["hi"]);return 2===t.size}catch(e){return!1}}(),a=s&&function(){try{var t=new Blob([new Uint8Array([1,2])]);return 2===t.size}catch(e){return!1}}(),c=i&&i.prototype.append&&i.prototype.getBlob;"undefined"!=typeof Blob&&(r.prototype=Blob.prototype,o.prototype=Blob.prototype),t.exports=function(){return s?a?Blob:o:c?r:void 0}()},function(t,e){e.encode=function(t){var e="";for(var n in t)t.hasOwnProperty(n)&&(e.length&&(e+="&"),e+=encodeURIComponent(n)+"="+encodeURIComponent(t[n]));return e},e.decode=function(t){for(var e={},n=t.split("&"),r=0,o=n.length;r0);return e}function r(t){var e=0;for(u=0;u';i=document.createElement(e)}catch(t){i=document.createElement("iframe"),i.name=o.iframeId,i.src="javascript:0"}i.id=o.iframeId,o.form.appendChild(i),o.iframe=i}var o=this;if(!this.form){var i,s=document.createElement("form"),a=document.createElement("textarea"),c=this.iframeId="eio_iframe_"+this.index;s.className="socketio",s.style.position="absolute",s.style.top="-1000px",s.style.left="-1000px",s.target=c,s.method="POST",s.setAttribute("accept-charset","utf-8"),a.name="d",s.appendChild(a),document.body.appendChild(s),this.form=s,this.area=a}this.form.action=this.uri(),r(),t=t.replace(u,"\\\n"),this.area.value=t.replace(p,"\\n");try{this.form.submit()}catch(h){}this.iframe.attachEvent?this.iframe.onreadystatechange=function(){"complete"===o.iframe.readyState&&n()}:this.iframe.onload=n}}).call(e,function(){return this}())},function(t,e,n){function r(t){var e=t&&t.forceBase64;e&&(this.supportsBinary=!1),this.perMessageDeflate=t.perMessageDeflate,this.usingBrowserWebSocket=o&&!t.forceNode,this.protocols=t.protocols,this.usingBrowserWebSocket||(l=i),s.call(this,t)}var o,i,s=n(20),a=n(21),c=n(29),p=n(30),u=n(31),h=n(3)("engine.io-client:websocket");if("undefined"==typeof self)try{i=n(34)}catch(f){}else o=self.WebSocket||self.MozWebSocket;var l=o||i;t.exports=r,p(r,s),r.prototype.name="websocket",r.prototype.supportsBinary=!0,r.prototype.doOpen=function(){if(this.check()){var t=this.uri(),e=this.protocols,n={agent:this.agent,perMessageDeflate:this.perMessageDeflate};n.pfx=this.pfx,n.key=this.key,n.passphrase=this.passphrase,n.cert=this.cert,n.ca=this.ca,n.ciphers=this.ciphers,n.rejectUnauthorized=this.rejectUnauthorized,this.extraHeaders&&(n.headers=this.extraHeaders),this.localAddress&&(n.localAddress=this.localAddress);try{this.ws=this.usingBrowserWebSocket&&!this.isReactNative?e?new l(t,e):new l(t):new l(t,e,n)}catch(r){return this.emit("error",r)}void 0===this.ws.binaryType&&(this.supportsBinary=!1),this.ws.supports&&this.ws.supports.binary?(this.supportsBinary=!0,this.ws.binaryType="nodebuffer"):this.ws.binaryType="arraybuffer",this.addEventListeners()}},r.prototype.addEventListeners=function(){var t=this;this.ws.onopen=function(){t.onOpen()},this.ws.onclose=function(){t.onClose()},this.ws.onmessage=function(e){t.onData(e.data)},this.ws.onerror=function(e){t.onError("websocket error",e)}},r.prototype.write=function(t){function e(){n.emit("flush"),setTimeout(function(){n.writable=!0,n.emit("drain")},0)}var n=this;this.writable=!1;for(var r=t.length,o=0,i=r;o0&&t.jitter<=1?t.jitter:0,this.attempts=0}t.exports=n,n.prototype.duration=function(){var t=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var e=Math.random(),n=Math.floor(e*this.jitter*t);t=0==(1&Math.floor(10*e))?t-n:t+n}return 0|Math.min(t,this.max)},n.prototype.reset=function(){this.attempts=0},n.prototype.setMin=function(t){this.ms=t},n.prototype.setMax=function(t){this.max=t},n.prototype.setJitter=function(t){this.jitter=t}}])});
+//# sourceMappingURL=socket.io.js.map
\ No newline at end of file
diff --git a/public/js/xterm.js b/public/js/xterm.js
new file mode 100644
index 0000000..7d1931c
--- /dev/null
+++ b/public/js/xterm.js
@@ -0,0 +1,9640 @@
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Terminal = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i rows) {
+ this._rowContainer.removeChild(this._rowElements.pop());
+ }
+ this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);
+ this._refreshRowsDimensions();
+ };
+ AccessibilityManager.prototype._createAccessibilityTreeNode = function () {
+ var element = document.createElement('div');
+ element.setAttribute('role', 'listitem');
+ element.tabIndex = -1;
+ this._refreshRowDimensions(element);
+ return element;
+ };
+ AccessibilityManager.prototype._onTab = function (spaceCount) {
+ for (var i = 0; i < spaceCount; i++) {
+ this._onChar(' ');
+ }
+ };
+ AccessibilityManager.prototype._onChar = function (char) {
+ var _this = this;
+ if (this._liveRegionLineCount < MAX_ROWS_TO_READ + 1) {
+ if (this._charsToConsume.length > 0) {
+ var shiftedChar = this._charsToConsume.shift();
+ if (shiftedChar !== char) {
+ this._announceCharacter(char);
+ }
+ }
+ else {
+ this._announceCharacter(char);
+ }
+ if (char === '\n') {
+ this._liveRegionLineCount++;
+ if (this._liveRegionLineCount === MAX_ROWS_TO_READ + 1) {
+ this._liveRegion.textContent += Strings.tooMuchOutput;
+ }
+ }
+ if (Platform_1.isMac) {
+ if (this._liveRegion.textContent && this._liveRegion.textContent.length > 0 && !this._liveRegion.parentNode) {
+ setTimeout(function () {
+ _this._accessibilityTreeRoot.appendChild(_this._liveRegion);
+ }, 0);
+ }
+ }
+ }
+ };
+ AccessibilityManager.prototype._clearLiveRegion = function () {
+ this._liveRegion.textContent = '';
+ this._liveRegionLineCount = 0;
+ if (Platform_1.isMac) {
+ if (this._liveRegion.parentNode) {
+ this._accessibilityTreeRoot.removeChild(this._liveRegion);
+ }
+ }
+ };
+ AccessibilityManager.prototype._onKey = function (keyChar) {
+ this._clearLiveRegion();
+ this._charsToConsume.push(keyChar);
+ };
+ AccessibilityManager.prototype._refreshRows = function (start, end) {
+ this._renderRowsDebouncer.refresh(start, end);
+ };
+ AccessibilityManager.prototype._renderRows = function (start, end) {
+ var buffer = this._terminal.buffer;
+ var setSize = buffer.lines.length.toString();
+ for (var i = start; i <= end; i++) {
+ var lineData = buffer.translateBufferLineToString(buffer.ydisp + i, true);
+ var posInSet = (buffer.ydisp + i + 1).toString();
+ var element = this._rowElements[i];
+ element.textContent = lineData.length === 0 ? Strings.blankLine : lineData;
+ element.setAttribute('aria-posinset', posInSet);
+ element.setAttribute('aria-setsize', setSize);
+ }
+ };
+ AccessibilityManager.prototype._refreshRowsDimensions = function () {
+ if (!this._terminal.renderer.dimensions.actualCellHeight) {
+ return;
+ }
+ if (this._rowElements.length !== this._terminal.rows) {
+ this._onResize(this._terminal.rows);
+ }
+ for (var i = 0; i < this._terminal.rows; i++) {
+ this._refreshRowDimensions(this._rowElements[i]);
+ }
+ };
+ AccessibilityManager.prototype._refreshRowDimensions = function (element) {
+ element.style.height = this._terminal.renderer.dimensions.actualCellHeight + "px";
+ };
+ AccessibilityManager.prototype._announceCharacter = function (char) {
+ if (char === ' ') {
+ this._liveRegion.innerHTML += ' ';
+ }
+ else {
+ this._liveRegion.textContent += char;
+ }
+ };
+ return AccessibilityManager;
+}(Lifecycle_2.Disposable));
+exports.AccessibilityManager = AccessibilityManager;
+
+},{"./Strings":14,"./common/Lifecycle":20,"./core/Platform":23,"./ui/Lifecycle":51,"./ui/RenderDebouncer":54}],2:[function(require,module,exports){
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ }
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var BufferLine_1 = require("./BufferLine");
+var BufferReflow_1 = require("./BufferReflow");
+var CircularList_1 = require("./common/CircularList");
+var EventEmitter_1 = require("./common/EventEmitter");
+var Types_1 = require("./renderer/atlas/Types");
+exports.DEFAULT_ATTR = (0 << 18) | (Types_1.DEFAULT_COLOR << 9) | (256 << 0);
+exports.CHAR_DATA_ATTR_INDEX = 0;
+exports.CHAR_DATA_CHAR_INDEX = 1;
+exports.CHAR_DATA_WIDTH_INDEX = 2;
+exports.CHAR_DATA_CODE_INDEX = 3;
+exports.MAX_BUFFER_SIZE = 4294967295;
+exports.NULL_CELL_CHAR = '';
+exports.NULL_CELL_WIDTH = 1;
+exports.NULL_CELL_CODE = 0;
+exports.WHITESPACE_CELL_CHAR = ' ';
+exports.WHITESPACE_CELL_WIDTH = 1;
+exports.WHITESPACE_CELL_CODE = 32;
+exports.FILL_CHAR_DATA = [exports.DEFAULT_ATTR, exports.NULL_CELL_CHAR, exports.NULL_CELL_WIDTH, exports.NULL_CELL_CODE];
+var Buffer = (function () {
+ function Buffer(_terminal, _hasScrollback) {
+ this._terminal = _terminal;
+ this._hasScrollback = _hasScrollback;
+ this.markers = [];
+ this._cols = this._terminal.cols;
+ this._rows = this._terminal.rows;
+ this.clear();
+ }
+ Buffer.prototype.getBlankLine = function (attr, isWrapped) {
+ var fillCharData = [attr, exports.NULL_CELL_CHAR, exports.NULL_CELL_WIDTH, exports.NULL_CELL_CODE];
+ return new BufferLine_1.BufferLine(this._cols, fillCharData, isWrapped);
+ };
+ Object.defineProperty(Buffer.prototype, "hasScrollback", {
+ get: function () {
+ return this._hasScrollback && this.lines.maxLength > this._rows;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(Buffer.prototype, "isCursorInViewport", {
+ get: function () {
+ var absoluteY = this.ybase + this.y;
+ var relativeY = absoluteY - this.ydisp;
+ return (relativeY >= 0 && relativeY < this._rows);
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Buffer.prototype._getCorrectBufferLength = function (rows) {
+ if (!this._hasScrollback) {
+ return rows;
+ }
+ var correctBufferLength = rows + this._terminal.options.scrollback;
+ return correctBufferLength > exports.MAX_BUFFER_SIZE ? exports.MAX_BUFFER_SIZE : correctBufferLength;
+ };
+ Buffer.prototype.fillViewportRows = function (fillAttr) {
+ if (this.lines.length === 0) {
+ if (fillAttr === undefined) {
+ fillAttr = exports.DEFAULT_ATTR;
+ }
+ var i = this._rows;
+ while (i--) {
+ this.lines.push(this.getBlankLine(fillAttr));
+ }
+ }
+ };
+ Buffer.prototype.clear = function () {
+ this.ydisp = 0;
+ this.ybase = 0;
+ this.y = 0;
+ this.x = 0;
+ this.lines = new CircularList_1.CircularList(this._getCorrectBufferLength(this._rows));
+ this.scrollTop = 0;
+ this.scrollBottom = this._rows - 1;
+ this.setupTabStops();
+ };
+ Buffer.prototype.resize = function (newCols, newRows) {
+ var newMaxLength = this._getCorrectBufferLength(newRows);
+ if (newMaxLength > this.lines.maxLength) {
+ this.lines.maxLength = newMaxLength;
+ }
+ if (this.lines.length > 0) {
+ if (this._cols < newCols) {
+ for (var i = 0; i < this.lines.length; i++) {
+ this.lines.get(i).resize(newCols, exports.FILL_CHAR_DATA);
+ }
+ }
+ var addToY = 0;
+ if (this._rows < newRows) {
+ for (var y = this._rows; y < newRows; y++) {
+ if (this.lines.length < newRows + this.ybase) {
+ if (this.ybase > 0 && this.lines.length <= this.ybase + this.y + addToY + 1) {
+ this.ybase--;
+ addToY++;
+ if (this.ydisp > 0) {
+ this.ydisp--;
+ }
+ }
+ else {
+ this.lines.push(new BufferLine_1.BufferLine(newCols, exports.FILL_CHAR_DATA));
+ }
+ }
+ }
+ }
+ else {
+ for (var y = this._rows; y > newRows; y--) {
+ if (this.lines.length > newRows + this.ybase) {
+ if (this.lines.length > this.ybase + this.y + 1) {
+ this.lines.pop();
+ }
+ else {
+ this.ybase++;
+ this.ydisp++;
+ }
+ }
+ }
+ }
+ if (newMaxLength < this.lines.maxLength) {
+ var amountToTrim = this.lines.length - newMaxLength;
+ if (amountToTrim > 0) {
+ this.lines.trimStart(amountToTrim);
+ this.ybase = Math.max(this.ybase - amountToTrim, 0);
+ this.ydisp = Math.max(this.ydisp - amountToTrim, 0);
+ }
+ this.lines.maxLength = newMaxLength;
+ }
+ this.x = Math.min(this.x, newCols - 1);
+ this.y = Math.min(this.y, newRows - 1);
+ if (addToY) {
+ this.y += addToY;
+ }
+ this.savedY = Math.min(this.savedY, newRows - 1);
+ this.savedX = Math.min(this.savedX, newCols - 1);
+ this.scrollTop = 0;
+ }
+ this.scrollBottom = newRows - 1;
+ if (this._isReflowEnabled) {
+ this._reflow(newCols, newRows);
+ if (this._cols > newCols) {
+ for (var i = 0; i < this.lines.length; i++) {
+ this.lines.get(i).resize(newCols, exports.FILL_CHAR_DATA);
+ }
+ }
+ }
+ this._cols = newCols;
+ this._rows = newRows;
+ };
+ Object.defineProperty(Buffer.prototype, "_isReflowEnabled", {
+ get: function () {
+ return this._hasScrollback && !this._terminal.isWinptyCompatEnabled;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Buffer.prototype._reflow = function (newCols, newRows) {
+ if (this._cols === newCols) {
+ return;
+ }
+ if (newCols > this._cols) {
+ this._reflowLarger(newCols, newRows);
+ }
+ else {
+ this._reflowSmaller(newCols, newRows);
+ }
+ };
+ Buffer.prototype._reflowLarger = function (newCols, newRows) {
+ var toRemove = BufferReflow_1.reflowLargerGetLinesToRemove(this.lines, newCols, this.ybase + this.y);
+ if (toRemove.length > 0) {
+ var newLayoutResult = BufferReflow_1.reflowLargerCreateNewLayout(this.lines, toRemove);
+ BufferReflow_1.reflowLargerApplyNewLayout(this.lines, newLayoutResult.layout);
+ this._reflowLargerAdjustViewport(newCols, newRows, newLayoutResult.countRemoved);
+ }
+ };
+ Buffer.prototype._reflowLargerAdjustViewport = function (newCols, newRows, countRemoved) {
+ var viewportAdjustments = countRemoved;
+ while (viewportAdjustments-- > 0) {
+ if (this.ybase === 0) {
+ if (this.y > 0) {
+ this.y--;
+ }
+ if (this.lines.length < newRows) {
+ this.lines.push(new BufferLine_1.BufferLine(newCols, exports.FILL_CHAR_DATA));
+ }
+ }
+ else {
+ if (this.ydisp === this.ybase) {
+ this.ydisp--;
+ }
+ this.ybase--;
+ }
+ }
+ };
+ Buffer.prototype._reflowSmaller = function (newCols, newRows) {
+ var toInsert = [];
+ var countToInsert = 0;
+ for (var y = this.lines.length - 1; y >= 0; y--) {
+ var nextLine = this.lines.get(y);
+ if (!nextLine.isWrapped && nextLine.getTrimmedLength() <= newCols) {
+ continue;
+ }
+ var wrappedLines = [nextLine];
+ while (nextLine.isWrapped && y > 0) {
+ nextLine = this.lines.get(--y);
+ wrappedLines.unshift(nextLine);
+ }
+ var absoluteY = this.ybase + this.y;
+ if (absoluteY >= y && absoluteY < y + wrappedLines.length) {
+ continue;
+ }
+ var lastLineLength = wrappedLines[wrappedLines.length - 1].getTrimmedLength();
+ var destLineLengths = BufferReflow_1.reflowSmallerGetNewLineLengths(wrappedLines, this._cols, newCols);
+ var linesToAdd = destLineLengths.length - wrappedLines.length;
+ var trimmedLines = void 0;
+ if (this.ybase === 0 && this.y !== this.lines.length - 1) {
+ trimmedLines = Math.max(0, this.y - this.lines.maxLength + linesToAdd);
+ }
+ else {
+ trimmedLines = Math.max(0, this.lines.length - this.lines.maxLength + linesToAdd);
+ }
+ var newLines = [];
+ for (var i = 0; i < linesToAdd; i++) {
+ var newLine = this.getBlankLine(exports.DEFAULT_ATTR, true);
+ newLines.push(newLine);
+ }
+ if (newLines.length > 0) {
+ toInsert.push({
+ start: y + wrappedLines.length + countToInsert,
+ newLines: newLines
+ });
+ countToInsert += newLines.length;
+ }
+ wrappedLines.push.apply(wrappedLines, newLines);
+ var destLineIndex = destLineLengths.length - 1;
+ var destCol = destLineLengths[destLineIndex];
+ if (destCol === 0) {
+ destLineIndex--;
+ destCol = destLineLengths[destLineIndex];
+ }
+ var srcLineIndex = wrappedLines.length - linesToAdd - 1;
+ var srcCol = lastLineLength;
+ while (srcLineIndex >= 0) {
+ var cellsToCopy = Math.min(srcCol, destCol);
+ wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[srcLineIndex], srcCol - cellsToCopy, destCol - cellsToCopy, cellsToCopy, true);
+ destCol -= cellsToCopy;
+ if (destCol === 0) {
+ destLineIndex--;
+ destCol = destLineLengths[destLineIndex];
+ }
+ srcCol -= cellsToCopy;
+ if (srcCol === 0) {
+ srcLineIndex--;
+ srcCol = wrappedLines[Math.max(srcLineIndex, 0)].getTrimmedLength();
+ }
+ }
+ for (var i = 0; i < wrappedLines.length; i++) {
+ if (destLineLengths[i] < newCols) {
+ wrappedLines[i].set(destLineLengths[i], exports.FILL_CHAR_DATA);
+ }
+ }
+ var viewportAdjustments = linesToAdd - trimmedLines;
+ while (viewportAdjustments-- > 0) {
+ if (this.ybase === 0) {
+ if (this.y < newRows - 1) {
+ this.y++;
+ this.lines.pop();
+ }
+ else {
+ this.ybase++;
+ this.ydisp++;
+ }
+ }
+ else {
+ if (this.ybase < Math.min(this.lines.maxLength, this.lines.length + countToInsert) - newRows) {
+ if (this.ybase === this.ydisp) {
+ this.ydisp++;
+ }
+ this.ybase++;
+ }
+ }
+ }
+ }
+ if (toInsert.length > 0) {
+ var insertEvents = [];
+ var originalLines = [];
+ for (var i = 0; i < this.lines.length; i++) {
+ originalLines.push(this.lines.get(i));
+ }
+ var originalLinesLength = this.lines.length;
+ var originalLineIndex = originalLinesLength - 1;
+ var nextToInsertIndex = 0;
+ var nextToInsert = toInsert[nextToInsertIndex];
+ this.lines.length = Math.min(this.lines.maxLength, this.lines.length + countToInsert);
+ var countInsertedSoFar = 0;
+ for (var i = Math.min(this.lines.maxLength - 1, originalLinesLength + countToInsert - 1); i >= 0; i--) {
+ if (nextToInsert && nextToInsert.start > originalLineIndex + countInsertedSoFar) {
+ for (var nextI = nextToInsert.newLines.length - 1; nextI >= 0; nextI--) {
+ this.lines.set(i--, nextToInsert.newLines[nextI]);
+ }
+ i++;
+ insertEvents.push({
+ index: originalLineIndex + 1,
+ amount: nextToInsert.newLines.length
+ });
+ countInsertedSoFar += nextToInsert.newLines.length;
+ nextToInsert = toInsert[++nextToInsertIndex];
+ }
+ else {
+ this.lines.set(i, originalLines[originalLineIndex--]);
+ }
+ }
+ var insertCountEmitted = 0;
+ for (var i = insertEvents.length - 1; i >= 0; i--) {
+ insertEvents[i].index += insertCountEmitted;
+ this.lines.emit('insert', insertEvents[i]);
+ insertCountEmitted += insertEvents[i].amount;
+ }
+ var amountToTrim = Math.max(0, originalLinesLength + countToInsert - this.lines.maxLength);
+ if (amountToTrim > 0) {
+ this.lines.emitMayRemoveListeners('trim', amountToTrim);
+ }
+ }
+ };
+ Buffer.prototype.stringIndexToBufferIndex = function (lineIndex, stringIndex, trimRight) {
+ if (trimRight === void 0) { trimRight = false; }
+ while (stringIndex) {
+ var line = this.lines.get(lineIndex);
+ if (!line) {
+ return [-1, -1];
+ }
+ var length_1 = (trimRight) ? line.getTrimmedLength() : line.length;
+ for (var i = 0; i < length_1; ++i) {
+ if (line.get(i)[exports.CHAR_DATA_WIDTH_INDEX]) {
+ stringIndex -= line.get(i)[exports.CHAR_DATA_CHAR_INDEX].length || 1;
+ }
+ if (stringIndex < 0) {
+ return [lineIndex, i];
+ }
+ }
+ lineIndex++;
+ }
+ return [lineIndex, 0];
+ };
+ Buffer.prototype.translateBufferLineToString = function (lineIndex, trimRight, startCol, endCol) {
+ if (startCol === void 0) { startCol = 0; }
+ var line = this.lines.get(lineIndex);
+ if (!line) {
+ return '';
+ }
+ return line.translateToString(trimRight, startCol, endCol);
+ };
+ Buffer.prototype.getWrappedRangeForLine = function (y) {
+ var first = y;
+ var last = y;
+ while (first > 0 && this.lines.get(first).isWrapped) {
+ first--;
+ }
+ while (last + 1 < this.lines.length && this.lines.get(last + 1).isWrapped) {
+ last++;
+ }
+ return { first: first, last: last };
+ };
+ Buffer.prototype.setupTabStops = function (i) {
+ if (i !== null && i !== undefined) {
+ if (!this.tabs[i]) {
+ i = this.prevStop(i);
+ }
+ }
+ else {
+ this.tabs = {};
+ i = 0;
+ }
+ for (; i < this._cols; i += this._terminal.options.tabStopWidth) {
+ this.tabs[i] = true;
+ }
+ };
+ Buffer.prototype.prevStop = function (x) {
+ if (x === null || x === undefined) {
+ x = this.x;
+ }
+ while (!this.tabs[--x] && x > 0)
+ ;
+ return x >= this._cols ? this._cols - 1 : x < 0 ? 0 : x;
+ };
+ Buffer.prototype.nextStop = function (x) {
+ if (x === null || x === undefined) {
+ x = this.x;
+ }
+ while (!this.tabs[++x] && x < this._cols)
+ ;
+ return x >= this._cols ? this._cols - 1 : x < 0 ? 0 : x;
+ };
+ Buffer.prototype.addMarker = function (y) {
+ var _this = this;
+ var marker = new Marker(y);
+ this.markers.push(marker);
+ marker.register(this.lines.addDisposableListener('trim', function (amount) {
+ marker.line -= amount;
+ if (marker.line < 0) {
+ marker.dispose();
+ }
+ }));
+ marker.register(this.lines.addDisposableListener('insert', function (event) {
+ if (marker.line >= event.index) {
+ marker.line += event.amount;
+ }
+ }));
+ marker.register(this.lines.addDisposableListener('delete', function (event) {
+ if (marker.line >= event.index && marker.line < event.index + event.amount) {
+ marker.dispose();
+ }
+ if (marker.line > event.index) {
+ marker.line -= event.amount;
+ }
+ }));
+ marker.register(marker.addDisposableListener('dispose', function () { return _this._removeMarker(marker); }));
+ return marker;
+ };
+ Buffer.prototype._removeMarker = function (marker) {
+ this.markers.splice(this.markers.indexOf(marker), 1);
+ };
+ Buffer.prototype.iterator = function (trimRight, startIndex, endIndex, startOverscan, endOverscan) {
+ return new BufferStringIterator(this, trimRight, startIndex, endIndex, startOverscan, endOverscan);
+ };
+ return Buffer;
+}());
+exports.Buffer = Buffer;
+var Marker = (function (_super) {
+ __extends(Marker, _super);
+ function Marker(line) {
+ var _this = _super.call(this) || this;
+ _this.line = line;
+ _this._id = Marker._nextId++;
+ _this.isDisposed = false;
+ return _this;
+ }
+ Object.defineProperty(Marker.prototype, "id", {
+ get: function () { return this._id; },
+ enumerable: true,
+ configurable: true
+ });
+ Marker.prototype.dispose = function () {
+ if (this.isDisposed) {
+ return;
+ }
+ this.isDisposed = true;
+ this.emit('dispose');
+ _super.prototype.dispose.call(this);
+ };
+ Marker._nextId = 1;
+ return Marker;
+}(EventEmitter_1.EventEmitter));
+exports.Marker = Marker;
+var BufferStringIterator = (function () {
+ function BufferStringIterator(_buffer, _trimRight, _startIndex, _endIndex, _startOverscan, _endOverscan) {
+ if (_startIndex === void 0) { _startIndex = 0; }
+ if (_endIndex === void 0) { _endIndex = _buffer.lines.length; }
+ if (_startOverscan === void 0) { _startOverscan = 0; }
+ if (_endOverscan === void 0) { _endOverscan = 0; }
+ this._buffer = _buffer;
+ this._trimRight = _trimRight;
+ this._startIndex = _startIndex;
+ this._endIndex = _endIndex;
+ this._startOverscan = _startOverscan;
+ this._endOverscan = _endOverscan;
+ if (this._startIndex < 0) {
+ this._startIndex = 0;
+ }
+ if (this._endIndex > this._buffer.lines.length) {
+ this._endIndex = this._buffer.lines.length;
+ }
+ this._current = this._startIndex;
+ }
+ BufferStringIterator.prototype.hasNext = function () {
+ return this._current < this._endIndex;
+ };
+ BufferStringIterator.prototype.next = function () {
+ var range = this._buffer.getWrappedRangeForLine(this._current);
+ if (range.first < this._startIndex - this._startOverscan) {
+ range.first = this._startIndex - this._startOverscan;
+ }
+ if (range.last > this._endIndex + this._endOverscan) {
+ range.last = this._endIndex + this._endOverscan;
+ }
+ range.first = Math.max(range.first, 0);
+ range.last = Math.min(range.last, this._buffer.lines.length);
+ var result = '';
+ for (var i = range.first; i <= range.last; ++i) {
+ result += this._buffer.translateBufferLineToString(i, this._trimRight);
+ }
+ this._current = range.last + 1;
+ return { range: range, content: result };
+ };
+ return BufferStringIterator;
+}());
+exports.BufferStringIterator = BufferStringIterator;
+
+},{"./BufferLine":3,"./BufferReflow":4,"./common/CircularList":17,"./common/EventEmitter":19,"./renderer/atlas/Types":46}],3:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var Buffer_1 = require("./Buffer");
+var CELL_SIZE = 3;
+var IS_COMBINED_BIT_MASK = 0x80000000;
+var BufferLine = (function () {
+ function BufferLine(cols, fillCharData, isWrapped) {
+ if (isWrapped === void 0) { isWrapped = false; }
+ this.isWrapped = isWrapped;
+ this._data = null;
+ this._combined = {};
+ if (!fillCharData) {
+ fillCharData = [0, Buffer_1.NULL_CELL_CHAR, Buffer_1.NULL_CELL_WIDTH, Buffer_1.NULL_CELL_CODE];
+ }
+ if (cols) {
+ this._data = new Uint32Array(cols * CELL_SIZE);
+ for (var i = 0; i < cols; ++i) {
+ this.set(i, fillCharData);
+ }
+ }
+ this.length = cols;
+ }
+ BufferLine.prototype.get = function (index) {
+ var stringData = this._data[index * CELL_SIZE + 1];
+ return [
+ this._data[index * CELL_SIZE + 0],
+ (stringData & IS_COMBINED_BIT_MASK)
+ ? this._combined[index]
+ : (stringData) ? String.fromCharCode(stringData) : '',
+ this._data[index * CELL_SIZE + 2],
+ (stringData & IS_COMBINED_BIT_MASK)
+ ? this._combined[index].charCodeAt(this._combined[index].length - 1)
+ : stringData
+ ];
+ };
+ BufferLine.prototype.getWidth = function (index) {
+ return this._data[index * CELL_SIZE + 2];
+ };
+ BufferLine.prototype.set = function (index, value) {
+ this._data[index * CELL_SIZE + 0] = value[0];
+ if (value[1].length > 1) {
+ this._combined[index] = value[1];
+ this._data[index * CELL_SIZE + 1] = index | IS_COMBINED_BIT_MASK;
+ }
+ else {
+ this._data[index * CELL_SIZE + 1] = value[1].charCodeAt(0);
+ }
+ this._data[index * CELL_SIZE + 2] = value[2];
+ };
+ BufferLine.prototype.insertCells = function (pos, n, fillCharData) {
+ pos %= this.length;
+ if (n < this.length - pos) {
+ for (var i = this.length - pos - n - 1; i >= 0; --i) {
+ this.set(pos + n + i, this.get(pos + i));
+ }
+ for (var i = 0; i < n; ++i) {
+ this.set(pos + i, fillCharData);
+ }
+ }
+ else {
+ for (var i = pos; i < this.length; ++i) {
+ this.set(i, fillCharData);
+ }
+ }
+ };
+ BufferLine.prototype.deleteCells = function (pos, n, fillCharData) {
+ pos %= this.length;
+ if (n < this.length - pos) {
+ for (var i = 0; i < this.length - pos - n; ++i) {
+ this.set(pos + i, this.get(pos + n + i));
+ }
+ for (var i = this.length - n; i < this.length; ++i) {
+ this.set(i, fillCharData);
+ }
+ }
+ else {
+ for (var i = pos; i < this.length; ++i) {
+ this.set(i, fillCharData);
+ }
+ }
+ };
+ BufferLine.prototype.replaceCells = function (start, end, fillCharData) {
+ while (start < end && start < this.length) {
+ this.set(start++, fillCharData);
+ }
+ };
+ BufferLine.prototype.resize = function (cols, fillCharData) {
+ if (cols === this.length) {
+ return;
+ }
+ if (cols > this.length) {
+ var data = new Uint32Array(cols * CELL_SIZE);
+ if (this.length) {
+ if (cols * CELL_SIZE < this._data.length) {
+ data.set(this._data.subarray(0, cols * CELL_SIZE));
+ }
+ else {
+ data.set(this._data);
+ }
+ }
+ this._data = data;
+ for (var i = this.length; i < cols; ++i) {
+ this.set(i, fillCharData);
+ }
+ }
+ else {
+ if (cols) {
+ var data = new Uint32Array(cols * CELL_SIZE);
+ data.set(this._data.subarray(0, cols * CELL_SIZE));
+ this._data = data;
+ var keys = Object.keys(this._combined);
+ for (var i = 0; i < keys.length; i++) {
+ var key = parseInt(keys[i], 10);
+ if (key >= cols) {
+ delete this._combined[key];
+ }
+ }
+ }
+ else {
+ this._data = null;
+ this._combined = {};
+ }
+ }
+ this.length = cols;
+ };
+ BufferLine.prototype.fill = function (fillCharData) {
+ this._combined = {};
+ for (var i = 0; i < this.length; ++i) {
+ this.set(i, fillCharData);
+ }
+ };
+ BufferLine.prototype.copyFrom = function (line) {
+ if (this.length !== line.length) {
+ this._data = new Uint32Array(line._data);
+ }
+ else {
+ this._data.set(line._data);
+ }
+ this.length = line.length;
+ this._combined = {};
+ for (var el in line._combined) {
+ this._combined[el] = line._combined[el];
+ }
+ this.isWrapped = line.isWrapped;
+ };
+ BufferLine.prototype.clone = function () {
+ var newLine = new BufferLine(0);
+ newLine._data = new Uint32Array(this._data);
+ newLine.length = this.length;
+ for (var el in this._combined) {
+ newLine._combined[el] = this._combined[el];
+ }
+ newLine.isWrapped = this.isWrapped;
+ return newLine;
+ };
+ BufferLine.prototype.getTrimmedLength = function () {
+ for (var i = this.length - 1; i >= 0; --i) {
+ if (this._data[i * CELL_SIZE + 1] !== 0) {
+ return i + this._data[i * CELL_SIZE + 2];
+ }
+ }
+ return 0;
+ };
+ BufferLine.prototype.copyCellsFrom = function (src, srcCol, destCol, length, applyInReverse) {
+ var srcData = src._data;
+ if (applyInReverse) {
+ for (var cell = length - 1; cell >= 0; cell--) {
+ for (var i = 0; i < CELL_SIZE; i++) {
+ this._data[(destCol + cell) * CELL_SIZE + i] = srcData[(srcCol + cell) * CELL_SIZE + i];
+ }
+ }
+ }
+ else {
+ for (var cell = 0; cell < length; cell++) {
+ for (var i = 0; i < CELL_SIZE; i++) {
+ this._data[(destCol + cell) * CELL_SIZE + i] = srcData[(srcCol + cell) * CELL_SIZE + i];
+ }
+ }
+ }
+ var srcCombinedKeys = Object.keys(src._combined);
+ for (var i = 0; i < srcCombinedKeys.length; i++) {
+ var key = parseInt(srcCombinedKeys[i], 10);
+ if (key >= srcCol) {
+ this._combined[key - srcCol + destCol] = src._combined[key];
+ }
+ }
+ };
+ BufferLine.prototype.translateToString = function (trimRight, startCol, endCol) {
+ if (trimRight === void 0) { trimRight = false; }
+ if (startCol === void 0) { startCol = 0; }
+ if (endCol === void 0) { endCol = this.length; }
+ if (trimRight) {
+ endCol = Math.min(endCol, this.getTrimmedLength());
+ }
+ var result = '';
+ while (startCol < endCol) {
+ var stringData = this._data[startCol * CELL_SIZE + 1];
+ result += (stringData & IS_COMBINED_BIT_MASK) ? this._combined[startCol] : (stringData) ? String.fromCharCode(stringData) : Buffer_1.WHITESPACE_CELL_CHAR;
+ startCol += this._data[startCol * CELL_SIZE + 2] || 1;
+ }
+ return result;
+ };
+ return BufferLine;
+}());
+exports.BufferLine = BufferLine;
+
+},{"./Buffer":2}],4:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var Buffer_1 = require("./Buffer");
+function reflowLargerGetLinesToRemove(lines, newCols, bufferAbsoluteY) {
+ var toRemove = [];
+ for (var y = 0; y < lines.length - 1; y++) {
+ var i = y;
+ var nextLine = lines.get(++i);
+ if (!nextLine.isWrapped) {
+ continue;
+ }
+ var wrappedLines = [lines.get(y)];
+ while (i < lines.length && nextLine.isWrapped) {
+ wrappedLines.push(nextLine);
+ nextLine = lines.get(++i);
+ }
+ if (bufferAbsoluteY >= y && bufferAbsoluteY < i) {
+ y += wrappedLines.length - 1;
+ continue;
+ }
+ var destLineIndex = 0;
+ var destCol = wrappedLines[destLineIndex].getTrimmedLength();
+ var srcLineIndex = 1;
+ var srcCol = 0;
+ while (srcLineIndex < wrappedLines.length) {
+ var srcTrimmedTineLength = wrappedLines[srcLineIndex].getTrimmedLength();
+ var srcRemainingCells = srcTrimmedTineLength - srcCol;
+ var destRemainingCells = newCols - destCol;
+ var cellsToCopy = Math.min(srcRemainingCells, destRemainingCells);
+ wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[srcLineIndex], srcCol, destCol, cellsToCopy, false);
+ destCol += cellsToCopy;
+ if (destCol === newCols) {
+ destLineIndex++;
+ destCol = 0;
+ }
+ srcCol += cellsToCopy;
+ if (srcCol === srcTrimmedTineLength) {
+ srcLineIndex++;
+ srcCol = 0;
+ }
+ if (destCol === 0 && destLineIndex !== 0) {
+ if (wrappedLines[destLineIndex - 1].getWidth(newCols - 1) === 2) {
+ wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[destLineIndex - 1], newCols - 1, destCol++, 1, false);
+ wrappedLines[destLineIndex - 1].set(newCols - 1, Buffer_1.FILL_CHAR_DATA);
+ }
+ }
+ }
+ wrappedLines[destLineIndex].replaceCells(destCol, newCols, Buffer_1.FILL_CHAR_DATA);
+ var countToRemove = 0;
+ for (var i_1 = wrappedLines.length - 1; i_1 > 0; i_1--) {
+ if (i_1 > destLineIndex || wrappedLines[i_1].getTrimmedLength() === 0) {
+ countToRemove++;
+ }
+ else {
+ break;
+ }
+ }
+ if (countToRemove > 0) {
+ toRemove.push(y + wrappedLines.length - countToRemove);
+ toRemove.push(countToRemove);
+ }
+ y += wrappedLines.length - 1;
+ }
+ return toRemove;
+}
+exports.reflowLargerGetLinesToRemove = reflowLargerGetLinesToRemove;
+function reflowLargerCreateNewLayout(lines, toRemove) {
+ var layout = [];
+ var nextToRemoveIndex = 0;
+ var nextToRemoveStart = toRemove[nextToRemoveIndex];
+ var countRemovedSoFar = 0;
+ for (var i = 0; i < lines.length; i++) {
+ if (nextToRemoveStart === i) {
+ var countToRemove = toRemove[++nextToRemoveIndex];
+ lines.emit('delete', {
+ index: i - countRemovedSoFar,
+ amount: countToRemove
+ });
+ i += countToRemove - 1;
+ countRemovedSoFar += countToRemove;
+ nextToRemoveStart = toRemove[++nextToRemoveIndex];
+ }
+ else {
+ layout.push(i);
+ }
+ }
+ return {
+ layout: layout,
+ countRemoved: countRemovedSoFar
+ };
+}
+exports.reflowLargerCreateNewLayout = reflowLargerCreateNewLayout;
+function reflowLargerApplyNewLayout(lines, newLayout) {
+ var newLayoutLines = [];
+ for (var i = 0; i < newLayout.length; i++) {
+ newLayoutLines.push(lines.get(newLayout[i]));
+ }
+ for (var i = 0; i < newLayoutLines.length; i++) {
+ lines.set(i, newLayoutLines[i]);
+ }
+ lines.length = newLayout.length;
+}
+exports.reflowLargerApplyNewLayout = reflowLargerApplyNewLayout;
+function reflowSmallerGetNewLineLengths(wrappedLines, oldCols, newCols) {
+ var newLineLengths = [];
+ var cellsNeeded = wrappedLines.map(function (l) { return l.getTrimmedLength(); }).reduce(function (p, c) { return p + c; });
+ var srcCol = 0;
+ var srcLine = 0;
+ var cellsAvailable = 0;
+ while (cellsAvailable < cellsNeeded) {
+ if (cellsNeeded - cellsAvailable < newCols) {
+ newLineLengths.push(cellsNeeded - cellsAvailable);
+ break;
+ }
+ srcCol += newCols;
+ var oldTrimmedLength = wrappedLines[srcLine].getTrimmedLength();
+ if (srcCol > oldTrimmedLength) {
+ srcCol -= oldTrimmedLength;
+ srcLine++;
+ }
+ var endsWithWide = wrappedLines[srcLine].getWidth(srcCol - 1) === 2;
+ if (endsWithWide) {
+ srcCol--;
+ }
+ var lineLength = endsWithWide ? newCols - 1 : newCols;
+ newLineLengths.push(lineLength);
+ cellsAvailable += lineLength;
+ }
+ return newLineLengths;
+}
+exports.reflowSmallerGetNewLineLengths = reflowSmallerGetNewLineLengths;
+
+},{"./Buffer":2}],5:[function(require,module,exports){
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ }
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var Buffer_1 = require("./Buffer");
+var EventEmitter_1 = require("./common/EventEmitter");
+var BufferSet = (function (_super) {
+ __extends(BufferSet, _super);
+ function BufferSet(_terminal) {
+ var _this = _super.call(this) || this;
+ _this._terminal = _terminal;
+ _this._normal = new Buffer_1.Buffer(_this._terminal, true);
+ _this._normal.fillViewportRows();
+ _this._alt = new Buffer_1.Buffer(_this._terminal, false);
+ _this._activeBuffer = _this._normal;
+ _this.setupTabStops();
+ return _this;
+ }
+ Object.defineProperty(BufferSet.prototype, "alt", {
+ get: function () {
+ return this._alt;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(BufferSet.prototype, "active", {
+ get: function () {
+ return this._activeBuffer;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(BufferSet.prototype, "normal", {
+ get: function () {
+ return this._normal;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ BufferSet.prototype.activateNormalBuffer = function () {
+ if (this._activeBuffer === this._normal) {
+ return;
+ }
+ this._normal.x = this._alt.x;
+ this._normal.y = this._alt.y;
+ this._alt.clear();
+ this._activeBuffer = this._normal;
+ this.emit('activate', {
+ activeBuffer: this._normal,
+ inactiveBuffer: this._alt
+ });
+ };
+ BufferSet.prototype.activateAltBuffer = function (fillAttr) {
+ if (this._activeBuffer === this._alt) {
+ return;
+ }
+ this._alt.fillViewportRows(fillAttr);
+ this._alt.x = this._normal.x;
+ this._alt.y = this._normal.y;
+ this._activeBuffer = this._alt;
+ this.emit('activate', {
+ activeBuffer: this._alt,
+ inactiveBuffer: this._normal
+ });
+ };
+ BufferSet.prototype.resize = function (newCols, newRows) {
+ this._normal.resize(newCols, newRows);
+ this._alt.resize(newCols, newRows);
+ };
+ BufferSet.prototype.setupTabStops = function (i) {
+ this._normal.setupTabStops(i);
+ this._alt.setupTabStops(i);
+ };
+ return BufferSet;
+}(EventEmitter_1.EventEmitter));
+exports.BufferSet = BufferSet;
+
+},{"./Buffer":2,"./common/EventEmitter":19}],6:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var TypedArrayUtils_1 = require("./common/TypedArrayUtils");
+exports.wcwidth = (function (opts) {
+ var COMBINING_BMP = [
+ [0x0300, 0x036F], [0x0483, 0x0486], [0x0488, 0x0489],
+ [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2],
+ [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0600, 0x0603],
+ [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670],
+ [0x06D6, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED],
+ [0x070F, 0x070F], [0x0711, 0x0711], [0x0730, 0x074A],
+ [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902],
+ [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D],
+ [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981],
+ [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD],
+ [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C],
+ [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D],
+ [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC],
+ [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD],
+ [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C],
+ [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D],
+ [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0],
+ [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48],
+ [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC],
+ [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD],
+ [0x0CE2, 0x0CE3], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D],
+ [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6],
+ [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E],
+ [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC],
+ [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35],
+ [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E],
+ [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97],
+ [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030],
+ [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039],
+ [0x1058, 0x1059], [0x1160, 0x11FF], [0x135F, 0x135F],
+ [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753],
+ [0x1772, 0x1773], [0x17B4, 0x17B5], [0x17B7, 0x17BD],
+ [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD],
+ [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922],
+ [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B],
+ [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34],
+ [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42],
+ [0x1B6B, 0x1B73], [0x1DC0, 0x1DCA], [0x1DFE, 0x1DFF],
+ [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063],
+ [0x206A, 0x206F], [0x20D0, 0x20EF], [0x302A, 0x302F],
+ [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B],
+ [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F],
+ [0xFE20, 0xFE23], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]
+ ];
+ var COMBINING_HIGH = [
+ [0x10A01, 0x10A03], [0x10A05, 0x10A06], [0x10A0C, 0x10A0F],
+ [0x10A38, 0x10A3A], [0x10A3F, 0x10A3F], [0x1D167, 0x1D169],
+ [0x1D173, 0x1D182], [0x1D185, 0x1D18B], [0x1D1AA, 0x1D1AD],
+ [0x1D242, 0x1D244], [0xE0001, 0xE0001], [0xE0020, 0xE007F],
+ [0xE0100, 0xE01EF]
+ ];
+ function bisearch(ucs, data) {
+ var min = 0;
+ var max = data.length - 1;
+ var mid;
+ if (ucs < data[0][0] || ucs > data[max][1]) {
+ return false;
+ }
+ while (max >= min) {
+ mid = (min + max) >> 1;
+ if (ucs > data[mid][1]) {
+ min = mid + 1;
+ }
+ else if (ucs < data[mid][0]) {
+ max = mid - 1;
+ }
+ else {
+ return true;
+ }
+ }
+ return false;
+ }
+ function wcwidthHigh(ucs) {
+ if (bisearch(ucs, COMBINING_HIGH)) {
+ return 0;
+ }
+ if ((ucs >= 0x20000 && ucs <= 0x2fffd) || (ucs >= 0x30000 && ucs <= 0x3fffd)) {
+ return 2;
+ }
+ return 1;
+ }
+ var control = opts.control | 0;
+ var table = new Uint8Array(65536);
+ TypedArrayUtils_1.fill(table, 1);
+ table[0] = opts.nul;
+ TypedArrayUtils_1.fill(table, opts.control, 1, 32);
+ TypedArrayUtils_1.fill(table, opts.control, 0x7f, 0xa0);
+ TypedArrayUtils_1.fill(table, 2, 0x1100, 0x1160);
+ table[0x2329] = 2;
+ table[0x232a] = 2;
+ TypedArrayUtils_1.fill(table, 2, 0x2e80, 0xa4d0);
+ table[0x303f] = 1;
+ TypedArrayUtils_1.fill(table, 2, 0xac00, 0xd7a4);
+ TypedArrayUtils_1.fill(table, 2, 0xf900, 0xfb00);
+ TypedArrayUtils_1.fill(table, 2, 0xfe10, 0xfe1a);
+ TypedArrayUtils_1.fill(table, 2, 0xfe30, 0xfe70);
+ TypedArrayUtils_1.fill(table, 2, 0xff00, 0xff61);
+ TypedArrayUtils_1.fill(table, 2, 0xffe0, 0xffe7);
+ for (var r = 0; r < COMBINING_BMP.length; ++r) {
+ TypedArrayUtils_1.fill(table, 0, COMBINING_BMP[r][0], COMBINING_BMP[r][1] + 1);
+ }
+ return function (num) {
+ if (num < 32) {
+ return control | 0;
+ }
+ if (num < 127) {
+ return 1;
+ }
+ if (num < 65536) {
+ return table[num];
+ }
+ return wcwidthHigh(num);
+ };
+})({ nul: 0, control: 0 });
+function getStringCellWidth(s) {
+ var result = 0;
+ var length = s.length;
+ for (var i = 0; i < length; ++i) {
+ var code = s.charCodeAt(i);
+ if (0xD800 <= code && code <= 0xDBFF) {
+ if (++i >= length) {
+ return result + exports.wcwidth(code);
+ }
+ var second = s.charCodeAt(i);
+ if (0xDC00 <= second && second <= 0xDFFF) {
+ code = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;
+ }
+ else {
+ result += exports.wcwidth(second);
+ }
+ }
+ result += exports.wcwidth(code);
+ }
+ return result;
+}
+exports.getStringCellWidth = getStringCellWidth;
+
+},{"./common/TypedArrayUtils":21}],7:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var CompositionHelper = (function () {
+ function CompositionHelper(_textarea, _compositionView, _terminal) {
+ this._textarea = _textarea;
+ this._compositionView = _compositionView;
+ this._terminal = _terminal;
+ this._isComposing = false;
+ this._isSendingComposition = false;
+ this._compositionPosition = { start: null, end: null };
+ }
+ CompositionHelper.prototype.compositionstart = function () {
+ this._isComposing = true;
+ this._compositionPosition.start = this._textarea.value.length;
+ this._compositionView.textContent = '';
+ this._compositionView.classList.add('active');
+ };
+ CompositionHelper.prototype.compositionupdate = function (ev) {
+ var _this = this;
+ this._compositionView.textContent = ev.data;
+ this.updateCompositionElements();
+ setTimeout(function () {
+ _this._compositionPosition.end = _this._textarea.value.length;
+ }, 0);
+ };
+ CompositionHelper.prototype.compositionend = function () {
+ this._finalizeComposition(true);
+ };
+ CompositionHelper.prototype.keydown = function (ev) {
+ if (this._isComposing || this._isSendingComposition) {
+ if (ev.keyCode === 229) {
+ return false;
+ }
+ else if (ev.keyCode === 16 || ev.keyCode === 17 || ev.keyCode === 18) {
+ return false;
+ }
+ this._finalizeComposition(false);
+ }
+ if (ev.keyCode === 229) {
+ this._handleAnyTextareaChanges();
+ return false;
+ }
+ return true;
+ };
+ CompositionHelper.prototype._finalizeComposition = function (waitForPropagation) {
+ var _this = this;
+ this._compositionView.classList.remove('active');
+ this._isComposing = false;
+ this._clearTextareaPosition();
+ if (!waitForPropagation) {
+ this._isSendingComposition = false;
+ var input = this._textarea.value.substring(this._compositionPosition.start, this._compositionPosition.end);
+ this._terminal.handler(input);
+ }
+ else {
+ var currentCompositionPosition_1 = {
+ start: this._compositionPosition.start,
+ end: this._compositionPosition.end
+ };
+ this._isSendingComposition = true;
+ setTimeout(function () {
+ if (_this._isSendingComposition) {
+ _this._isSendingComposition = false;
+ var input = void 0;
+ if (_this._isComposing) {
+ input = _this._textarea.value.substring(currentCompositionPosition_1.start, currentCompositionPosition_1.end);
+ }
+ else {
+ input = _this._textarea.value.substring(currentCompositionPosition_1.start);
+ }
+ _this._terminal.handler(input);
+ }
+ }, 0);
+ }
+ };
+ CompositionHelper.prototype._handleAnyTextareaChanges = function () {
+ var _this = this;
+ var oldValue = this._textarea.value;
+ setTimeout(function () {
+ if (!_this._isComposing) {
+ var newValue = _this._textarea.value;
+ var diff = newValue.replace(oldValue, '');
+ if (diff.length > 0) {
+ _this._terminal.handler(diff);
+ }
+ }
+ }, 0);
+ };
+ CompositionHelper.prototype.updateCompositionElements = function (dontRecurse) {
+ var _this = this;
+ if (!this._isComposing) {
+ return;
+ }
+ if (this._terminal.buffer.isCursorInViewport) {
+ var cellHeight = Math.ceil(this._terminal.charMeasure.height * this._terminal.options.lineHeight);
+ var cursorTop = this._terminal.buffer.y * cellHeight;
+ var cursorLeft = this._terminal.buffer.x * this._terminal.charMeasure.width;
+ this._compositionView.style.left = cursorLeft + 'px';
+ this._compositionView.style.top = cursorTop + 'px';
+ this._compositionView.style.height = cellHeight + 'px';
+ this._compositionView.style.lineHeight = cellHeight + 'px';
+ this._compositionView.style.fontFamily = this._terminal.options.fontFamily;
+ this._compositionView.style.fontSize = this._terminal.options.fontSize + 'px';
+ var compositionViewBounds = this._compositionView.getBoundingClientRect();
+ this._textarea.style.left = cursorLeft + 'px';
+ this._textarea.style.top = cursorTop + 'px';
+ this._textarea.style.width = compositionViewBounds.width + 'px';
+ this._textarea.style.height = compositionViewBounds.height + 'px';
+ this._textarea.style.lineHeight = compositionViewBounds.height + 'px';
+ }
+ if (!dontRecurse) {
+ setTimeout(function () { return _this.updateCompositionElements(true); }, 0);
+ }
+ };
+ CompositionHelper.prototype._clearTextareaPosition = function () {
+ this._textarea.style.left = '';
+ this._textarea.style.top = '';
+ };
+ return CompositionHelper;
+}());
+exports.CompositionHelper = CompositionHelper;
+
+},{}],8:[function(require,module,exports){
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ }
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var Lifecycle_1 = require("./common/Lifecycle");
+var TextDecoder_1 = require("./core/input/TextDecoder");
+function r(low, high) {
+ var c = high - low;
+ var arr = new Array(c);
+ while (c--) {
+ arr[c] = --high;
+ }
+ return arr;
+}
+var TransitionTable = (function () {
+ function TransitionTable(length) {
+ this.table = (typeof Uint8Array === 'undefined')
+ ? new Array(length)
+ : new Uint8Array(length);
+ }
+ TransitionTable.prototype.add = function (code, state, action, next) {
+ this.table[state << 8 | code] = ((action | 0) << 4) | ((next === undefined) ? state : next);
+ };
+ TransitionTable.prototype.addMany = function (codes, state, action, next) {
+ for (var i = 0; i < codes.length; i++) {
+ this.add(codes[i], state, action, next);
+ }
+ };
+ return TransitionTable;
+}());
+exports.TransitionTable = TransitionTable;
+var PRINTABLES = r(0x20, 0x7f);
+var EXECUTABLES = r(0x00, 0x18);
+EXECUTABLES.push(0x19);
+EXECUTABLES.push.apply(EXECUTABLES, r(0x1c, 0x20));
+var NON_ASCII_PRINTABLE = 0xA0;
+exports.VT500_TRANSITION_TABLE = (function () {
+ var table = new TransitionTable(4095);
+ var states = r(0, 13 + 1);
+ var state;
+ for (state in states) {
+ for (var code = 0; code <= NON_ASCII_PRINTABLE; ++code) {
+ table.add(code, state, 1, 0);
+ }
+ }
+ table.addMany(PRINTABLES, 0, 2, 0);
+ for (state in states) {
+ table.addMany([0x18, 0x1a, 0x99, 0x9a], state, 3, 0);
+ table.addMany(r(0x80, 0x90), state, 3, 0);
+ table.addMany(r(0x90, 0x98), state, 3, 0);
+ table.add(0x9c, state, 0, 0);
+ table.add(0x1b, state, 11, 1);
+ table.add(0x9d, state, 4, 8);
+ table.addMany([0x98, 0x9e, 0x9f], state, 0, 7);
+ table.add(0x9b, state, 11, 3);
+ table.add(0x90, state, 11, 9);
+ }
+ table.addMany(EXECUTABLES, 0, 3, 0);
+ table.addMany(EXECUTABLES, 1, 3, 1);
+ table.add(0x7f, 1, 0, 1);
+ table.addMany(EXECUTABLES, 8, 0, 8);
+ table.addMany(EXECUTABLES, 3, 3, 3);
+ table.add(0x7f, 3, 0, 3);
+ table.addMany(EXECUTABLES, 4, 3, 4);
+ table.add(0x7f, 4, 0, 4);
+ table.addMany(EXECUTABLES, 6, 3, 6);
+ table.addMany(EXECUTABLES, 5, 3, 5);
+ table.add(0x7f, 5, 0, 5);
+ table.addMany(EXECUTABLES, 2, 3, 2);
+ table.add(0x7f, 2, 0, 2);
+ table.add(0x5d, 1, 4, 8);
+ table.addMany(PRINTABLES, 8, 5, 8);
+ table.add(0x7f, 8, 5, 8);
+ table.addMany([0x9c, 0x1b, 0x18, 0x1a, 0x07], 8, 6, 0);
+ table.addMany(r(0x1c, 0x20), 8, 0, 8);
+ table.addMany([0x58, 0x5e, 0x5f], 1, 0, 7);
+ table.addMany(PRINTABLES, 7, 0, 7);
+ table.addMany(EXECUTABLES, 7, 0, 7);
+ table.add(0x9c, 7, 0, 0);
+ table.add(0x7f, 7, 0, 7);
+ table.add(0x5b, 1, 11, 3);
+ table.addMany(r(0x40, 0x7f), 3, 7, 0);
+ table.addMany(r(0x30, 0x3a), 3, 8, 4);
+ table.add(0x3b, 3, 8, 4);
+ table.addMany([0x3c, 0x3d, 0x3e, 0x3f], 3, 9, 4);
+ table.addMany(r(0x30, 0x3a), 4, 8, 4);
+ table.add(0x3b, 4, 8, 4);
+ table.addMany(r(0x40, 0x7f), 4, 7, 0);
+ table.addMany([0x3a, 0x3c, 0x3d, 0x3e, 0x3f], 4, 0, 6);
+ table.addMany(r(0x20, 0x40), 6, 0, 6);
+ table.add(0x7f, 6, 0, 6);
+ table.addMany(r(0x40, 0x7f), 6, 0, 0);
+ table.add(0x3a, 3, 0, 6);
+ table.addMany(r(0x20, 0x30), 3, 9, 5);
+ table.addMany(r(0x20, 0x30), 5, 9, 5);
+ table.addMany(r(0x30, 0x40), 5, 0, 6);
+ table.addMany(r(0x40, 0x7f), 5, 7, 0);
+ table.addMany(r(0x20, 0x30), 4, 9, 5);
+ table.addMany(r(0x20, 0x30), 1, 9, 2);
+ table.addMany(r(0x20, 0x30), 2, 9, 2);
+ table.addMany(r(0x30, 0x7f), 2, 10, 0);
+ table.addMany(r(0x30, 0x50), 1, 10, 0);
+ table.addMany(r(0x51, 0x58), 1, 10, 0);
+ table.addMany([0x59, 0x5a, 0x5c], 1, 10, 0);
+ table.addMany(r(0x60, 0x7f), 1, 10, 0);
+ table.add(0x50, 1, 11, 9);
+ table.addMany(EXECUTABLES, 9, 0, 9);
+ table.add(0x7f, 9, 0, 9);
+ table.addMany(r(0x1c, 0x20), 9, 0, 9);
+ table.addMany(r(0x20, 0x30), 9, 9, 12);
+ table.add(0x3a, 9, 0, 11);
+ table.addMany(r(0x30, 0x3a), 9, 8, 10);
+ table.add(0x3b, 9, 8, 10);
+ table.addMany([0x3c, 0x3d, 0x3e, 0x3f], 9, 9, 10);
+ table.addMany(EXECUTABLES, 11, 0, 11);
+ table.addMany(r(0x20, 0x80), 11, 0, 11);
+ table.addMany(r(0x1c, 0x20), 11, 0, 11);
+ table.addMany(EXECUTABLES, 10, 0, 10);
+ table.add(0x7f, 10, 0, 10);
+ table.addMany(r(0x1c, 0x20), 10, 0, 10);
+ table.addMany(r(0x30, 0x3a), 10, 8, 10);
+ table.add(0x3b, 10, 8, 10);
+ table.addMany([0x3a, 0x3c, 0x3d, 0x3e, 0x3f], 10, 0, 11);
+ table.addMany(r(0x20, 0x30), 10, 9, 12);
+ table.addMany(EXECUTABLES, 12, 0, 12);
+ table.add(0x7f, 12, 0, 12);
+ table.addMany(r(0x1c, 0x20), 12, 0, 12);
+ table.addMany(r(0x20, 0x30), 12, 9, 12);
+ table.addMany(r(0x30, 0x40), 12, 0, 11);
+ table.addMany(r(0x40, 0x7f), 12, 12, 13);
+ table.addMany(r(0x40, 0x7f), 10, 12, 13);
+ table.addMany(r(0x40, 0x7f), 9, 12, 13);
+ table.addMany(EXECUTABLES, 13, 13, 13);
+ table.addMany(PRINTABLES, 13, 13, 13);
+ table.add(0x7f, 13, 0, 13);
+ table.addMany([0x1b, 0x9c], 13, 14, 0);
+ table.add(NON_ASCII_PRINTABLE, 8, 5, 8);
+ return table;
+})();
+var DcsDummy = (function () {
+ function DcsDummy() {
+ }
+ DcsDummy.prototype.hook = function (collect, params, flag) { };
+ DcsDummy.prototype.put = function (data, start, end) { };
+ DcsDummy.prototype.unhook = function () { };
+ return DcsDummy;
+}());
+var EscapeSequenceParser = (function (_super) {
+ __extends(EscapeSequenceParser, _super);
+ function EscapeSequenceParser(TRANSITIONS) {
+ if (TRANSITIONS === void 0) { TRANSITIONS = exports.VT500_TRANSITION_TABLE; }
+ var _this = _super.call(this) || this;
+ _this.TRANSITIONS = TRANSITIONS;
+ _this.initialState = 0;
+ _this.currentState = _this.initialState;
+ _this._osc = '';
+ _this._params = [0];
+ _this._collect = '';
+ _this._printHandlerFb = function (data, start, end) { };
+ _this._executeHandlerFb = function (code) { };
+ _this._csiHandlerFb = function (collect, params, flag) { };
+ _this._escHandlerFb = function (collect, flag) { };
+ _this._oscHandlerFb = function (identifier, data) { };
+ _this._dcsHandlerFb = new DcsDummy();
+ _this._errorHandlerFb = function (state) { return state; };
+ _this._printHandler = _this._printHandlerFb;
+ _this._executeHandlers = Object.create(null);
+ _this._csiHandlers = Object.create(null);
+ _this._escHandlers = Object.create(null);
+ _this._oscHandlers = Object.create(null);
+ _this._dcsHandlers = Object.create(null);
+ _this._activeDcsHandler = null;
+ _this._errorHandler = _this._errorHandlerFb;
+ _this.setEscHandler('\\', function () { });
+ return _this;
+ }
+ EscapeSequenceParser.prototype.dispose = function () {
+ this._printHandlerFb = null;
+ this._executeHandlerFb = null;
+ this._csiHandlerFb = null;
+ this._escHandlerFb = null;
+ this._oscHandlerFb = null;
+ this._dcsHandlerFb = null;
+ this._errorHandlerFb = null;
+ this._printHandler = null;
+ this._executeHandlers = null;
+ this._escHandlers = null;
+ this._csiHandlers = null;
+ this._oscHandlers = null;
+ this._dcsHandlers = null;
+ this._activeDcsHandler = null;
+ this._errorHandler = null;
+ };
+ EscapeSequenceParser.prototype.setPrintHandler = function (callback) {
+ this._printHandler = callback;
+ };
+ EscapeSequenceParser.prototype.clearPrintHandler = function () {
+ this._printHandler = this._printHandlerFb;
+ };
+ EscapeSequenceParser.prototype.setExecuteHandler = function (flag, callback) {
+ this._executeHandlers[flag.charCodeAt(0)] = callback;
+ };
+ EscapeSequenceParser.prototype.clearExecuteHandler = function (flag) {
+ if (this._executeHandlers[flag.charCodeAt(0)])
+ delete this._executeHandlers[flag.charCodeAt(0)];
+ };
+ EscapeSequenceParser.prototype.setExecuteHandlerFallback = function (callback) {
+ this._executeHandlerFb = callback;
+ };
+ EscapeSequenceParser.prototype.addCsiHandler = function (flag, callback) {
+ var index = flag.charCodeAt(0);
+ if (this._csiHandlers[index] === undefined) {
+ this._csiHandlers[index] = [];
+ }
+ var handlerList = this._csiHandlers[index];
+ handlerList.push(callback);
+ return {
+ dispose: function () {
+ var handlerIndex = handlerList.indexOf(callback);
+ if (handlerIndex !== -1) {
+ handlerList.splice(handlerIndex, 1);
+ }
+ }
+ };
+ };
+ EscapeSequenceParser.prototype.setCsiHandler = function (flag, callback) {
+ this._csiHandlers[flag.charCodeAt(0)] = [callback];
+ };
+ EscapeSequenceParser.prototype.clearCsiHandler = function (flag) {
+ if (this._csiHandlers[flag.charCodeAt(0)])
+ delete this._csiHandlers[flag.charCodeAt(0)];
+ };
+ EscapeSequenceParser.prototype.setCsiHandlerFallback = function (callback) {
+ this._csiHandlerFb = callback;
+ };
+ EscapeSequenceParser.prototype.setEscHandler = function (collectAndFlag, callback) {
+ this._escHandlers[collectAndFlag] = callback;
+ };
+ EscapeSequenceParser.prototype.clearEscHandler = function (collectAndFlag) {
+ if (this._escHandlers[collectAndFlag])
+ delete this._escHandlers[collectAndFlag];
+ };
+ EscapeSequenceParser.prototype.setEscHandlerFallback = function (callback) {
+ this._escHandlerFb = callback;
+ };
+ EscapeSequenceParser.prototype.addOscHandler = function (ident, callback) {
+ if (this._oscHandlers[ident] === undefined) {
+ this._oscHandlers[ident] = [];
+ }
+ var handlerList = this._oscHandlers[ident];
+ handlerList.push(callback);
+ return {
+ dispose: function () {
+ var handlerIndex = handlerList.indexOf(callback);
+ if (handlerIndex !== -1) {
+ handlerList.splice(handlerIndex, 1);
+ }
+ }
+ };
+ };
+ EscapeSequenceParser.prototype.setOscHandler = function (ident, callback) {
+ this._oscHandlers[ident] = [callback];
+ };
+ EscapeSequenceParser.prototype.clearOscHandler = function (ident) {
+ if (this._oscHandlers[ident])
+ delete this._oscHandlers[ident];
+ };
+ EscapeSequenceParser.prototype.setOscHandlerFallback = function (callback) {
+ this._oscHandlerFb = callback;
+ };
+ EscapeSequenceParser.prototype.setDcsHandler = function (collectAndFlag, handler) {
+ this._dcsHandlers[collectAndFlag] = handler;
+ };
+ EscapeSequenceParser.prototype.clearDcsHandler = function (collectAndFlag) {
+ if (this._dcsHandlers[collectAndFlag])
+ delete this._dcsHandlers[collectAndFlag];
+ };
+ EscapeSequenceParser.prototype.setDcsHandlerFallback = function (handler) {
+ this._dcsHandlerFb = handler;
+ };
+ EscapeSequenceParser.prototype.setErrorHandler = function (callback) {
+ this._errorHandler = callback;
+ };
+ EscapeSequenceParser.prototype.clearErrorHandler = function () {
+ this._errorHandler = this._errorHandlerFb;
+ };
+ EscapeSequenceParser.prototype.reset = function () {
+ this.currentState = this.initialState;
+ this._osc = '';
+ this._params = [0];
+ this._collect = '';
+ this._activeDcsHandler = null;
+ };
+ EscapeSequenceParser.prototype.parse = function (data, length) {
+ var code = 0;
+ var transition = 0;
+ var error = false;
+ var currentState = this.currentState;
+ var print = -1;
+ var dcs = -1;
+ var osc = this._osc;
+ var collect = this._collect;
+ var params = this._params;
+ var table = this.TRANSITIONS.table;
+ var dcsHandler = this._activeDcsHandler;
+ var callback = null;
+ for (var i = 0; i < length; ++i) {
+ code = data[i];
+ if (currentState === 0 && code > 0x1f && code < 0x80) {
+ print = (~print) ? print : i;
+ do
+ i++;
+ while (i < length && data[i] > 0x1f && data[i] < 0x80);
+ i--;
+ continue;
+ }
+ if (currentState === 4 && (code > 0x2f && code < 0x39)) {
+ params[params.length - 1] = params[params.length - 1] * 10 + code - 48;
+ continue;
+ }
+ transition = table[currentState << 8 | (code < 0xa0 ? code : NON_ASCII_PRINTABLE)];
+ switch (transition >> 4) {
+ case 2:
+ print = (~print) ? print : i;
+ break;
+ case 3:
+ if (~print) {
+ this._printHandler(data, print, i);
+ print = -1;
+ }
+ callback = this._executeHandlers[code];
+ if (callback)
+ callback();
+ else
+ this._executeHandlerFb(code);
+ break;
+ case 0:
+ if (~print) {
+ this._printHandler(data, print, i);
+ print = -1;
+ }
+ else if (~dcs) {
+ dcsHandler.put(data, dcs, i);
+ dcs = -1;
+ }
+ break;
+ case 1:
+ if (code > 0x9f) {
+ switch (currentState) {
+ case 0:
+ print = (~print) ? print : i;
+ break;
+ case 6:
+ transition |= 6;
+ break;
+ case 11:
+ transition |= 11;
+ break;
+ case 13:
+ dcs = (~dcs) ? dcs : i;
+ transition |= 13;
+ break;
+ default:
+ error = true;
+ }
+ }
+ else {
+ error = true;
+ }
+ if (error) {
+ var inject = this._errorHandler({
+ position: i,
+ code: code,
+ currentState: currentState,
+ print: print,
+ dcs: dcs,
+ osc: osc,
+ collect: collect,
+ params: params,
+ abort: false
+ });
+ if (inject.abort)
+ return;
+ error = false;
+ }
+ break;
+ case 7:
+ var handlers = this._csiHandlers[code];
+ var j = handlers ? handlers.length - 1 : -1;
+ for (; j >= 0; j--) {
+ if (handlers[j](params, collect)) {
+ break;
+ }
+ }
+ if (j < 0) {
+ this._csiHandlerFb(collect, params, code);
+ }
+ break;
+ case 8:
+ if (code === 0x3b)
+ params.push(0);
+ else
+ params[params.length - 1] = params[params.length - 1] * 10 + code - 48;
+ break;
+ case 9:
+ collect += String.fromCharCode(code);
+ break;
+ case 10:
+ callback = this._escHandlers[collect + String.fromCharCode(code)];
+ if (callback)
+ callback(collect, code);
+ else
+ this._escHandlerFb(collect, code);
+ break;
+ case 11:
+ if (~print) {
+ this._printHandler(data, print, i);
+ print = -1;
+ }
+ osc = '';
+ params = [0];
+ collect = '';
+ dcs = -1;
+ break;
+ case 12:
+ dcsHandler = this._dcsHandlers[collect + String.fromCharCode(code)];
+ if (!dcsHandler)
+ dcsHandler = this._dcsHandlerFb;
+ dcsHandler.hook(collect, params, code);
+ break;
+ case 13:
+ dcs = (~dcs) ? dcs : i;
+ break;
+ case 14:
+ if (dcsHandler) {
+ if (~dcs)
+ dcsHandler.put(data, dcs, i);
+ dcsHandler.unhook();
+ dcsHandler = null;
+ }
+ if (code === 0x1b)
+ transition |= 1;
+ osc = '';
+ params = [0];
+ collect = '';
+ dcs = -1;
+ break;
+ case 4:
+ if (~print) {
+ this._printHandler(data, print, i);
+ print = -1;
+ }
+ osc = '';
+ break;
+ case 5:
+ for (var j_1 = i + 1;; j_1++) {
+ if (j_1 >= length
+ || (code = data[j_1]) < 0x20
+ || (code > 0x7f && code <= 0x9f)) {
+ osc += TextDecoder_1.utf32ToString(data, i, j_1);
+ i = j_1 - 1;
+ break;
+ }
+ }
+ break;
+ case 6:
+ if (osc && code !== 0x18 && code !== 0x1a) {
+ var idx = osc.indexOf(';');
+ if (idx === -1) {
+ this._oscHandlerFb(-1, osc);
+ }
+ else {
+ var identifier = parseInt(osc.substring(0, idx));
+ var content = osc.substring(idx + 1);
+ var handlers_1 = this._oscHandlers[identifier];
+ var j_2 = handlers_1 ? handlers_1.length - 1 : -1;
+ for (; j_2 >= 0; j_2--) {
+ if (handlers_1[j_2](content)) {
+ break;
+ }
+ }
+ if (j_2 < 0) {
+ this._oscHandlerFb(identifier, content);
+ }
+ }
+ }
+ if (code === 0x1b)
+ transition |= 1;
+ osc = '';
+ params = [0];
+ collect = '';
+ dcs = -1;
+ break;
+ }
+ currentState = transition & 15;
+ }
+ if (currentState === 0 && ~print) {
+ this._printHandler(data, print, length);
+ }
+ else if (currentState === 13 && ~dcs && dcsHandler) {
+ dcsHandler.put(data, dcs, length);
+ }
+ this._osc = osc;
+ this._collect = collect;
+ this._params = params;
+ this._activeDcsHandler = dcsHandler;
+ this.currentState = currentState;
+ };
+ return EscapeSequenceParser;
+}(Lifecycle_1.Disposable));
+exports.EscapeSequenceParser = EscapeSequenceParser;
+
+},{"./common/Lifecycle":20,"./core/input/TextDecoder":26}],9:[function(require,module,exports){
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ }
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var EscapeSequences_1 = require("./common/data/EscapeSequences");
+var Charsets_1 = require("./core/data/Charsets");
+var Buffer_1 = require("./Buffer");
+var CharWidth_1 = require("./CharWidth");
+var EscapeSequenceParser_1 = require("./EscapeSequenceParser");
+var Lifecycle_1 = require("./common/Lifecycle");
+var TypedArrayUtils_1 = require("./common/TypedArrayUtils");
+var TextDecoder_1 = require("./core/input/TextDecoder");
+var GLEVEL = { '(': 0, ')': 1, '*': 2, '+': 3, '-': 1, '.': 2 };
+var DECRQSS = (function () {
+ function DECRQSS(_terminal) {
+ this._terminal = _terminal;
+ this._data = new Uint32Array(0);
+ }
+ DECRQSS.prototype.hook = function (collect, params, flag) {
+ this._data = new Uint32Array(0);
+ };
+ DECRQSS.prototype.put = function (data, start, end) {
+ this._data = TypedArrayUtils_1.concat(this._data, data.subarray(start, end));
+ };
+ DECRQSS.prototype.unhook = function () {
+ var data = TextDecoder_1.utf32ToString(this._data);
+ this._data = new Uint32Array(0);
+ switch (data) {
+ case '"q':
+ return this._terminal.handler(EscapeSequences_1.C0.ESC + "P1$r0\"q" + EscapeSequences_1.C0.ESC + "\\");
+ case '"p':
+ return this._terminal.handler(EscapeSequences_1.C0.ESC + "P1$r61\"p" + EscapeSequences_1.C0.ESC + "\\");
+ case 'r':
+ var pt = '' + (this._terminal.buffer.scrollTop + 1) +
+ ';' + (this._terminal.buffer.scrollBottom + 1) + 'r';
+ return this._terminal.handler(EscapeSequences_1.C0.ESC + "P1$r" + pt + EscapeSequences_1.C0.ESC + "\\");
+ case 'm':
+ return this._terminal.handler(EscapeSequences_1.C0.ESC + "P1$r0m" + EscapeSequences_1.C0.ESC + "\\");
+ case ' q':
+ var STYLES = { 'block': 2, 'underline': 4, 'bar': 6 };
+ var style = STYLES[this._terminal.getOption('cursorStyle')];
+ style -= this._terminal.getOption('cursorBlink');
+ return this._terminal.handler(EscapeSequences_1.C0.ESC + "P1$r" + style + " q" + EscapeSequences_1.C0.ESC + "\\");
+ default:
+ this._terminal.error('Unknown DCS $q %s', data);
+ this._terminal.handler(EscapeSequences_1.C0.ESC + "P0$r" + EscapeSequences_1.C0.ESC + "\\");
+ }
+ };
+ return DECRQSS;
+}());
+var InputHandler = (function (_super) {
+ __extends(InputHandler, _super);
+ function InputHandler(_terminal, _parser) {
+ if (_parser === void 0) { _parser = new EscapeSequenceParser_1.EscapeSequenceParser(); }
+ var _this = _super.call(this) || this;
+ _this._terminal = _terminal;
+ _this._parser = _parser;
+ _this._parseBuffer = new Uint32Array(4096);
+ _this._stringDecoder = new TextDecoder_1.StringToUtf32();
+ _this.register(_this._parser);
+ _this._parser.setCsiHandlerFallback(function (collect, params, flag) {
+ _this._terminal.error('Unknown CSI code: ', { collect: collect, params: params, flag: String.fromCharCode(flag) });
+ });
+ _this._parser.setEscHandlerFallback(function (collect, flag) {
+ _this._terminal.error('Unknown ESC code: ', { collect: collect, flag: String.fromCharCode(flag) });
+ });
+ _this._parser.setExecuteHandlerFallback(function (code) {
+ _this._terminal.error('Unknown EXECUTE code: ', { code: code });
+ });
+ _this._parser.setOscHandlerFallback(function (identifier, data) {
+ _this._terminal.error('Unknown OSC code: ', { identifier: identifier, data: data });
+ });
+ _this._parser.setPrintHandler(function (data, start, end) { return _this.print(data, start, end); });
+ _this._parser.setCsiHandler('@', function (params, collect) { return _this.insertChars(params); });
+ _this._parser.setCsiHandler('A', function (params, collect) { return _this.cursorUp(params); });
+ _this._parser.setCsiHandler('B', function (params, collect) { return _this.cursorDown(params); });
+ _this._parser.setCsiHandler('C', function (params, collect) { return _this.cursorForward(params); });
+ _this._parser.setCsiHandler('D', function (params, collect) { return _this.cursorBackward(params); });
+ _this._parser.setCsiHandler('E', function (params, collect) { return _this.cursorNextLine(params); });
+ _this._parser.setCsiHandler('F', function (params, collect) { return _this.cursorPrecedingLine(params); });
+ _this._parser.setCsiHandler('G', function (params, collect) { return _this.cursorCharAbsolute(params); });
+ _this._parser.setCsiHandler('H', function (params, collect) { return _this.cursorPosition(params); });
+ _this._parser.setCsiHandler('I', function (params, collect) { return _this.cursorForwardTab(params); });
+ _this._parser.setCsiHandler('J', function (params, collect) { return _this.eraseInDisplay(params); });
+ _this._parser.setCsiHandler('K', function (params, collect) { return _this.eraseInLine(params); });
+ _this._parser.setCsiHandler('L', function (params, collect) { return _this.insertLines(params); });
+ _this._parser.setCsiHandler('M', function (params, collect) { return _this.deleteLines(params); });
+ _this._parser.setCsiHandler('P', function (params, collect) { return _this.deleteChars(params); });
+ _this._parser.setCsiHandler('S', function (params, collect) { return _this.scrollUp(params); });
+ _this._parser.setCsiHandler('T', function (params, collect) { return _this.scrollDown(params, collect); });
+ _this._parser.setCsiHandler('X', function (params, collect) { return _this.eraseChars(params); });
+ _this._parser.setCsiHandler('Z', function (params, collect) { return _this.cursorBackwardTab(params); });
+ _this._parser.setCsiHandler('`', function (params, collect) { return _this.charPosAbsolute(params); });
+ _this._parser.setCsiHandler('a', function (params, collect) { return _this.hPositionRelative(params); });
+ _this._parser.setCsiHandler('b', function (params, collect) { return _this.repeatPrecedingCharacter(params); });
+ _this._parser.setCsiHandler('c', function (params, collect) { return _this.sendDeviceAttributes(params, collect); });
+ _this._parser.setCsiHandler('d', function (params, collect) { return _this.linePosAbsolute(params); });
+ _this._parser.setCsiHandler('e', function (params, collect) { return _this.vPositionRelative(params); });
+ _this._parser.setCsiHandler('f', function (params, collect) { return _this.hVPosition(params); });
+ _this._parser.setCsiHandler('g', function (params, collect) { return _this.tabClear(params); });
+ _this._parser.setCsiHandler('h', function (params, collect) { return _this.setMode(params, collect); });
+ _this._parser.setCsiHandler('l', function (params, collect) { return _this.resetMode(params, collect); });
+ _this._parser.setCsiHandler('m', function (params, collect) { return _this.charAttributes(params); });
+ _this._parser.setCsiHandler('n', function (params, collect) { return _this.deviceStatus(params, collect); });
+ _this._parser.setCsiHandler('p', function (params, collect) { return _this.softReset(params, collect); });
+ _this._parser.setCsiHandler('q', function (params, collect) { return _this.setCursorStyle(params, collect); });
+ _this._parser.setCsiHandler('r', function (params, collect) { return _this.setScrollRegion(params, collect); });
+ _this._parser.setCsiHandler('s', function (params, collect) { return _this.saveCursor(params); });
+ _this._parser.setCsiHandler('u', function (params, collect) { return _this.restoreCursor(params); });
+ _this._parser.setExecuteHandler(EscapeSequences_1.C0.BEL, function () { return _this.bell(); });
+ _this._parser.setExecuteHandler(EscapeSequences_1.C0.LF, function () { return _this.lineFeed(); });
+ _this._parser.setExecuteHandler(EscapeSequences_1.C0.VT, function () { return _this.lineFeed(); });
+ _this._parser.setExecuteHandler(EscapeSequences_1.C0.FF, function () { return _this.lineFeed(); });
+ _this._parser.setExecuteHandler(EscapeSequences_1.C0.CR, function () { return _this.carriageReturn(); });
+ _this._parser.setExecuteHandler(EscapeSequences_1.C0.BS, function () { return _this.backspace(); });
+ _this._parser.setExecuteHandler(EscapeSequences_1.C0.HT, function () { return _this.tab(); });
+ _this._parser.setExecuteHandler(EscapeSequences_1.C0.SO, function () { return _this.shiftOut(); });
+ _this._parser.setExecuteHandler(EscapeSequences_1.C0.SI, function () { return _this.shiftIn(); });
+ _this._parser.setExecuteHandler(EscapeSequences_1.C1.IND, function () { return _this.index(); });
+ _this._parser.setExecuteHandler(EscapeSequences_1.C1.NEL, function () { return _this.nextLine(); });
+ _this._parser.setExecuteHandler(EscapeSequences_1.C1.HTS, function () { return _this.tabSet(); });
+ _this._parser.setOscHandler(0, function (data) { return _this.setTitle(data); });
+ _this._parser.setOscHandler(2, function (data) { return _this.setTitle(data); });
+ _this._parser.setEscHandler('7', function () { return _this.saveCursor([]); });
+ _this._parser.setEscHandler('8', function () { return _this.restoreCursor([]); });
+ _this._parser.setEscHandler('D', function () { return _this.index(); });
+ _this._parser.setEscHandler('E', function () { return _this.nextLine(); });
+ _this._parser.setEscHandler('H', function () { return _this.tabSet(); });
+ _this._parser.setEscHandler('M', function () { return _this.reverseIndex(); });
+ _this._parser.setEscHandler('=', function () { return _this.keypadApplicationMode(); });
+ _this._parser.setEscHandler('>', function () { return _this.keypadNumericMode(); });
+ _this._parser.setEscHandler('c', function () { return _this.reset(); });
+ _this._parser.setEscHandler('n', function () { return _this.setgLevel(2); });
+ _this._parser.setEscHandler('o', function () { return _this.setgLevel(3); });
+ _this._parser.setEscHandler('|', function () { return _this.setgLevel(3); });
+ _this._parser.setEscHandler('}', function () { return _this.setgLevel(2); });
+ _this._parser.setEscHandler('~', function () { return _this.setgLevel(1); });
+ _this._parser.setEscHandler('%@', function () { return _this.selectDefaultCharset(); });
+ _this._parser.setEscHandler('%G', function () { return _this.selectDefaultCharset(); });
+ var _loop_1 = function (flag) {
+ this_1._parser.setEscHandler('(' + flag, function () { return _this.selectCharset('(' + flag); });
+ this_1._parser.setEscHandler(')' + flag, function () { return _this.selectCharset(')' + flag); });
+ this_1._parser.setEscHandler('*' + flag, function () { return _this.selectCharset('*' + flag); });
+ this_1._parser.setEscHandler('+' + flag, function () { return _this.selectCharset('+' + flag); });
+ this_1._parser.setEscHandler('-' + flag, function () { return _this.selectCharset('-' + flag); });
+ this_1._parser.setEscHandler('.' + flag, function () { return _this.selectCharset('.' + flag); });
+ this_1._parser.setEscHandler('/' + flag, function () { return _this.selectCharset('/' + flag); });
+ };
+ var this_1 = this;
+ for (var flag in Charsets_1.CHARSETS) {
+ _loop_1(flag);
+ }
+ _this._parser.setErrorHandler(function (state) {
+ _this._terminal.error('Parsing error: ', state);
+ return state;
+ });
+ _this._parser.setDcsHandler('$q', new DECRQSS(_this._terminal));
+ return _this;
+ }
+ InputHandler.prototype.dispose = function () {
+ _super.prototype.dispose.call(this);
+ this._terminal = null;
+ };
+ InputHandler.prototype.parse = function (data) {
+ if (!this._terminal) {
+ return;
+ }
+ var buffer = this._terminal.buffer;
+ var cursorStartX = buffer.x;
+ var cursorStartY = buffer.y;
+ if (this._terminal.debug) {
+ this._terminal.log('data: ' + data);
+ }
+ if (this._parseBuffer.length < data.length) {
+ this._parseBuffer = new Uint32Array(data.length);
+ }
+ for (var i = 0; i < data.length; ++i) {
+ this._parseBuffer[i] = data.charCodeAt(i);
+ }
+ this._parser.parse(this._parseBuffer, this._stringDecoder.decode(data, this._parseBuffer));
+ buffer = this._terminal.buffer;
+ if (buffer.x !== cursorStartX || buffer.y !== cursorStartY) {
+ this._terminal.emit('cursormove');
+ }
+ };
+ InputHandler.prototype.print = function (data, start, end) {
+ var code;
+ var char;
+ var chWidth;
+ var buffer = this._terminal.buffer;
+ var charset = this._terminal.charset;
+ var screenReaderMode = this._terminal.options.screenReaderMode;
+ var cols = this._terminal.cols;
+ var wraparoundMode = this._terminal.wraparoundMode;
+ var insertMode = this._terminal.insertMode;
+ var curAttr = this._terminal.curAttr;
+ var bufferRow = buffer.lines.get(buffer.y + buffer.ybase);
+ this._terminal.updateRange(buffer.y);
+ for (var pos = start; pos < end; ++pos) {
+ code = data[pos];
+ char = TextDecoder_1.stringFromCodePoint(code);
+ chWidth = CharWidth_1.wcwidth(code);
+ if (code < 127 && charset) {
+ var ch = charset[char];
+ if (ch) {
+ code = ch.charCodeAt(0);
+ char = ch;
+ }
+ }
+ if (screenReaderMode) {
+ this._terminal.emit('a11y.char', char);
+ }
+ if (!chWidth && buffer.x) {
+ var chMinusOne = bufferRow.get(buffer.x - 1);
+ if (chMinusOne) {
+ if (!chMinusOne[Buffer_1.CHAR_DATA_WIDTH_INDEX]) {
+ var chMinusTwo = bufferRow.get(buffer.x - 2);
+ if (chMinusTwo) {
+ chMinusTwo[Buffer_1.CHAR_DATA_CHAR_INDEX] += char;
+ chMinusTwo[Buffer_1.CHAR_DATA_CODE_INDEX] = code;
+ bufferRow.set(buffer.x - 2, chMinusTwo);
+ }
+ }
+ else {
+ chMinusOne[Buffer_1.CHAR_DATA_CHAR_INDEX] += char;
+ chMinusOne[Buffer_1.CHAR_DATA_CODE_INDEX] = code;
+ bufferRow.set(buffer.x - 1, chMinusOne);
+ }
+ }
+ continue;
+ }
+ if (buffer.x + chWidth - 1 >= cols) {
+ if (wraparoundMode) {
+ buffer.x = 0;
+ buffer.y++;
+ if (buffer.y > buffer.scrollBottom) {
+ buffer.y--;
+ this._terminal.scroll(true);
+ }
+ else {
+ buffer.lines.get(buffer.y).isWrapped = true;
+ }
+ bufferRow = buffer.lines.get(buffer.y + buffer.ybase);
+ }
+ else {
+ if (chWidth === 2) {
+ continue;
+ }
+ }
+ }
+ if (insertMode) {
+ bufferRow.insertCells(buffer.x, chWidth, [curAttr, Buffer_1.NULL_CELL_CHAR, Buffer_1.NULL_CELL_WIDTH, Buffer_1.NULL_CELL_CODE]);
+ var lastCell = bufferRow.get(cols - 1);
+ if (lastCell[Buffer_1.CHAR_DATA_WIDTH_INDEX] === 2) {
+ bufferRow.set(cols - 1, [curAttr, Buffer_1.NULL_CELL_CHAR, Buffer_1.NULL_CELL_WIDTH, Buffer_1.NULL_CELL_CODE]);
+ }
+ }
+ bufferRow.set(buffer.x++, [curAttr, char, chWidth, code]);
+ if (chWidth > 0) {
+ while (--chWidth) {
+ bufferRow.set(buffer.x++, [curAttr, '', 0, undefined]);
+ }
+ }
+ }
+ this._terminal.updateRange(buffer.y);
+ };
+ InputHandler.prototype.addCsiHandler = function (flag, callback) {
+ return this._parser.addCsiHandler(flag, callback);
+ };
+ InputHandler.prototype.addOscHandler = function (ident, callback) {
+ return this._parser.addOscHandler(ident, callback);
+ };
+ InputHandler.prototype.bell = function () {
+ this._terminal.bell();
+ };
+ InputHandler.prototype.lineFeed = function () {
+ var buffer = this._terminal.buffer;
+ if (this._terminal.options.convertEol) {
+ buffer.x = 0;
+ }
+ buffer.y++;
+ if (buffer.y > buffer.scrollBottom) {
+ buffer.y--;
+ this._terminal.scroll();
+ }
+ if (buffer.x >= this._terminal.cols) {
+ buffer.x--;
+ }
+ this._terminal.emit('linefeed');
+ };
+ InputHandler.prototype.carriageReturn = function () {
+ this._terminal.buffer.x = 0;
+ };
+ InputHandler.prototype.backspace = function () {
+ if (this._terminal.buffer.x > 0) {
+ this._terminal.buffer.x--;
+ }
+ };
+ InputHandler.prototype.tab = function () {
+ var originalX = this._terminal.buffer.x;
+ this._terminal.buffer.x = this._terminal.buffer.nextStop();
+ if (this._terminal.options.screenReaderMode) {
+ this._terminal.emit('a11y.tab', this._terminal.buffer.x - originalX);
+ }
+ };
+ InputHandler.prototype.shiftOut = function () {
+ this._terminal.setgLevel(1);
+ };
+ InputHandler.prototype.shiftIn = function () {
+ this._terminal.setgLevel(0);
+ };
+ InputHandler.prototype.insertChars = function (params) {
+ this._terminal.buffer.lines.get(this._terminal.buffer.y + this._terminal.buffer.ybase).insertCells(this._terminal.buffer.x, params[0] || 1, [this._terminal.eraseAttr(), Buffer_1.NULL_CELL_CHAR, Buffer_1.NULL_CELL_WIDTH, Buffer_1.NULL_CELL_CODE]);
+ this._terminal.updateRange(this._terminal.buffer.y);
+ };
+ InputHandler.prototype.cursorUp = function (params) {
+ var param = params[0];
+ if (param < 1) {
+ param = 1;
+ }
+ this._terminal.buffer.y -= param;
+ if (this._terminal.buffer.y < 0) {
+ this._terminal.buffer.y = 0;
+ }
+ };
+ InputHandler.prototype.cursorDown = function (params) {
+ var param = params[0];
+ if (param < 1) {
+ param = 1;
+ }
+ this._terminal.buffer.y += param;
+ if (this._terminal.buffer.y >= this._terminal.rows) {
+ this._terminal.buffer.y = this._terminal.rows - 1;
+ }
+ if (this._terminal.buffer.x >= this._terminal.cols) {
+ this._terminal.buffer.x--;
+ }
+ };
+ InputHandler.prototype.cursorForward = function (params) {
+ var param = params[0];
+ if (param < 1) {
+ param = 1;
+ }
+ this._terminal.buffer.x += param;
+ if (this._terminal.buffer.x >= this._terminal.cols) {
+ this._terminal.buffer.x = this._terminal.cols - 1;
+ }
+ };
+ InputHandler.prototype.cursorBackward = function (params) {
+ var param = params[0];
+ if (param < 1) {
+ param = 1;
+ }
+ if (this._terminal.buffer.x >= this._terminal.cols) {
+ this._terminal.buffer.x--;
+ }
+ this._terminal.buffer.x -= param;
+ if (this._terminal.buffer.x < 0) {
+ this._terminal.buffer.x = 0;
+ }
+ };
+ InputHandler.prototype.cursorNextLine = function (params) {
+ var param = params[0];
+ if (param < 1) {
+ param = 1;
+ }
+ this._terminal.buffer.y += param;
+ if (this._terminal.buffer.y >= this._terminal.rows) {
+ this._terminal.buffer.y = this._terminal.rows - 1;
+ }
+ this._terminal.buffer.x = 0;
+ };
+ InputHandler.prototype.cursorPrecedingLine = function (params) {
+ var param = params[0];
+ if (param < 1) {
+ param = 1;
+ }
+ this._terminal.buffer.y -= param;
+ if (this._terminal.buffer.y < 0) {
+ this._terminal.buffer.y = 0;
+ }
+ this._terminal.buffer.x = 0;
+ };
+ InputHandler.prototype.cursorCharAbsolute = function (params) {
+ var param = params[0];
+ if (param < 1) {
+ param = 1;
+ }
+ this._terminal.buffer.x = param - 1;
+ };
+ InputHandler.prototype.cursorPosition = function (params) {
+ var col;
+ var row = params[0] - 1;
+ if (params.length >= 2) {
+ col = params[1] - 1;
+ }
+ else {
+ col = 0;
+ }
+ if (row < 0) {
+ row = 0;
+ }
+ else if (row >= this._terminal.rows) {
+ row = this._terminal.rows - 1;
+ }
+ if (col < 0) {
+ col = 0;
+ }
+ else if (col >= this._terminal.cols) {
+ col = this._terminal.cols - 1;
+ }
+ this._terminal.buffer.x = col;
+ this._terminal.buffer.y = row;
+ };
+ InputHandler.prototype.cursorForwardTab = function (params) {
+ var param = params[0] || 1;
+ while (param--) {
+ this._terminal.buffer.x = this._terminal.buffer.nextStop();
+ }
+ };
+ InputHandler.prototype._eraseInBufferLine = function (y, start, end, clearWrap) {
+ if (clearWrap === void 0) { clearWrap = false; }
+ var line = this._terminal.buffer.lines.get(this._terminal.buffer.ybase + y);
+ line.replaceCells(start, end, [this._terminal.eraseAttr(), Buffer_1.NULL_CELL_CHAR, Buffer_1.NULL_CELL_WIDTH, Buffer_1.NULL_CELL_CODE]);
+ if (clearWrap) {
+ line.isWrapped = false;
+ }
+ };
+ InputHandler.prototype._resetBufferLine = function (y) {
+ this._eraseInBufferLine(y, 0, this._terminal.cols, true);
+ };
+ InputHandler.prototype.eraseInDisplay = function (params) {
+ var j;
+ switch (params[0]) {
+ case 0:
+ j = this._terminal.buffer.y;
+ this._terminal.updateRange(j);
+ this._eraseInBufferLine(j++, this._terminal.buffer.x, this._terminal.cols, this._terminal.buffer.x === 0);
+ for (; j < this._terminal.rows; j++) {
+ this._resetBufferLine(j);
+ }
+ this._terminal.updateRange(j);
+ break;
+ case 1:
+ j = this._terminal.buffer.y;
+ this._terminal.updateRange(j);
+ this._eraseInBufferLine(j, 0, this._terminal.buffer.x + 1, true);
+ if (this._terminal.buffer.x + 1 >= this._terminal.cols) {
+ this._terminal.buffer.lines.get(j + 1).isWrapped = false;
+ }
+ while (j--) {
+ this._resetBufferLine(j);
+ }
+ this._terminal.updateRange(0);
+ break;
+ case 2:
+ j = this._terminal.rows;
+ this._terminal.updateRange(j - 1);
+ while (j--) {
+ this._resetBufferLine(j);
+ }
+ this._terminal.updateRange(0);
+ break;
+ case 3:
+ var scrollBackSize = this._terminal.buffer.lines.length - this._terminal.rows;
+ if (scrollBackSize > 0) {
+ this._terminal.buffer.lines.trimStart(scrollBackSize);
+ this._terminal.buffer.ybase = Math.max(this._terminal.buffer.ybase - scrollBackSize, 0);
+ this._terminal.buffer.ydisp = Math.max(this._terminal.buffer.ydisp - scrollBackSize, 0);
+ this._terminal.emit('scroll', 0);
+ }
+ break;
+ }
+ };
+ InputHandler.prototype.eraseInLine = function (params) {
+ switch (params[0]) {
+ case 0:
+ this._eraseInBufferLine(this._terminal.buffer.y, this._terminal.buffer.x, this._terminal.cols);
+ break;
+ case 1:
+ this._eraseInBufferLine(this._terminal.buffer.y, 0, this._terminal.buffer.x + 1);
+ break;
+ case 2:
+ this._eraseInBufferLine(this._terminal.buffer.y, 0, this._terminal.cols);
+ break;
+ }
+ this._terminal.updateRange(this._terminal.buffer.y);
+ };
+ InputHandler.prototype.insertLines = function (params) {
+ var param = params[0];
+ if (param < 1) {
+ param = 1;
+ }
+ var buffer = this._terminal.buffer;
+ var row = buffer.y + buffer.ybase;
+ var scrollBottomRowsOffset = this._terminal.rows - 1 - buffer.scrollBottom;
+ var scrollBottomAbsolute = this._terminal.rows - 1 + buffer.ybase - scrollBottomRowsOffset + 1;
+ while (param--) {
+ buffer.lines.splice(scrollBottomAbsolute - 1, 1);
+ buffer.lines.splice(row, 0, buffer.getBlankLine(this._terminal.eraseAttr()));
+ }
+ this._terminal.updateRange(buffer.y);
+ this._terminal.updateRange(buffer.scrollBottom);
+ };
+ InputHandler.prototype.deleteLines = function (params) {
+ var param = params[0];
+ if (param < 1) {
+ param = 1;
+ }
+ var buffer = this._terminal.buffer;
+ var row = buffer.y + buffer.ybase;
+ var j;
+ j = this._terminal.rows - 1 - buffer.scrollBottom;
+ j = this._terminal.rows - 1 + buffer.ybase - j;
+ while (param--) {
+ buffer.lines.splice(row, 1);
+ buffer.lines.splice(j, 0, buffer.getBlankLine(this._terminal.eraseAttr()));
+ }
+ this._terminal.updateRange(buffer.y);
+ this._terminal.updateRange(buffer.scrollBottom);
+ };
+ InputHandler.prototype.deleteChars = function (params) {
+ this._terminal.buffer.lines.get(this._terminal.buffer.y + this._terminal.buffer.ybase).deleteCells(this._terminal.buffer.x, params[0] || 1, [this._terminal.eraseAttr(), Buffer_1.NULL_CELL_CHAR, Buffer_1.NULL_CELL_WIDTH, Buffer_1.NULL_CELL_CODE]);
+ this._terminal.updateRange(this._terminal.buffer.y);
+ };
+ InputHandler.prototype.scrollUp = function (params) {
+ var param = params[0] || 1;
+ var buffer = this._terminal.buffer;
+ while (param--) {
+ buffer.lines.splice(buffer.ybase + buffer.scrollTop, 1);
+ buffer.lines.splice(buffer.ybase + buffer.scrollBottom, 0, buffer.getBlankLine(Buffer_1.DEFAULT_ATTR));
+ }
+ this._terminal.updateRange(buffer.scrollTop);
+ this._terminal.updateRange(buffer.scrollBottom);
+ };
+ InputHandler.prototype.scrollDown = function (params, collect) {
+ if (params.length < 2 && !collect) {
+ var param = params[0] || 1;
+ var buffer = this._terminal.buffer;
+ while (param--) {
+ buffer.lines.splice(buffer.ybase + buffer.scrollBottom, 1);
+ buffer.lines.splice(buffer.ybase + buffer.scrollBottom, 0, buffer.getBlankLine(Buffer_1.DEFAULT_ATTR));
+ }
+ this._terminal.updateRange(buffer.scrollTop);
+ this._terminal.updateRange(buffer.scrollBottom);
+ }
+ };
+ InputHandler.prototype.eraseChars = function (params) {
+ this._terminal.buffer.lines.get(this._terminal.buffer.y + this._terminal.buffer.ybase).replaceCells(this._terminal.buffer.x, this._terminal.buffer.x + (params[0] || 1), [this._terminal.eraseAttr(), Buffer_1.NULL_CELL_CHAR, Buffer_1.NULL_CELL_WIDTH, Buffer_1.NULL_CELL_CODE]);
+ };
+ InputHandler.prototype.cursorBackwardTab = function (params) {
+ var param = params[0] || 1;
+ var buffer = this._terminal.buffer;
+ while (param--) {
+ buffer.x = buffer.prevStop();
+ }
+ };
+ InputHandler.prototype.charPosAbsolute = function (params) {
+ var param = params[0];
+ if (param < 1) {
+ param = 1;
+ }
+ this._terminal.buffer.x = param - 1;
+ if (this._terminal.buffer.x >= this._terminal.cols) {
+ this._terminal.buffer.x = this._terminal.cols - 1;
+ }
+ };
+ InputHandler.prototype.hPositionRelative = function (params) {
+ var param = params[0];
+ if (param < 1) {
+ param = 1;
+ }
+ this._terminal.buffer.x += param;
+ if (this._terminal.buffer.x >= this._terminal.cols) {
+ this._terminal.buffer.x = this._terminal.cols - 1;
+ }
+ };
+ InputHandler.prototype.repeatPrecedingCharacter = function (params) {
+ var buffer = this._terminal.buffer;
+ var line = buffer.lines.get(buffer.ybase + buffer.y);
+ line.replaceCells(buffer.x, buffer.x + (params[0] || 1), line.get(buffer.x - 1) || [Buffer_1.DEFAULT_ATTR, Buffer_1.NULL_CELL_CHAR, Buffer_1.NULL_CELL_WIDTH, Buffer_1.NULL_CELL_CODE]);
+ };
+ InputHandler.prototype.sendDeviceAttributes = function (params, collect) {
+ if (params[0] > 0) {
+ return;
+ }
+ if (!collect) {
+ if (this._terminal.is('xterm') || this._terminal.is('rxvt-unicode') || this._terminal.is('screen')) {
+ this._terminal.handler(EscapeSequences_1.C0.ESC + '[?1;2c');
+ }
+ else if (this._terminal.is('linux')) {
+ this._terminal.handler(EscapeSequences_1.C0.ESC + '[?6c');
+ }
+ }
+ else if (collect === '>') {
+ if (this._terminal.is('xterm')) {
+ this._terminal.handler(EscapeSequences_1.C0.ESC + '[>0;276;0c');
+ }
+ else if (this._terminal.is('rxvt-unicode')) {
+ this._terminal.handler(EscapeSequences_1.C0.ESC + '[>85;95;0c');
+ }
+ else if (this._terminal.is('linux')) {
+ this._terminal.handler(params[0] + 'c');
+ }
+ else if (this._terminal.is('screen')) {
+ this._terminal.handler(EscapeSequences_1.C0.ESC + '[>83;40003;0c');
+ }
+ }
+ };
+ InputHandler.prototype.linePosAbsolute = function (params) {
+ var param = params[0];
+ if (param < 1) {
+ param = 1;
+ }
+ this._terminal.buffer.y = param - 1;
+ if (this._terminal.buffer.y >= this._terminal.rows) {
+ this._terminal.buffer.y = this._terminal.rows - 1;
+ }
+ };
+ InputHandler.prototype.vPositionRelative = function (params) {
+ var param = params[0];
+ if (param < 1) {
+ param = 1;
+ }
+ this._terminal.buffer.y += param;
+ if (this._terminal.buffer.y >= this._terminal.rows) {
+ this._terminal.buffer.y = this._terminal.rows - 1;
+ }
+ if (this._terminal.buffer.x >= this._terminal.cols) {
+ this._terminal.buffer.x--;
+ }
+ };
+ InputHandler.prototype.hVPosition = function (params) {
+ if (params[0] < 1)
+ params[0] = 1;
+ if (params[1] < 1)
+ params[1] = 1;
+ this._terminal.buffer.y = params[0] - 1;
+ if (this._terminal.buffer.y >= this._terminal.rows) {
+ this._terminal.buffer.y = this._terminal.rows - 1;
+ }
+ this._terminal.buffer.x = params[1] - 1;
+ if (this._terminal.buffer.x >= this._terminal.cols) {
+ this._terminal.buffer.x = this._terminal.cols - 1;
+ }
+ };
+ InputHandler.prototype.tabClear = function (params) {
+ var param = params[0];
+ if (param <= 0) {
+ delete this._terminal.buffer.tabs[this._terminal.buffer.x];
+ }
+ else if (param === 3) {
+ this._terminal.buffer.tabs = {};
+ }
+ };
+ InputHandler.prototype.setMode = function (params, collect) {
+ if (params.length > 1) {
+ for (var i = 0; i < params.length; i++) {
+ this.setMode([params[i]]);
+ }
+ return;
+ }
+ if (!collect) {
+ switch (params[0]) {
+ case 4:
+ this._terminal.insertMode = true;
+ break;
+ case 20:
+ break;
+ }
+ }
+ else if (collect === '?') {
+ switch (params[0]) {
+ case 1:
+ this._terminal.applicationCursor = true;
+ break;
+ case 2:
+ this._terminal.setgCharset(0, Charsets_1.DEFAULT_CHARSET);
+ this._terminal.setgCharset(1, Charsets_1.DEFAULT_CHARSET);
+ this._terminal.setgCharset(2, Charsets_1.DEFAULT_CHARSET);
+ this._terminal.setgCharset(3, Charsets_1.DEFAULT_CHARSET);
+ break;
+ case 3:
+ this._terminal.savedCols = this._terminal.cols;
+ this._terminal.resize(132, this._terminal.rows);
+ break;
+ case 6:
+ this._terminal.originMode = true;
+ break;
+ case 7:
+ this._terminal.wraparoundMode = true;
+ break;
+ case 12:
+ break;
+ case 66:
+ this._terminal.log('Serial port requested application keypad.');
+ this._terminal.applicationKeypad = true;
+ if (this._terminal.viewport) {
+ this._terminal.viewport.syncScrollArea();
+ }
+ break;
+ case 9:
+ case 1000:
+ case 1002:
+ case 1003:
+ this._terminal.x10Mouse = params[0] === 9;
+ this._terminal.vt200Mouse = params[0] === 1000;
+ this._terminal.normalMouse = params[0] > 1000;
+ this._terminal.mouseEvents = true;
+ if (this._terminal.element) {
+ this._terminal.element.classList.add('enable-mouse-events');
+ }
+ if (this._terminal.selectionManager) {
+ this._terminal.selectionManager.disable();
+ }
+ this._terminal.log('Binding to mouse events.');
+ break;
+ case 1004:
+ this._terminal.sendFocus = true;
+ break;
+ case 1005:
+ this._terminal.utfMouse = true;
+ break;
+ case 1006:
+ this._terminal.sgrMouse = true;
+ break;
+ case 1015:
+ this._terminal.urxvtMouse = true;
+ break;
+ case 25:
+ this._terminal.cursorHidden = false;
+ break;
+ case 1048:
+ this.saveCursor(params);
+ break;
+ case 1049:
+ this.saveCursor(params);
+ case 47:
+ case 1047:
+ this._terminal.buffers.activateAltBuffer(this._terminal.eraseAttr());
+ this._terminal.refresh(0, this._terminal.rows - 1);
+ if (this._terminal.viewport) {
+ this._terminal.viewport.syncScrollArea();
+ }
+ this._terminal.showCursor();
+ break;
+ case 2004:
+ this._terminal.bracketedPasteMode = true;
+ break;
+ }
+ }
+ };
+ InputHandler.prototype.resetMode = function (params, collect) {
+ if (params.length > 1) {
+ for (var i = 0; i < params.length; i++) {
+ this.resetMode([params[i]]);
+ }
+ return;
+ }
+ if (!collect) {
+ switch (params[0]) {
+ case 4:
+ this._terminal.insertMode = false;
+ break;
+ case 20:
+ break;
+ }
+ }
+ else if (collect === '?') {
+ switch (params[0]) {
+ case 1:
+ this._terminal.applicationCursor = false;
+ break;
+ case 3:
+ if (this._terminal.cols === 132 && this._terminal.savedCols) {
+ this._terminal.resize(this._terminal.savedCols, this._terminal.rows);
+ }
+ delete this._terminal.savedCols;
+ break;
+ case 6:
+ this._terminal.originMode = false;
+ break;
+ case 7:
+ this._terminal.wraparoundMode = false;
+ break;
+ case 12:
+ break;
+ case 66:
+ this._terminal.log('Switching back to normal keypad.');
+ this._terminal.applicationKeypad = false;
+ if (this._terminal.viewport) {
+ this._terminal.viewport.syncScrollArea();
+ }
+ break;
+ case 9:
+ case 1000:
+ case 1002:
+ case 1003:
+ this._terminal.x10Mouse = false;
+ this._terminal.vt200Mouse = false;
+ this._terminal.normalMouse = false;
+ this._terminal.mouseEvents = false;
+ if (this._terminal.element) {
+ this._terminal.element.classList.remove('enable-mouse-events');
+ }
+ if (this._terminal.selectionManager) {
+ this._terminal.selectionManager.enable();
+ }
+ break;
+ case 1004:
+ this._terminal.sendFocus = false;
+ break;
+ case 1005:
+ this._terminal.utfMouse = false;
+ break;
+ case 1006:
+ this._terminal.sgrMouse = false;
+ break;
+ case 1015:
+ this._terminal.urxvtMouse = false;
+ break;
+ case 25:
+ this._terminal.cursorHidden = true;
+ break;
+ case 1048:
+ this.restoreCursor(params);
+ break;
+ case 1049:
+ case 47:
+ case 1047:
+ this._terminal.buffers.activateNormalBuffer();
+ if (params[0] === 1049) {
+ this.restoreCursor(params);
+ }
+ this._terminal.refresh(0, this._terminal.rows - 1);
+ if (this._terminal.viewport) {
+ this._terminal.viewport.syncScrollArea();
+ }
+ this._terminal.showCursor();
+ break;
+ case 2004:
+ this._terminal.bracketedPasteMode = false;
+ break;
+ }
+ }
+ };
+ InputHandler.prototype.charAttributes = function (params) {
+ if (params.length === 1 && params[0] === 0) {
+ this._terminal.curAttr = Buffer_1.DEFAULT_ATTR;
+ return;
+ }
+ var l = params.length;
+ var flags = this._terminal.curAttr >> 18;
+ var fg = (this._terminal.curAttr >> 9) & 0x1ff;
+ var bg = this._terminal.curAttr & 0x1ff;
+ var p;
+ for (var i = 0; i < l; i++) {
+ p = params[i];
+ if (p >= 30 && p <= 37) {
+ fg = p - 30;
+ }
+ else if (p >= 40 && p <= 47) {
+ bg = p - 40;
+ }
+ else if (p >= 90 && p <= 97) {
+ p += 8;
+ fg = p - 90;
+ }
+ else if (p >= 100 && p <= 107) {
+ p += 8;
+ bg = p - 100;
+ }
+ else if (p === 0) {
+ flags = Buffer_1.DEFAULT_ATTR >> 18;
+ fg = (Buffer_1.DEFAULT_ATTR >> 9) & 0x1ff;
+ bg = Buffer_1.DEFAULT_ATTR & 0x1ff;
+ }
+ else if (p === 1) {
+ flags |= 1;
+ }
+ else if (p === 3) {
+ flags |= 64;
+ }
+ else if (p === 4) {
+ flags |= 2;
+ }
+ else if (p === 5) {
+ flags |= 4;
+ }
+ else if (p === 7) {
+ flags |= 8;
+ }
+ else if (p === 8) {
+ flags |= 16;
+ }
+ else if (p === 2) {
+ flags |= 32;
+ }
+ else if (p === 22) {
+ flags &= ~1;
+ flags &= ~32;
+ }
+ else if (p === 23) {
+ flags &= ~64;
+ }
+ else if (p === 24) {
+ flags &= ~2;
+ }
+ else if (p === 25) {
+ flags &= ~4;
+ }
+ else if (p === 27) {
+ flags &= ~8;
+ }
+ else if (p === 28) {
+ flags &= ~16;
+ }
+ else if (p === 39) {
+ fg = (Buffer_1.DEFAULT_ATTR >> 9) & 0x1ff;
+ }
+ else if (p === 49) {
+ bg = Buffer_1.DEFAULT_ATTR & 0x1ff;
+ }
+ else if (p === 38) {
+ if (params[i + 1] === 2) {
+ i += 2;
+ fg = this._terminal.matchColor(params[i] & 0xff, params[i + 1] & 0xff, params[i + 2] & 0xff);
+ if (fg === -1)
+ fg = 0x1ff;
+ i += 2;
+ }
+ else if (params[i + 1] === 5) {
+ i += 2;
+ p = params[i] & 0xff;
+ fg = p;
+ }
+ }
+ else if (p === 48) {
+ if (params[i + 1] === 2) {
+ i += 2;
+ bg = this._terminal.matchColor(params[i] & 0xff, params[i + 1] & 0xff, params[i + 2] & 0xff);
+ if (bg === -1)
+ bg = 0x1ff;
+ i += 2;
+ }
+ else if (params[i + 1] === 5) {
+ i += 2;
+ p = params[i] & 0xff;
+ bg = p;
+ }
+ }
+ else if (p === 100) {
+ fg = (Buffer_1.DEFAULT_ATTR >> 9) & 0x1ff;
+ bg = Buffer_1.DEFAULT_ATTR & 0x1ff;
+ }
+ else {
+ this._terminal.error('Unknown SGR attribute: %d.', p);
+ }
+ }
+ this._terminal.curAttr = (flags << 18) | (fg << 9) | bg;
+ };
+ InputHandler.prototype.deviceStatus = function (params, collect) {
+ if (!collect) {
+ switch (params[0]) {
+ case 5:
+ this._terminal.emit('data', EscapeSequences_1.C0.ESC + "[0n");
+ break;
+ case 6:
+ var y = this._terminal.buffer.y + 1;
+ var x = this._terminal.buffer.x + 1;
+ this._terminal.emit('data', EscapeSequences_1.C0.ESC + "[" + y + ";" + x + "R");
+ break;
+ }
+ }
+ else if (collect === '?') {
+ switch (params[0]) {
+ case 6:
+ var y = this._terminal.buffer.y + 1;
+ var x = this._terminal.buffer.x + 1;
+ this._terminal.emit('data', EscapeSequences_1.C0.ESC + "[?" + y + ";" + x + "R");
+ break;
+ case 15:
+ break;
+ case 25:
+ break;
+ case 26:
+ break;
+ case 53:
+ break;
+ }
+ }
+ };
+ InputHandler.prototype.softReset = function (params, collect) {
+ if (collect === '!') {
+ this._terminal.cursorHidden = false;
+ this._terminal.insertMode = false;
+ this._terminal.originMode = false;
+ this._terminal.wraparoundMode = true;
+ this._terminal.applicationKeypad = false;
+ if (this._terminal.viewport) {
+ this._terminal.viewport.syncScrollArea();
+ }
+ this._terminal.applicationCursor = false;
+ this._terminal.buffer.scrollTop = 0;
+ this._terminal.buffer.scrollBottom = this._terminal.rows - 1;
+ this._terminal.curAttr = Buffer_1.DEFAULT_ATTR;
+ this._terminal.buffer.x = this._terminal.buffer.y = 0;
+ this._terminal.charset = null;
+ this._terminal.glevel = 0;
+ this._terminal.charsets = [null];
+ }
+ };
+ InputHandler.prototype.setCursorStyle = function (params, collect) {
+ if (collect === ' ') {
+ var param = params[0] < 1 ? 1 : params[0];
+ switch (param) {
+ case 1:
+ case 2:
+ this._terminal.setOption('cursorStyle', 'block');
+ break;
+ case 3:
+ case 4:
+ this._terminal.setOption('cursorStyle', 'underline');
+ break;
+ case 5:
+ case 6:
+ this._terminal.setOption('cursorStyle', 'bar');
+ break;
+ }
+ var isBlinking = param % 2 === 1;
+ this._terminal.setOption('cursorBlink', isBlinking);
+ }
+ };
+ InputHandler.prototype.setScrollRegion = function (params, collect) {
+ if (collect)
+ return;
+ this._terminal.buffer.scrollTop = (params[0] || 1) - 1;
+ this._terminal.buffer.scrollBottom = (params[1] && params[1] <= this._terminal.rows ? params[1] : this._terminal.rows) - 1;
+ this._terminal.buffer.x = 0;
+ this._terminal.buffer.y = 0;
+ };
+ InputHandler.prototype.saveCursor = function (params) {
+ this._terminal.buffer.savedX = this._terminal.buffer.x;
+ this._terminal.buffer.savedY = this._terminal.buffer.y;
+ this._terminal.buffer.savedCurAttr = this._terminal.curAttr;
+ };
+ InputHandler.prototype.restoreCursor = function (params) {
+ this._terminal.buffer.x = this._terminal.buffer.savedX || 0;
+ this._terminal.buffer.y = this._terminal.buffer.savedY || 0;
+ this._terminal.curAttr = this._terminal.buffer.savedCurAttr || Buffer_1.DEFAULT_ATTR;
+ };
+ InputHandler.prototype.setTitle = function (data) {
+ this._terminal.handleTitle(data);
+ };
+ InputHandler.prototype.nextLine = function () {
+ this._terminal.buffer.x = 0;
+ this.index();
+ };
+ InputHandler.prototype.keypadApplicationMode = function () {
+ this._terminal.log('Serial port requested application keypad.');
+ this._terminal.applicationKeypad = true;
+ if (this._terminal.viewport) {
+ this._terminal.viewport.syncScrollArea();
+ }
+ };
+ InputHandler.prototype.keypadNumericMode = function () {
+ this._terminal.log('Switching back to normal keypad.');
+ this._terminal.applicationKeypad = false;
+ if (this._terminal.viewport) {
+ this._terminal.viewport.syncScrollArea();
+ }
+ };
+ InputHandler.prototype.selectDefaultCharset = function () {
+ this._terminal.setgLevel(0);
+ this._terminal.setgCharset(0, Charsets_1.DEFAULT_CHARSET);
+ };
+ InputHandler.prototype.selectCharset = function (collectAndFlag) {
+ if (collectAndFlag.length !== 2)
+ return this.selectDefaultCharset();
+ if (collectAndFlag[0] === '/')
+ return;
+ this._terminal.setgCharset(GLEVEL[collectAndFlag[0]], Charsets_1.CHARSETS[collectAndFlag[1]] || Charsets_1.DEFAULT_CHARSET);
+ };
+ InputHandler.prototype.index = function () {
+ this._terminal.index();
+ };
+ InputHandler.prototype.tabSet = function () {
+ this._terminal.tabSet();
+ };
+ InputHandler.prototype.reverseIndex = function () {
+ this._terminal.reverseIndex();
+ };
+ InputHandler.prototype.reset = function () {
+ this._parser.reset();
+ this._terminal.reset();
+ };
+ InputHandler.prototype.setgLevel = function (level) {
+ this._terminal.setgLevel(level);
+ };
+ return InputHandler;
+}(Lifecycle_1.Disposable));
+exports.InputHandler = InputHandler;
+
+},{"./Buffer":2,"./CharWidth":6,"./EscapeSequenceParser":8,"./common/Lifecycle":20,"./common/TypedArrayUtils":21,"./common/data/EscapeSequences":22,"./core/data/Charsets":24,"./core/input/TextDecoder":26}],10:[function(require,module,exports){
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ }
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var MouseZoneManager_1 = require("./ui/MouseZoneManager");
+var EventEmitter_1 = require("./common/EventEmitter");
+var Buffer_1 = require("./Buffer");
+var CharWidth_1 = require("./CharWidth");
+var Linkifier = (function (_super) {
+ __extends(Linkifier, _super);
+ function Linkifier(_terminal) {
+ var _this = _super.call(this) || this;
+ _this._terminal = _terminal;
+ _this._linkMatchers = [];
+ _this._nextLinkMatcherId = 0;
+ _this._rowsToLinkify = {
+ start: null,
+ end: null
+ };
+ return _this;
+ }
+ Linkifier.prototype.attachToDom = function (mouseZoneManager) {
+ this._mouseZoneManager = mouseZoneManager;
+ };
+ Linkifier.prototype.linkifyRows = function (start, end) {
+ var _this = this;
+ if (!this._mouseZoneManager) {
+ return;
+ }
+ if (this._rowsToLinkify.start === null) {
+ this._rowsToLinkify.start = start;
+ this._rowsToLinkify.end = end;
+ }
+ else {
+ this._rowsToLinkify.start = Math.min(this._rowsToLinkify.start, start);
+ this._rowsToLinkify.end = Math.max(this._rowsToLinkify.end, end);
+ }
+ this._mouseZoneManager.clearAll(start, end);
+ if (this._rowsTimeoutId) {
+ clearTimeout(this._rowsTimeoutId);
+ }
+ this._rowsTimeoutId = setTimeout(function () { return _this._linkifyRows(); }, Linkifier.TIME_BEFORE_LINKIFY);
+ };
+ Linkifier.prototype._linkifyRows = function () {
+ this._rowsTimeoutId = null;
+ var buffer = this._terminal.buffer;
+ var absoluteRowIndexStart = buffer.ydisp + this._rowsToLinkify.start;
+ if (absoluteRowIndexStart >= buffer.lines.length) {
+ return;
+ }
+ var absoluteRowIndexEnd = buffer.ydisp + Math.min(this._rowsToLinkify.end, this._terminal.rows) + 1;
+ var overscanLineLimit = Math.ceil(Linkifier.OVERSCAN_CHAR_LIMIT / this._terminal.cols);
+ var iterator = this._terminal.buffer.iterator(false, absoluteRowIndexStart, absoluteRowIndexEnd, overscanLineLimit, overscanLineLimit);
+ while (iterator.hasNext()) {
+ var lineData = iterator.next();
+ for (var i = 0; i < this._linkMatchers.length; i++) {
+ this._doLinkifyRow(lineData.range.first, lineData.content, this._linkMatchers[i]);
+ }
+ }
+ this._rowsToLinkify.start = null;
+ this._rowsToLinkify.end = null;
+ };
+ Linkifier.prototype.registerLinkMatcher = function (regex, handler, options) {
+ if (options === void 0) { options = {}; }
+ if (!handler) {
+ throw new Error('handler must be defined');
+ }
+ var matcher = {
+ id: this._nextLinkMatcherId++,
+ regex: regex,
+ handler: handler,
+ matchIndex: options.matchIndex,
+ validationCallback: options.validationCallback,
+ hoverTooltipCallback: options.tooltipCallback,
+ hoverLeaveCallback: options.leaveCallback,
+ willLinkActivate: options.willLinkActivate,
+ priority: options.priority || 0
+ };
+ this._addLinkMatcherToList(matcher);
+ return matcher.id;
+ };
+ Linkifier.prototype._addLinkMatcherToList = function (matcher) {
+ if (this._linkMatchers.length === 0) {
+ this._linkMatchers.push(matcher);
+ return;
+ }
+ for (var i = this._linkMatchers.length - 1; i >= 0; i--) {
+ if (matcher.priority <= this._linkMatchers[i].priority) {
+ this._linkMatchers.splice(i + 1, 0, matcher);
+ return;
+ }
+ }
+ this._linkMatchers.splice(0, 0, matcher);
+ };
+ Linkifier.prototype.deregisterLinkMatcher = function (matcherId) {
+ for (var i = 0; i < this._linkMatchers.length; i++) {
+ if (this._linkMatchers[i].id === matcherId) {
+ this._linkMatchers.splice(i, 1);
+ return true;
+ }
+ }
+ return false;
+ };
+ Linkifier.prototype._doLinkifyRow = function (rowIndex, text, matcher) {
+ var _this = this;
+ var rex = new RegExp(matcher.regex.source, matcher.regex.flags + 'g');
+ var match;
+ var stringIndex = -1;
+ var _loop_1 = function () {
+ var uri = match[typeof matcher.matchIndex !== 'number' ? 0 : matcher.matchIndex];
+ if (!uri) {
+ if (this_1._terminal.debug) {
+ console.log({ match: match, matcher: matcher });
+ throw new Error('match found without corresponding matchIndex');
+ }
+ return "break";
+ }
+ stringIndex = text.indexOf(uri, stringIndex + 1);
+ rex.lastIndex = stringIndex + uri.length;
+ if (stringIndex < 0) {
+ return "break";
+ }
+ var bufferIndex = this_1._terminal.buffer.stringIndexToBufferIndex(rowIndex, stringIndex);
+ if (bufferIndex[0] < 0) {
+ return "break";
+ }
+ var line = this_1._terminal.buffer.lines.get(bufferIndex[0]);
+ var char = line.get(bufferIndex[1]);
+ var fg;
+ if (char) {
+ var attr = char[Buffer_1.CHAR_DATA_ATTR_INDEX];
+ fg = (attr >> 9) & 0x1ff;
+ }
+ if (matcher.validationCallback) {
+ matcher.validationCallback(uri, function (isValid) {
+ if (_this._rowsTimeoutId) {
+ return;
+ }
+ if (isValid) {
+ _this._addLink(bufferIndex[1], bufferIndex[0] - _this._terminal.buffer.ydisp, uri, matcher, fg);
+ }
+ });
+ }
+ else {
+ this_1._addLink(bufferIndex[1], bufferIndex[0] - this_1._terminal.buffer.ydisp, uri, matcher, fg);
+ }
+ };
+ var this_1 = this;
+ while ((match = rex.exec(text)) !== null) {
+ var state_1 = _loop_1();
+ if (state_1 === "break")
+ break;
+ }
+ };
+ Linkifier.prototype._addLink = function (x, y, uri, matcher, fg) {
+ var _this = this;
+ var width = CharWidth_1.getStringCellWidth(uri);
+ var x1 = x % this._terminal.cols;
+ var y1 = y + Math.floor(x / this._terminal.cols);
+ var x2 = (x1 + width) % this._terminal.cols;
+ var y2 = y1 + Math.floor((x1 + width) / this._terminal.cols);
+ if (x2 === 0) {
+ x2 = this._terminal.cols;
+ y2--;
+ }
+ this._mouseZoneManager.add(new MouseZoneManager_1.MouseZone(x1 + 1, y1 + 1, x2 + 1, y2 + 1, function (e) {
+ if (matcher.handler) {
+ return matcher.handler(e, uri);
+ }
+ window.open(uri, '_blank');
+ }, function (e) {
+ _this.emit("linkhover", _this._createLinkHoverEvent(x1, y1, x2, y2, fg));
+ _this._terminal.element.classList.add('xterm-cursor-pointer');
+ }, function (e) {
+ _this.emit("linktooltip", _this._createLinkHoverEvent(x1, y1, x2, y2, fg));
+ if (matcher.hoverTooltipCallback) {
+ matcher.hoverTooltipCallback(e, uri);
+ }
+ }, function () {
+ _this.emit("linkleave", _this._createLinkHoverEvent(x1, y1, x2, y2, fg));
+ _this._terminal.element.classList.remove('xterm-cursor-pointer');
+ if (matcher.hoverLeaveCallback) {
+ matcher.hoverLeaveCallback();
+ }
+ }, function (e) {
+ if (matcher.willLinkActivate) {
+ return matcher.willLinkActivate(e, uri);
+ }
+ return true;
+ }));
+ };
+ Linkifier.prototype._createLinkHoverEvent = function (x1, y1, x2, y2, fg) {
+ return { x1: x1, y1: y1, x2: x2, y2: y2, cols: this._terminal.cols, fg: fg };
+ };
+ Linkifier.TIME_BEFORE_LINKIFY = 200;
+ Linkifier.OVERSCAN_CHAR_LIMIT = 2000;
+ return Linkifier;
+}(EventEmitter_1.EventEmitter));
+exports.Linkifier = Linkifier;
+
+},{"./Buffer":2,"./CharWidth":6,"./common/EventEmitter":19,"./ui/MouseZoneManager":53}],11:[function(require,module,exports){
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ }
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var MouseHelper_1 = require("./ui/MouseHelper");
+var Browser = require("./core/Platform");
+var EventEmitter_1 = require("./common/EventEmitter");
+var SelectionModel_1 = require("./SelectionModel");
+var Buffer_1 = require("./Buffer");
+var AltClickHandler_1 = require("./handlers/AltClickHandler");
+var DRAG_SCROLL_MAX_THRESHOLD = 50;
+var DRAG_SCROLL_MAX_SPEED = 15;
+var DRAG_SCROLL_INTERVAL = 50;
+var ALT_CLICK_MOVE_CURSOR_TIME = 500;
+var WORD_SEPARATORS = ' ()[]{}\'"';
+var NON_BREAKING_SPACE_CHAR = String.fromCharCode(160);
+var ALL_NON_BREAKING_SPACE_REGEX = new RegExp(NON_BREAKING_SPACE_CHAR, 'g');
+var SelectionManager = (function (_super) {
+ __extends(SelectionManager, _super);
+ function SelectionManager(_terminal, _charMeasure) {
+ var _this = _super.call(this) || this;
+ _this._terminal = _terminal;
+ _this._charMeasure = _charMeasure;
+ _this._enabled = true;
+ _this._initListeners();
+ _this.enable();
+ _this._model = new SelectionModel_1.SelectionModel(_terminal);
+ _this._activeSelectionMode = 0;
+ return _this;
+ }
+ SelectionManager.prototype.dispose = function () {
+ _super.prototype.dispose.call(this);
+ this._removeMouseDownListeners();
+ };
+ Object.defineProperty(SelectionManager.prototype, "_buffer", {
+ get: function () {
+ return this._terminal.buffers.active;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ SelectionManager.prototype._initListeners = function () {
+ var _this = this;
+ this._mouseMoveListener = function (event) { return _this._onMouseMove(event); };
+ this._mouseUpListener = function (event) { return _this._onMouseUp(event); };
+ this._trimListener = function (amount) { return _this._onTrim(amount); };
+ this.initBuffersListeners();
+ };
+ SelectionManager.prototype.initBuffersListeners = function () {
+ var _this = this;
+ this._terminal.buffer.lines.on('trim', this._trimListener);
+ this._terminal.buffers.on('activate', function (e) { return _this._onBufferActivate(e); });
+ };
+ SelectionManager.prototype.disable = function () {
+ this.clearSelection();
+ this._enabled = false;
+ };
+ SelectionManager.prototype.enable = function () {
+ this._enabled = true;
+ };
+ Object.defineProperty(SelectionManager.prototype, "selectionStart", {
+ get: function () { return this._model.finalSelectionStart; },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(SelectionManager.prototype, "selectionEnd", {
+ get: function () { return this._model.finalSelectionEnd; },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(SelectionManager.prototype, "hasSelection", {
+ get: function () {
+ var start = this._model.finalSelectionStart;
+ var end = this._model.finalSelectionEnd;
+ if (!start || !end) {
+ return false;
+ }
+ return start[0] !== end[0] || start[1] !== end[1];
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(SelectionManager.prototype, "selectionText", {
+ get: function () {
+ var start = this._model.finalSelectionStart;
+ var end = this._model.finalSelectionEnd;
+ if (!start || !end) {
+ return '';
+ }
+ var result = [];
+ if (this._activeSelectionMode === 3) {
+ if (start[0] === end[0]) {
+ return '';
+ }
+ for (var i = start[1]; i <= end[1]; i++) {
+ var lineText = this._buffer.translateBufferLineToString(i, true, start[0], end[0]);
+ result.push(lineText);
+ }
+ }
+ else {
+ var startRowEndCol = start[1] === end[1] ? end[0] : undefined;
+ result.push(this._buffer.translateBufferLineToString(start[1], true, start[0], startRowEndCol));
+ for (var i = start[1] + 1; i <= end[1] - 1; i++) {
+ var bufferLine = this._buffer.lines.get(i);
+ var lineText = this._buffer.translateBufferLineToString(i, true);
+ if (bufferLine.isWrapped) {
+ result[result.length - 1] += lineText;
+ }
+ else {
+ result.push(lineText);
+ }
+ }
+ if (start[1] !== end[1]) {
+ var bufferLine = this._buffer.lines.get(end[1]);
+ var lineText = this._buffer.translateBufferLineToString(end[1], true, 0, end[0]);
+ if (bufferLine.isWrapped) {
+ result[result.length - 1] += lineText;
+ }
+ else {
+ result.push(lineText);
+ }
+ }
+ }
+ var formattedResult = result.map(function (line) {
+ return line.replace(ALL_NON_BREAKING_SPACE_REGEX, ' ');
+ }).join(Browser.isMSWindows ? '\r\n' : '\n');
+ return formattedResult;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ SelectionManager.prototype.clearSelection = function () {
+ this._model.clearSelection();
+ this._removeMouseDownListeners();
+ this.refresh();
+ };
+ SelectionManager.prototype.refresh = function (isNewSelection) {
+ var _this = this;
+ if (!this._refreshAnimationFrame) {
+ this._refreshAnimationFrame = window.requestAnimationFrame(function () { return _this._refresh(); });
+ }
+ if (Browser.isLinux && isNewSelection) {
+ var selectionText = this.selectionText;
+ if (selectionText.length) {
+ this.emit('newselection', this.selectionText);
+ }
+ }
+ };
+ SelectionManager.prototype._refresh = function () {
+ this._refreshAnimationFrame = null;
+ this.emit('refresh', {
+ start: this._model.finalSelectionStart,
+ end: this._model.finalSelectionEnd,
+ columnSelectMode: this._activeSelectionMode === 3
+ });
+ };
+ SelectionManager.prototype.isClickInSelection = function (event) {
+ var coords = this._getMouseBufferCoords(event);
+ var start = this._model.finalSelectionStart;
+ var end = this._model.finalSelectionEnd;
+ if (!start || !end) {
+ return false;
+ }
+ return this._areCoordsInSelection(coords, start, end);
+ };
+ SelectionManager.prototype._areCoordsInSelection = function (coords, start, end) {
+ return (coords[1] > start[1] && coords[1] < end[1]) ||
+ (start[1] === end[1] && coords[1] === start[1] && coords[0] >= start[0] && coords[0] < end[0]) ||
+ (start[1] < end[1] && coords[1] === end[1] && coords[0] < end[0]) ||
+ (start[1] < end[1] && coords[1] === start[1] && coords[0] >= start[0]);
+ };
+ SelectionManager.prototype.selectWordAtCursor = function (event) {
+ var coords = this._getMouseBufferCoords(event);
+ if (coords) {
+ this._selectWordAt(coords, false);
+ this._model.selectionEnd = null;
+ this.refresh(true);
+ }
+ };
+ SelectionManager.prototype.selectAll = function () {
+ this._model.isSelectAllActive = true;
+ this.refresh();
+ this._terminal.emit('selection');
+ };
+ SelectionManager.prototype.selectLines = function (start, end) {
+ this._model.clearSelection();
+ start = Math.max(start, 0);
+ end = Math.min(end, this._terminal.buffer.lines.length - 1);
+ this._model.selectionStart = [0, start];
+ this._model.selectionEnd = [this._terminal.cols, end];
+ this.refresh();
+ this._terminal.emit('selection');
+ };
+ SelectionManager.prototype._onTrim = function (amount) {
+ var needsRefresh = this._model.onTrim(amount);
+ if (needsRefresh) {
+ this.refresh();
+ }
+ };
+ SelectionManager.prototype._getMouseBufferCoords = function (event) {
+ var coords = this._terminal.mouseHelper.getCoords(event, this._terminal.screenElement, this._charMeasure, this._terminal.cols, this._terminal.rows, true);
+ if (!coords) {
+ return null;
+ }
+ coords[0]--;
+ coords[1]--;
+ coords[1] += this._terminal.buffer.ydisp;
+ return coords;
+ };
+ SelectionManager.prototype._getMouseEventScrollAmount = function (event) {
+ var offset = MouseHelper_1.MouseHelper.getCoordsRelativeToElement(event, this._terminal.screenElement)[1];
+ var terminalHeight = this._terminal.rows * Math.ceil(this._charMeasure.height * this._terminal.options.lineHeight);
+ if (offset >= 0 && offset <= terminalHeight) {
+ return 0;
+ }
+ if (offset > terminalHeight) {
+ offset -= terminalHeight;
+ }
+ offset = Math.min(Math.max(offset, -DRAG_SCROLL_MAX_THRESHOLD), DRAG_SCROLL_MAX_THRESHOLD);
+ offset /= DRAG_SCROLL_MAX_THRESHOLD;
+ return (offset / Math.abs(offset)) + Math.round(offset * (DRAG_SCROLL_MAX_SPEED - 1));
+ };
+ SelectionManager.prototype.shouldForceSelection = function (event) {
+ if (Browser.isMac) {
+ return event.altKey && this._terminal.options.macOptionClickForcesSelection;
+ }
+ return event.shiftKey;
+ };
+ SelectionManager.prototype.onMouseDown = function (event) {
+ this._mouseDownTimeStamp = event.timeStamp;
+ if (event.button === 2 && this.hasSelection) {
+ return;
+ }
+ if (event.button !== 0) {
+ return;
+ }
+ if (!this._enabled) {
+ if (!this.shouldForceSelection(event)) {
+ return;
+ }
+ event.stopPropagation();
+ }
+ event.preventDefault();
+ this._dragScrollAmount = 0;
+ if (this._enabled && event.shiftKey) {
+ this._onIncrementalClick(event);
+ }
+ else {
+ if (event.detail === 1) {
+ this._onSingleClick(event);
+ }
+ else if (event.detail === 2) {
+ this._onDoubleClick(event);
+ }
+ else if (event.detail === 3) {
+ this._onTripleClick(event);
+ }
+ }
+ this._addMouseDownListeners();
+ this.refresh(true);
+ };
+ SelectionManager.prototype._addMouseDownListeners = function () {
+ var _this = this;
+ this._terminal.element.ownerDocument.addEventListener('mousemove', this._mouseMoveListener);
+ this._terminal.element.ownerDocument.addEventListener('mouseup', this._mouseUpListener);
+ this._dragScrollIntervalTimer = setInterval(function () { return _this._dragScroll(); }, DRAG_SCROLL_INTERVAL);
+ };
+ SelectionManager.prototype._removeMouseDownListeners = function () {
+ if (this._terminal.element.ownerDocument) {
+ this._terminal.element.ownerDocument.removeEventListener('mousemove', this._mouseMoveListener);
+ this._terminal.element.ownerDocument.removeEventListener('mouseup', this._mouseUpListener);
+ }
+ clearInterval(this._dragScrollIntervalTimer);
+ this._dragScrollIntervalTimer = null;
+ };
+ SelectionManager.prototype._onIncrementalClick = function (event) {
+ if (this._model.selectionStart) {
+ this._model.selectionEnd = this._getMouseBufferCoords(event);
+ }
+ };
+ SelectionManager.prototype._onSingleClick = function (event) {
+ this._model.selectionStartLength = 0;
+ this._model.isSelectAllActive = false;
+ this._activeSelectionMode = this.shouldColumnSelect(event) ? 3 : 0;
+ this._model.selectionStart = this._getMouseBufferCoords(event);
+ if (!this._model.selectionStart) {
+ return;
+ }
+ this._model.selectionEnd = null;
+ var line = this._buffer.lines.get(this._model.selectionStart[1]);
+ if (!line) {
+ return;
+ }
+ if (line.length >= this._model.selectionStart[0]) {
+ return;
+ }
+ var char = line.get(this._model.selectionStart[0]);
+ if (char[Buffer_1.CHAR_DATA_WIDTH_INDEX] === 0) {
+ this._model.selectionStart[0]++;
+ }
+ };
+ SelectionManager.prototype._onDoubleClick = function (event) {
+ var coords = this._getMouseBufferCoords(event);
+ if (coords) {
+ this._activeSelectionMode = 1;
+ this._selectWordAt(coords, true);
+ }
+ };
+ SelectionManager.prototype._onTripleClick = function (event) {
+ var coords = this._getMouseBufferCoords(event);
+ if (coords) {
+ this._activeSelectionMode = 2;
+ this._selectLineAt(coords[1]);
+ }
+ };
+ SelectionManager.prototype.shouldColumnSelect = function (event) {
+ return event.altKey && !(Browser.isMac && this._terminal.options.macOptionClickForcesSelection);
+ };
+ SelectionManager.prototype._onMouseMove = function (event) {
+ event.stopImmediatePropagation();
+ var previousSelectionEnd = this._model.selectionEnd ? [this._model.selectionEnd[0], this._model.selectionEnd[1]] : null;
+ this._model.selectionEnd = this._getMouseBufferCoords(event);
+ if (!this._model.selectionEnd) {
+ this.refresh(true);
+ return;
+ }
+ if (this._activeSelectionMode === 2) {
+ if (this._model.selectionEnd[1] < this._model.selectionStart[1]) {
+ this._model.selectionEnd[0] = 0;
+ }
+ else {
+ this._model.selectionEnd[0] = this._terminal.cols;
+ }
+ }
+ else if (this._activeSelectionMode === 1) {
+ this._selectToWordAt(this._model.selectionEnd);
+ }
+ this._dragScrollAmount = this._getMouseEventScrollAmount(event);
+ if (this._activeSelectionMode !== 3) {
+ if (this._dragScrollAmount > 0) {
+ this._model.selectionEnd[0] = this._terminal.cols;
+ }
+ else if (this._dragScrollAmount < 0) {
+ this._model.selectionEnd[0] = 0;
+ }
+ }
+ if (this._model.selectionEnd[1] < this._buffer.lines.length) {
+ var char = this._buffer.lines.get(this._model.selectionEnd[1]).get(this._model.selectionEnd[0]);
+ if (char && char[Buffer_1.CHAR_DATA_WIDTH_INDEX] === 0) {
+ this._model.selectionEnd[0]++;
+ }
+ }
+ if (!previousSelectionEnd ||
+ previousSelectionEnd[0] !== this._model.selectionEnd[0] ||
+ previousSelectionEnd[1] !== this._model.selectionEnd[1]) {
+ this.refresh(true);
+ }
+ };
+ SelectionManager.prototype._dragScroll = function () {
+ if (this._dragScrollAmount) {
+ this._terminal.scrollLines(this._dragScrollAmount, false);
+ if (this._dragScrollAmount > 0) {
+ if (this._activeSelectionMode !== 3) {
+ this._model.selectionEnd[0] = this._terminal.cols;
+ }
+ this._model.selectionEnd[1] = Math.min(this._terminal.buffer.ydisp + this._terminal.rows, this._terminal.buffer.lines.length - 1);
+ }
+ else {
+ if (this._activeSelectionMode !== 3) {
+ this._model.selectionEnd[0] = 0;
+ }
+ this._model.selectionEnd[1] = this._terminal.buffer.ydisp;
+ }
+ this.refresh();
+ }
+ };
+ SelectionManager.prototype._onMouseUp = function (event) {
+ var timeElapsed = event.timeStamp - this._mouseDownTimeStamp;
+ this._removeMouseDownListeners();
+ if (this.selectionText.length <= 1 && timeElapsed < ALT_CLICK_MOVE_CURSOR_TIME) {
+ (new AltClickHandler_1.AltClickHandler(event, this._terminal)).move();
+ }
+ else if (this.hasSelection) {
+ this._terminal.emit('selection');
+ }
+ };
+ SelectionManager.prototype._onBufferActivate = function (e) {
+ this.clearSelection();
+ e.inactiveBuffer.lines.off('trim', this._trimListener);
+ e.activeBuffer.lines.on('trim', this._trimListener);
+ };
+ SelectionManager.prototype._convertViewportColToCharacterIndex = function (bufferLine, coords) {
+ var charIndex = coords[0];
+ for (var i = 0; coords[0] >= i; i++) {
+ var char = bufferLine.get(i);
+ if (char[Buffer_1.CHAR_DATA_WIDTH_INDEX] === 0) {
+ charIndex--;
+ }
+ else if (char[Buffer_1.CHAR_DATA_CHAR_INDEX].length > 1 && coords[0] !== i) {
+ charIndex += char[Buffer_1.CHAR_DATA_CHAR_INDEX].length - 1;
+ }
+ }
+ return charIndex;
+ };
+ SelectionManager.prototype.setSelection = function (col, row, length) {
+ this._model.clearSelection();
+ this._removeMouseDownListeners();
+ this._model.selectionStart = [col, row];
+ this._model.selectionStartLength = length;
+ this.refresh();
+ };
+ SelectionManager.prototype._getWordAt = function (coords, allowWhitespaceOnlySelection, followWrappedLinesAbove, followWrappedLinesBelow) {
+ if (followWrappedLinesAbove === void 0) { followWrappedLinesAbove = true; }
+ if (followWrappedLinesBelow === void 0) { followWrappedLinesBelow = true; }
+ if (coords[0] >= this._terminal.cols) {
+ return null;
+ }
+ var bufferLine = this._buffer.lines.get(coords[1]);
+ if (!bufferLine) {
+ return null;
+ }
+ var line = this._buffer.translateBufferLineToString(coords[1], false);
+ var startIndex = this._convertViewportColToCharacterIndex(bufferLine, coords);
+ var endIndex = startIndex;
+ var charOffset = coords[0] - startIndex;
+ var leftWideCharCount = 0;
+ var rightWideCharCount = 0;
+ var leftLongCharOffset = 0;
+ var rightLongCharOffset = 0;
+ if (line.charAt(startIndex) === ' ') {
+ while (startIndex > 0 && line.charAt(startIndex - 1) === ' ') {
+ startIndex--;
+ }
+ while (endIndex < line.length && line.charAt(endIndex + 1) === ' ') {
+ endIndex++;
+ }
+ }
+ else {
+ var startCol = coords[0];
+ var endCol = coords[0];
+ if (bufferLine.get(startCol)[Buffer_1.CHAR_DATA_WIDTH_INDEX] === 0) {
+ leftWideCharCount++;
+ startCol--;
+ }
+ if (bufferLine.get(endCol)[Buffer_1.CHAR_DATA_WIDTH_INDEX] === 2) {
+ rightWideCharCount++;
+ endCol++;
+ }
+ if (bufferLine.get(endCol)[Buffer_1.CHAR_DATA_CHAR_INDEX].length > 1) {
+ rightLongCharOffset += bufferLine.get(endCol)[Buffer_1.CHAR_DATA_CHAR_INDEX].length - 1;
+ endIndex += bufferLine.get(endCol)[Buffer_1.CHAR_DATA_CHAR_INDEX].length - 1;
+ }
+ while (startCol > 0 && startIndex > 0 && !this._isCharWordSeparator(bufferLine.get(startCol - 1))) {
+ var char = bufferLine.get(startCol - 1);
+ if (char[Buffer_1.CHAR_DATA_WIDTH_INDEX] === 0) {
+ leftWideCharCount++;
+ startCol--;
+ }
+ else if (char[Buffer_1.CHAR_DATA_CHAR_INDEX].length > 1) {
+ leftLongCharOffset += char[Buffer_1.CHAR_DATA_CHAR_INDEX].length - 1;
+ startIndex -= char[Buffer_1.CHAR_DATA_CHAR_INDEX].length - 1;
+ }
+ startIndex--;
+ startCol--;
+ }
+ while (endCol < bufferLine.length && endIndex + 1 < line.length && !this._isCharWordSeparator(bufferLine.get(endCol + 1))) {
+ var char = bufferLine.get(endCol + 1);
+ if (char[Buffer_1.CHAR_DATA_WIDTH_INDEX] === 2) {
+ rightWideCharCount++;
+ endCol++;
+ }
+ else if (char[Buffer_1.CHAR_DATA_CHAR_INDEX].length > 1) {
+ rightLongCharOffset += char[Buffer_1.CHAR_DATA_CHAR_INDEX].length - 1;
+ endIndex += char[Buffer_1.CHAR_DATA_CHAR_INDEX].length - 1;
+ }
+ endIndex++;
+ endCol++;
+ }
+ }
+ endIndex++;
+ var start = startIndex
+ + charOffset
+ - leftWideCharCount
+ + leftLongCharOffset;
+ var length = Math.min(this._terminal.cols, endIndex
+ - startIndex
+ + leftWideCharCount
+ + rightWideCharCount
+ - leftLongCharOffset
+ - rightLongCharOffset);
+ if (!allowWhitespaceOnlySelection && line.slice(startIndex, endIndex).trim() === '') {
+ return null;
+ }
+ if (followWrappedLinesAbove) {
+ if (start === 0 && bufferLine.get(0)[Buffer_1.CHAR_DATA_CODE_INDEX] !== 32) {
+ var previousBufferLine = this._buffer.lines.get(coords[1] - 1);
+ if (previousBufferLine && bufferLine.isWrapped && previousBufferLine.get(this._terminal.cols - 1)[Buffer_1.CHAR_DATA_CODE_INDEX] !== 32) {
+ var previousLineWordPosition = this._getWordAt([this._terminal.cols - 1, coords[1] - 1], false, true, false);
+ if (previousLineWordPosition) {
+ var offset = this._terminal.cols - previousLineWordPosition.start;
+ start -= offset;
+ length += offset;
+ }
+ }
+ }
+ }
+ if (followWrappedLinesBelow) {
+ if (start + length === this._terminal.cols && bufferLine.get(this._terminal.cols - 1)[Buffer_1.CHAR_DATA_CODE_INDEX] !== 32) {
+ var nextBufferLine = this._buffer.lines.get(coords[1] + 1);
+ if (nextBufferLine && nextBufferLine.isWrapped && nextBufferLine.get(0)[Buffer_1.CHAR_DATA_CODE_INDEX] !== 32) {
+ var nextLineWordPosition = this._getWordAt([0, coords[1] + 1], false, false, true);
+ if (nextLineWordPosition) {
+ length += nextLineWordPosition.length;
+ }
+ }
+ }
+ }
+ return { start: start, length: length };
+ };
+ SelectionManager.prototype._selectWordAt = function (coords, allowWhitespaceOnlySelection) {
+ var wordPosition = this._getWordAt(coords, allowWhitespaceOnlySelection);
+ if (wordPosition) {
+ while (wordPosition.start < 0) {
+ wordPosition.start += this._terminal.cols;
+ coords[1]--;
+ }
+ this._model.selectionStart = [wordPosition.start, coords[1]];
+ this._model.selectionStartLength = wordPosition.length;
+ }
+ };
+ SelectionManager.prototype._selectToWordAt = function (coords) {
+ var wordPosition = this._getWordAt(coords, true);
+ if (wordPosition) {
+ var endRow = coords[1];
+ while (wordPosition.start < 0) {
+ wordPosition.start += this._terminal.cols;
+ endRow--;
+ }
+ if (!this._model.areSelectionValuesReversed()) {
+ while (wordPosition.start + wordPosition.length > this._terminal.cols) {
+ wordPosition.length -= this._terminal.cols;
+ endRow++;
+ }
+ }
+ this._model.selectionEnd = [this._model.areSelectionValuesReversed() ? wordPosition.start : wordPosition.start + wordPosition.length, endRow];
+ }
+ };
+ SelectionManager.prototype._isCharWordSeparator = function (charData) {
+ if (charData[Buffer_1.CHAR_DATA_WIDTH_INDEX] === 0) {
+ return false;
+ }
+ return WORD_SEPARATORS.indexOf(charData[Buffer_1.CHAR_DATA_CHAR_INDEX]) >= 0;
+ };
+ SelectionManager.prototype._selectLineAt = function (line) {
+ var wrappedRange = this._buffer.getWrappedRangeForLine(line);
+ this._model.selectionStart = [0, wrappedRange.first];
+ this._model.selectionEnd = [this._terminal.cols, wrappedRange.last];
+ this._model.selectionStartLength = 0;
+ };
+ return SelectionManager;
+}(EventEmitter_1.EventEmitter));
+exports.SelectionManager = SelectionManager;
+
+},{"./Buffer":2,"./SelectionModel":12,"./common/EventEmitter":19,"./core/Platform":23,"./handlers/AltClickHandler":27,"./ui/MouseHelper":52}],12:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var SelectionModel = (function () {
+ function SelectionModel(_terminal) {
+ this._terminal = _terminal;
+ this.clearSelection();
+ }
+ SelectionModel.prototype.clearSelection = function () {
+ this.selectionStart = null;
+ this.selectionEnd = null;
+ this.isSelectAllActive = false;
+ this.selectionStartLength = 0;
+ };
+ Object.defineProperty(SelectionModel.prototype, "finalSelectionStart", {
+ get: function () {
+ if (this.isSelectAllActive) {
+ return [0, 0];
+ }
+ if (!this.selectionEnd || !this.selectionStart) {
+ return this.selectionStart;
+ }
+ return this.areSelectionValuesReversed() ? this.selectionEnd : this.selectionStart;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(SelectionModel.prototype, "finalSelectionEnd", {
+ get: function () {
+ if (this.isSelectAllActive) {
+ return [this._terminal.cols, this._terminal.buffer.ybase + this._terminal.rows - 1];
+ }
+ if (!this.selectionStart) {
+ return null;
+ }
+ if (!this.selectionEnd || this.areSelectionValuesReversed()) {
+ var startPlusLength = this.selectionStart[0] + this.selectionStartLength;
+ if (startPlusLength > this._terminal.cols) {
+ return [startPlusLength % this._terminal.cols, this.selectionStart[1] + Math.floor(startPlusLength / this._terminal.cols)];
+ }
+ return [startPlusLength, this.selectionStart[1]];
+ }
+ if (this.selectionStartLength) {
+ if (this.selectionEnd[1] === this.selectionStart[1]) {
+ return [Math.max(this.selectionStart[0] + this.selectionStartLength, this.selectionEnd[0]), this.selectionEnd[1]];
+ }
+ }
+ return this.selectionEnd;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ SelectionModel.prototype.areSelectionValuesReversed = function () {
+ var start = this.selectionStart;
+ var end = this.selectionEnd;
+ if (!start || !end) {
+ return false;
+ }
+ return start[1] > end[1] || (start[1] === end[1] && start[0] > end[0]);
+ };
+ SelectionModel.prototype.onTrim = function (amount) {
+ if (this.selectionStart) {
+ this.selectionStart[1] -= amount;
+ }
+ if (this.selectionEnd) {
+ this.selectionEnd[1] -= amount;
+ }
+ if (this.selectionEnd && this.selectionEnd[1] < 0) {
+ this.clearSelection();
+ return true;
+ }
+ if (this.selectionStart && this.selectionStart[1] < 0) {
+ this.selectionStart[1] = 0;
+ }
+ return false;
+ };
+ return SelectionModel;
+}());
+exports.SelectionModel = SelectionModel;
+
+},{}],13:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.DEFAULT_BELL_SOUND = 'data:audio/wav;base64,UklGRigBAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YQQBAADpAFgCwAMlBZoG/wdmCcoKRAypDQ8PbRDBEQQTOxRtFYcWlBePGIUZXhoiG88bcBz7HHIdzh0WHlMeZx51HmkeUx4WHs8dah0AHXwc3hs9G4saxRnyGBIYGBcQFv8U4RPAEoYRQBACD70NWwwHC6gJOwjWBloF7gOBAhABkf8b/qv8R/ve+Xf4Ife79W/0JfPZ8Z/wde9N7ijtE+wU6xvqM+lb6H7nw+YX5mrlxuQz5Mzje+Ma49fioeKD4nXiYeJy4pHitOL04j/jn+MN5IPkFOWs5U3mDefM55/ogOl36m7rdOyE7abuyu8D8Unyj/Pg9D/2qfcb+Yn6/vuK/Qj/lAAlAg==';
+var SoundManager = (function () {
+ function SoundManager(_terminal) {
+ this._terminal = _terminal;
+ }
+ Object.defineProperty(SoundManager, "audioContext", {
+ get: function () {
+ if (!SoundManager._audioContext) {
+ var audioContextCtor = window.AudioContext || window.webkitAudioContext;
+ if (!audioContextCtor) {
+ console.warn('Web Audio API is not supported by this browser. Consider upgrading to the latest version');
+ return null;
+ }
+ SoundManager._audioContext = new audioContextCtor();
+ }
+ return SoundManager._audioContext;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ SoundManager.prototype.playBellSound = function () {
+ var ctx = SoundManager.audioContext;
+ if (!ctx) {
+ return;
+ }
+ var bellAudioSource = ctx.createBufferSource();
+ ctx.decodeAudioData(this._base64ToArrayBuffer(this._removeMimeType(this._terminal.options.bellSound)), function (buffer) {
+ bellAudioSource.buffer = buffer;
+ bellAudioSource.connect(ctx.destination);
+ bellAudioSource.start(0);
+ });
+ };
+ SoundManager.prototype._base64ToArrayBuffer = function (base64) {
+ var binaryString = window.atob(base64);
+ var len = binaryString.length;
+ var bytes = new Uint8Array(len);
+ for (var i = 0; i < len; i++) {
+ bytes[i] = binaryString.charCodeAt(i);
+ }
+ return bytes.buffer;
+ };
+ SoundManager.prototype._removeMimeType = function (dataURI) {
+ var splitUri = dataURI.split(',');
+ return splitUri[1];
+ };
+ return SoundManager;
+}());
+exports.SoundManager = SoundManager;
+
+},{}],14:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.blankLine = 'Blank line';
+exports.promptLabel = 'Terminal input';
+exports.tooMuchOutput = 'Too much output to announce, navigate to rows manually to read';
+
+},{}],15:[function(require,module,exports){
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ }
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var BufferSet_1 = require("./BufferSet");
+var Buffer_1 = require("./Buffer");
+var CompositionHelper_1 = require("./CompositionHelper");
+var EventEmitter_1 = require("./common/EventEmitter");
+var Viewport_1 = require("./Viewport");
+var Clipboard_1 = require("./ui/Clipboard");
+var EscapeSequences_1 = require("./common/data/EscapeSequences");
+var InputHandler_1 = require("./InputHandler");
+var Renderer_1 = require("./renderer/Renderer");
+var Linkifier_1 = require("./Linkifier");
+var SelectionManager_1 = require("./SelectionManager");
+var CharMeasure_1 = require("./ui/CharMeasure");
+var Browser = require("./core/Platform");
+var Lifecycle_1 = require("./ui/Lifecycle");
+var Strings = require("./Strings");
+var MouseHelper_1 = require("./ui/MouseHelper");
+var SoundManager_1 = require("./SoundManager");
+var ColorManager_1 = require("./renderer/ColorManager");
+var MouseZoneManager_1 = require("./ui/MouseZoneManager");
+var AccessibilityManager_1 = require("./AccessibilityManager");
+var ScreenDprMonitor_1 = require("./ui/ScreenDprMonitor");
+var CharAtlasCache_1 = require("./renderer/atlas/CharAtlasCache");
+var DomRenderer_1 = require("./renderer/dom/DomRenderer");
+var Keyboard_1 = require("./core/input/Keyboard");
+var Clone_1 = require("./common/Clone");
+var document = (typeof window !== 'undefined') ? window.document : null;
+var WRITE_BUFFER_PAUSE_THRESHOLD = 5;
+var WRITE_TIMEOUT_MS = 12;
+var MINIMUM_COLS = 2;
+var MINIMUM_ROWS = 1;
+var CONSTRUCTOR_ONLY_OPTIONS = ['cols', 'rows'];
+var DEFAULT_OPTIONS = {
+ cols: 80,
+ rows: 24,
+ convertEol: false,
+ termName: 'xterm',
+ cursorBlink: false,
+ cursorStyle: 'block',
+ bellSound: SoundManager_1.DEFAULT_BELL_SOUND,
+ bellStyle: 'none',
+ drawBoldTextInBrightColors: true,
+ enableBold: true,
+ experimentalCharAtlas: 'static',
+ fontFamily: 'courier-new, courier, monospace',
+ fontSize: 15,
+ fontWeight: 'normal',
+ fontWeightBold: 'bold',
+ lineHeight: 1.0,
+ letterSpacing: 0,
+ scrollback: 1000,
+ screenKeys: false,
+ screenReaderMode: false,
+ debug: false,
+ macOptionIsMeta: false,
+ macOptionClickForcesSelection: false,
+ cancelEvents: false,
+ disableStdin: false,
+ useFlowControl: false,
+ allowTransparency: false,
+ tabStopWidth: 8,
+ theme: null,
+ rightClickSelectsWord: Browser.isMac,
+ rendererType: 'canvas'
+};
+var Terminal = (function (_super) {
+ __extends(Terminal, _super);
+ function Terminal(options) {
+ if (options === void 0) { options = {}; }
+ var _this = _super.call(this) || this;
+ _this.browser = Browser;
+ _this._blankLine = null;
+ _this.options = Clone_1.clone(options);
+ _this._setup();
+ return _this;
+ }
+ Terminal.prototype.dispose = function () {
+ _super.prototype.dispose.call(this);
+ this._customKeyEventHandler = null;
+ CharAtlasCache_1.removeTerminalFromCache(this);
+ this.handler = function () { };
+ this.write = function () { };
+ if (this.element && this.element.parentNode) {
+ this.element.parentNode.removeChild(this.element);
+ }
+ };
+ Terminal.prototype.destroy = function () {
+ this.dispose();
+ };
+ Terminal.prototype._setup = function () {
+ var _this = this;
+ Object.keys(DEFAULT_OPTIONS).forEach(function (key) {
+ if (_this.options[key] === null || _this.options[key] === undefined) {
+ _this.options[key] = DEFAULT_OPTIONS[key];
+ }
+ });
+ this._parent = document ? document.body : null;
+ this.cols = Math.max(this.options.cols, MINIMUM_COLS);
+ this.rows = Math.max(this.options.rows, MINIMUM_ROWS);
+ if (this.options.handler) {
+ this.on('data', this.options.handler);
+ }
+ this.cursorState = 0;
+ this.cursorHidden = false;
+ this._customKeyEventHandler = null;
+ this.applicationKeypad = false;
+ this.applicationCursor = false;
+ this.originMode = false;
+ this.insertMode = false;
+ this.wraparoundMode = true;
+ this.bracketedPasteMode = false;
+ this.charset = null;
+ this.gcharset = null;
+ this.glevel = 0;
+ this.charsets = [null];
+ this.curAttr = Buffer_1.DEFAULT_ATTR;
+ this.params = [];
+ this.currentParam = 0;
+ this.writeBuffer = [];
+ this._writeInProgress = false;
+ this._xoffSentToCatchUp = false;
+ this._userScrolling = false;
+ this._inputHandler = new InputHandler_1.InputHandler(this);
+ this.register(this._inputHandler);
+ this.renderer = this.renderer || null;
+ this.selectionManager = this.selectionManager || null;
+ this.linkifier = this.linkifier || new Linkifier_1.Linkifier(this);
+ this._mouseZoneManager = this._mouseZoneManager || null;
+ this.soundManager = this.soundManager || new SoundManager_1.SoundManager(this);
+ this.buffers = new BufferSet_1.BufferSet(this);
+ if (this.selectionManager) {
+ this.selectionManager.clearSelection();
+ this.selectionManager.initBuffersListeners();
+ }
+ };
+ Object.defineProperty(Terminal.prototype, "buffer", {
+ get: function () {
+ return this.buffers.active;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Terminal.prototype.eraseAttr = function () {
+ return (Buffer_1.DEFAULT_ATTR & ~0x1ff) | (this.curAttr & 0x1ff);
+ };
+ Terminal.prototype.focus = function () {
+ if (this.textarea) {
+ this.textarea.focus();
+ }
+ };
+ Object.defineProperty(Terminal.prototype, "isFocused", {
+ get: function () {
+ return document.activeElement === this.textarea && document.hasFocus();
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Terminal.prototype.getOption = function (key) {
+ if (!(key in DEFAULT_OPTIONS)) {
+ throw new Error('No option with key "' + key + '"');
+ }
+ return this.options[key];
+ };
+ Terminal.prototype.setOption = function (key, value) {
+ if (!(key in DEFAULT_OPTIONS)) {
+ throw new Error('No option with key "' + key + '"');
+ }
+ if (CONSTRUCTOR_ONLY_OPTIONS.indexOf(key) !== -1) {
+ console.error("Option \"" + key + "\" can only be set in the constructor");
+ }
+ if (this.options[key] === value) {
+ return;
+ }
+ switch (key) {
+ case 'bellStyle':
+ if (!value) {
+ value = 'none';
+ }
+ break;
+ case 'cursorStyle':
+ if (!value) {
+ value = 'block';
+ }
+ break;
+ case 'fontWeight':
+ if (!value) {
+ value = 'normal';
+ }
+ break;
+ case 'fontWeightBold':
+ if (!value) {
+ value = 'bold';
+ }
+ break;
+ case 'lineHeight':
+ if (value < 1) {
+ console.warn(key + " cannot be less than 1, value: " + value);
+ return;
+ }
+ case 'rendererType':
+ if (!value) {
+ value = 'canvas';
+ }
+ break;
+ case 'tabStopWidth':
+ if (value < 1) {
+ console.warn(key + " cannot be less than 1, value: " + value);
+ return;
+ }
+ break;
+ case 'theme':
+ if (this.renderer) {
+ this._setTheme(value);
+ return;
+ }
+ break;
+ case 'scrollback':
+ value = Math.min(value, Buffer_1.MAX_BUFFER_SIZE);
+ if (value < 0) {
+ console.warn(key + " cannot be less than 0, value: " + value);
+ return;
+ }
+ if (this.options[key] !== value) {
+ var newBufferLength = this.rows + value;
+ if (this.buffer.lines.length > newBufferLength) {
+ var amountToTrim = this.buffer.lines.length - newBufferLength;
+ var needsRefresh = (this.buffer.ydisp - amountToTrim < 0);
+ this.buffer.lines.trimStart(amountToTrim);
+ this.buffer.ybase = Math.max(this.buffer.ybase - amountToTrim, 0);
+ this.buffer.ydisp = Math.max(this.buffer.ydisp - amountToTrim, 0);
+ if (needsRefresh) {
+ this.refresh(0, this.rows - 1);
+ }
+ }
+ }
+ break;
+ }
+ this.options[key] = value;
+ switch (key) {
+ case 'fontFamily':
+ case 'fontSize':
+ if (this.renderer) {
+ this.renderer.clear();
+ this.charMeasure.measure(this.options);
+ }
+ break;
+ case 'drawBoldTextInBrightColors':
+ case 'experimentalCharAtlas':
+ case 'enableBold':
+ case 'letterSpacing':
+ case 'lineHeight':
+ case 'fontWeight':
+ case 'fontWeightBold':
+ if (this.renderer) {
+ this.renderer.clear();
+ this.renderer.onResize(this.cols, this.rows);
+ this.refresh(0, this.rows - 1);
+ }
+ break;
+ case 'rendererType':
+ if (this.renderer) {
+ this.unregister(this.renderer);
+ this.renderer.dispose();
+ this.renderer = null;
+ }
+ this._setupRenderer();
+ this.renderer.onCharSizeChanged();
+ if (this._theme) {
+ this.renderer.setTheme(this._theme);
+ }
+ this.mouseHelper.setRenderer(this.renderer);
+ break;
+ case 'scrollback':
+ this.buffers.resize(this.cols, this.rows);
+ if (this.viewport) {
+ this.viewport.syncScrollArea();
+ }
+ break;
+ case 'screenReaderMode':
+ if (value) {
+ if (!this._accessibilityManager) {
+ this._accessibilityManager = new AccessibilityManager_1.AccessibilityManager(this);
+ }
+ }
+ else {
+ if (this._accessibilityManager) {
+ this._accessibilityManager.dispose();
+ this._accessibilityManager = null;
+ }
+ }
+ break;
+ case 'tabStopWidth':
+ this.buffers.setupTabStops();
+ break;
+ }
+ if (this.renderer) {
+ this.renderer.onOptionsChanged();
+ }
+ };
+ Terminal.prototype._onTextAreaFocus = function (ev) {
+ if (this.sendFocus) {
+ this.handler(EscapeSequences_1.C0.ESC + '[I');
+ }
+ this.updateCursorStyle(ev);
+ this.element.classList.add('focus');
+ this.showCursor();
+ this.emit('focus');
+ };
+ Terminal.prototype.blur = function () {
+ return this.textarea.blur();
+ };
+ Terminal.prototype._onTextAreaBlur = function () {
+ this.textarea.value = '';
+ this.refresh(this.buffer.y, this.buffer.y);
+ if (this.sendFocus) {
+ this.handler(EscapeSequences_1.C0.ESC + '[O');
+ }
+ this.element.classList.remove('focus');
+ this.emit('blur');
+ };
+ Terminal.prototype._initGlobal = function () {
+ var _this = this;
+ this._bindKeys();
+ this.register(Lifecycle_1.addDisposableDomListener(this.element, 'copy', function (event) {
+ if (!_this.hasSelection()) {
+ return;
+ }
+ Clipboard_1.copyHandler(event, _this, _this.selectionManager);
+ }));
+ var pasteHandlerWrapper = function (event) { return Clipboard_1.pasteHandler(event, _this); };
+ this.register(Lifecycle_1.addDisposableDomListener(this.textarea, 'paste', pasteHandlerWrapper));
+ this.register(Lifecycle_1.addDisposableDomListener(this.element, 'paste', pasteHandlerWrapper));
+ if (Browser.isFirefox) {
+ this.register(Lifecycle_1.addDisposableDomListener(this.element, 'mousedown', function (event) {
+ if (event.button === 2) {
+ Clipboard_1.rightClickHandler(event, _this, _this.selectionManager, _this.options.rightClickSelectsWord);
+ }
+ }));
+ }
+ else {
+ this.register(Lifecycle_1.addDisposableDomListener(this.element, 'contextmenu', function (event) {
+ Clipboard_1.rightClickHandler(event, _this, _this.selectionManager, _this.options.rightClickSelectsWord);
+ }));
+ }
+ if (Browser.isLinux) {
+ this.register(Lifecycle_1.addDisposableDomListener(this.element, 'auxclick', function (event) {
+ if (event.button === 1) {
+ Clipboard_1.moveTextAreaUnderMouseCursor(event, _this);
+ }
+ }));
+ }
+ };
+ Terminal.prototype._bindKeys = function () {
+ var _this = this;
+ var self = this;
+ this.register(Lifecycle_1.addDisposableDomListener(this.element, 'keydown', function (ev) {
+ if (document.activeElement !== this) {
+ return;
+ }
+ self._keyDown(ev);
+ }, true));
+ this.register(Lifecycle_1.addDisposableDomListener(this.element, 'keypress', function (ev) {
+ if (document.activeElement !== this) {
+ return;
+ }
+ self._keyPress(ev);
+ }, true));
+ this.register(Lifecycle_1.addDisposableDomListener(this.element, 'keyup', function (ev) {
+ if (!wasModifierKeyOnlyEvent(ev)) {
+ _this.focus();
+ }
+ self._keyUp(ev);
+ }, true));
+ this.register(Lifecycle_1.addDisposableDomListener(this.textarea, 'keydown', function (ev) { return _this._keyDown(ev); }, true));
+ this.register(Lifecycle_1.addDisposableDomListener(this.textarea, 'keypress', function (ev) { return _this._keyPress(ev); }, true));
+ this.register(Lifecycle_1.addDisposableDomListener(this.textarea, 'compositionstart', function () { return _this._compositionHelper.compositionstart(); }));
+ this.register(Lifecycle_1.addDisposableDomListener(this.textarea, 'compositionupdate', function (e) { return _this._compositionHelper.compositionupdate(e); }));
+ this.register(Lifecycle_1.addDisposableDomListener(this.textarea, 'compositionend', function () { return _this._compositionHelper.compositionend(); }));
+ this.register(this.addDisposableListener('refresh', function () { return _this._compositionHelper.updateCompositionElements(); }));
+ this.register(this.addDisposableListener('refresh', function (data) { return _this._queueLinkification(data.start, data.end); }));
+ };
+ Terminal.prototype.open = function (parent) {
+ var _this = this;
+ this._parent = parent || this._parent;
+ if (!this._parent) {
+ throw new Error('Terminal requires a parent element.');
+ }
+ this._context = this._parent.ownerDocument.defaultView;
+ this._document = this._parent.ownerDocument;
+ this._screenDprMonitor = new ScreenDprMonitor_1.ScreenDprMonitor();
+ this._screenDprMonitor.setListener(function () { return _this.emit('dprchange', window.devicePixelRatio); });
+ this.register(this._screenDprMonitor);
+ this.element = this._document.createElement('div');
+ this.element.dir = 'ltr';
+ this.element.classList.add('terminal');
+ this.element.classList.add('xterm');
+ this.element.setAttribute('tabindex', '0');
+ this._parent.appendChild(this.element);
+ var fragment = document.createDocumentFragment();
+ this._viewportElement = document.createElement('div');
+ this._viewportElement.classList.add('xterm-viewport');
+ fragment.appendChild(this._viewportElement);
+ this._viewportScrollArea = document.createElement('div');
+ this._viewportScrollArea.classList.add('xterm-scroll-area');
+ this._viewportElement.appendChild(this._viewportScrollArea);
+ this.screenElement = document.createElement('div');
+ this.screenElement.classList.add('xterm-screen');
+ this._helperContainer = document.createElement('div');
+ this._helperContainer.classList.add('xterm-helpers');
+ this.screenElement.appendChild(this._helperContainer);
+ fragment.appendChild(this.screenElement);
+ this._mouseZoneManager = new MouseZoneManager_1.MouseZoneManager(this);
+ this.register(this._mouseZoneManager);
+ this.register(this.addDisposableListener('scroll', function () { return _this._mouseZoneManager.clearAll(); }));
+ this.linkifier.attachToDom(this._mouseZoneManager);
+ this.textarea = document.createElement('textarea');
+ this.textarea.classList.add('xterm-helper-textarea');
+ this.textarea.setAttribute('aria-label', Strings.promptLabel);
+ this.textarea.setAttribute('aria-multiline', 'false');
+ this.textarea.setAttribute('autocorrect', 'off');
+ this.textarea.setAttribute('autocapitalize', 'off');
+ this.textarea.setAttribute('spellcheck', 'false');
+ this.textarea.tabIndex = 0;
+ this.register(Lifecycle_1.addDisposableDomListener(this.textarea, 'focus', function (ev) { return _this._onTextAreaFocus(ev); }));
+ this.register(Lifecycle_1.addDisposableDomListener(this.textarea, 'blur', function () { return _this._onTextAreaBlur(); }));
+ this._helperContainer.appendChild(this.textarea);
+ this._compositionView = document.createElement('div');
+ this._compositionView.classList.add('composition-view');
+ this._compositionHelper = new CompositionHelper_1.CompositionHelper(this.textarea, this._compositionView, this);
+ this._helperContainer.appendChild(this._compositionView);
+ this.charMeasure = new CharMeasure_1.CharMeasure(document, this._helperContainer);
+ this.element.appendChild(fragment);
+ this._setupRenderer();
+ this._theme = this.options.theme;
+ this.options.theme = null;
+ this.viewport = new Viewport_1.Viewport(this, this._viewportElement, this._viewportScrollArea, this.charMeasure);
+ this.viewport.onThemeChanged(this.renderer.colorManager.colors);
+ this.register(this.viewport);
+ this.register(this.addDisposableListener('cursormove', function () { return _this.renderer.onCursorMove(); }));
+ this.register(this.addDisposableListener('resize', function () { return _this.renderer.onResize(_this.cols, _this.rows); }));
+ this.register(this.addDisposableListener('blur', function () { return _this.renderer.onBlur(); }));
+ this.register(this.addDisposableListener('focus', function () { return _this.renderer.onFocus(); }));
+ this.register(this.addDisposableListener('dprchange', function () { return _this.renderer.onWindowResize(window.devicePixelRatio); }));
+ this.register(Lifecycle_1.addDisposableDomListener(window, 'resize', function () { return _this.renderer.onWindowResize(window.devicePixelRatio); }));
+ this.register(this.charMeasure.addDisposableListener('charsizechanged', function () { return _this.renderer.onCharSizeChanged(); }));
+ this.register(this.renderer.addDisposableListener('resize', function (dimensions) { return _this.viewport.syncScrollArea(); }));
+ this.selectionManager = new SelectionManager_1.SelectionManager(this, this.charMeasure);
+ this.register(Lifecycle_1.addDisposableDomListener(this.element, 'mousedown', function (e) { return _this.selectionManager.onMouseDown(e); }));
+ this.register(this.selectionManager.addDisposableListener('refresh', function (data) { return _this.renderer.onSelectionChanged(data.start, data.end, data.columnSelectMode); }));
+ this.register(this.selectionManager.addDisposableListener('newselection', function (text) {
+ _this.textarea.value = text;
+ _this.textarea.focus();
+ _this.textarea.select();
+ }));
+ this.register(this.addDisposableListener('scroll', function () {
+ _this.viewport.syncScrollArea();
+ _this.selectionManager.refresh();
+ }));
+ this.register(Lifecycle_1.addDisposableDomListener(this._viewportElement, 'scroll', function () { return _this.selectionManager.refresh(); }));
+ this.mouseHelper = new MouseHelper_1.MouseHelper(this.renderer);
+ this.element.classList.toggle('enable-mouse-events', this.mouseEvents);
+ if (this.mouseEvents) {
+ this.selectionManager.disable();
+ }
+ else {
+ this.selectionManager.enable();
+ }
+ if (this.options.screenReaderMode) {
+ this._accessibilityManager = new AccessibilityManager_1.AccessibilityManager(this);
+ }
+ this.charMeasure.measure(this.options);
+ this.refresh(0, this.rows - 1);
+ this._initGlobal();
+ this.bindMouse();
+ };
+ Terminal.prototype._setupRenderer = function () {
+ switch (this.options.rendererType) {
+ case 'canvas':
+ this.renderer = new Renderer_1.Renderer(this, this.options.theme);
+ break;
+ case 'dom':
+ this.renderer = new DomRenderer_1.DomRenderer(this, this.options.theme);
+ break;
+ default: throw new Error("Unrecognized rendererType \"" + this.options.rendererType + "\"");
+ }
+ this.register(this.renderer);
+ };
+ Terminal.prototype._setTheme = function (theme) {
+ this._theme = theme;
+ var colors = this.renderer.setTheme(theme);
+ if (this.viewport) {
+ this.viewport.onThemeChanged(colors);
+ }
+ };
+ Terminal.prototype.bindMouse = function () {
+ var _this = this;
+ var el = this.element;
+ var self = this;
+ var pressed = 32;
+ function sendButton(ev) {
+ var button;
+ var pos;
+ button = getButton(ev);
+ pos = self.mouseHelper.getRawByteCoords(ev, self.screenElement, self.charMeasure, self.cols, self.rows);
+ if (!pos)
+ return;
+ sendEvent(button, pos);
+ switch (ev.overrideType || ev.type) {
+ case 'mousedown':
+ pressed = button;
+ break;
+ case 'mouseup':
+ pressed = 32;
+ break;
+ case 'wheel':
+ break;
+ }
+ }
+ function sendMove(ev) {
+ var button = pressed;
+ var pos = self.mouseHelper.getRawByteCoords(ev, self.screenElement, self.charMeasure, self.cols, self.rows);
+ if (!pos)
+ return;
+ button += 32;
+ sendEvent(button, pos);
+ }
+ function encode(data, ch) {
+ if (!self.utfMouse) {
+ if (ch === 255) {
+ data.push(0);
+ return;
+ }
+ if (ch > 127)
+ ch = 127;
+ data.push(ch);
+ }
+ else {
+ if (ch === 2047) {
+ data.push(0);
+ return;
+ }
+ if (ch < 127) {
+ data.push(ch);
+ }
+ else {
+ if (ch > 2047)
+ ch = 2047;
+ data.push(0xC0 | (ch >> 6));
+ data.push(0x80 | (ch & 0x3F));
+ }
+ }
+ }
+ function sendEvent(button, pos) {
+ if (self._vt300Mouse) {
+ button &= 3;
+ pos.x -= 32;
+ pos.y -= 32;
+ var data_1 = EscapeSequences_1.C0.ESC + '[24';
+ if (button === 0)
+ data_1 += '1';
+ else if (button === 1)
+ data_1 += '3';
+ else if (button === 2)
+ data_1 += '5';
+ else if (button === 3)
+ return;
+ else
+ data_1 += '0';
+ data_1 += '~[' + pos.x + ',' + pos.y + ']\r';
+ self.handler(data_1);
+ return;
+ }
+ if (self._decLocator) {
+ button &= 3;
+ pos.x -= 32;
+ pos.y -= 32;
+ if (button === 0)
+ button = 2;
+ else if (button === 1)
+ button = 4;
+ else if (button === 2)
+ button = 6;
+ else if (button === 3)
+ button = 3;
+ self.handler(EscapeSequences_1.C0.ESC + '['
+ + button
+ + ';'
+ + (button === 3 ? 4 : 0)
+ + ';'
+ + pos.y
+ + ';'
+ + pos.x
+ + ';'
+ + pos.page || 0
+ + '&w');
+ return;
+ }
+ if (self.urxvtMouse) {
+ pos.x -= 32;
+ pos.y -= 32;
+ pos.x++;
+ pos.y++;
+ self.handler(EscapeSequences_1.C0.ESC + '[' + button + ';' + pos.x + ';' + pos.y + 'M');
+ return;
+ }
+ if (self.sgrMouse) {
+ pos.x -= 32;
+ pos.y -= 32;
+ self.handler(EscapeSequences_1.C0.ESC + '[<'
+ + (((button & 3) === 3 ? button & ~3 : button) - 32)
+ + ';'
+ + pos.x
+ + ';'
+ + pos.y
+ + ((button & 3) === 3 ? 'm' : 'M'));
+ return;
+ }
+ var data = [];
+ encode(data, button);
+ encode(data, pos.x);
+ encode(data, pos.y);
+ self.handler(EscapeSequences_1.C0.ESC + '[M' + String.fromCharCode.apply(String, data));
+ }
+ function getButton(ev) {
+ var button;
+ var shift;
+ var meta;
+ var ctrl;
+ var mod;
+ switch (ev.overrideType || ev.type) {
+ case 'mousedown':
+ button = ev.button !== null && ev.button !== undefined
+ ? +ev.button
+ : ev.which !== null && ev.which !== undefined
+ ? ev.which - 1
+ : null;
+ if (Browser.isMSIE) {
+ button = button === 1 ? 0 : button === 4 ? 1 : button;
+ }
+ break;
+ case 'mouseup':
+ button = 3;
+ break;
+ case 'DOMMouseScroll':
+ button = ev.detail < 0
+ ? 64
+ : 65;
+ break;
+ case 'wheel':
+ button = ev.deltaY < 0
+ ? 64
+ : 65;
+ break;
+ }
+ shift = ev.shiftKey ? 4 : 0;
+ meta = ev.metaKey ? 8 : 0;
+ ctrl = ev.ctrlKey ? 16 : 0;
+ mod = shift | meta | ctrl;
+ if (self.vt200Mouse) {
+ mod &= ctrl;
+ }
+ else if (!self.normalMouse) {
+ mod = 0;
+ }
+ button = (32 + (mod << 2)) + button;
+ return button;
+ }
+ this.register(Lifecycle_1.addDisposableDomListener(el, 'mousedown', function (ev) {
+ ev.preventDefault();
+ _this.focus();
+ if (!_this.mouseEvents || _this.selectionManager.shouldForceSelection(ev)) {
+ return;
+ }
+ sendButton(ev);
+ if (_this.vt200Mouse) {
+ ev.overrideType = 'mouseup';
+ sendButton(ev);
+ return _this.cancel(ev);
+ }
+ var moveHandler;
+ if (_this.normalMouse) {
+ moveHandler = function (event) {
+ if (!_this.normalMouse) {
+ return;
+ }
+ sendMove(event);
+ };
+ _this._document.addEventListener('mousemove', moveHandler);
+ }
+ var handler = function (ev) {
+ if (_this.normalMouse && !_this.x10Mouse) {
+ sendButton(ev);
+ }
+ if (moveHandler) {
+ _this._document.removeEventListener('mousemove', moveHandler);
+ moveHandler = null;
+ }
+ _this._document.removeEventListener('mouseup', handler);
+ return _this.cancel(ev);
+ };
+ _this._document.addEventListener('mouseup', handler);
+ return _this.cancel(ev);
+ }));
+ this.register(Lifecycle_1.addDisposableDomListener(el, 'wheel', function (ev) {
+ if (!_this.mouseEvents) {
+ if (!_this.buffer.hasScrollback) {
+ var amount = _this.viewport.getLinesScrolled(ev);
+ if (amount === 0) {
+ return;
+ }
+ var sequence = EscapeSequences_1.C0.ESC + (_this.applicationCursor ? 'O' : '[') + (ev.deltaY < 0 ? 'A' : 'B');
+ var data = '';
+ for (var i = 0; i < Math.abs(amount); i++) {
+ data += sequence;
+ }
+ _this.handler(data);
+ }
+ return;
+ }
+ if (_this.x10Mouse || _this._vt300Mouse || _this._decLocator)
+ return;
+ sendButton(ev);
+ ev.preventDefault();
+ }));
+ this.register(Lifecycle_1.addDisposableDomListener(el, 'wheel', function (ev) {
+ if (_this.mouseEvents)
+ return;
+ _this.viewport.onWheel(ev);
+ return _this.cancel(ev);
+ }));
+ this.register(Lifecycle_1.addDisposableDomListener(el, 'touchstart', function (ev) {
+ if (_this.mouseEvents)
+ return;
+ _this.viewport.onTouchStart(ev);
+ return _this.cancel(ev);
+ }));
+ this.register(Lifecycle_1.addDisposableDomListener(el, 'touchmove', function (ev) {
+ if (_this.mouseEvents)
+ return;
+ _this.viewport.onTouchMove(ev);
+ return _this.cancel(ev);
+ }));
+ };
+ Terminal.prototype.refresh = function (start, end) {
+ if (this.renderer) {
+ this.renderer.refreshRows(start, end);
+ }
+ };
+ Terminal.prototype._queueLinkification = function (start, end) {
+ if (this.linkifier) {
+ this.linkifier.linkifyRows(start, end);
+ }
+ };
+ Terminal.prototype.updateCursorStyle = function (ev) {
+ if (this.selectionManager && this.selectionManager.shouldColumnSelect(ev)) {
+ this.element.classList.add('column-select');
+ }
+ else {
+ this.element.classList.remove('column-select');
+ }
+ };
+ Terminal.prototype.showCursor = function () {
+ if (!this.cursorState) {
+ this.cursorState = 1;
+ this.refresh(this.buffer.y, this.buffer.y);
+ }
+ };
+ Terminal.prototype.scroll = function (isWrapped) {
+ if (isWrapped === void 0) { isWrapped = false; }
+ var newLine;
+ newLine = this._blankLine;
+ if (!newLine || newLine.length !== this.cols || newLine.get(0)[Buffer_1.CHAR_DATA_ATTR_INDEX] !== this.eraseAttr()) {
+ newLine = this.buffer.getBlankLine(this.eraseAttr(), isWrapped);
+ this._blankLine = newLine;
+ }
+ newLine.isWrapped = isWrapped;
+ var topRow = this.buffer.ybase + this.buffer.scrollTop;
+ var bottomRow = this.buffer.ybase + this.buffer.scrollBottom;
+ if (this.buffer.scrollTop === 0) {
+ var willBufferBeTrimmed = this.buffer.lines.isFull;
+ if (bottomRow === this.buffer.lines.length - 1) {
+ if (willBufferBeTrimmed) {
+ this.buffer.lines.recycle().copyFrom(newLine);
+ }
+ else {
+ this.buffer.lines.push(newLine.clone());
+ }
+ }
+ else {
+ this.buffer.lines.splice(bottomRow + 1, 0, newLine.clone());
+ }
+ if (!willBufferBeTrimmed) {
+ this.buffer.ybase++;
+ if (!this._userScrolling) {
+ this.buffer.ydisp++;
+ }
+ }
+ else {
+ if (this._userScrolling) {
+ this.buffer.ydisp = Math.max(this.buffer.ydisp - 1, 0);
+ }
+ }
+ }
+ else {
+ var scrollRegionHeight = bottomRow - topRow + 1;
+ this.buffer.lines.shiftElements(topRow + 1, scrollRegionHeight - 1, -1);
+ this.buffer.lines.set(bottomRow, newLine.clone());
+ }
+ if (!this._userScrolling) {
+ this.buffer.ydisp = this.buffer.ybase;
+ }
+ this.updateRange(this.buffer.scrollTop);
+ this.updateRange(this.buffer.scrollBottom);
+ this.emit('scroll', this.buffer.ydisp);
+ };
+ Terminal.prototype.scrollLines = function (disp, suppressScrollEvent) {
+ if (disp < 0) {
+ if (this.buffer.ydisp === 0) {
+ return;
+ }
+ this._userScrolling = true;
+ }
+ else if (disp + this.buffer.ydisp >= this.buffer.ybase) {
+ this._userScrolling = false;
+ }
+ var oldYdisp = this.buffer.ydisp;
+ this.buffer.ydisp = Math.max(Math.min(this.buffer.ydisp + disp, this.buffer.ybase), 0);
+ if (oldYdisp === this.buffer.ydisp) {
+ return;
+ }
+ if (!suppressScrollEvent) {
+ this.emit('scroll', this.buffer.ydisp);
+ }
+ this.refresh(0, this.rows - 1);
+ };
+ Terminal.prototype.scrollPages = function (pageCount) {
+ this.scrollLines(pageCount * (this.rows - 1));
+ };
+ Terminal.prototype.scrollToTop = function () {
+ this.scrollLines(-this.buffer.ydisp);
+ };
+ Terminal.prototype.scrollToBottom = function () {
+ this.scrollLines(this.buffer.ybase - this.buffer.ydisp);
+ };
+ Terminal.prototype.scrollToLine = function (line) {
+ var scrollAmount = line - this.buffer.ydisp;
+ if (scrollAmount !== 0) {
+ this.scrollLines(scrollAmount);
+ }
+ };
+ Terminal.prototype.write = function (data) {
+ var _this = this;
+ if (this._isDisposed) {
+ return;
+ }
+ if (!data) {
+ return;
+ }
+ this.writeBuffer.push(data);
+ if (this.options.useFlowControl && !this._xoffSentToCatchUp && this.writeBuffer.length >= WRITE_BUFFER_PAUSE_THRESHOLD) {
+ this.handler(EscapeSequences_1.C0.DC3);
+ this._xoffSentToCatchUp = true;
+ }
+ if (!this._writeInProgress && this.writeBuffer.length > 0) {
+ this._writeInProgress = true;
+ setTimeout(function () {
+ _this._innerWrite();
+ });
+ }
+ };
+ Terminal.prototype._innerWrite = function (bufferOffset) {
+ var _this = this;
+ if (bufferOffset === void 0) { bufferOffset = 0; }
+ if (this._isDisposed) {
+ this.writeBuffer = [];
+ }
+ var startTime = Date.now();
+ while (this.writeBuffer.length > bufferOffset) {
+ var data = this.writeBuffer[bufferOffset];
+ bufferOffset++;
+ if (this._xoffSentToCatchUp && this.writeBuffer.length === bufferOffset) {
+ this.handler(EscapeSequences_1.C0.DC1);
+ this._xoffSentToCatchUp = false;
+ }
+ this._refreshStart = this.buffer.y;
+ this._refreshEnd = this.buffer.y;
+ this._inputHandler.parse(data);
+ this.updateRange(this.buffer.y);
+ this.refresh(this._refreshStart, this._refreshEnd);
+ if (Date.now() - startTime >= WRITE_TIMEOUT_MS) {
+ break;
+ }
+ }
+ if (this.writeBuffer.length > bufferOffset) {
+ setTimeout(function () { return _this._innerWrite(bufferOffset); }, 0);
+ }
+ else {
+ this._writeInProgress = false;
+ this.writeBuffer = [];
+ }
+ };
+ Terminal.prototype.writeln = function (data) {
+ this.write(data + '\r\n');
+ };
+ Terminal.prototype.attachCustomKeyEventHandler = function (customKeyEventHandler) {
+ this._customKeyEventHandler = customKeyEventHandler;
+ };
+ Terminal.prototype.addCsiHandler = function (flag, callback) {
+ return this._inputHandler.addCsiHandler(flag, callback);
+ };
+ Terminal.prototype.addOscHandler = function (ident, callback) {
+ return this._inputHandler.addOscHandler(ident, callback);
+ };
+ Terminal.prototype.registerLinkMatcher = function (regex, handler, options) {
+ var matcherId = this.linkifier.registerLinkMatcher(regex, handler, options);
+ this.refresh(0, this.rows - 1);
+ return matcherId;
+ };
+ Terminal.prototype.deregisterLinkMatcher = function (matcherId) {
+ if (this.linkifier.deregisterLinkMatcher(matcherId)) {
+ this.refresh(0, this.rows - 1);
+ }
+ };
+ Terminal.prototype.registerCharacterJoiner = function (handler) {
+ var joinerId = this.renderer.registerCharacterJoiner(handler);
+ this.refresh(0, this.rows - 1);
+ return joinerId;
+ };
+ Terminal.prototype.deregisterCharacterJoiner = function (joinerId) {
+ if (this.renderer.deregisterCharacterJoiner(joinerId)) {
+ this.refresh(0, this.rows - 1);
+ }
+ };
+ Object.defineProperty(Terminal.prototype, "markers", {
+ get: function () {
+ return this.buffer.markers;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Terminal.prototype.addMarker = function (cursorYOffset) {
+ if (this.buffer !== this.buffers.normal) {
+ return;
+ }
+ return this.buffer.addMarker(this.buffer.ybase + this.buffer.y + cursorYOffset);
+ };
+ Terminal.prototype.hasSelection = function () {
+ return this.selectionManager ? this.selectionManager.hasSelection : false;
+ };
+ Terminal.prototype.getSelection = function () {
+ return this.selectionManager ? this.selectionManager.selectionText : '';
+ };
+ Terminal.prototype.clearSelection = function () {
+ if (this.selectionManager) {
+ this.selectionManager.clearSelection();
+ }
+ };
+ Terminal.prototype.selectAll = function () {
+ if (this.selectionManager) {
+ this.selectionManager.selectAll();
+ }
+ };
+ Terminal.prototype.selectLines = function (start, end) {
+ if (this.selectionManager) {
+ this.selectionManager.selectLines(start, end);
+ }
+ };
+ Terminal.prototype._keyDown = function (event) {
+ if (this._customKeyEventHandler && this._customKeyEventHandler(event) === false) {
+ return false;
+ }
+ if (!this._compositionHelper.keydown(event)) {
+ if (this.buffer.ybase !== this.buffer.ydisp) {
+ this.scrollToBottom();
+ }
+ return false;
+ }
+ var result = Keyboard_1.evaluateKeyboardEvent(event, this.applicationCursor, this.browser.isMac, this.options.macOptionIsMeta);
+ this.updateCursorStyle(event);
+ if (result.type === 3 || result.type === 2) {
+ var scrollCount = this.rows - 1;
+ this.scrollLines(result.type === 2 ? -scrollCount : scrollCount);
+ return this.cancel(event, true);
+ }
+ if (result.type === 1) {
+ this.selectAll();
+ }
+ if (this._isThirdLevelShift(this.browser, event)) {
+ return true;
+ }
+ if (result.cancel) {
+ this.cancel(event, true);
+ }
+ if (!result.key) {
+ return true;
+ }
+ this.emit('keydown', event);
+ this.emit('key', result.key, event);
+ this.showCursor();
+ this.handler(result.key);
+ return this.cancel(event, true);
+ };
+ Terminal.prototype._isThirdLevelShift = function (browser, ev) {
+ var thirdLevelKey = (browser.isMac && !this.options.macOptionIsMeta && ev.altKey && !ev.ctrlKey && !ev.metaKey) ||
+ (browser.isMSWindows && ev.altKey && ev.ctrlKey && !ev.metaKey);
+ if (ev.type === 'keypress') {
+ return thirdLevelKey;
+ }
+ return thirdLevelKey && (!ev.keyCode || ev.keyCode > 47);
+ };
+ Terminal.prototype.setgLevel = function (g) {
+ this.glevel = g;
+ this.charset = this.charsets[g];
+ };
+ Terminal.prototype.setgCharset = function (g, charset) {
+ this.charsets[g] = charset;
+ if (this.glevel === g) {
+ this.charset = charset;
+ }
+ };
+ Terminal.prototype._keyUp = function (ev) {
+ this.updateCursorStyle(ev);
+ };
+ Terminal.prototype._keyPress = function (ev) {
+ var key;
+ if (this._customKeyEventHandler && this._customKeyEventHandler(ev) === false) {
+ return false;
+ }
+ this.cancel(ev);
+ if (ev.charCode) {
+ key = ev.charCode;
+ }
+ else if (ev.which === null || ev.which === undefined) {
+ key = ev.keyCode;
+ }
+ else if (ev.which !== 0 && ev.charCode !== 0) {
+ key = ev.which;
+ }
+ else {
+ return false;
+ }
+ if (!key || ((ev.altKey || ev.ctrlKey || ev.metaKey) && !this._isThirdLevelShift(this.browser, ev))) {
+ return false;
+ }
+ key = String.fromCharCode(key);
+ this.emit('keypress', key, ev);
+ this.emit('key', key, ev);
+ this.showCursor();
+ this.handler(key);
+ return true;
+ };
+ Terminal.prototype.bell = function () {
+ var _this = this;
+ this.emit('bell');
+ if (this._soundBell()) {
+ this.soundManager.playBellSound();
+ }
+ if (this._visualBell()) {
+ this.element.classList.add('visual-bell-active');
+ clearTimeout(this._visualBellTimer);
+ this._visualBellTimer = window.setTimeout(function () {
+ _this.element.classList.remove('visual-bell-active');
+ }, 200);
+ }
+ };
+ Terminal.prototype.log = function (text, data) {
+ if (!this.options.debug)
+ return;
+ if (!this._context.console || !this._context.console.log)
+ return;
+ this._context.console.log(text, data);
+ };
+ Terminal.prototype.error = function (text, data) {
+ if (!this.options.debug)
+ return;
+ if (!this._context.console || !this._context.console.error)
+ return;
+ this._context.console.error(text, data);
+ };
+ Terminal.prototype.resize = function (x, y) {
+ if (isNaN(x) || isNaN(y)) {
+ return;
+ }
+ if (x === this.cols && y === this.rows) {
+ if (this.charMeasure && (!this.charMeasure.width || !this.charMeasure.height)) {
+ this.charMeasure.measure(this.options);
+ }
+ return;
+ }
+ if (x < MINIMUM_COLS)
+ x = MINIMUM_COLS;
+ if (y < MINIMUM_ROWS)
+ y = MINIMUM_ROWS;
+ this.buffers.resize(x, y);
+ this.cols = x;
+ this.rows = y;
+ this.buffers.setupTabStops(this.cols);
+ if (this.charMeasure) {
+ this.charMeasure.measure(this.options);
+ }
+ this.refresh(0, this.rows - 1);
+ this.emit('resize', { cols: x, rows: y });
+ };
+ Terminal.prototype.updateRange = function (y) {
+ if (y < this._refreshStart)
+ this._refreshStart = y;
+ if (y > this._refreshEnd)
+ this._refreshEnd = y;
+ };
+ Terminal.prototype.maxRange = function () {
+ this._refreshStart = 0;
+ this._refreshEnd = this.rows - 1;
+ };
+ Terminal.prototype.clear = function () {
+ if (this.buffer.ybase === 0 && this.buffer.y === 0) {
+ return;
+ }
+ this.buffer.lines.set(0, this.buffer.lines.get(this.buffer.ybase + this.buffer.y));
+ this.buffer.lines.length = 1;
+ this.buffer.ydisp = 0;
+ this.buffer.ybase = 0;
+ this.buffer.y = 0;
+ for (var i = 1; i < this.rows; i++) {
+ this.buffer.lines.push(this.buffer.getBlankLine(Buffer_1.DEFAULT_ATTR));
+ }
+ this.refresh(0, this.rows - 1);
+ this.emit('scroll', this.buffer.ydisp);
+ };
+ Terminal.prototype.ch = function (cur) {
+ if (cur) {
+ return [this.eraseAttr(), Buffer_1.NULL_CELL_CHAR, Buffer_1.NULL_CELL_WIDTH, Buffer_1.NULL_CELL_CODE];
+ }
+ return [Buffer_1.DEFAULT_ATTR, Buffer_1.NULL_CELL_CHAR, Buffer_1.NULL_CELL_WIDTH, Buffer_1.NULL_CELL_CODE];
+ };
+ Terminal.prototype.is = function (term) {
+ return (this.options.termName + '').indexOf(term) === 0;
+ };
+ Terminal.prototype.handler = function (data) {
+ if (this.options.disableStdin) {
+ return;
+ }
+ if (this.selectionManager && this.selectionManager.hasSelection) {
+ this.selectionManager.clearSelection();
+ }
+ if (this.buffer.ybase !== this.buffer.ydisp) {
+ this.scrollToBottom();
+ }
+ this.emit('data', data);
+ };
+ Terminal.prototype.handleTitle = function (title) {
+ this.emit('title', title);
+ };
+ Terminal.prototype.index = function () {
+ this.buffer.y++;
+ if (this.buffer.y > this.buffer.scrollBottom) {
+ this.buffer.y--;
+ this.scroll();
+ }
+ if (this.buffer.x >= this.cols) {
+ this.buffer.x--;
+ }
+ };
+ Terminal.prototype.reverseIndex = function () {
+ if (this.buffer.y === this.buffer.scrollTop) {
+ var scrollRegionHeight = this.buffer.scrollBottom - this.buffer.scrollTop;
+ this.buffer.lines.shiftElements(this.buffer.y + this.buffer.ybase, scrollRegionHeight, 1);
+ this.buffer.lines.set(this.buffer.y + this.buffer.ybase, this.buffer.getBlankLine(this.eraseAttr()));
+ this.updateRange(this.buffer.scrollTop);
+ this.updateRange(this.buffer.scrollBottom);
+ }
+ else {
+ this.buffer.y--;
+ }
+ };
+ Terminal.prototype.reset = function () {
+ this.options.rows = this.rows;
+ this.options.cols = this.cols;
+ var customKeyEventHandler = this._customKeyEventHandler;
+ var inputHandler = this._inputHandler;
+ var cursorState = this.cursorState;
+ this._setup();
+ this._customKeyEventHandler = customKeyEventHandler;
+ this._inputHandler = inputHandler;
+ this.cursorState = cursorState;
+ this.refresh(0, this.rows - 1);
+ if (this.viewport) {
+ this.viewport.syncScrollArea();
+ }
+ };
+ Terminal.prototype.tabSet = function () {
+ this.buffer.tabs[this.buffer.x] = true;
+ };
+ Terminal.prototype.cancel = function (ev, force) {
+ if (!this.options.cancelEvents && !force) {
+ return;
+ }
+ ev.preventDefault();
+ ev.stopPropagation();
+ return false;
+ };
+ Terminal.prototype.matchColor = function (r1, g1, b1) {
+ var hash = (r1 << 16) | (g1 << 8) | b1;
+ if (matchColorCache[hash] !== null && matchColorCache[hash] !== undefined) {
+ return matchColorCache[hash];
+ }
+ var ldiff = Infinity;
+ var li = -1;
+ var i = 0;
+ var c;
+ var r2;
+ var g2;
+ var b2;
+ var diff;
+ for (; i < ColorManager_1.DEFAULT_ANSI_COLORS.length; i++) {
+ c = ColorManager_1.DEFAULT_ANSI_COLORS[i].rgba;
+ r2 = c >>> 24;
+ g2 = c >>> 16 & 0xFF;
+ b2 = c >>> 8 & 0xFF;
+ diff = matchColorDistance(r1, g1, b1, r2, g2, b2);
+ if (diff === 0) {
+ li = i;
+ break;
+ }
+ if (diff < ldiff) {
+ ldiff = diff;
+ li = i;
+ }
+ }
+ return matchColorCache[hash] = li;
+ };
+ Terminal.prototype._visualBell = function () {
+ return false;
+ };
+ Terminal.prototype._soundBell = function () {
+ return this.options.bellStyle === 'sound';
+ };
+ return Terminal;
+}(EventEmitter_1.EventEmitter));
+exports.Terminal = Terminal;
+function wasModifierKeyOnlyEvent(ev) {
+ return ev.keyCode === 16 ||
+ ev.keyCode === 17 ||
+ ev.keyCode === 18;
+}
+var matchColorCache = {};
+function matchColorDistance(r1, g1, b1, r2, g2, b2) {
+ return Math.pow(30 * (r1 - r2), 2)
+ + Math.pow(59 * (g1 - g2), 2)
+ + Math.pow(11 * (b1 - b2), 2);
+}
+
+},{"./AccessibilityManager":1,"./Buffer":2,"./BufferSet":5,"./CompositionHelper":7,"./InputHandler":9,"./Linkifier":10,"./SelectionManager":11,"./SoundManager":13,"./Strings":14,"./Viewport":16,"./common/Clone":18,"./common/EventEmitter":19,"./common/data/EscapeSequences":22,"./core/Platform":23,"./core/input/Keyboard":25,"./renderer/ColorManager":31,"./renderer/Renderer":35,"./renderer/atlas/CharAtlasCache":39,"./renderer/dom/DomRenderer":47,"./ui/CharMeasure":49,"./ui/Clipboard":50,"./ui/Lifecycle":51,"./ui/MouseHelper":52,"./ui/MouseZoneManager":53,"./ui/ScreenDprMonitor":55}],16:[function(require,module,exports){
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ }
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var Lifecycle_1 = require("./common/Lifecycle");
+var Lifecycle_2 = require("./ui/Lifecycle");
+var FALLBACK_SCROLL_BAR_WIDTH = 15;
+var Viewport = (function (_super) {
+ __extends(Viewport, _super);
+ function Viewport(_terminal, _viewportElement, _scrollArea, _charMeasure) {
+ var _this = _super.call(this) || this;
+ _this._terminal = _terminal;
+ _this._viewportElement = _viewportElement;
+ _this._scrollArea = _scrollArea;
+ _this._charMeasure = _charMeasure;
+ _this.scrollBarWidth = 0;
+ _this._currentRowHeight = 0;
+ _this._lastRecordedBufferLength = 0;
+ _this._lastRecordedViewportHeight = 0;
+ _this._lastRecordedBufferHeight = 0;
+ _this._lastScrollTop = 0;
+ _this._wheelPartialScroll = 0;
+ _this._refreshAnimationFrame = null;
+ _this._ignoreNextScrollEvent = false;
+ _this.scrollBarWidth = (_this._viewportElement.offsetWidth - _this._scrollArea.offsetWidth) || FALLBACK_SCROLL_BAR_WIDTH;
+ _this.register(Lifecycle_2.addDisposableDomListener(_this._viewportElement, 'scroll', _this._onScroll.bind(_this)));
+ setTimeout(function () { return _this.syncScrollArea(); }, 0);
+ return _this;
+ }
+ Viewport.prototype.onThemeChanged = function (colors) {
+ this._viewportElement.style.backgroundColor = colors.background.css;
+ };
+ Viewport.prototype._refresh = function () {
+ var _this = this;
+ if (this._refreshAnimationFrame === null) {
+ this._refreshAnimationFrame = requestAnimationFrame(function () { return _this._innerRefresh(); });
+ }
+ };
+ Viewport.prototype._innerRefresh = function () {
+ if (this._charMeasure.height > 0) {
+ this._currentRowHeight = this._terminal.renderer.dimensions.scaledCellHeight / window.devicePixelRatio;
+ this._lastRecordedViewportHeight = this._viewportElement.offsetHeight;
+ var newBufferHeight = Math.round(this._currentRowHeight * this._lastRecordedBufferLength) + (this._lastRecordedViewportHeight - this._terminal.renderer.dimensions.canvasHeight);
+ if (this._lastRecordedBufferHeight !== newBufferHeight) {
+ this._lastRecordedBufferHeight = newBufferHeight;
+ this._scrollArea.style.height = this._lastRecordedBufferHeight + 'px';
+ }
+ }
+ var scrollTop = this._terminal.buffer.ydisp * this._currentRowHeight;
+ if (this._viewportElement.scrollTop !== scrollTop) {
+ this._ignoreNextScrollEvent = true;
+ this._viewportElement.scrollTop = scrollTop;
+ }
+ this._refreshAnimationFrame = null;
+ };
+ Viewport.prototype.syncScrollArea = function () {
+ if (this._lastRecordedBufferLength !== this._terminal.buffer.lines.length) {
+ this._lastRecordedBufferLength = this._terminal.buffer.lines.length;
+ this._refresh();
+ return;
+ }
+ if (this._lastRecordedViewportHeight !== this._terminal.renderer.dimensions.canvasHeight) {
+ this._refresh();
+ return;
+ }
+ var newScrollTop = this._terminal.buffer.ydisp * this._currentRowHeight;
+ if (this._lastScrollTop !== newScrollTop) {
+ this._refresh();
+ return;
+ }
+ if (this._lastScrollTop !== this._viewportElement.scrollTop) {
+ this._refresh();
+ return;
+ }
+ if (this._terminal.renderer.dimensions.scaledCellHeight / window.devicePixelRatio !== this._currentRowHeight) {
+ this._refresh();
+ return;
+ }
+ };
+ Viewport.prototype._onScroll = function (ev) {
+ this._lastScrollTop = this._viewportElement.scrollTop;
+ if (!this._viewportElement.offsetParent) {
+ return;
+ }
+ if (this._ignoreNextScrollEvent) {
+ this._ignoreNextScrollEvent = false;
+ return;
+ }
+ var newRow = Math.round(this._lastScrollTop / this._currentRowHeight);
+ var diff = newRow - this._terminal.buffer.ydisp;
+ this._terminal.scrollLines(diff, true);
+ };
+ Viewport.prototype.onWheel = function (ev) {
+ var amount = this._getPixelsScrolled(ev);
+ if (amount === 0) {
+ return;
+ }
+ this._viewportElement.scrollTop += amount;
+ ev.preventDefault();
+ };
+ Viewport.prototype._getPixelsScrolled = function (ev) {
+ if (ev.deltaY === 0) {
+ return 0;
+ }
+ var amount = ev.deltaY;
+ if (ev.deltaMode === WheelEvent.DOM_DELTA_LINE) {
+ amount *= this._currentRowHeight;
+ }
+ else if (ev.deltaMode === WheelEvent.DOM_DELTA_PAGE) {
+ amount *= this._currentRowHeight * this._terminal.rows;
+ }
+ return amount;
+ };
+ Viewport.prototype.getLinesScrolled = function (ev) {
+ if (ev.deltaY === 0) {
+ return 0;
+ }
+ var amount = ev.deltaY;
+ if (ev.deltaMode === WheelEvent.DOM_DELTA_PIXEL) {
+ amount /= this._currentRowHeight + 0.0;
+ this._wheelPartialScroll += amount;
+ amount = Math.floor(Math.abs(this._wheelPartialScroll)) * (this._wheelPartialScroll > 0 ? 1 : -1);
+ this._wheelPartialScroll %= 1;
+ }
+ else if (ev.deltaMode === WheelEvent.DOM_DELTA_PAGE) {
+ amount *= this._terminal.rows;
+ }
+ return amount;
+ };
+ Viewport.prototype.onTouchStart = function (ev) {
+ this._lastTouchY = ev.touches[0].pageY;
+ };
+ Viewport.prototype.onTouchMove = function (ev) {
+ var deltaY = this._lastTouchY - ev.touches[0].pageY;
+ this._lastTouchY = ev.touches[0].pageY;
+ if (deltaY === 0) {
+ return;
+ }
+ this._viewportElement.scrollTop += deltaY;
+ ev.preventDefault();
+ };
+ return Viewport;
+}(Lifecycle_1.Disposable));
+exports.Viewport = Viewport;
+
+},{"./common/Lifecycle":20,"./ui/Lifecycle":51}],17:[function(require,module,exports){
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ }
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var EventEmitter_1 = require("./EventEmitter");
+var CircularList = (function (_super) {
+ __extends(CircularList, _super);
+ function CircularList(_maxLength) {
+ var _this = _super.call(this) || this;
+ _this._maxLength = _maxLength;
+ _this._array = new Array(_this._maxLength);
+ _this._startIndex = 0;
+ _this._length = 0;
+ return _this;
+ }
+ Object.defineProperty(CircularList.prototype, "maxLength", {
+ get: function () {
+ return this._maxLength;
+ },
+ set: function (newMaxLength) {
+ if (this._maxLength === newMaxLength) {
+ return;
+ }
+ var newArray = new Array(newMaxLength);
+ for (var i = 0; i < Math.min(newMaxLength, this.length); i++) {
+ newArray[i] = this._array[this._getCyclicIndex(i)];
+ }
+ this._array = newArray;
+ this._maxLength = newMaxLength;
+ this._startIndex = 0;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(CircularList.prototype, "length", {
+ get: function () {
+ return this._length;
+ },
+ set: function (newLength) {
+ if (newLength > this._length) {
+ for (var i = this._length; i < newLength; i++) {
+ this._array[i] = undefined;
+ }
+ }
+ this._length = newLength;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ CircularList.prototype.get = function (index) {
+ return this._array[this._getCyclicIndex(index)];
+ };
+ CircularList.prototype.set = function (index, value) {
+ this._array[this._getCyclicIndex(index)] = value;
+ };
+ CircularList.prototype.push = function (value) {
+ this._array[this._getCyclicIndex(this._length)] = value;
+ if (this._length === this._maxLength) {
+ this._startIndex = ++this._startIndex % this._maxLength;
+ this.emitMayRemoveListeners('trim', 1);
+ }
+ else {
+ this._length++;
+ }
+ };
+ CircularList.prototype.recycle = function () {
+ if (this._length !== this._maxLength) {
+ throw new Error('Can only recycle when the buffer is full');
+ }
+ this._startIndex = ++this._startIndex % this._maxLength;
+ this.emitMayRemoveListeners('trim', 1);
+ return this._array[this._getCyclicIndex(this._length - 1)];
+ };
+ Object.defineProperty(CircularList.prototype, "isFull", {
+ get: function () {
+ return this._length === this._maxLength;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ CircularList.prototype.pop = function () {
+ return this._array[this._getCyclicIndex(this._length-- - 1)];
+ };
+ CircularList.prototype.splice = function (start, deleteCount) {
+ var items = [];
+ for (var _i = 2; _i < arguments.length; _i++) {
+ items[_i - 2] = arguments[_i];
+ }
+ if (deleteCount) {
+ for (var i = start; i < this._length - deleteCount; i++) {
+ this._array[this._getCyclicIndex(i)] = this._array[this._getCyclicIndex(i + deleteCount)];
+ }
+ this._length -= deleteCount;
+ }
+ for (var i = this._length - 1; i >= start; i--) {
+ this._array[this._getCyclicIndex(i + items.length)] = this._array[this._getCyclicIndex(i)];
+ }
+ for (var i = 0; i < items.length; i++) {
+ this._array[this._getCyclicIndex(start + i)] = items[i];
+ }
+ if (this._length + items.length > this._maxLength) {
+ var countToTrim = (this._length + items.length) - this._maxLength;
+ this._startIndex += countToTrim;
+ this._length = this._maxLength;
+ this.emitMayRemoveListeners('trim', countToTrim);
+ }
+ else {
+ this._length += items.length;
+ }
+ };
+ CircularList.prototype.trimStart = function (count) {
+ if (count > this._length) {
+ count = this._length;
+ }
+ this._startIndex += count;
+ this._length -= count;
+ this.emitMayRemoveListeners('trim', count);
+ };
+ CircularList.prototype.shiftElements = function (start, count, offset) {
+ if (count <= 0) {
+ return;
+ }
+ if (start < 0 || start >= this._length) {
+ throw new Error('start argument out of range');
+ }
+ if (start + offset < 0) {
+ throw new Error('Cannot shift elements in list beyond index 0');
+ }
+ if (offset > 0) {
+ for (var i = count - 1; i >= 0; i--) {
+ this.set(start + i + offset, this.get(start + i));
+ }
+ var expandListBy = (start + count + offset) - this._length;
+ if (expandListBy > 0) {
+ this._length += expandListBy;
+ while (this._length > this._maxLength) {
+ this._length--;
+ this._startIndex++;
+ this.emitMayRemoveListeners('trim', 1);
+ }
+ }
+ }
+ else {
+ for (var i = 0; i < count; i++) {
+ this.set(start + i + offset, this.get(start + i));
+ }
+ }
+ };
+ CircularList.prototype._getCyclicIndex = function (index) {
+ return (this._startIndex + index) % this._maxLength;
+ };
+ return CircularList;
+}(EventEmitter_1.EventEmitter));
+exports.CircularList = CircularList;
+
+},{"./EventEmitter":19}],18:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+function clone(val, depth) {
+ if (depth === void 0) { depth = 5; }
+ if (typeof val !== 'object') {
+ return val;
+ }
+ if (val === null) {
+ return null;
+ }
+ var clonedObject = Array.isArray(val) ? [] : {};
+ for (var key in val) {
+ clonedObject[key] = depth <= 1 ? val[key] : clone(val[key], depth - 1);
+ }
+ return clonedObject;
+}
+exports.clone = clone;
+
+},{}],19:[function(require,module,exports){
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ }
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var Lifecycle_1 = require("./Lifecycle");
+var EventEmitter = (function (_super) {
+ __extends(EventEmitter, _super);
+ function EventEmitter() {
+ var _this = _super.call(this) || this;
+ _this._events = _this._events || {};
+ return _this;
+ }
+ EventEmitter.prototype.on = function (type, listener) {
+ this._events[type] = this._events[type] || [];
+ this._events[type].push(listener);
+ };
+ EventEmitter.prototype.addDisposableListener = function (type, handler) {
+ var _this = this;
+ this.on(type, handler);
+ var disposed = false;
+ return {
+ dispose: function () {
+ if (disposed) {
+ return;
+ }
+ _this.off(type, handler);
+ disposed = true;
+ }
+ };
+ };
+ EventEmitter.prototype.off = function (type, listener) {
+ if (!this._events[type]) {
+ return;
+ }
+ var obj = this._events[type];
+ var i = obj.length;
+ while (i--) {
+ if (obj[i] === listener) {
+ obj.splice(i, 1);
+ return;
+ }
+ }
+ };
+ EventEmitter.prototype.removeAllListeners = function (type) {
+ if (this._events[type]) {
+ delete this._events[type];
+ }
+ };
+ EventEmitter.prototype.emit = function (type) {
+ var args = [];
+ for (var _i = 1; _i < arguments.length; _i++) {
+ args[_i - 1] = arguments[_i];
+ }
+ if (!this._events[type]) {
+ return;
+ }
+ var obj = this._events[type];
+ for (var i = 0; i < obj.length; i++) {
+ obj[i].apply(this, args);
+ }
+ };
+ EventEmitter.prototype.emitMayRemoveListeners = function (type) {
+ var args = [];
+ for (var _i = 1; _i < arguments.length; _i++) {
+ args[_i - 1] = arguments[_i];
+ }
+ if (!this._events[type]) {
+ return;
+ }
+ var obj = this._events[type];
+ var length = obj.length;
+ for (var i = 0; i < obj.length; i++) {
+ obj[i].apply(this, args);
+ i -= length - obj.length;
+ length = obj.length;
+ }
+ };
+ EventEmitter.prototype.listeners = function (type) {
+ return this._events[type] || [];
+ };
+ EventEmitter.prototype.dispose = function () {
+ _super.prototype.dispose.call(this);
+ this._events = {};
+ };
+ return EventEmitter;
+}(Lifecycle_1.Disposable));
+exports.EventEmitter = EventEmitter;
+
+},{"./Lifecycle":20}],20:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var Disposable = (function () {
+ function Disposable() {
+ this._disposables = [];
+ this._isDisposed = false;
+ }
+ Disposable.prototype.dispose = function () {
+ this._isDisposed = true;
+ this._disposables.forEach(function (d) { return d.dispose(); });
+ this._disposables.length = 0;
+ };
+ Disposable.prototype.register = function (d) {
+ this._disposables.push(d);
+ };
+ Disposable.prototype.unregister = function (d) {
+ var index = this._disposables.indexOf(d);
+ if (index !== -1) {
+ this._disposables.splice(index, 1);
+ }
+ };
+ return Disposable;
+}());
+exports.Disposable = Disposable;
+
+},{}],21:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+function fill(array, value, start, end) {
+ if (array.fill) {
+ return array.fill(value, start, end);
+ }
+ return fillFallback(array, value, start, end);
+}
+exports.fill = fill;
+function fillFallback(array, value, start, end) {
+ if (start === void 0) { start = 0; }
+ if (end === void 0) { end = array.length; }
+ if (start >= array.length) {
+ return array;
+ }
+ start = (array.length + start) % array.length;
+ if (end >= array.length) {
+ end = array.length;
+ }
+ else {
+ end = (array.length + end) % array.length;
+ }
+ for (var i = start; i < end; ++i) {
+ array[i] = value;
+ }
+ return array;
+}
+exports.fillFallback = fillFallback;
+function concat(a, b) {
+ var result = new a.constructor(a.length + b.length);
+ result.set(a);
+ result.set(b, a.length);
+ return result;
+}
+exports.concat = concat;
+
+},{}],22:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var C0;
+(function (C0) {
+ C0.NUL = '\x00';
+ C0.SOH = '\x01';
+ C0.STX = '\x02';
+ C0.ETX = '\x03';
+ C0.EOT = '\x04';
+ C0.ENQ = '\x05';
+ C0.ACK = '\x06';
+ C0.BEL = '\x07';
+ C0.BS = '\x08';
+ C0.HT = '\x09';
+ C0.LF = '\x0a';
+ C0.VT = '\x0b';
+ C0.FF = '\x0c';
+ C0.CR = '\x0d';
+ C0.SO = '\x0e';
+ C0.SI = '\x0f';
+ C0.DLE = '\x10';
+ C0.DC1 = '\x11';
+ C0.DC2 = '\x12';
+ C0.DC3 = '\x13';
+ C0.DC4 = '\x14';
+ C0.NAK = '\x15';
+ C0.SYN = '\x16';
+ C0.ETB = '\x17';
+ C0.CAN = '\x18';
+ C0.EM = '\x19';
+ C0.SUB = '\x1a';
+ C0.ESC = '\x1b';
+ C0.FS = '\x1c';
+ C0.GS = '\x1d';
+ C0.RS = '\x1e';
+ C0.US = '\x1f';
+ C0.SP = '\x20';
+ C0.DEL = '\x7f';
+})(C0 = exports.C0 || (exports.C0 = {}));
+var C1;
+(function (C1) {
+ C1.PAD = '\x80';
+ C1.HOP = '\x81';
+ C1.BPH = '\x82';
+ C1.NBH = '\x83';
+ C1.IND = '\x84';
+ C1.NEL = '\x85';
+ C1.SSA = '\x86';
+ C1.ESA = '\x87';
+ C1.HTS = '\x88';
+ C1.HTJ = '\x89';
+ C1.VTS = '\x8a';
+ C1.PLD = '\x8b';
+ C1.PLU = '\x8c';
+ C1.RI = '\x8d';
+ C1.SS2 = '\x8e';
+ C1.SS3 = '\x8f';
+ C1.DCS = '\x90';
+ C1.PU1 = '\x91';
+ C1.PU2 = '\x92';
+ C1.STS = '\x93';
+ C1.CCH = '\x94';
+ C1.MW = '\x95';
+ C1.SPA = '\x96';
+ C1.EPA = '\x97';
+ C1.SOS = '\x98';
+ C1.SGCI = '\x99';
+ C1.SCI = '\x9a';
+ C1.CSI = '\x9b';
+ C1.ST = '\x9c';
+ C1.OSC = '\x9d';
+ C1.PM = '\x9e';
+ C1.APC = '\x9f';
+})(C1 = exports.C1 || (exports.C1 = {}));
+
+},{}],23:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var isNode = (typeof navigator === 'undefined') ? true : false;
+var userAgent = (isNode) ? 'node' : navigator.userAgent;
+var platform = (isNode) ? 'node' : navigator.platform;
+exports.isFirefox = !!~userAgent.indexOf('Firefox');
+exports.isSafari = /^((?!chrome|android).)*safari/i.test(userAgent);
+exports.isMSIE = !!~userAgent.indexOf('MSIE') || !!~userAgent.indexOf('Trident');
+exports.isMac = contains(['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'], platform);
+exports.isIpad = platform === 'iPad';
+exports.isIphone = platform === 'iPhone';
+exports.isMSWindows = contains(['Windows', 'Win16', 'Win32', 'WinCE'], platform);
+exports.isLinux = platform.indexOf('Linux') >= 0;
+function contains(arr, el) {
+ return arr.indexOf(el) >= 0;
+}
+
+},{}],24:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.CHARSETS = {};
+exports.DEFAULT_CHARSET = exports.CHARSETS['B'];
+exports.CHARSETS['0'] = {
+ '`': '\u25c6',
+ 'a': '\u2592',
+ 'b': '\u0009',
+ 'c': '\u000c',
+ 'd': '\u000d',
+ 'e': '\u000a',
+ 'f': '\u00b0',
+ 'g': '\u00b1',
+ 'h': '\u2424',
+ 'i': '\u000b',
+ 'j': '\u2518',
+ 'k': '\u2510',
+ 'l': '\u250c',
+ 'm': '\u2514',
+ 'n': '\u253c',
+ 'o': '\u23ba',
+ 'p': '\u23bb',
+ 'q': '\u2500',
+ 'r': '\u23bc',
+ 's': '\u23bd',
+ 't': '\u251c',
+ 'u': '\u2524',
+ 'v': '\u2534',
+ 'w': '\u252c',
+ 'x': '\u2502',
+ 'y': '\u2264',
+ 'z': '\u2265',
+ '{': '\u03c0',
+ '|': '\u2260',
+ '}': '\u00a3',
+ '~': '\u00b7'
+};
+exports.CHARSETS['A'] = {
+ '#': '£'
+};
+exports.CHARSETS['B'] = null;
+exports.CHARSETS['4'] = {
+ '#': '£',
+ '@': '¾',
+ '[': 'ij',
+ '\\': '½',
+ ']': '|',
+ '{': '¨',
+ '|': 'f',
+ '}': '¼',
+ '~': '´'
+};
+exports.CHARSETS['C'] =
+ exports.CHARSETS['5'] = {
+ '[': 'Ä',
+ '\\': 'Ö',
+ ']': 'Å',
+ '^': 'Ü',
+ '`': 'é',
+ '{': 'ä',
+ '|': 'ö',
+ '}': 'å',
+ '~': 'ü'
+ };
+exports.CHARSETS['R'] = {
+ '#': '£',
+ '@': 'à',
+ '[': '°',
+ '\\': 'ç',
+ ']': '§',
+ '{': 'é',
+ '|': 'ù',
+ '}': 'è',
+ '~': '¨'
+};
+exports.CHARSETS['Q'] = {
+ '@': 'à',
+ '[': 'â',
+ '\\': 'ç',
+ ']': 'ê',
+ '^': 'î',
+ '`': 'ô',
+ '{': 'é',
+ '|': 'ù',
+ '}': 'è',
+ '~': 'û'
+};
+exports.CHARSETS['K'] = {
+ '@': '§',
+ '[': 'Ä',
+ '\\': 'Ö',
+ ']': 'Ü',
+ '{': 'ä',
+ '|': 'ö',
+ '}': 'ü',
+ '~': 'ß'
+};
+exports.CHARSETS['Y'] = {
+ '#': '£',
+ '@': '§',
+ '[': '°',
+ '\\': 'ç',
+ ']': 'é',
+ '`': 'ù',
+ '{': 'à',
+ '|': 'ò',
+ '}': 'è',
+ '~': 'ì'
+};
+exports.CHARSETS['E'] =
+ exports.CHARSETS['6'] = {
+ '@': 'Ä',
+ '[': 'Æ',
+ '\\': 'Ø',
+ ']': 'Å',
+ '^': 'Ü',
+ '`': 'ä',
+ '{': 'æ',
+ '|': 'ø',
+ '}': 'å',
+ '~': 'ü'
+ };
+exports.CHARSETS['Z'] = {
+ '#': '£',
+ '@': '§',
+ '[': '¡',
+ '\\': 'Ñ',
+ ']': '¿',
+ '{': '°',
+ '|': 'ñ',
+ '}': 'ç'
+};
+exports.CHARSETS['H'] =
+ exports.CHARSETS['7'] = {
+ '@': 'É',
+ '[': 'Ä',
+ '\\': 'Ö',
+ ']': 'Å',
+ '^': 'Ü',
+ '`': 'é',
+ '{': 'ä',
+ '|': 'ö',
+ '}': 'å',
+ '~': 'ü'
+ };
+exports.CHARSETS['='] = {
+ '#': 'ù',
+ '@': 'à',
+ '[': 'é',
+ '\\': 'ç',
+ ']': 'ê',
+ '^': 'î',
+ '_': 'è',
+ '`': 'ô',
+ '{': 'ä',
+ '|': 'ö',
+ '}': 'ü',
+ '~': 'û'
+};
+
+},{}],25:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var EscapeSequences_1 = require("../../common/data/EscapeSequences");
+var KEYCODE_KEY_MAPPINGS = {
+ 48: ['0', ')'],
+ 49: ['1', '!'],
+ 50: ['2', '@'],
+ 51: ['3', '#'],
+ 52: ['4', '$'],
+ 53: ['5', '%'],
+ 54: ['6', '^'],
+ 55: ['7', '&'],
+ 56: ['8', '*'],
+ 57: ['9', '('],
+ 186: [';', ':'],
+ 187: ['=', '+'],
+ 188: [',', '<'],
+ 189: ['-', '_'],
+ 190: ['.', '>'],
+ 191: ['/', '?'],
+ 192: ['`', '~'],
+ 219: ['[', '{'],
+ 220: ['\\', '|'],
+ 221: [']', '}'],
+ 222: ['\'', '"']
+};
+function evaluateKeyboardEvent(ev, applicationCursorMode, isMac, macOptionIsMeta) {
+ var result = {
+ type: 0,
+ cancel: false,
+ key: undefined
+ };
+ var modifiers = (ev.shiftKey ? 1 : 0) | (ev.altKey ? 2 : 0) | (ev.ctrlKey ? 4 : 0) | (ev.metaKey ? 8 : 0);
+ switch (ev.keyCode) {
+ case 0:
+ if (ev.key === 'UIKeyInputUpArrow') {
+ if (applicationCursorMode) {
+ result.key = EscapeSequences_1.C0.ESC + 'OA';
+ }
+ else {
+ result.key = EscapeSequences_1.C0.ESC + '[A';
+ }
+ }
+ else if (ev.key === 'UIKeyInputLeftArrow') {
+ if (applicationCursorMode) {
+ result.key = EscapeSequences_1.C0.ESC + 'OD';
+ }
+ else {
+ result.key = EscapeSequences_1.C0.ESC + '[D';
+ }
+ }
+ else if (ev.key === 'UIKeyInputRightArrow') {
+ if (applicationCursorMode) {
+ result.key = EscapeSequences_1.C0.ESC + 'OC';
+ }
+ else {
+ result.key = EscapeSequences_1.C0.ESC + '[C';
+ }
+ }
+ else if (ev.key === 'UIKeyInputDownArrow') {
+ if (applicationCursorMode) {
+ result.key = EscapeSequences_1.C0.ESC + 'OB';
+ }
+ else {
+ result.key = EscapeSequences_1.C0.ESC + '[B';
+ }
+ }
+ break;
+ case 8:
+ if (ev.shiftKey) {
+ result.key = EscapeSequences_1.C0.BS;
+ break;
+ }
+ else if (ev.altKey) {
+ result.key = EscapeSequences_1.C0.ESC + EscapeSequences_1.C0.DEL;
+ break;
+ }
+ result.key = EscapeSequences_1.C0.DEL;
+ break;
+ case 9:
+ if (ev.shiftKey) {
+ result.key = EscapeSequences_1.C0.ESC + '[Z';
+ break;
+ }
+ result.key = EscapeSequences_1.C0.HT;
+ result.cancel = true;
+ break;
+ case 13:
+ result.key = EscapeSequences_1.C0.CR;
+ result.cancel = true;
+ break;
+ case 27:
+ result.key = EscapeSequences_1.C0.ESC;
+ result.cancel = true;
+ break;
+ case 37:
+ if (modifiers) {
+ result.key = EscapeSequences_1.C0.ESC + '[1;' + (modifiers + 1) + 'D';
+ if (result.key === EscapeSequences_1.C0.ESC + '[1;3D') {
+ result.key = isMac ? EscapeSequences_1.C0.ESC + 'b' : EscapeSequences_1.C0.ESC + '[1;5D';
+ }
+ }
+ else if (applicationCursorMode) {
+ result.key = EscapeSequences_1.C0.ESC + 'OD';
+ }
+ else {
+ result.key = EscapeSequences_1.C0.ESC + '[D';
+ }
+ break;
+ case 39:
+ if (modifiers) {
+ result.key = EscapeSequences_1.C0.ESC + '[1;' + (modifiers + 1) + 'C';
+ if (result.key === EscapeSequences_1.C0.ESC + '[1;3C') {
+ result.key = isMac ? EscapeSequences_1.C0.ESC + 'f' : EscapeSequences_1.C0.ESC + '[1;5C';
+ }
+ }
+ else if (applicationCursorMode) {
+ result.key = EscapeSequences_1.C0.ESC + 'OC';
+ }
+ else {
+ result.key = EscapeSequences_1.C0.ESC + '[C';
+ }
+ break;
+ case 38:
+ if (modifiers) {
+ result.key = EscapeSequences_1.C0.ESC + '[1;' + (modifiers + 1) + 'A';
+ if (result.key === EscapeSequences_1.C0.ESC + '[1;3A') {
+ result.key = EscapeSequences_1.C0.ESC + '[1;5A';
+ }
+ }
+ else if (applicationCursorMode) {
+ result.key = EscapeSequences_1.C0.ESC + 'OA';
+ }
+ else {
+ result.key = EscapeSequences_1.C0.ESC + '[A';
+ }
+ break;
+ case 40:
+ if (modifiers) {
+ result.key = EscapeSequences_1.C0.ESC + '[1;' + (modifiers + 1) + 'B';
+ if (result.key === EscapeSequences_1.C0.ESC + '[1;3B') {
+ result.key = EscapeSequences_1.C0.ESC + '[1;5B';
+ }
+ }
+ else if (applicationCursorMode) {
+ result.key = EscapeSequences_1.C0.ESC + 'OB';
+ }
+ else {
+ result.key = EscapeSequences_1.C0.ESC + '[B';
+ }
+ break;
+ case 45:
+ if (!ev.shiftKey && !ev.ctrlKey) {
+ result.key = EscapeSequences_1.C0.ESC + '[2~';
+ }
+ break;
+ case 46:
+ if (modifiers) {
+ result.key = EscapeSequences_1.C0.ESC + '[3;' + (modifiers + 1) + '~';
+ }
+ else {
+ result.key = EscapeSequences_1.C0.ESC + '[3~';
+ }
+ break;
+ case 36:
+ if (modifiers) {
+ result.key = EscapeSequences_1.C0.ESC + '[1;' + (modifiers + 1) + 'H';
+ }
+ else if (applicationCursorMode) {
+ result.key = EscapeSequences_1.C0.ESC + 'OH';
+ }
+ else {
+ result.key = EscapeSequences_1.C0.ESC + '[H';
+ }
+ break;
+ case 35:
+ if (modifiers) {
+ result.key = EscapeSequences_1.C0.ESC + '[1;' + (modifiers + 1) + 'F';
+ }
+ else if (applicationCursorMode) {
+ result.key = EscapeSequences_1.C0.ESC + 'OF';
+ }
+ else {
+ result.key = EscapeSequences_1.C0.ESC + '[F';
+ }
+ break;
+ case 33:
+ if (ev.shiftKey) {
+ result.type = 2;
+ }
+ else {
+ result.key = EscapeSequences_1.C0.ESC + '[5~';
+ }
+ break;
+ case 34:
+ if (ev.shiftKey) {
+ result.type = 3;
+ }
+ else {
+ result.key = EscapeSequences_1.C0.ESC + '[6~';
+ }
+ break;
+ case 112:
+ if (modifiers) {
+ result.key = EscapeSequences_1.C0.ESC + '[1;' + (modifiers + 1) + 'P';
+ }
+ else {
+ result.key = EscapeSequences_1.C0.ESC + 'OP';
+ }
+ break;
+ case 113:
+ if (modifiers) {
+ result.key = EscapeSequences_1.C0.ESC + '[1;' + (modifiers + 1) + 'Q';
+ }
+ else {
+ result.key = EscapeSequences_1.C0.ESC + 'OQ';
+ }
+ break;
+ case 114:
+ if (modifiers) {
+ result.key = EscapeSequences_1.C0.ESC + '[1;' + (modifiers + 1) + 'R';
+ }
+ else {
+ result.key = EscapeSequences_1.C0.ESC + 'OR';
+ }
+ break;
+ case 115:
+ if (modifiers) {
+ result.key = EscapeSequences_1.C0.ESC + '[1;' + (modifiers + 1) + 'S';
+ }
+ else {
+ result.key = EscapeSequences_1.C0.ESC + 'OS';
+ }
+ break;
+ case 116:
+ if (modifiers) {
+ result.key = EscapeSequences_1.C0.ESC + '[15;' + (modifiers + 1) + '~';
+ }
+ else {
+ result.key = EscapeSequences_1.C0.ESC + '[15~';
+ }
+ break;
+ case 117:
+ if (modifiers) {
+ result.key = EscapeSequences_1.C0.ESC + '[17;' + (modifiers + 1) + '~';
+ }
+ else {
+ result.key = EscapeSequences_1.C0.ESC + '[17~';
+ }
+ break;
+ case 118:
+ if (modifiers) {
+ result.key = EscapeSequences_1.C0.ESC + '[18;' + (modifiers + 1) + '~';
+ }
+ else {
+ result.key = EscapeSequences_1.C0.ESC + '[18~';
+ }
+ break;
+ case 119:
+ if (modifiers) {
+ result.key = EscapeSequences_1.C0.ESC + '[19;' + (modifiers + 1) + '~';
+ }
+ else {
+ result.key = EscapeSequences_1.C0.ESC + '[19~';
+ }
+ break;
+ case 120:
+ if (modifiers) {
+ result.key = EscapeSequences_1.C0.ESC + '[20;' + (modifiers + 1) + '~';
+ }
+ else {
+ result.key = EscapeSequences_1.C0.ESC + '[20~';
+ }
+ break;
+ case 121:
+ if (modifiers) {
+ result.key = EscapeSequences_1.C0.ESC + '[21;' + (modifiers + 1) + '~';
+ }
+ else {
+ result.key = EscapeSequences_1.C0.ESC + '[21~';
+ }
+ break;
+ case 122:
+ if (modifiers) {
+ result.key = EscapeSequences_1.C0.ESC + '[23;' + (modifiers + 1) + '~';
+ }
+ else {
+ result.key = EscapeSequences_1.C0.ESC + '[23~';
+ }
+ break;
+ case 123:
+ if (modifiers) {
+ result.key = EscapeSequences_1.C0.ESC + '[24;' + (modifiers + 1) + '~';
+ }
+ else {
+ result.key = EscapeSequences_1.C0.ESC + '[24~';
+ }
+ break;
+ default:
+ if (ev.ctrlKey && !ev.shiftKey && !ev.altKey && !ev.metaKey) {
+ if (ev.keyCode >= 65 && ev.keyCode <= 90) {
+ result.key = String.fromCharCode(ev.keyCode - 64);
+ }
+ else if (ev.keyCode === 32) {
+ result.key = String.fromCharCode(0);
+ }
+ else if (ev.keyCode >= 51 && ev.keyCode <= 55) {
+ result.key = String.fromCharCode(ev.keyCode - 51 + 27);
+ }
+ else if (ev.keyCode === 56) {
+ result.key = String.fromCharCode(127);
+ }
+ else if (ev.keyCode === 219) {
+ result.key = String.fromCharCode(27);
+ }
+ else if (ev.keyCode === 220) {
+ result.key = String.fromCharCode(28);
+ }
+ else if (ev.keyCode === 221) {
+ result.key = String.fromCharCode(29);
+ }
+ }
+ else if ((!isMac || macOptionIsMeta) && ev.altKey && !ev.metaKey) {
+ var keyMapping = KEYCODE_KEY_MAPPINGS[ev.keyCode];
+ var key = keyMapping && keyMapping[!ev.shiftKey ? 0 : 1];
+ if (key) {
+ result.key = EscapeSequences_1.C0.ESC + key;
+ }
+ else if (ev.keyCode >= 65 && ev.keyCode <= 90) {
+ var keyCode = ev.ctrlKey ? ev.keyCode - 64 : ev.keyCode + 32;
+ result.key = EscapeSequences_1.C0.ESC + String.fromCharCode(keyCode);
+ }
+ }
+ else if (isMac && !ev.altKey && !ev.ctrlKey && ev.metaKey) {
+ if (ev.keyCode === 65) {
+ result.type = 1;
+ }
+ }
+ else if (ev.key && !ev.ctrlKey && !ev.altKey && !ev.metaKey && ev.keyCode >= 48 && ev.key.length === 1) {
+ result.key = ev.key;
+ }
+ break;
+ }
+ return result;
+}
+exports.evaluateKeyboardEvent = evaluateKeyboardEvent;
+
+},{"../../common/data/EscapeSequences":22}],26:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var StringToUtf32 = (function () {
+ function StringToUtf32() {
+ this._interim = 0;
+ }
+ StringToUtf32.prototype.clear = function () {
+ this._interim = 0;
+ };
+ StringToUtf32.prototype.decode = function (input, target) {
+ var length = input.length;
+ if (!length) {
+ return 0;
+ }
+ var size = 0;
+ var startPos = 0;
+ if (this._interim) {
+ var second = input.charCodeAt(startPos++);
+ if (0xDC00 <= second && second <= 0xDFFF) {
+ target[size++] = (this._interim - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;
+ }
+ else {
+ target[size++] = this._interim;
+ target[size++] = second;
+ }
+ this._interim = 0;
+ }
+ for (var i = startPos; i < length; ++i) {
+ var code = input.charCodeAt(i);
+ if (0xD800 <= code && code <= 0xDBFF) {
+ if (++i >= length) {
+ this._interim = code;
+ return size;
+ }
+ var second = input.charCodeAt(i);
+ if (0xDC00 <= second && second <= 0xDFFF) {
+ target[size++] = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;
+ }
+ else {
+ target[size++] = code;
+ target[size++] = second;
+ }
+ continue;
+ }
+ target[size++] = code;
+ }
+ return size;
+ };
+ return StringToUtf32;
+}());
+exports.StringToUtf32 = StringToUtf32;
+function stringFromCodePoint(codePoint) {
+ if (codePoint > 0xFFFF) {
+ codePoint -= 0x10000;
+ return String.fromCharCode((codePoint >> 10) + 0xD800) + String.fromCharCode((codePoint % 0x400) + 0xDC00);
+ }
+ return String.fromCharCode(codePoint);
+}
+exports.stringFromCodePoint = stringFromCodePoint;
+function utf32ToString(data, start, end) {
+ if (start === void 0) { start = 0; }
+ if (end === void 0) { end = data.length; }
+ var result = '';
+ for (var i = start; i < end; ++i) {
+ var codepoint = data[i];
+ if (codepoint > 0xFFFF) {
+ codepoint -= 0x10000;
+ result += String.fromCharCode((codepoint >> 10) + 0xD800) + String.fromCharCode((codepoint % 0x400) + 0xDC00);
+ }
+ else {
+ result += String.fromCharCode(codepoint);
+ }
+ }
+ return result;
+}
+exports.utf32ToString = utf32ToString;
+
+},{}],27:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var EscapeSequences_1 = require("../common/data/EscapeSequences");
+var AltClickHandler = (function () {
+ function AltClickHandler(_mouseEvent, _terminal) {
+ var _a;
+ this._mouseEvent = _mouseEvent;
+ this._terminal = _terminal;
+ this._lines = this._terminal.buffer.lines;
+ this._startCol = this._terminal.buffer.x;
+ this._startRow = this._terminal.buffer.y;
+ var coordinates = this._terminal.mouseHelper.getCoords(this._mouseEvent, this._terminal.element, this._terminal.charMeasure, this._terminal.cols, this._terminal.rows, false);
+ if (coordinates) {
+ _a = coordinates.map(function (coordinate) {
+ return coordinate - 1;
+ }), this._endCol = _a[0], this._endRow = _a[1];
+ }
+ }
+ AltClickHandler.prototype.move = function () {
+ if (this._mouseEvent.altKey && this._endCol !== undefined && this._endRow !== undefined) {
+ this._terminal.handler(this._arrowSequences());
+ }
+ };
+ AltClickHandler.prototype._arrowSequences = function () {
+ if (!this._terminal.buffer.hasScrollback) {
+ return this._resetStartingRow() + this._moveToRequestedRow() + this._moveToRequestedCol();
+ }
+ return this._moveHorizontallyOnly();
+ };
+ AltClickHandler.prototype._resetStartingRow = function () {
+ if (this._moveToRequestedRow().length === 0) {
+ return '';
+ }
+ return repeat(this._bufferLine(this._startCol, this._startRow, this._startCol, this._startRow - this._wrappedRowsForRow(this._startRow), false).length, this._sequence("D"));
+ };
+ AltClickHandler.prototype._moveToRequestedRow = function () {
+ var startRow = this._startRow - this._wrappedRowsForRow(this._startRow);
+ var endRow = this._endRow - this._wrappedRowsForRow(this._endRow);
+ var rowsToMove = Math.abs(startRow - endRow) - this._wrappedRowsCount();
+ return repeat(rowsToMove, this._sequence(this._verticalDirection()));
+ };
+ AltClickHandler.prototype._moveToRequestedCol = function () {
+ var startRow;
+ if (this._moveToRequestedRow().length > 0) {
+ startRow = this._endRow - this._wrappedRowsForRow(this._endRow);
+ }
+ else {
+ startRow = this._startRow;
+ }
+ var endRow = this._endRow;
+ var direction = this._horizontalDirection();
+ return repeat(this._bufferLine(this._startCol, startRow, this._endCol, endRow, direction === "C").length, this._sequence(direction));
+ };
+ AltClickHandler.prototype._moveHorizontallyOnly = function () {
+ var direction = this._horizontalDirection();
+ return repeat(Math.abs(this._startCol - this._endCol), this._sequence(direction));
+ };
+ AltClickHandler.prototype._wrappedRowsCount = function () {
+ var wrappedRows = 0;
+ var startRow = this._startRow - this._wrappedRowsForRow(this._startRow);
+ var endRow = this._endRow - this._wrappedRowsForRow(this._endRow);
+ for (var i = 0; i < Math.abs(startRow - endRow); i++) {
+ var direction = this._verticalDirection() === "A" ? -1 : 1;
+ if (this._lines.get(startRow + (direction * i)).isWrapped) {
+ wrappedRows++;
+ }
+ }
+ return wrappedRows;
+ };
+ AltClickHandler.prototype._wrappedRowsForRow = function (currentRow) {
+ var rowCount = 0;
+ var lineWraps = this._lines.get(currentRow).isWrapped;
+ while (lineWraps && currentRow >= 0 && currentRow < this._terminal.rows) {
+ rowCount++;
+ currentRow--;
+ lineWraps = this._lines.get(currentRow).isWrapped;
+ }
+ return rowCount;
+ };
+ AltClickHandler.prototype._horizontalDirection = function () {
+ var startRow;
+ if (this._moveToRequestedRow().length > 0) {
+ startRow = this._endRow - this._wrappedRowsForRow(this._endRow);
+ }
+ else {
+ startRow = this._startRow;
+ }
+ if ((this._startCol < this._endCol &&
+ startRow <= this._endRow) ||
+ (this._startCol >= this._endCol &&
+ startRow < this._endRow)) {
+ return "C";
+ }
+ return "D";
+ };
+ AltClickHandler.prototype._verticalDirection = function () {
+ if (this._startRow > this._endRow) {
+ return "A";
+ }
+ return "B";
+ };
+ AltClickHandler.prototype._bufferLine = function (startCol, startRow, endCol, endRow, forward) {
+ var currentCol = startCol;
+ var currentRow = startRow;
+ var bufferStr = '';
+ while (currentCol !== endCol || currentRow !== endRow) {
+ currentCol += forward ? 1 : -1;
+ if (forward && currentCol > this._terminal.cols - 1) {
+ bufferStr += this._terminal.buffer.translateBufferLineToString(currentRow, false, startCol, currentCol);
+ currentCol = 0;
+ startCol = 0;
+ currentRow++;
+ }
+ else if (!forward && currentCol < 0) {
+ bufferStr += this._terminal.buffer.translateBufferLineToString(currentRow, false, 0, startCol + 1);
+ currentCol = this._terminal.cols - 1;
+ startCol = currentCol;
+ currentRow--;
+ }
+ }
+ return bufferStr + this._terminal.buffer.translateBufferLineToString(currentRow, false, startCol, currentCol);
+ };
+ AltClickHandler.prototype._sequence = function (direction) {
+ var mod = this._terminal.applicationCursor ? 'O' : '[';
+ return EscapeSequences_1.C0.ESC + mod + direction;
+ };
+ return AltClickHandler;
+}());
+exports.AltClickHandler = AltClickHandler;
+function repeat(count, str) {
+ count = Math.floor(count);
+ var rpt = '';
+ for (var i = 0; i < count; i++) {
+ rpt += str;
+ }
+ return rpt;
+}
+
+},{"../common/data/EscapeSequences":22}],28:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var Terminal_1 = require("../Terminal");
+var Strings = require("../Strings");
+var Terminal = (function () {
+ function Terminal(options) {
+ this._core = new Terminal_1.Terminal(options);
+ }
+ Object.defineProperty(Terminal.prototype, "element", {
+ get: function () { return this._core.element; },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(Terminal.prototype, "textarea", {
+ get: function () { return this._core.textarea; },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(Terminal.prototype, "rows", {
+ get: function () { return this._core.rows; },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(Terminal.prototype, "cols", {
+ get: function () { return this._core.cols; },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(Terminal.prototype, "markers", {
+ get: function () { return this._core.markers; },
+ enumerable: true,
+ configurable: true
+ });
+ Terminal.prototype.blur = function () {
+ this._core.blur();
+ };
+ Terminal.prototype.focus = function () {
+ this._core.focus();
+ };
+ Terminal.prototype.on = function (type, listener) {
+ this._core.on(type, listener);
+ };
+ Terminal.prototype.off = function (type, listener) {
+ this._core.off(type, listener);
+ };
+ Terminal.prototype.emit = function (type, data) {
+ this._core.emit(type, data);
+ };
+ Terminal.prototype.addDisposableListener = function (type, handler) {
+ return this._core.addDisposableListener(type, handler);
+ };
+ Terminal.prototype.resize = function (columns, rows) {
+ this._core.resize(columns, rows);
+ };
+ Terminal.prototype.writeln = function (data) {
+ this._core.writeln(data);
+ };
+ Terminal.prototype.open = function (parent) {
+ this._core.open(parent);
+ };
+ Terminal.prototype.attachCustomKeyEventHandler = function (customKeyEventHandler) {
+ this._core.attachCustomKeyEventHandler(customKeyEventHandler);
+ };
+ Terminal.prototype.addCsiHandler = function (flag, callback) {
+ return this._core.addCsiHandler(flag, callback);
+ };
+ Terminal.prototype.addOscHandler = function (ident, callback) {
+ return this._core.addOscHandler(ident, callback);
+ };
+ Terminal.prototype.registerLinkMatcher = function (regex, handler, options) {
+ return this._core.registerLinkMatcher(regex, handler, options);
+ };
+ Terminal.prototype.deregisterLinkMatcher = function (matcherId) {
+ this._core.deregisterLinkMatcher(matcherId);
+ };
+ Terminal.prototype.registerCharacterJoiner = function (handler) {
+ return this._core.registerCharacterJoiner(handler);
+ };
+ Terminal.prototype.deregisterCharacterJoiner = function (joinerId) {
+ this._core.deregisterCharacterJoiner(joinerId);
+ };
+ Terminal.prototype.addMarker = function (cursorYOffset) {
+ return this._core.addMarker(cursorYOffset);
+ };
+ Terminal.prototype.hasSelection = function () {
+ return this._core.hasSelection();
+ };
+ Terminal.prototype.getSelection = function () {
+ return this._core.getSelection();
+ };
+ Terminal.prototype.clearSelection = function () {
+ this._core.clearSelection();
+ };
+ Terminal.prototype.selectAll = function () {
+ this._core.selectAll();
+ };
+ Terminal.prototype.selectLines = function (start, end) {
+ this._core.selectLines(start, end);
+ };
+ Terminal.prototype.dispose = function () {
+ this._core.dispose();
+ };
+ Terminal.prototype.destroy = function () {
+ this._core.destroy();
+ };
+ Terminal.prototype.scrollLines = function (amount) {
+ this._core.scrollLines(amount);
+ };
+ Terminal.prototype.scrollPages = function (pageCount) {
+ this._core.scrollPages(pageCount);
+ };
+ Terminal.prototype.scrollToTop = function () {
+ this._core.scrollToTop();
+ };
+ Terminal.prototype.scrollToBottom = function () {
+ this._core.scrollToBottom();
+ };
+ Terminal.prototype.scrollToLine = function (line) {
+ this._core.scrollToLine(line);
+ };
+ Terminal.prototype.clear = function () {
+ this._core.clear();
+ };
+ Terminal.prototype.write = function (data) {
+ this._core.write(data);
+ };
+ Terminal.prototype.getOption = function (key) {
+ return this._core.getOption(key);
+ };
+ Terminal.prototype.setOption = function (key, value) {
+ this._core.setOption(key, value);
+ };
+ Terminal.prototype.refresh = function (start, end) {
+ this._core.refresh(start, end);
+ };
+ Terminal.prototype.reset = function () {
+ this._core.reset();
+ };
+ Terminal.applyAddon = function (addon) {
+ addon.apply(Terminal);
+ };
+ Object.defineProperty(Terminal, "strings", {
+ get: function () {
+ return Strings;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ return Terminal;
+}());
+exports.Terminal = Terminal;
+
+},{"../Strings":14,"../Terminal":15}],29:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var Types_1 = require("./atlas/Types");
+var CharAtlasCache_1 = require("./atlas/CharAtlasCache");
+var Buffer_1 = require("../Buffer");
+var CharAtlasUtils_1 = require("./atlas/CharAtlasUtils");
+var BaseRenderLayer = (function () {
+ function BaseRenderLayer(_container, id, zIndex, _alpha, _colors) {
+ this._container = _container;
+ this._alpha = _alpha;
+ this._colors = _colors;
+ this._scaledCharWidth = 0;
+ this._scaledCharHeight = 0;
+ this._scaledCellWidth = 0;
+ this._scaledCellHeight = 0;
+ this._scaledCharLeft = 0;
+ this._scaledCharTop = 0;
+ this._currentGlyphIdentifier = {
+ chars: '',
+ code: 0,
+ bg: 0,
+ fg: 0,
+ bold: false,
+ dim: false,
+ italic: false
+ };
+ this._canvas = document.createElement('canvas');
+ this._canvas.classList.add("xterm-" + id + "-layer");
+ this._canvas.style.zIndex = zIndex.toString();
+ this._initCanvas();
+ this._container.appendChild(this._canvas);
+ }
+ BaseRenderLayer.prototype.dispose = function () {
+ this._container.removeChild(this._canvas);
+ if (this._charAtlas) {
+ this._charAtlas.dispose();
+ }
+ };
+ BaseRenderLayer.prototype._initCanvas = function () {
+ this._ctx = this._canvas.getContext('2d', { alpha: this._alpha });
+ if (!this._alpha) {
+ this.clearAll();
+ }
+ };
+ BaseRenderLayer.prototype.onOptionsChanged = function (terminal) { };
+ BaseRenderLayer.prototype.onBlur = function (terminal) { };
+ BaseRenderLayer.prototype.onFocus = function (terminal) { };
+ BaseRenderLayer.prototype.onCursorMove = function (terminal) { };
+ BaseRenderLayer.prototype.onGridChanged = function (terminal, startRow, endRow) { };
+ BaseRenderLayer.prototype.onSelectionChanged = function (terminal, start, end, columnSelectMode) {
+ if (columnSelectMode === void 0) { columnSelectMode = false; }
+ };
+ BaseRenderLayer.prototype.onThemeChanged = function (terminal, colorSet) {
+ this._refreshCharAtlas(terminal, colorSet);
+ };
+ BaseRenderLayer.prototype.setTransparency = function (terminal, alpha) {
+ if (alpha === this._alpha) {
+ return;
+ }
+ var oldCanvas = this._canvas;
+ this._alpha = alpha;
+ this._canvas = this._canvas.cloneNode();
+ this._initCanvas();
+ this._container.replaceChild(this._canvas, oldCanvas);
+ this._refreshCharAtlas(terminal, this._colors);
+ this.onGridChanged(terminal, 0, terminal.rows - 1);
+ };
+ BaseRenderLayer.prototype._refreshCharAtlas = function (terminal, colorSet) {
+ if (this._scaledCharWidth <= 0 && this._scaledCharHeight <= 0) {
+ return;
+ }
+ this._charAtlas = CharAtlasCache_1.acquireCharAtlas(terminal, colorSet, this._scaledCharWidth, this._scaledCharHeight);
+ this._charAtlas.warmUp();
+ };
+ BaseRenderLayer.prototype.resize = function (terminal, dim) {
+ this._scaledCellWidth = dim.scaledCellWidth;
+ this._scaledCellHeight = dim.scaledCellHeight;
+ this._scaledCharWidth = dim.scaledCharWidth;
+ this._scaledCharHeight = dim.scaledCharHeight;
+ this._scaledCharLeft = dim.scaledCharLeft;
+ this._scaledCharTop = dim.scaledCharTop;
+ this._canvas.width = dim.scaledCanvasWidth;
+ this._canvas.height = dim.scaledCanvasHeight;
+ this._canvas.style.width = dim.canvasWidth + "px";
+ this._canvas.style.height = dim.canvasHeight + "px";
+ if (!this._alpha) {
+ this.clearAll();
+ }
+ this._refreshCharAtlas(terminal, this._colors);
+ };
+ BaseRenderLayer.prototype.fillCells = function (x, y, width, height) {
+ this._ctx.fillRect(x * this._scaledCellWidth, y * this._scaledCellHeight, width * this._scaledCellWidth, height * this._scaledCellHeight);
+ };
+ BaseRenderLayer.prototype.fillBottomLineAtCells = function (x, y, width) {
+ if (width === void 0) { width = 1; }
+ this._ctx.fillRect(x * this._scaledCellWidth, (y + 1) * this._scaledCellHeight - window.devicePixelRatio - 1, width * this._scaledCellWidth, window.devicePixelRatio);
+ };
+ BaseRenderLayer.prototype.fillLeftLineAtCell = function (x, y) {
+ this._ctx.fillRect(x * this._scaledCellWidth, y * this._scaledCellHeight, window.devicePixelRatio, this._scaledCellHeight);
+ };
+ BaseRenderLayer.prototype.strokeRectAtCell = function (x, y, width, height) {
+ this._ctx.lineWidth = window.devicePixelRatio;
+ this._ctx.strokeRect(x * this._scaledCellWidth + window.devicePixelRatio / 2, y * this._scaledCellHeight + (window.devicePixelRatio / 2), width * this._scaledCellWidth - window.devicePixelRatio, (height * this._scaledCellHeight) - window.devicePixelRatio);
+ };
+ BaseRenderLayer.prototype.clearAll = function () {
+ if (this._alpha) {
+ this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);
+ }
+ else {
+ this._ctx.fillStyle = this._colors.background.css;
+ this._ctx.fillRect(0, 0, this._canvas.width, this._canvas.height);
+ }
+ };
+ BaseRenderLayer.prototype.clearCells = function (x, y, width, height) {
+ if (this._alpha) {
+ this._ctx.clearRect(x * this._scaledCellWidth, y * this._scaledCellHeight, width * this._scaledCellWidth, height * this._scaledCellHeight);
+ }
+ else {
+ this._ctx.fillStyle = this._colors.background.css;
+ this._ctx.fillRect(x * this._scaledCellWidth, y * this._scaledCellHeight, width * this._scaledCellWidth, height * this._scaledCellHeight);
+ }
+ };
+ BaseRenderLayer.prototype.fillCharTrueColor = function (terminal, charData, x, y) {
+ this._ctx.font = this._getFont(terminal, false, false);
+ this._ctx.textBaseline = 'middle';
+ this._clipRow(terminal, y);
+ this._ctx.fillText(charData[Buffer_1.CHAR_DATA_CHAR_INDEX], x * this._scaledCellWidth + this._scaledCharLeft, y * this._scaledCellHeight + this._scaledCharTop + this._scaledCharHeight / 2);
+ };
+ BaseRenderLayer.prototype.drawChars = function (terminal, chars, code, width, x, y, fg, bg, bold, dim, italic) {
+ var drawInBrightColor = terminal.options.drawBoldTextInBrightColors && bold && fg < 8 && fg !== Types_1.INVERTED_DEFAULT_COLOR;
+ fg += drawInBrightColor ? 8 : 0;
+ this._currentGlyphIdentifier.chars = chars;
+ this._currentGlyphIdentifier.code = code;
+ this._currentGlyphIdentifier.bg = bg;
+ this._currentGlyphIdentifier.fg = fg;
+ this._currentGlyphIdentifier.bold = bold && terminal.options.enableBold;
+ this._currentGlyphIdentifier.dim = dim;
+ this._currentGlyphIdentifier.italic = italic;
+ var atlasDidDraw = this._charAtlas && this._charAtlas.draw(this._ctx, this._currentGlyphIdentifier, x * this._scaledCellWidth + this._scaledCharLeft, y * this._scaledCellHeight + this._scaledCharTop);
+ if (!atlasDidDraw) {
+ this._drawUncachedChars(terminal, chars, width, fg, x, y, bold && terminal.options.enableBold, dim, italic);
+ }
+ };
+ BaseRenderLayer.prototype._drawUncachedChars = function (terminal, chars, width, fg, x, y, bold, dim, italic) {
+ this._ctx.save();
+ this._ctx.font = this._getFont(terminal, bold, italic);
+ this._ctx.textBaseline = 'middle';
+ if (fg === Types_1.INVERTED_DEFAULT_COLOR) {
+ this._ctx.fillStyle = this._colors.background.css;
+ }
+ else if (CharAtlasUtils_1.is256Color(fg)) {
+ this._ctx.fillStyle = this._colors.ansi[fg].css;
+ }
+ else {
+ this._ctx.fillStyle = this._colors.foreground.css;
+ }
+ this._clipRow(terminal, y);
+ if (dim) {
+ this._ctx.globalAlpha = Types_1.DIM_OPACITY;
+ }
+ this._ctx.fillText(chars, x * this._scaledCellWidth + this._scaledCharLeft, y * this._scaledCellHeight + this._scaledCharTop + this._scaledCharHeight / 2);
+ this._ctx.restore();
+ };
+ BaseRenderLayer.prototype._clipRow = function (terminal, y) {
+ this._ctx.beginPath();
+ this._ctx.rect(0, y * this._scaledCellHeight, terminal.cols * this._scaledCellWidth, this._scaledCellHeight);
+ this._ctx.clip();
+ };
+ BaseRenderLayer.prototype._getFont = function (terminal, isBold, isItalic) {
+ var fontWeight = isBold ? terminal.options.fontWeightBold : terminal.options.fontWeight;
+ var fontStyle = isItalic ? 'italic' : '';
+ return fontStyle + " " + fontWeight + " " + terminal.options.fontSize * window.devicePixelRatio + "px " + terminal.options.fontFamily;
+ };
+ return BaseRenderLayer;
+}());
+exports.BaseRenderLayer = BaseRenderLayer;
+
+},{"../Buffer":2,"./atlas/CharAtlasCache":39,"./atlas/CharAtlasUtils":41,"./atlas/Types":46}],30:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var Buffer_1 = require("../Buffer");
+var CharacterJoinerRegistry = (function () {
+ function CharacterJoinerRegistry(_terminal) {
+ this._terminal = _terminal;
+ this._characterJoiners = [];
+ this._nextCharacterJoinerId = 0;
+ }
+ CharacterJoinerRegistry.prototype.registerCharacterJoiner = function (handler) {
+ var joiner = {
+ id: this._nextCharacterJoinerId++,
+ handler: handler
+ };
+ this._characterJoiners.push(joiner);
+ return joiner.id;
+ };
+ CharacterJoinerRegistry.prototype.deregisterCharacterJoiner = function (joinerId) {
+ for (var i = 0; i < this._characterJoiners.length; i++) {
+ if (this._characterJoiners[i].id === joinerId) {
+ this._characterJoiners.splice(i, 1);
+ return true;
+ }
+ }
+ return false;
+ };
+ CharacterJoinerRegistry.prototype.getJoinedCharacters = function (row) {
+ if (this._characterJoiners.length === 0) {
+ return [];
+ }
+ var line = this._terminal.buffer.lines.get(row);
+ if (line.length === 0) {
+ return [];
+ }
+ var ranges = [];
+ var lineStr = this._terminal.buffer.translateBufferLineToString(row, true);
+ var rangeStartColumn = 0;
+ var currentStringIndex = 0;
+ var rangeStartStringIndex = 0;
+ var rangeAttr = line.get(0)[Buffer_1.CHAR_DATA_ATTR_INDEX] >> 9;
+ for (var x = 0; x < this._terminal.cols; x++) {
+ var charData = line.get(x);
+ var chars = charData[Buffer_1.CHAR_DATA_CHAR_INDEX];
+ var width = charData[Buffer_1.CHAR_DATA_WIDTH_INDEX];
+ var attr = charData[Buffer_1.CHAR_DATA_ATTR_INDEX] >> 9;
+ if (width === 0) {
+ continue;
+ }
+ if (attr !== rangeAttr) {
+ if (x - rangeStartColumn > 1) {
+ var joinedRanges = this._getJoinedRanges(lineStr, rangeStartStringIndex, currentStringIndex, line, rangeStartColumn);
+ for (var i = 0; i < joinedRanges.length; i++) {
+ ranges.push(joinedRanges[i]);
+ }
+ }
+ rangeStartColumn = x;
+ rangeStartStringIndex = currentStringIndex;
+ rangeAttr = attr;
+ }
+ currentStringIndex += chars.length;
+ }
+ if (this._terminal.cols - rangeStartColumn > 1) {
+ var joinedRanges = this._getJoinedRanges(lineStr, rangeStartStringIndex, currentStringIndex, line, rangeStartColumn);
+ for (var i = 0; i < joinedRanges.length; i++) {
+ ranges.push(joinedRanges[i]);
+ }
+ }
+ return ranges;
+ };
+ CharacterJoinerRegistry.prototype._getJoinedRanges = function (line, startIndex, endIndex, lineData, startCol) {
+ var text = line.substring(startIndex, endIndex);
+ var joinedRanges = this._characterJoiners[0].handler(text);
+ for (var i = 1; i < this._characterJoiners.length; i++) {
+ var joinerRanges = this._characterJoiners[i].handler(text);
+ for (var j = 0; j < joinerRanges.length; j++) {
+ CharacterJoinerRegistry._mergeRanges(joinedRanges, joinerRanges[j]);
+ }
+ }
+ this._stringRangesToCellRanges(joinedRanges, lineData, startCol);
+ return joinedRanges;
+ };
+ CharacterJoinerRegistry.prototype._stringRangesToCellRanges = function (ranges, line, startCol) {
+ var currentRangeIndex = 0;
+ var currentRangeStarted = false;
+ var currentStringIndex = 0;
+ var currentRange = ranges[currentRangeIndex];
+ if (!currentRange) {
+ return;
+ }
+ for (var x = startCol; x < this._terminal.cols; x++) {
+ var charData = line.get(x);
+ var width = charData[Buffer_1.CHAR_DATA_WIDTH_INDEX];
+ var length_1 = charData[Buffer_1.CHAR_DATA_CHAR_INDEX].length;
+ if (width === 0) {
+ continue;
+ }
+ if (!currentRangeStarted && currentRange[0] <= currentStringIndex) {
+ currentRange[0] = x;
+ currentRangeStarted = true;
+ }
+ if (currentRange[1] <= currentStringIndex) {
+ currentRange[1] = x;
+ currentRange = ranges[++currentRangeIndex];
+ if (!currentRange) {
+ break;
+ }
+ if (currentRange[0] <= currentStringIndex) {
+ currentRange[0] = x;
+ currentRangeStarted = true;
+ }
+ else {
+ currentRangeStarted = false;
+ }
+ }
+ currentStringIndex += length_1;
+ }
+ if (currentRange) {
+ currentRange[1] = this._terminal.cols;
+ }
+ };
+ CharacterJoinerRegistry._mergeRanges = function (ranges, newRange) {
+ var inRange = false;
+ for (var i = 0; i < ranges.length; i++) {
+ var range = ranges[i];
+ if (!inRange) {
+ if (newRange[1] <= range[0]) {
+ ranges.splice(i, 0, newRange);
+ return ranges;
+ }
+ if (newRange[1] <= range[1]) {
+ range[0] = Math.min(newRange[0], range[0]);
+ return ranges;
+ }
+ if (newRange[0] < range[1]) {
+ range[0] = Math.min(newRange[0], range[0]);
+ inRange = true;
+ }
+ continue;
+ }
+ else {
+ if (newRange[1] <= range[0]) {
+ ranges[i - 1][1] = newRange[1];
+ return ranges;
+ }
+ if (newRange[1] <= range[1]) {
+ ranges[i - 1][1] = Math.max(newRange[1], range[1]);
+ ranges.splice(i, 1);
+ inRange = false;
+ return ranges;
+ }
+ ranges.splice(i, 1);
+ i--;
+ }
+ }
+ if (inRange) {
+ ranges[ranges.length - 1][1] = newRange[1];
+ }
+ else {
+ ranges.push(newRange);
+ }
+ return ranges;
+ };
+ return CharacterJoinerRegistry;
+}());
+exports.CharacterJoinerRegistry = CharacterJoinerRegistry;
+
+},{"../Buffer":2}],31:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var DEFAULT_FOREGROUND = fromHex('#ffffff');
+var DEFAULT_BACKGROUND = fromHex('#000000');
+var DEFAULT_CURSOR = fromHex('#ffffff');
+var DEFAULT_CURSOR_ACCENT = fromHex('#000000');
+var DEFAULT_SELECTION = {
+ css: 'rgba(255, 255, 255, 0.3)',
+ rgba: 0xFFFFFF77
+};
+exports.DEFAULT_ANSI_COLORS = (function () {
+ var colors = [
+ fromHex('#2e3436'),
+ fromHex('#cc0000'),
+ fromHex('#4e9a06'),
+ fromHex('#c4a000'),
+ fromHex('#3465a4'),
+ fromHex('#75507b'),
+ fromHex('#06989a'),
+ fromHex('#d3d7cf'),
+ fromHex('#555753'),
+ fromHex('#ef2929'),
+ fromHex('#8ae234'),
+ fromHex('#fce94f'),
+ fromHex('#729fcf'),
+ fromHex('#ad7fa8'),
+ fromHex('#34e2e2'),
+ fromHex('#eeeeec')
+ ];
+ var v = [0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff];
+ for (var i = 0; i < 216; i++) {
+ var r = v[(i / 36) % 6 | 0];
+ var g = v[(i / 6) % 6 | 0];
+ var b = v[i % 6];
+ colors.push({
+ css: "#" + toPaddedHex(r) + toPaddedHex(g) + toPaddedHex(b),
+ rgba: ((r << 24) | (g << 16) | (b << 8) | 0xFF) >>> 0
+ });
+ }
+ for (var i = 0; i < 24; i++) {
+ var c = 8 + i * 10;
+ var ch = toPaddedHex(c);
+ colors.push({
+ css: "#" + ch + ch + ch,
+ rgba: ((c << 24) | (c << 16) | (c << 8) | 0xFF) >>> 0
+ });
+ }
+ return colors;
+})();
+function fromHex(css) {
+ return {
+ css: css,
+ rgba: parseInt(css.slice(1), 16) << 8 | 0xFF
+ };
+}
+function toPaddedHex(c) {
+ var s = c.toString(16);
+ return s.length < 2 ? '0' + s : s;
+}
+var ColorManager = (function () {
+ function ColorManager(document, allowTransparency) {
+ this.allowTransparency = allowTransparency;
+ var canvas = document.createElement('canvas');
+ canvas.width = 1;
+ canvas.height = 1;
+ this._ctx = canvas.getContext('2d');
+ this._ctx.globalCompositeOperation = 'copy';
+ this._litmusColor = this._ctx.createLinearGradient(0, 0, 1, 1);
+ this.colors = {
+ foreground: DEFAULT_FOREGROUND,
+ background: DEFAULT_BACKGROUND,
+ cursor: DEFAULT_CURSOR,
+ cursorAccent: DEFAULT_CURSOR_ACCENT,
+ selection: DEFAULT_SELECTION,
+ ansi: exports.DEFAULT_ANSI_COLORS.slice()
+ };
+ }
+ ColorManager.prototype.setTheme = function (theme) {
+ this.colors.foreground = this._parseColor(theme.foreground, DEFAULT_FOREGROUND);
+ this.colors.background = this._parseColor(theme.background, DEFAULT_BACKGROUND);
+ this.colors.cursor = this._parseColor(theme.cursor, DEFAULT_CURSOR, true);
+ this.colors.cursorAccent = this._parseColor(theme.cursorAccent, DEFAULT_CURSOR_ACCENT, true);
+ this.colors.selection = this._parseColor(theme.selection, DEFAULT_SELECTION, true);
+ this.colors.ansi[0] = this._parseColor(theme.black, exports.DEFAULT_ANSI_COLORS[0]);
+ this.colors.ansi[1] = this._parseColor(theme.red, exports.DEFAULT_ANSI_COLORS[1]);
+ this.colors.ansi[2] = this._parseColor(theme.green, exports.DEFAULT_ANSI_COLORS[2]);
+ this.colors.ansi[3] = this._parseColor(theme.yellow, exports.DEFAULT_ANSI_COLORS[3]);
+ this.colors.ansi[4] = this._parseColor(theme.blue, exports.DEFAULT_ANSI_COLORS[4]);
+ this.colors.ansi[5] = this._parseColor(theme.magenta, exports.DEFAULT_ANSI_COLORS[5]);
+ this.colors.ansi[6] = this._parseColor(theme.cyan, exports.DEFAULT_ANSI_COLORS[6]);
+ this.colors.ansi[7] = this._parseColor(theme.white, exports.DEFAULT_ANSI_COLORS[7]);
+ this.colors.ansi[8] = this._parseColor(theme.brightBlack, exports.DEFAULT_ANSI_COLORS[8]);
+ this.colors.ansi[9] = this._parseColor(theme.brightRed, exports.DEFAULT_ANSI_COLORS[9]);
+ this.colors.ansi[10] = this._parseColor(theme.brightGreen, exports.DEFAULT_ANSI_COLORS[10]);
+ this.colors.ansi[11] = this._parseColor(theme.brightYellow, exports.DEFAULT_ANSI_COLORS[11]);
+ this.colors.ansi[12] = this._parseColor(theme.brightBlue, exports.DEFAULT_ANSI_COLORS[12]);
+ this.colors.ansi[13] = this._parseColor(theme.brightMagenta, exports.DEFAULT_ANSI_COLORS[13]);
+ this.colors.ansi[14] = this._parseColor(theme.brightCyan, exports.DEFAULT_ANSI_COLORS[14]);
+ this.colors.ansi[15] = this._parseColor(theme.brightWhite, exports.DEFAULT_ANSI_COLORS[15]);
+ };
+ ColorManager.prototype._parseColor = function (css, fallback, allowTransparency) {
+ if (allowTransparency === void 0) { allowTransparency = this.allowTransparency; }
+ if (!css) {
+ return fallback;
+ }
+ this._ctx.fillStyle = this._litmusColor;
+ this._ctx.fillStyle = css;
+ if (typeof this._ctx.fillStyle !== 'string') {
+ console.warn("Color: " + css + " is invalid using fallback " + fallback.css);
+ return fallback;
+ }
+ this._ctx.fillRect(0, 0, 1, 1);
+ var data = this._ctx.getImageData(0, 0, 1, 1).data;
+ if (!allowTransparency && data[3] !== 0xFF) {
+ console.warn("Color: " + css + " is using transparency, but allowTransparency is false. " +
+ ("Using fallback " + fallback.css + "."));
+ return fallback;
+ }
+ return {
+ css: css,
+ rgba: (data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3]) >>> 0
+ };
+ };
+ return ColorManager;
+}());
+exports.ColorManager = ColorManager;
+
+},{}],32:[function(require,module,exports){
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ }
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var Buffer_1 = require("../Buffer");
+var BaseRenderLayer_1 = require("./BaseRenderLayer");
+var BLINK_INTERVAL = 600;
+var CursorRenderLayer = (function (_super) {
+ __extends(CursorRenderLayer, _super);
+ function CursorRenderLayer(container, zIndex, colors) {
+ var _this = _super.call(this, container, 'cursor', zIndex, true, colors) || this;
+ _this._state = {
+ x: null,
+ y: null,
+ isFocused: null,
+ style: null,
+ width: null
+ };
+ _this._cursorRenderers = {
+ 'bar': _this._renderBarCursor.bind(_this),
+ 'block': _this._renderBlockCursor.bind(_this),
+ 'underline': _this._renderUnderlineCursor.bind(_this)
+ };
+ return _this;
+ }
+ CursorRenderLayer.prototype.resize = function (terminal, dim) {
+ _super.prototype.resize.call(this, terminal, dim);
+ this._state = {
+ x: null,
+ y: null,
+ isFocused: null,
+ style: null,
+ width: null
+ };
+ };
+ CursorRenderLayer.prototype.reset = function (terminal) {
+ this._clearCursor();
+ if (this._cursorBlinkStateManager) {
+ this._cursorBlinkStateManager.dispose();
+ this._cursorBlinkStateManager = null;
+ this.onOptionsChanged(terminal);
+ }
+ };
+ CursorRenderLayer.prototype.onBlur = function (terminal) {
+ if (this._cursorBlinkStateManager) {
+ this._cursorBlinkStateManager.pause();
+ }
+ terminal.refresh(terminal.buffer.y, terminal.buffer.y);
+ };
+ CursorRenderLayer.prototype.onFocus = function (terminal) {
+ if (this._cursorBlinkStateManager) {
+ this._cursorBlinkStateManager.resume(terminal);
+ }
+ else {
+ terminal.refresh(terminal.buffer.y, terminal.buffer.y);
+ }
+ };
+ CursorRenderLayer.prototype.onOptionsChanged = function (terminal) {
+ var _this = this;
+ if (terminal.options.cursorBlink) {
+ if (!this._cursorBlinkStateManager) {
+ this._cursorBlinkStateManager = new CursorBlinkStateManager(terminal, function () {
+ _this._render(terminal, true);
+ });
+ }
+ }
+ else {
+ if (this._cursorBlinkStateManager) {
+ this._cursorBlinkStateManager.dispose();
+ this._cursorBlinkStateManager = null;
+ }
+ terminal.refresh(terminal.buffer.y, terminal.buffer.y);
+ }
+ };
+ CursorRenderLayer.prototype.onCursorMove = function (terminal) {
+ if (this._cursorBlinkStateManager) {
+ this._cursorBlinkStateManager.restartBlinkAnimation(terminal);
+ }
+ };
+ CursorRenderLayer.prototype.onGridChanged = function (terminal, startRow, endRow) {
+ if (!this._cursorBlinkStateManager || this._cursorBlinkStateManager.isPaused) {
+ this._render(terminal, false);
+ }
+ else {
+ this._cursorBlinkStateManager.restartBlinkAnimation(terminal);
+ }
+ };
+ CursorRenderLayer.prototype._render = function (terminal, triggeredByAnimationFrame) {
+ if (!terminal.cursorState || terminal.cursorHidden) {
+ this._clearCursor();
+ return;
+ }
+ var cursorY = terminal.buffer.ybase + terminal.buffer.y;
+ var viewportRelativeCursorY = cursorY - terminal.buffer.ydisp;
+ if (viewportRelativeCursorY < 0 || viewportRelativeCursorY >= terminal.rows) {
+ this._clearCursor();
+ return;
+ }
+ var charData = terminal.buffer.lines.get(cursorY).get(terminal.buffer.x);
+ if (!charData) {
+ return;
+ }
+ if (!terminal.isFocused) {
+ this._clearCursor();
+ this._ctx.save();
+ this._ctx.fillStyle = this._colors.cursor.css;
+ this._renderBlurCursor(terminal, terminal.buffer.x, viewportRelativeCursorY, charData);
+ this._ctx.restore();
+ this._state.x = terminal.buffer.x;
+ this._state.y = viewportRelativeCursorY;
+ this._state.isFocused = false;
+ this._state.style = terminal.options.cursorStyle;
+ this._state.width = charData[Buffer_1.CHAR_DATA_WIDTH_INDEX];
+ return;
+ }
+ if (this._cursorBlinkStateManager && !this._cursorBlinkStateManager.isCursorVisible) {
+ this._clearCursor();
+ return;
+ }
+ if (this._state) {
+ if (this._state.x === terminal.buffer.x &&
+ this._state.y === viewportRelativeCursorY &&
+ this._state.isFocused === terminal.isFocused &&
+ this._state.style === terminal.options.cursorStyle &&
+ this._state.width === charData[Buffer_1.CHAR_DATA_WIDTH_INDEX]) {
+ return;
+ }
+ this._clearCursor();
+ }
+ this._ctx.save();
+ this._cursorRenderers[terminal.options.cursorStyle || 'block'](terminal, terminal.buffer.x, viewportRelativeCursorY, charData);
+ this._ctx.restore();
+ this._state.x = terminal.buffer.x;
+ this._state.y = viewportRelativeCursorY;
+ this._state.isFocused = false;
+ this._state.style = terminal.options.cursorStyle;
+ this._state.width = charData[Buffer_1.CHAR_DATA_WIDTH_INDEX];
+ };
+ CursorRenderLayer.prototype._clearCursor = function () {
+ if (this._state) {
+ this.clearCells(this._state.x, this._state.y, this._state.width, 1);
+ this._state = {
+ x: null,
+ y: null,
+ isFocused: null,
+ style: null,
+ width: null
+ };
+ }
+ };
+ CursorRenderLayer.prototype._renderBarCursor = function (terminal, x, y, charData) {
+ this._ctx.save();
+ this._ctx.fillStyle = this._colors.cursor.css;
+ this.fillLeftLineAtCell(x, y);
+ this._ctx.restore();
+ };
+ CursorRenderLayer.prototype._renderBlockCursor = function (terminal, x, y, charData) {
+ this._ctx.save();
+ this._ctx.fillStyle = this._colors.cursor.css;
+ this.fillCells(x, y, charData[Buffer_1.CHAR_DATA_WIDTH_INDEX], 1);
+ this._ctx.fillStyle = this._colors.cursorAccent.css;
+ this.fillCharTrueColor(terminal, charData, x, y);
+ this._ctx.restore();
+ };
+ CursorRenderLayer.prototype._renderUnderlineCursor = function (terminal, x, y, charData) {
+ this._ctx.save();
+ this._ctx.fillStyle = this._colors.cursor.css;
+ this.fillBottomLineAtCells(x, y);
+ this._ctx.restore();
+ };
+ CursorRenderLayer.prototype._renderBlurCursor = function (terminal, x, y, charData) {
+ this._ctx.save();
+ this._ctx.strokeStyle = this._colors.cursor.css;
+ this.strokeRectAtCell(x, y, charData[Buffer_1.CHAR_DATA_WIDTH_INDEX], 1);
+ this._ctx.restore();
+ };
+ return CursorRenderLayer;
+}(BaseRenderLayer_1.BaseRenderLayer));
+exports.CursorRenderLayer = CursorRenderLayer;
+var CursorBlinkStateManager = (function () {
+ function CursorBlinkStateManager(terminal, _renderCallback) {
+ this._renderCallback = _renderCallback;
+ this.isCursorVisible = true;
+ if (terminal.isFocused) {
+ this._restartInterval();
+ }
+ }
+ Object.defineProperty(CursorBlinkStateManager.prototype, "isPaused", {
+ get: function () { return !(this._blinkStartTimeout || this._blinkInterval); },
+ enumerable: true,
+ configurable: true
+ });
+ CursorBlinkStateManager.prototype.dispose = function () {
+ if (this._blinkInterval) {
+ window.clearInterval(this._blinkInterval);
+ this._blinkInterval = null;
+ }
+ if (this._blinkStartTimeout) {
+ window.clearTimeout(this._blinkStartTimeout);
+ this._blinkStartTimeout = null;
+ }
+ if (this._animationFrame) {
+ window.cancelAnimationFrame(this._animationFrame);
+ this._animationFrame = null;
+ }
+ };
+ CursorBlinkStateManager.prototype.restartBlinkAnimation = function (terminal) {
+ var _this = this;
+ if (this.isPaused) {
+ return;
+ }
+ this._animationTimeRestarted = Date.now();
+ this.isCursorVisible = true;
+ if (!this._animationFrame) {
+ this._animationFrame = window.requestAnimationFrame(function () {
+ _this._renderCallback();
+ _this._animationFrame = null;
+ });
+ }
+ };
+ CursorBlinkStateManager.prototype._restartInterval = function (timeToStart) {
+ var _this = this;
+ if (timeToStart === void 0) { timeToStart = BLINK_INTERVAL; }
+ if (this._blinkInterval) {
+ window.clearInterval(this._blinkInterval);
+ }
+ this._blinkStartTimeout = setTimeout(function () {
+ if (_this._animationTimeRestarted) {
+ var time = BLINK_INTERVAL - (Date.now() - _this._animationTimeRestarted);
+ _this._animationTimeRestarted = null;
+ if (time > 0) {
+ _this._restartInterval(time);
+ return;
+ }
+ }
+ _this.isCursorVisible = false;
+ _this._animationFrame = window.requestAnimationFrame(function () {
+ _this._renderCallback();
+ _this._animationFrame = null;
+ });
+ _this._blinkInterval = setInterval(function () {
+ if (_this._animationTimeRestarted) {
+ var time = BLINK_INTERVAL - (Date.now() - _this._animationTimeRestarted);
+ _this._animationTimeRestarted = null;
+ _this._restartInterval(time);
+ return;
+ }
+ _this.isCursorVisible = !_this.isCursorVisible;
+ _this._animationFrame = window.requestAnimationFrame(function () {
+ _this._renderCallback();
+ _this._animationFrame = null;
+ });
+ }, BLINK_INTERVAL);
+ }, timeToStart);
+ };
+ CursorBlinkStateManager.prototype.pause = function () {
+ this.isCursorVisible = true;
+ if (this._blinkInterval) {
+ window.clearInterval(this._blinkInterval);
+ this._blinkInterval = null;
+ }
+ if (this._blinkStartTimeout) {
+ window.clearTimeout(this._blinkStartTimeout);
+ this._blinkStartTimeout = null;
+ }
+ if (this._animationFrame) {
+ window.cancelAnimationFrame(this._animationFrame);
+ this._animationFrame = null;
+ }
+ };
+ CursorBlinkStateManager.prototype.resume = function (terminal) {
+ this._animationTimeRestarted = null;
+ this._restartInterval();
+ this.restartBlinkAnimation(terminal);
+ };
+ return CursorBlinkStateManager;
+}());
+
+},{"../Buffer":2,"./BaseRenderLayer":29}],33:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var GridCache = (function () {
+ function GridCache() {
+ this.cache = [];
+ }
+ GridCache.prototype.resize = function (width, height) {
+ for (var x = 0; x < width; x++) {
+ if (this.cache.length <= x) {
+ this.cache.push([]);
+ }
+ for (var y = this.cache[x].length; y < height; y++) {
+ this.cache[x].push(null);
+ }
+ this.cache[x].length = height;
+ }
+ this.cache.length = width;
+ };
+ GridCache.prototype.clear = function () {
+ for (var x = 0; x < this.cache.length; x++) {
+ for (var y = 0; y < this.cache[x].length; y++) {
+ this.cache[x][y] = null;
+ }
+ }
+ };
+ return GridCache;
+}());
+exports.GridCache = GridCache;
+
+},{}],34:[function(require,module,exports){
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ }
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var BaseRenderLayer_1 = require("./BaseRenderLayer");
+var Types_1 = require("./atlas/Types");
+var CharAtlasUtils_1 = require("./atlas/CharAtlasUtils");
+var LinkRenderLayer = (function (_super) {
+ __extends(LinkRenderLayer, _super);
+ function LinkRenderLayer(container, zIndex, colors, terminal) {
+ var _this = _super.call(this, container, 'link', zIndex, true, colors) || this;
+ _this._state = null;
+ terminal.linkifier.on("linkhover", function (e) { return _this._onLinkHover(e); });
+ terminal.linkifier.on("linkleave", function (e) { return _this._onLinkLeave(e); });
+ return _this;
+ }
+ LinkRenderLayer.prototype.resize = function (terminal, dim) {
+ _super.prototype.resize.call(this, terminal, dim);
+ this._state = null;
+ };
+ LinkRenderLayer.prototype.reset = function (terminal) {
+ this._clearCurrentLink();
+ };
+ LinkRenderLayer.prototype._clearCurrentLink = function () {
+ if (this._state) {
+ this.clearCells(this._state.x1, this._state.y1, this._state.cols - this._state.x1, 1);
+ var middleRowCount = this._state.y2 - this._state.y1 - 1;
+ if (middleRowCount > 0) {
+ this.clearCells(0, this._state.y1 + 1, this._state.cols, middleRowCount);
+ }
+ this.clearCells(0, this._state.y2, this._state.x2, 1);
+ this._state = null;
+ }
+ };
+ LinkRenderLayer.prototype._onLinkHover = function (e) {
+ if (e.fg === Types_1.INVERTED_DEFAULT_COLOR) {
+ this._ctx.fillStyle = this._colors.background.css;
+ }
+ else if (CharAtlasUtils_1.is256Color(e.fg)) {
+ this._ctx.fillStyle = this._colors.ansi[e.fg].css;
+ }
+ else {
+ this._ctx.fillStyle = this._colors.foreground.css;
+ }
+ if (e.y1 === e.y2) {
+ this.fillBottomLineAtCells(e.x1, e.y1, e.x2 - e.x1);
+ }
+ else {
+ this.fillBottomLineAtCells(e.x1, e.y1, e.cols - e.x1);
+ for (var y = e.y1 + 1; y < e.y2; y++) {
+ this.fillBottomLineAtCells(0, y, e.cols);
+ }
+ this.fillBottomLineAtCells(0, e.y2, e.x2);
+ }
+ this._state = e;
+ };
+ LinkRenderLayer.prototype._onLinkLeave = function (e) {
+ this._clearCurrentLink();
+ };
+ return LinkRenderLayer;
+}(BaseRenderLayer_1.BaseRenderLayer));
+exports.LinkRenderLayer = LinkRenderLayer;
+
+},{"./BaseRenderLayer":29,"./atlas/CharAtlasUtils":41,"./atlas/Types":46}],35:[function(require,module,exports){
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ }
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var TextRenderLayer_1 = require("./TextRenderLayer");
+var SelectionRenderLayer_1 = require("./SelectionRenderLayer");
+var CursorRenderLayer_1 = require("./CursorRenderLayer");
+var ColorManager_1 = require("./ColorManager");
+var LinkRenderLayer_1 = require("./LinkRenderLayer");
+var EventEmitter_1 = require("../common/EventEmitter");
+var RenderDebouncer_1 = require("../ui/RenderDebouncer");
+var ScreenDprMonitor_1 = require("../ui/ScreenDprMonitor");
+var CharacterJoinerRegistry_1 = require("../renderer/CharacterJoinerRegistry");
+var Renderer = (function (_super) {
+ __extends(Renderer, _super);
+ function Renderer(_terminal, theme) {
+ var _this = _super.call(this) || this;
+ _this._terminal = _terminal;
+ _this._isPaused = false;
+ _this._needsFullRefresh = false;
+ var allowTransparency = _this._terminal.options.allowTransparency;
+ _this.colorManager = new ColorManager_1.ColorManager(document, allowTransparency);
+ _this._characterJoinerRegistry = new CharacterJoinerRegistry_1.CharacterJoinerRegistry(_terminal);
+ if (theme) {
+ _this.colorManager.setTheme(theme);
+ }
+ _this._renderLayers = [
+ new TextRenderLayer_1.TextRenderLayer(_this._terminal.screenElement, 0, _this.colorManager.colors, _this._characterJoinerRegistry, allowTransparency),
+ new SelectionRenderLayer_1.SelectionRenderLayer(_this._terminal.screenElement, 1, _this.colorManager.colors),
+ new LinkRenderLayer_1.LinkRenderLayer(_this._terminal.screenElement, 2, _this.colorManager.colors, _this._terminal),
+ new CursorRenderLayer_1.CursorRenderLayer(_this._terminal.screenElement, 3, _this.colorManager.colors)
+ ];
+ _this.dimensions = {
+ scaledCharWidth: null,
+ scaledCharHeight: null,
+ scaledCellWidth: null,
+ scaledCellHeight: null,
+ scaledCharLeft: null,
+ scaledCharTop: null,
+ scaledCanvasWidth: null,
+ scaledCanvasHeight: null,
+ canvasWidth: null,
+ canvasHeight: null,
+ actualCellWidth: null,
+ actualCellHeight: null
+ };
+ _this._devicePixelRatio = window.devicePixelRatio;
+ _this._updateDimensions();
+ _this.onOptionsChanged();
+ _this._renderDebouncer = new RenderDebouncer_1.RenderDebouncer(_this._terminal, _this._renderRows.bind(_this));
+ _this._screenDprMonitor = new ScreenDprMonitor_1.ScreenDprMonitor();
+ _this._screenDprMonitor.setListener(function () { return _this.onWindowResize(window.devicePixelRatio); });
+ _this.register(_this._screenDprMonitor);
+ if ('IntersectionObserver' in window) {
+ var observer_1 = new IntersectionObserver(function (e) { return _this.onIntersectionChange(e[e.length - 1]); }, { threshold: 0 });
+ observer_1.observe(_this._terminal.element);
+ _this.register({ dispose: function () { return observer_1.disconnect(); } });
+ }
+ return _this;
+ }
+ Renderer.prototype.dispose = function () {
+ _super.prototype.dispose.call(this);
+ this._renderLayers.forEach(function (l) { return l.dispose(); });
+ };
+ Renderer.prototype.onIntersectionChange = function (entry) {
+ this._isPaused = entry.intersectionRatio === 0;
+ if (!this._isPaused && this._needsFullRefresh) {
+ this._terminal.refresh(0, this._terminal.rows - 1);
+ }
+ };
+ Renderer.prototype.onWindowResize = function (devicePixelRatio) {
+ if (this._devicePixelRatio !== devicePixelRatio) {
+ this._devicePixelRatio = devicePixelRatio;
+ this.onResize(this._terminal.cols, this._terminal.rows);
+ }
+ };
+ Renderer.prototype.setTheme = function (theme) {
+ var _this = this;
+ this.colorManager.setTheme(theme);
+ this._renderLayers.forEach(function (l) {
+ l.onThemeChanged(_this._terminal, _this.colorManager.colors);
+ l.reset(_this._terminal);
+ });
+ if (this._isPaused) {
+ this._needsFullRefresh = true;
+ }
+ else {
+ this._terminal.refresh(0, this._terminal.rows - 1);
+ }
+ return this.colorManager.colors;
+ };
+ Renderer.prototype.onResize = function (cols, rows) {
+ var _this = this;
+ this._updateDimensions();
+ this._renderLayers.forEach(function (l) { return l.resize(_this._terminal, _this.dimensions); });
+ if (this._isPaused) {
+ this._needsFullRefresh = true;
+ }
+ else {
+ this._terminal.refresh(0, this._terminal.rows - 1);
+ }
+ this._terminal.screenElement.style.width = this.dimensions.canvasWidth + "px";
+ this._terminal.screenElement.style.height = this.dimensions.canvasHeight + "px";
+ this.emit('resize', {
+ width: this.dimensions.canvasWidth,
+ height: this.dimensions.canvasHeight
+ });
+ };
+ Renderer.prototype.onCharSizeChanged = function () {
+ this.onResize(this._terminal.cols, this._terminal.rows);
+ };
+ Renderer.prototype.onBlur = function () {
+ var _this = this;
+ this._runOperation(function (l) { return l.onBlur(_this._terminal); });
+ };
+ Renderer.prototype.onFocus = function () {
+ var _this = this;
+ this._runOperation(function (l) { return l.onFocus(_this._terminal); });
+ };
+ Renderer.prototype.onSelectionChanged = function (start, end, columnSelectMode) {
+ var _this = this;
+ if (columnSelectMode === void 0) { columnSelectMode = false; }
+ this._runOperation(function (l) { return l.onSelectionChanged(_this._terminal, start, end, columnSelectMode); });
+ };
+ Renderer.prototype.onCursorMove = function () {
+ var _this = this;
+ this._runOperation(function (l) { return l.onCursorMove(_this._terminal); });
+ };
+ Renderer.prototype.onOptionsChanged = function () {
+ var _this = this;
+ this.colorManager.allowTransparency = this._terminal.options.allowTransparency;
+ this._runOperation(function (l) { return l.onOptionsChanged(_this._terminal); });
+ };
+ Renderer.prototype.clear = function () {
+ var _this = this;
+ this._runOperation(function (l) { return l.reset(_this._terminal); });
+ };
+ Renderer.prototype._runOperation = function (operation) {
+ if (this._isPaused) {
+ this._needsFullRefresh = true;
+ }
+ else {
+ this._renderLayers.forEach(function (l) { return operation(l); });
+ }
+ };
+ Renderer.prototype.refreshRows = function (start, end) {
+ if (this._isPaused) {
+ this._needsFullRefresh = true;
+ return;
+ }
+ this._renderDebouncer.refresh(start, end);
+ };
+ Renderer.prototype._renderRows = function (start, end) {
+ var _this = this;
+ this._renderLayers.forEach(function (l) { return l.onGridChanged(_this._terminal, start, end); });
+ this._terminal.emit('refresh', { start: start, end: end });
+ };
+ Renderer.prototype._updateDimensions = function () {
+ if (!this._terminal.charMeasure.width || !this._terminal.charMeasure.height) {
+ return;
+ }
+ this.dimensions.scaledCharWidth = Math.floor(this._terminal.charMeasure.width * window.devicePixelRatio);
+ this.dimensions.scaledCharHeight = Math.ceil(this._terminal.charMeasure.height * window.devicePixelRatio);
+ this.dimensions.scaledCellHeight = Math.floor(this.dimensions.scaledCharHeight * this._terminal.options.lineHeight);
+ this.dimensions.scaledCharTop = this._terminal.options.lineHeight === 1 ? 0 : Math.round((this.dimensions.scaledCellHeight - this.dimensions.scaledCharHeight) / 2);
+ this.dimensions.scaledCellWidth = this.dimensions.scaledCharWidth + Math.round(this._terminal.options.letterSpacing);
+ this.dimensions.scaledCharLeft = Math.floor(this._terminal.options.letterSpacing / 2);
+ this.dimensions.scaledCanvasHeight = this._terminal.rows * this.dimensions.scaledCellHeight;
+ this.dimensions.scaledCanvasWidth = this._terminal.cols * this.dimensions.scaledCellWidth;
+ this.dimensions.canvasHeight = Math.round(this.dimensions.scaledCanvasHeight / window.devicePixelRatio);
+ this.dimensions.canvasWidth = Math.round(this.dimensions.scaledCanvasWidth / window.devicePixelRatio);
+ this.dimensions.actualCellHeight = this.dimensions.canvasHeight / this._terminal.rows;
+ this.dimensions.actualCellWidth = this.dimensions.canvasWidth / this._terminal.cols;
+ };
+ Renderer.prototype.registerCharacterJoiner = function (handler) {
+ return this._characterJoinerRegistry.registerCharacterJoiner(handler);
+ };
+ Renderer.prototype.deregisterCharacterJoiner = function (joinerId) {
+ return this._characterJoinerRegistry.deregisterCharacterJoiner(joinerId);
+ };
+ return Renderer;
+}(EventEmitter_1.EventEmitter));
+exports.Renderer = Renderer;
+
+},{"../common/EventEmitter":19,"../renderer/CharacterJoinerRegistry":30,"../ui/RenderDebouncer":54,"../ui/ScreenDprMonitor":55,"./ColorManager":31,"./CursorRenderLayer":32,"./LinkRenderLayer":34,"./SelectionRenderLayer":36,"./TextRenderLayer":37}],36:[function(require,module,exports){
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ }
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var BaseRenderLayer_1 = require("./BaseRenderLayer");
+var SelectionRenderLayer = (function (_super) {
+ __extends(SelectionRenderLayer, _super);
+ function SelectionRenderLayer(container, zIndex, colors) {
+ var _this = _super.call(this, container, 'selection', zIndex, true, colors) || this;
+ _this._clearState();
+ return _this;
+ }
+ SelectionRenderLayer.prototype._clearState = function () {
+ this._state = {
+ start: null,
+ end: null,
+ columnSelectMode: null,
+ ydisp: null
+ };
+ };
+ SelectionRenderLayer.prototype.resize = function (terminal, dim) {
+ _super.prototype.resize.call(this, terminal, dim);
+ this._clearState();
+ };
+ SelectionRenderLayer.prototype.reset = function (terminal) {
+ if (this._state.start && this._state.end) {
+ this._clearState();
+ this.clearAll();
+ }
+ };
+ SelectionRenderLayer.prototype.onSelectionChanged = function (terminal, start, end, columnSelectMode) {
+ if (!this._didStateChange(start, end, columnSelectMode, terminal.buffer.ydisp)) {
+ return;
+ }
+ this.clearAll();
+ if (!start || !end) {
+ this._clearState();
+ return;
+ }
+ var viewportStartRow = start[1] - terminal.buffer.ydisp;
+ var viewportEndRow = end[1] - terminal.buffer.ydisp;
+ var viewportCappedStartRow = Math.max(viewportStartRow, 0);
+ var viewportCappedEndRow = Math.min(viewportEndRow, terminal.rows - 1);
+ if (viewportCappedStartRow >= terminal.rows || viewportCappedEndRow < 0) {
+ return;
+ }
+ this._ctx.fillStyle = this._colors.selection.css;
+ if (columnSelectMode) {
+ var startCol = start[0];
+ var width = end[0] - startCol;
+ var height = viewportCappedEndRow - viewportCappedStartRow + 1;
+ this.fillCells(startCol, viewportCappedStartRow, width, height);
+ }
+ else {
+ var startCol = viewportStartRow === viewportCappedStartRow ? start[0] : 0;
+ var startRowEndCol = viewportCappedStartRow === viewportCappedEndRow ? end[0] : terminal.cols;
+ this.fillCells(startCol, viewportCappedStartRow, startRowEndCol - startCol, 1);
+ var middleRowsCount = Math.max(viewportCappedEndRow - viewportCappedStartRow - 1, 0);
+ this.fillCells(0, viewportCappedStartRow + 1, terminal.cols, middleRowsCount);
+ if (viewportCappedStartRow !== viewportCappedEndRow) {
+ var endCol = viewportEndRow === viewportCappedEndRow ? end[0] : terminal.cols;
+ this.fillCells(0, viewportCappedEndRow, endCol, 1);
+ }
+ }
+ this._state.start = [start[0], start[1]];
+ this._state.end = [end[0], end[1]];
+ this._state.columnSelectMode = columnSelectMode;
+ this._state.ydisp = terminal.buffer.ydisp;
+ };
+ SelectionRenderLayer.prototype._didStateChange = function (start, end, columnSelectMode, ydisp) {
+ return !this._areCoordinatesEqual(start, this._state.start) ||
+ !this._areCoordinatesEqual(end, this._state.end) ||
+ columnSelectMode !== this._state.columnSelectMode ||
+ ydisp !== this._state.ydisp;
+ };
+ SelectionRenderLayer.prototype._areCoordinatesEqual = function (coord1, coord2) {
+ if (!coord1 || !coord2) {
+ return false;
+ }
+ return coord1[0] === coord2[0] && coord1[1] === coord2[1];
+ };
+ return SelectionRenderLayer;
+}(BaseRenderLayer_1.BaseRenderLayer));
+exports.SelectionRenderLayer = SelectionRenderLayer;
+
+},{"./BaseRenderLayer":29}],37:[function(require,module,exports){
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ }
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var Buffer_1 = require("../Buffer");
+var Types_1 = require("./atlas/Types");
+var GridCache_1 = require("./GridCache");
+var BaseRenderLayer_1 = require("./BaseRenderLayer");
+var CharAtlasUtils_1 = require("./atlas/CharAtlasUtils");
+var TextRenderLayer = (function (_super) {
+ __extends(TextRenderLayer, _super);
+ function TextRenderLayer(container, zIndex, colors, characterJoinerRegistry, alpha) {
+ var _this = _super.call(this, container, 'text', zIndex, alpha, colors) || this;
+ _this._characterOverlapCache = {};
+ _this._state = new GridCache_1.GridCache();
+ _this._characterJoinerRegistry = characterJoinerRegistry;
+ return _this;
+ }
+ TextRenderLayer.prototype.resize = function (terminal, dim) {
+ _super.prototype.resize.call(this, terminal, dim);
+ var terminalFont = this._getFont(terminal, false, false);
+ if (this._characterWidth !== dim.scaledCharWidth || this._characterFont !== terminalFont) {
+ this._characterWidth = dim.scaledCharWidth;
+ this._characterFont = terminalFont;
+ this._characterOverlapCache = {};
+ }
+ this._state.clear();
+ this._state.resize(terminal.cols, terminal.rows);
+ };
+ TextRenderLayer.prototype.reset = function (terminal) {
+ this._state.clear();
+ this.clearAll();
+ };
+ TextRenderLayer.prototype._forEachCell = function (terminal, firstRow, lastRow, joinerRegistry, callback) {
+ for (var y = firstRow; y <= lastRow; y++) {
+ var row = y + terminal.buffer.ydisp;
+ var line = terminal.buffer.lines.get(row);
+ var joinedRanges = joinerRegistry ? joinerRegistry.getJoinedCharacters(row) : [];
+ for (var x = 0; x < terminal.cols; x++) {
+ var charData = line.get(x);
+ var code = charData[Buffer_1.CHAR_DATA_CODE_INDEX] || Buffer_1.WHITESPACE_CELL_CODE;
+ var chars = charData[Buffer_1.CHAR_DATA_CHAR_INDEX] || Buffer_1.WHITESPACE_CELL_CHAR;
+ var attr = charData[Buffer_1.CHAR_DATA_ATTR_INDEX];
+ var width = charData[Buffer_1.CHAR_DATA_WIDTH_INDEX];
+ var isJoined = false;
+ var lastCharX = x;
+ if (width === 0) {
+ continue;
+ }
+ if (joinedRanges.length > 0 && x === joinedRanges[0][0]) {
+ isJoined = true;
+ var range = joinedRanges.shift();
+ chars = terminal.buffer.translateBufferLineToString(row, true, range[0], range[1]);
+ width = range[1] - range[0];
+ code = Infinity;
+ lastCharX = range[1] - 1;
+ }
+ if (!isJoined && this._isOverlapping(charData)) {
+ if (lastCharX < line.length - 1 && line.get(lastCharX + 1)[Buffer_1.CHAR_DATA_CODE_INDEX] === Buffer_1.NULL_CELL_CODE) {
+ width = 2;
+ }
+ }
+ var flags = attr >> 18;
+ var bg = attr & 0x1ff;
+ var fg = (attr >> 9) & 0x1ff;
+ if (flags & 8) {
+ var temp = bg;
+ bg = fg;
+ fg = temp;
+ if (fg === Types_1.DEFAULT_COLOR) {
+ fg = Types_1.INVERTED_DEFAULT_COLOR;
+ }
+ if (bg === Types_1.DEFAULT_COLOR) {
+ bg = Types_1.INVERTED_DEFAULT_COLOR;
+ }
+ }
+ callback(code, chars, width, x, y, fg, bg, flags);
+ x = lastCharX;
+ }
+ }
+ };
+ TextRenderLayer.prototype._drawBackground = function (terminal, firstRow, lastRow) {
+ var _this = this;
+ var ctx = this._ctx;
+ var cols = terminal.cols;
+ var startX = 0;
+ var startY = 0;
+ var prevFillStyle = null;
+ ctx.save();
+ this._forEachCell(terminal, firstRow, lastRow, null, function (code, chars, width, x, y, fg, bg, flags) {
+ var nextFillStyle = null;
+ if (bg === Types_1.INVERTED_DEFAULT_COLOR) {
+ nextFillStyle = _this._colors.foreground.css;
+ }
+ else if (CharAtlasUtils_1.is256Color(bg)) {
+ nextFillStyle = _this._colors.ansi[bg].css;
+ }
+ if (prevFillStyle === null) {
+ startX = x;
+ startY = y;
+ }
+ if (y !== startY) {
+ ctx.fillStyle = prevFillStyle;
+ _this.fillCells(startX, startY, cols - startX, 1);
+ startX = x;
+ startY = y;
+ }
+ else if (prevFillStyle !== nextFillStyle) {
+ ctx.fillStyle = prevFillStyle;
+ _this.fillCells(startX, startY, x - startX, 1);
+ startX = x;
+ startY = y;
+ }
+ prevFillStyle = nextFillStyle;
+ });
+ if (prevFillStyle !== null) {
+ ctx.fillStyle = prevFillStyle;
+ this.fillCells(startX, startY, cols - startX, 1);
+ }
+ ctx.restore();
+ };
+ TextRenderLayer.prototype._drawForeground = function (terminal, firstRow, lastRow) {
+ var _this = this;
+ this._forEachCell(terminal, firstRow, lastRow, this._characterJoinerRegistry, function (code, chars, width, x, y, fg, bg, flags) {
+ if (flags & 16) {
+ return;
+ }
+ if (flags & 2) {
+ _this._ctx.save();
+ if (fg === Types_1.INVERTED_DEFAULT_COLOR) {
+ _this._ctx.fillStyle = _this._colors.background.css;
+ }
+ else if (CharAtlasUtils_1.is256Color(fg)) {
+ _this._ctx.fillStyle = _this._colors.ansi[fg].css;
+ }
+ else {
+ _this._ctx.fillStyle = _this._colors.foreground.css;
+ }
+ _this.fillBottomLineAtCells(x, y, width);
+ _this._ctx.restore();
+ }
+ _this.drawChars(terminal, chars, code, width, x, y, fg, bg, !!(flags & 1), !!(flags & 32), !!(flags & 64));
+ });
+ };
+ TextRenderLayer.prototype.onGridChanged = function (terminal, firstRow, lastRow) {
+ if (this._state.cache.length === 0) {
+ return;
+ }
+ if (this._charAtlas) {
+ this._charAtlas.beginFrame();
+ }
+ this.clearCells(0, firstRow, terminal.cols, lastRow - firstRow + 1);
+ this._drawBackground(terminal, firstRow, lastRow);
+ this._drawForeground(terminal, firstRow, lastRow);
+ };
+ TextRenderLayer.prototype.onOptionsChanged = function (terminal) {
+ this.setTransparency(terminal, terminal.options.allowTransparency);
+ };
+ TextRenderLayer.prototype._isOverlapping = function (charData) {
+ if (charData[Buffer_1.CHAR_DATA_WIDTH_INDEX] !== 1) {
+ return false;
+ }
+ var code = charData[Buffer_1.CHAR_DATA_CODE_INDEX];
+ if (code < 256) {
+ return false;
+ }
+ var char = charData[Buffer_1.CHAR_DATA_CHAR_INDEX];
+ if (this._characterOverlapCache.hasOwnProperty(char)) {
+ return this._characterOverlapCache[char];
+ }
+ this._ctx.save();
+ this._ctx.font = this._characterFont;
+ var overlaps = Math.floor(this._ctx.measureText(char).width) > this._characterWidth;
+ this._ctx.restore();
+ this._characterOverlapCache[char] = overlaps;
+ return overlaps;
+ };
+ return TextRenderLayer;
+}(BaseRenderLayer_1.BaseRenderLayer));
+exports.TextRenderLayer = TextRenderLayer;
+
+},{"../Buffer":2,"./BaseRenderLayer":29,"./GridCache":33,"./atlas/CharAtlasUtils":41,"./atlas/Types":46}],38:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var BaseCharAtlas = (function () {
+ function BaseCharAtlas() {
+ this._didWarmUp = false;
+ }
+ BaseCharAtlas.prototype.dispose = function () { };
+ BaseCharAtlas.prototype.warmUp = function () {
+ if (!this._didWarmUp) {
+ this._doWarmUp();
+ this._didWarmUp = true;
+ }
+ };
+ BaseCharAtlas.prototype._doWarmUp = function () { };
+ BaseCharAtlas.prototype.beginFrame = function () { };
+ return BaseCharAtlas;
+}());
+exports.default = BaseCharAtlas;
+
+},{}],39:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var CharAtlasUtils_1 = require("./CharAtlasUtils");
+var DynamicCharAtlas_1 = require("./DynamicCharAtlas");
+var NoneCharAtlas_1 = require("./NoneCharAtlas");
+var StaticCharAtlas_1 = require("./StaticCharAtlas");
+var charAtlasImplementations = {
+ 'none': NoneCharAtlas_1.default,
+ 'static': StaticCharAtlas_1.default,
+ 'dynamic': DynamicCharAtlas_1.default
+};
+var charAtlasCache = [];
+function acquireCharAtlas(terminal, colors, scaledCharWidth, scaledCharHeight) {
+ var newConfig = CharAtlasUtils_1.generateConfig(scaledCharWidth, scaledCharHeight, terminal, colors);
+ for (var i = 0; i < charAtlasCache.length; i++) {
+ var entry = charAtlasCache[i];
+ var ownedByIndex = entry.ownedBy.indexOf(terminal);
+ if (ownedByIndex >= 0) {
+ if (CharAtlasUtils_1.configEquals(entry.config, newConfig)) {
+ return entry.atlas;
+ }
+ if (entry.ownedBy.length === 1) {
+ entry.atlas.dispose();
+ charAtlasCache.splice(i, 1);
+ }
+ else {
+ entry.ownedBy.splice(ownedByIndex, 1);
+ }
+ break;
+ }
+ }
+ for (var i = 0; i < charAtlasCache.length; i++) {
+ var entry = charAtlasCache[i];
+ if (CharAtlasUtils_1.configEquals(entry.config, newConfig)) {
+ entry.ownedBy.push(terminal);
+ return entry.atlas;
+ }
+ }
+ var newEntry = {
+ atlas: new charAtlasImplementations[terminal.options.experimentalCharAtlas](document, newConfig),
+ config: newConfig,
+ ownedBy: [terminal]
+ };
+ charAtlasCache.push(newEntry);
+ return newEntry.atlas;
+}
+exports.acquireCharAtlas = acquireCharAtlas;
+function removeTerminalFromCache(terminal) {
+ for (var i = 0; i < charAtlasCache.length; i++) {
+ var index = charAtlasCache[i].ownedBy.indexOf(terminal);
+ if (index !== -1) {
+ if (charAtlasCache[i].ownedBy.length === 1) {
+ charAtlasCache[i].atlas.dispose();
+ charAtlasCache.splice(i, 1);
+ }
+ else {
+ charAtlasCache[i].ownedBy.splice(index, 1);
+ }
+ break;
+ }
+ }
+}
+exports.removeTerminalFromCache = removeTerminalFromCache;
+
+},{"./CharAtlasUtils":41,"./DynamicCharAtlas":42,"./NoneCharAtlas":44,"./StaticCharAtlas":45}],40:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var Platform_1 = require("../../core/Platform");
+var Types_1 = require("./Types");
+function generateStaticCharAtlasTexture(context, canvasFactory, config) {
+ var cellWidth = config.scaledCharWidth + Types_1.CHAR_ATLAS_CELL_SPACING;
+ var cellHeight = config.scaledCharHeight + Types_1.CHAR_ATLAS_CELL_SPACING;
+ var canvas = canvasFactory(255 * cellWidth, (2 + 16 + 16) * cellHeight);
+ var ctx = canvas.getContext('2d', { alpha: config.allowTransparency });
+ ctx.fillStyle = config.colors.background.css;
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
+ ctx.save();
+ ctx.fillStyle = config.colors.foreground.css;
+ ctx.font = getFont(config.fontWeight, config);
+ ctx.textBaseline = 'middle';
+ for (var i = 0; i < 256; i++) {
+ ctx.save();
+ ctx.beginPath();
+ ctx.rect(i * cellWidth, 0, cellWidth, cellHeight);
+ ctx.clip();
+ ctx.fillText(String.fromCharCode(i), i * cellWidth, cellHeight / 2);
+ ctx.restore();
+ }
+ ctx.save();
+ ctx.font = getFont(config.fontWeightBold, config);
+ for (var i = 0; i < 256; i++) {
+ ctx.save();
+ ctx.beginPath();
+ ctx.rect(i * cellWidth, cellHeight, cellWidth, cellHeight);
+ ctx.clip();
+ ctx.fillText(String.fromCharCode(i), i * cellWidth, cellHeight * 1.5);
+ ctx.restore();
+ }
+ ctx.restore();
+ ctx.font = getFont(config.fontWeight, config);
+ for (var colorIndex = 0; colorIndex < 16; colorIndex++) {
+ var y = (colorIndex + 2) * cellHeight;
+ for (var i = 0; i < 256; i++) {
+ ctx.save();
+ ctx.beginPath();
+ ctx.rect(i * cellWidth, y, cellWidth, cellHeight);
+ ctx.clip();
+ ctx.fillStyle = config.colors.ansi[colorIndex].css;
+ ctx.fillText(String.fromCharCode(i), i * cellWidth, y + cellHeight / 2);
+ ctx.restore();
+ }
+ }
+ ctx.font = getFont(config.fontWeightBold, config);
+ for (var colorIndex = 0; colorIndex < 16; colorIndex++) {
+ var y = (colorIndex + 2 + 16) * cellHeight;
+ for (var i = 0; i < 256; i++) {
+ ctx.save();
+ ctx.beginPath();
+ ctx.rect(i * cellWidth, y, cellWidth, cellHeight);
+ ctx.clip();
+ ctx.fillStyle = config.colors.ansi[colorIndex].css;
+ ctx.fillText(String.fromCharCode(i), i * cellWidth, y + cellHeight / 2);
+ ctx.restore();
+ }
+ }
+ ctx.restore();
+ if (!('createImageBitmap' in context) || Platform_1.isFirefox || Platform_1.isSafari) {
+ return canvas;
+ }
+ var charAtlasImageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
+ clearColor(charAtlasImageData, config.colors.background);
+ return context.createImageBitmap(charAtlasImageData);
+}
+exports.generateStaticCharAtlasTexture = generateStaticCharAtlasTexture;
+function clearColor(imageData, color) {
+ var isEmpty = true;
+ var r = color.rgba >>> 24;
+ var g = color.rgba >>> 16 & 0xFF;
+ var b = color.rgba >>> 8 & 0xFF;
+ for (var offset = 0; offset < imageData.data.length; offset += 4) {
+ if (imageData.data[offset] === r &&
+ imageData.data[offset + 1] === g &&
+ imageData.data[offset + 2] === b) {
+ imageData.data[offset + 3] = 0;
+ }
+ else {
+ isEmpty = false;
+ }
+ }
+ return isEmpty;
+}
+exports.clearColor = clearColor;
+function getFont(fontWeight, config) {
+ return fontWeight + " " + config.fontSize * config.devicePixelRatio + "px " + config.fontFamily;
+}
+
+},{"../../core/Platform":23,"./Types":46}],41:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var Types_1 = require("./Types");
+function generateConfig(scaledCharWidth, scaledCharHeight, terminal, colors) {
+ var clonedColors = {
+ foreground: colors.foreground,
+ background: colors.background,
+ cursor: null,
+ cursorAccent: null,
+ selection: null,
+ ansi: colors.ansi.slice(0, 16)
+ };
+ return {
+ type: terminal.options.experimentalCharAtlas,
+ devicePixelRatio: window.devicePixelRatio,
+ scaledCharWidth: scaledCharWidth,
+ scaledCharHeight: scaledCharHeight,
+ fontFamily: terminal.options.fontFamily,
+ fontSize: terminal.options.fontSize,
+ fontWeight: terminal.options.fontWeight,
+ fontWeightBold: terminal.options.fontWeightBold,
+ allowTransparency: terminal.options.allowTransparency,
+ colors: clonedColors
+ };
+}
+exports.generateConfig = generateConfig;
+function configEquals(a, b) {
+ for (var i = 0; i < a.colors.ansi.length; i++) {
+ if (a.colors.ansi[i].rgba !== b.colors.ansi[i].rgba) {
+ return false;
+ }
+ }
+ return a.type === b.type &&
+ a.devicePixelRatio === b.devicePixelRatio &&
+ a.fontFamily === b.fontFamily &&
+ a.fontSize === b.fontSize &&
+ a.fontWeight === b.fontWeight &&
+ a.fontWeightBold === b.fontWeightBold &&
+ a.allowTransparency === b.allowTransparency &&
+ a.scaledCharWidth === b.scaledCharWidth &&
+ a.scaledCharHeight === b.scaledCharHeight &&
+ a.colors.foreground === b.colors.foreground &&
+ a.colors.background === b.colors.background;
+}
+exports.configEquals = configEquals;
+function is256Color(colorCode) {
+ return colorCode < Types_1.DEFAULT_COLOR;
+}
+exports.is256Color = is256Color;
+
+},{"./Types":46}],42:[function(require,module,exports){
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ }
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var Types_1 = require("./Types");
+var BaseCharAtlas_1 = require("./BaseCharAtlas");
+var ColorManager_1 = require("../ColorManager");
+var CharAtlasGenerator_1 = require("./CharAtlasGenerator");
+var LRUMap_1 = require("./LRUMap");
+var Platform_1 = require("../../core/Platform");
+var TEXTURE_WIDTH = 1024;
+var TEXTURE_HEIGHT = 1024;
+var TRANSPARENT_COLOR = {
+ css: 'rgba(0, 0, 0, 0)',
+ rgba: 0
+};
+var FRAME_CACHE_DRAW_LIMIT = 100;
+var GLYPH_BITMAP_COMMIT_DELAY = 100;
+function getGlyphCacheKey(glyph) {
+ return glyph.code << 21 | glyph.bg << 12 | glyph.fg << 3 | (glyph.bold ? 0 : 4) + (glyph.dim ? 0 : 2) + (glyph.italic ? 0 : 1);
+}
+exports.getGlyphCacheKey = getGlyphCacheKey;
+var DynamicCharAtlas = (function (_super) {
+ __extends(DynamicCharAtlas, _super);
+ function DynamicCharAtlas(document, _config) {
+ var _this = _super.call(this) || this;
+ _this._config = _config;
+ _this._drawToCacheCount = 0;
+ _this._glyphsWaitingOnBitmap = [];
+ _this._bitmapCommitTimeout = null;
+ _this._bitmap = null;
+ _this._cacheCanvas = document.createElement('canvas');
+ _this._cacheCanvas.width = TEXTURE_WIDTH;
+ _this._cacheCanvas.height = TEXTURE_HEIGHT;
+ _this._cacheCtx = _this._cacheCanvas.getContext('2d', { alpha: true });
+ var tmpCanvas = document.createElement('canvas');
+ tmpCanvas.width = _this._config.scaledCharWidth;
+ tmpCanvas.height = _this._config.scaledCharHeight;
+ _this._tmpCtx = tmpCanvas.getContext('2d', { alpha: _this._config.allowTransparency });
+ _this._width = Math.floor(TEXTURE_WIDTH / _this._config.scaledCharWidth);
+ _this._height = Math.floor(TEXTURE_HEIGHT / _this._config.scaledCharHeight);
+ var capacity = _this._width * _this._height;
+ _this._cacheMap = new LRUMap_1.default(capacity);
+ _this._cacheMap.prealloc(capacity);
+ return _this;
+ }
+ DynamicCharAtlas.prototype.dispose = function () {
+ if (this._bitmapCommitTimeout !== null) {
+ window.clearTimeout(this._bitmapCommitTimeout);
+ this._bitmapCommitTimeout = null;
+ }
+ };
+ DynamicCharAtlas.prototype.beginFrame = function () {
+ this._drawToCacheCount = 0;
+ };
+ DynamicCharAtlas.prototype.draw = function (ctx, glyph, x, y) {
+ if (glyph.code === 32) {
+ return true;
+ }
+ if (!this._canCache(glyph)) {
+ return false;
+ }
+ var glyphKey = getGlyphCacheKey(glyph);
+ var cacheValue = this._cacheMap.get(glyphKey);
+ if (cacheValue !== null && cacheValue !== undefined) {
+ this._drawFromCache(ctx, cacheValue, x, y);
+ return true;
+ }
+ else if (this._drawToCacheCount < FRAME_CACHE_DRAW_LIMIT) {
+ var index = void 0;
+ if (this._cacheMap.size < this._cacheMap.capacity) {
+ index = this._cacheMap.size;
+ }
+ else {
+ index = this._cacheMap.peek().index;
+ }
+ var cacheValue_1 = this._drawToCache(glyph, index);
+ this._cacheMap.set(glyphKey, cacheValue_1);
+ this._drawFromCache(ctx, cacheValue_1, x, y);
+ return true;
+ }
+ return false;
+ };
+ DynamicCharAtlas.prototype._canCache = function (glyph) {
+ return glyph.code < 256;
+ };
+ DynamicCharAtlas.prototype._toCoordinateX = function (index) {
+ return (index % this._width) * this._config.scaledCharWidth;
+ };
+ DynamicCharAtlas.prototype._toCoordinateY = function (index) {
+ return Math.floor(index / this._width) * this._config.scaledCharHeight;
+ };
+ DynamicCharAtlas.prototype._drawFromCache = function (ctx, cacheValue, x, y) {
+ if (cacheValue.isEmpty) {
+ return;
+ }
+ var cacheX = this._toCoordinateX(cacheValue.index);
+ var cacheY = this._toCoordinateY(cacheValue.index);
+ ctx.drawImage(cacheValue.inBitmap ? this._bitmap : this._cacheCanvas, cacheX, cacheY, this._config.scaledCharWidth, this._config.scaledCharHeight, x, y, this._config.scaledCharWidth, this._config.scaledCharHeight);
+ };
+ DynamicCharAtlas.prototype._getColorFromAnsiIndex = function (idx) {
+ if (idx < this._config.colors.ansi.length) {
+ return this._config.colors.ansi[idx];
+ }
+ return ColorManager_1.DEFAULT_ANSI_COLORS[idx];
+ };
+ DynamicCharAtlas.prototype._getBackgroundColor = function (glyph) {
+ if (this._config.allowTransparency) {
+ return TRANSPARENT_COLOR;
+ }
+ else if (glyph.bg === Types_1.INVERTED_DEFAULT_COLOR) {
+ return this._config.colors.foreground;
+ }
+ else if (glyph.bg < 256) {
+ return this._getColorFromAnsiIndex(glyph.bg);
+ }
+ return this._config.colors.background;
+ };
+ DynamicCharAtlas.prototype._getForegroundColor = function (glyph) {
+ if (glyph.fg === Types_1.INVERTED_DEFAULT_COLOR) {
+ return this._config.colors.background;
+ }
+ else if (glyph.fg < 256) {
+ return this._getColorFromAnsiIndex(glyph.fg);
+ }
+ return this._config.colors.foreground;
+ };
+ DynamicCharAtlas.prototype._drawToCache = function (glyph, index) {
+ this._drawToCacheCount++;
+ this._tmpCtx.save();
+ var backgroundColor = this._getBackgroundColor(glyph);
+ this._tmpCtx.globalCompositeOperation = 'copy';
+ this._tmpCtx.fillStyle = backgroundColor.css;
+ this._tmpCtx.fillRect(0, 0, this._config.scaledCharWidth, this._config.scaledCharHeight);
+ this._tmpCtx.globalCompositeOperation = 'source-over';
+ var fontWeight = glyph.bold ? this._config.fontWeightBold : this._config.fontWeight;
+ var fontStyle = glyph.italic ? 'italic' : '';
+ this._tmpCtx.font =
+ fontStyle + " " + fontWeight + " " + this._config.fontSize * this._config.devicePixelRatio + "px " + this._config.fontFamily;
+ this._tmpCtx.textBaseline = 'middle';
+ this._tmpCtx.fillStyle = this._getForegroundColor(glyph).css;
+ if (glyph.dim) {
+ this._tmpCtx.globalAlpha = Types_1.DIM_OPACITY;
+ }
+ this._tmpCtx.fillText(glyph.chars, 0, this._config.scaledCharHeight / 2);
+ this._tmpCtx.restore();
+ var imageData = this._tmpCtx.getImageData(0, 0, this._config.scaledCharWidth, this._config.scaledCharHeight);
+ var isEmpty = false;
+ if (!this._config.allowTransparency) {
+ isEmpty = CharAtlasGenerator_1.clearColor(imageData, backgroundColor);
+ }
+ var x = this._toCoordinateX(index);
+ var y = this._toCoordinateY(index);
+ this._cacheCtx.putImageData(imageData, x, y);
+ var cacheValue = {
+ index: index,
+ isEmpty: isEmpty,
+ inBitmap: false
+ };
+ this._addGlyphToBitmap(cacheValue);
+ return cacheValue;
+ };
+ DynamicCharAtlas.prototype._addGlyphToBitmap = function (cacheValue) {
+ var _this = this;
+ if (!('createImageBitmap' in window) || Platform_1.isFirefox || Platform_1.isSafari) {
+ return;
+ }
+ this._glyphsWaitingOnBitmap.push(cacheValue);
+ if (this._bitmapCommitTimeout !== null) {
+ return;
+ }
+ this._bitmapCommitTimeout = window.setTimeout(function () { return _this._generateBitmap(); }, GLYPH_BITMAP_COMMIT_DELAY);
+ };
+ DynamicCharAtlas.prototype._generateBitmap = function () {
+ var _this = this;
+ var glyphsMovingToBitmap = this._glyphsWaitingOnBitmap;
+ this._glyphsWaitingOnBitmap = [];
+ window.createImageBitmap(this._cacheCanvas).then(function (bitmap) {
+ _this._bitmap = bitmap;
+ for (var i = 0; i < glyphsMovingToBitmap.length; i++) {
+ var value = glyphsMovingToBitmap[i];
+ value.inBitmap = true;
+ }
+ });
+ this._bitmapCommitTimeout = null;
+ };
+ return DynamicCharAtlas;
+}(BaseCharAtlas_1.default));
+exports.default = DynamicCharAtlas;
+
+},{"../../core/Platform":23,"../ColorManager":31,"./BaseCharAtlas":38,"./CharAtlasGenerator":40,"./LRUMap":43,"./Types":46}],43:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var LRUMap = (function () {
+ function LRUMap(capacity) {
+ this.capacity = capacity;
+ this._map = {};
+ this._head = null;
+ this._tail = null;
+ this._nodePool = [];
+ this.size = 0;
+ }
+ LRUMap.prototype._unlinkNode = function (node) {
+ var prev = node.prev;
+ var next = node.next;
+ if (node === this._head) {
+ this._head = next;
+ }
+ if (node === this._tail) {
+ this._tail = prev;
+ }
+ if (prev !== null) {
+ prev.next = next;
+ }
+ if (next !== null) {
+ next.prev = prev;
+ }
+ };
+ LRUMap.prototype._appendNode = function (node) {
+ var tail = this._tail;
+ if (tail !== null) {
+ tail.next = node;
+ }
+ node.prev = tail;
+ node.next = null;
+ this._tail = node;
+ if (this._head === null) {
+ this._head = node;
+ }
+ };
+ LRUMap.prototype.prealloc = function (count) {
+ var nodePool = this._nodePool;
+ for (var i = 0; i < count; i++) {
+ nodePool.push({
+ prev: null,
+ next: null,
+ key: null,
+ value: null
+ });
+ }
+ };
+ LRUMap.prototype.get = function (key) {
+ var node = this._map[key];
+ if (node !== undefined) {
+ this._unlinkNode(node);
+ this._appendNode(node);
+ return node.value;
+ }
+ return null;
+ };
+ LRUMap.prototype.peekValue = function (key) {
+ var node = this._map[key];
+ if (node !== undefined) {
+ return node.value;
+ }
+ return null;
+ };
+ LRUMap.prototype.peek = function () {
+ var head = this._head;
+ return head === null ? null : head.value;
+ };
+ LRUMap.prototype.set = function (key, value) {
+ var node = this._map[key];
+ if (node !== undefined) {
+ node = this._map[key];
+ this._unlinkNode(node);
+ node.value = value;
+ }
+ else if (this.size >= this.capacity) {
+ node = this._head;
+ this._unlinkNode(node);
+ delete this._map[node.key];
+ node.key = key;
+ node.value = value;
+ this._map[key] = node;
+ }
+ else {
+ var nodePool = this._nodePool;
+ if (nodePool.length > 0) {
+ node = nodePool.pop();
+ node.key = key;
+ node.value = value;
+ }
+ else {
+ node = {
+ prev: null,
+ next: null,
+ key: key,
+ value: value
+ };
+ }
+ this._map[key] = node;
+ this.size++;
+ }
+ this._appendNode(node);
+ };
+ return LRUMap;
+}());
+exports.default = LRUMap;
+
+},{}],44:[function(require,module,exports){
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ }
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var BaseCharAtlas_1 = require("./BaseCharAtlas");
+var NoneCharAtlas = (function (_super) {
+ __extends(NoneCharAtlas, _super);
+ function NoneCharAtlas(document, config) {
+ return _super.call(this) || this;
+ }
+ NoneCharAtlas.prototype.draw = function (ctx, glyph, x, y) {
+ return false;
+ };
+ return NoneCharAtlas;
+}(BaseCharAtlas_1.default));
+exports.default = NoneCharAtlas;
+
+},{"./BaseCharAtlas":38}],45:[function(require,module,exports){
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ }
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var Types_1 = require("./Types");
+var CharAtlasGenerator_1 = require("./CharAtlasGenerator");
+var BaseCharAtlas_1 = require("./BaseCharAtlas");
+var CharAtlasUtils_1 = require("./CharAtlasUtils");
+var StaticCharAtlas = (function (_super) {
+ __extends(StaticCharAtlas, _super);
+ function StaticCharAtlas(_document, _config) {
+ var _this = _super.call(this) || this;
+ _this._document = _document;
+ _this._config = _config;
+ _this._canvasFactory = function (width, height) {
+ var canvas = _this._document.createElement('canvas');
+ canvas.width = width;
+ canvas.height = height;
+ return canvas;
+ };
+ return _this;
+ }
+ StaticCharAtlas.prototype._doWarmUp = function () {
+ var _this = this;
+ var result = CharAtlasGenerator_1.generateStaticCharAtlasTexture(window, this._canvasFactory, this._config);
+ if (result instanceof HTMLCanvasElement) {
+ this._texture = result;
+ }
+ else {
+ result.then(function (texture) {
+ _this._texture = texture;
+ });
+ }
+ };
+ StaticCharAtlas.prototype._isCached = function (glyph, colorIndex) {
+ var isAscii = glyph.code < 256;
+ var isBasicColor = glyph.fg < 16;
+ var isDefaultColor = glyph.fg === Types_1.DEFAULT_COLOR;
+ var isDefaultBackground = glyph.bg === Types_1.DEFAULT_COLOR;
+ return isAscii && (isBasicColor || isDefaultColor) && isDefaultBackground && !glyph.italic;
+ };
+ StaticCharAtlas.prototype.draw = function (ctx, glyph, x, y) {
+ if (this._texture === null || this._texture === undefined) {
+ return false;
+ }
+ var colorIndex = 0;
+ if (CharAtlasUtils_1.is256Color(glyph.fg)) {
+ colorIndex = 2 + glyph.fg + (glyph.bold ? 16 : 0);
+ }
+ else if (glyph.fg === Types_1.DEFAULT_COLOR) {
+ if (glyph.bold) {
+ colorIndex = 1;
+ }
+ }
+ if (!this._isCached(glyph, colorIndex)) {
+ return false;
+ }
+ ctx.save();
+ var charAtlasCellWidth = this._config.scaledCharWidth + Types_1.CHAR_ATLAS_CELL_SPACING;
+ var charAtlasCellHeight = this._config.scaledCharHeight + Types_1.CHAR_ATLAS_CELL_SPACING;
+ if (glyph.dim) {
+ ctx.globalAlpha = Types_1.DIM_OPACITY;
+ }
+ ctx.drawImage(this._texture, glyph.code * charAtlasCellWidth, colorIndex * charAtlasCellHeight, charAtlasCellWidth, this._config.scaledCharHeight, x, y, charAtlasCellWidth, this._config.scaledCharHeight);
+ ctx.restore();
+ return true;
+ };
+ return StaticCharAtlas;
+}(BaseCharAtlas_1.default));
+exports.default = StaticCharAtlas;
+
+},{"./BaseCharAtlas":38,"./CharAtlasGenerator":40,"./CharAtlasUtils":41,"./Types":46}],46:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.DEFAULT_COLOR = 256;
+exports.INVERTED_DEFAULT_COLOR = 257;
+exports.DIM_OPACITY = 0.5;
+exports.CHAR_ATLAS_CELL_SPACING = 1;
+
+},{}],47:[function(require,module,exports){
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ }
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var EventEmitter_1 = require("../../common/EventEmitter");
+var ColorManager_1 = require("../ColorManager");
+var RenderDebouncer_1 = require("../../ui/RenderDebouncer");
+var DomRendererRowFactory_1 = require("./DomRendererRowFactory");
+var Types_1 = require("../atlas/Types");
+var TERMINAL_CLASS_PREFIX = 'xterm-dom-renderer-owner-';
+var ROW_CONTAINER_CLASS = 'xterm-rows';
+var FG_CLASS_PREFIX = 'xterm-fg-';
+var BG_CLASS_PREFIX = 'xterm-bg-';
+var FOCUS_CLASS = 'xterm-focus';
+var SELECTION_CLASS = 'xterm-selection';
+var nextTerminalId = 1;
+var DomRenderer = (function (_super) {
+ __extends(DomRenderer, _super);
+ function DomRenderer(_terminal, theme) {
+ var _this = _super.call(this) || this;
+ _this._terminal = _terminal;
+ _this._terminalClass = nextTerminalId++;
+ _this._rowElements = [];
+ var allowTransparency = _this._terminal.options.allowTransparency;
+ _this.colorManager = new ColorManager_1.ColorManager(document, allowTransparency);
+ _this.setTheme(theme);
+ _this._rowContainer = document.createElement('div');
+ _this._rowContainer.classList.add(ROW_CONTAINER_CLASS);
+ _this._rowContainer.style.lineHeight = 'normal';
+ _this._rowContainer.setAttribute('aria-hidden', 'true');
+ _this._refreshRowElements(_this._terminal.cols, _this._terminal.rows);
+ _this._selectionContainer = document.createElement('div');
+ _this._selectionContainer.classList.add(SELECTION_CLASS);
+ _this._selectionContainer.setAttribute('aria-hidden', 'true');
+ _this.dimensions = {
+ scaledCharWidth: null,
+ scaledCharHeight: null,
+ scaledCellWidth: null,
+ scaledCellHeight: null,
+ scaledCharLeft: null,
+ scaledCharTop: null,
+ scaledCanvasWidth: null,
+ scaledCanvasHeight: null,
+ canvasWidth: null,
+ canvasHeight: null,
+ actualCellWidth: null,
+ actualCellHeight: null
+ };
+ _this._updateDimensions();
+ _this._renderDebouncer = new RenderDebouncer_1.RenderDebouncer(_this._terminal, _this._renderRows.bind(_this));
+ _this._rowFactory = new DomRendererRowFactory_1.DomRendererRowFactory(document);
+ _this._terminal.element.classList.add(TERMINAL_CLASS_PREFIX + _this._terminalClass);
+ _this._terminal.screenElement.appendChild(_this._rowContainer);
+ _this._terminal.screenElement.appendChild(_this._selectionContainer);
+ _this._terminal.linkifier.on("linkhover", function (e) { return _this._onLinkHover(e); });
+ _this._terminal.linkifier.on("linkleave", function (e) { return _this._onLinkLeave(e); });
+ return _this;
+ }
+ DomRenderer.prototype.dispose = function () {
+ this._terminal.element.classList.remove(TERMINAL_CLASS_PREFIX + this._terminalClass);
+ this._terminal.screenElement.removeChild(this._rowContainer);
+ this._terminal.screenElement.removeChild(this._selectionContainer);
+ this._terminal.screenElement.removeChild(this._themeStyleElement);
+ this._terminal.screenElement.removeChild(this._dimensionsStyleElement);
+ _super.prototype.dispose.call(this);
+ };
+ DomRenderer.prototype._updateDimensions = function () {
+ var _this = this;
+ this.dimensions.scaledCharWidth = Math.floor(this._terminal.charMeasure.width * window.devicePixelRatio);
+ this.dimensions.scaledCharHeight = Math.ceil(this._terminal.charMeasure.height * window.devicePixelRatio);
+ this.dimensions.scaledCellWidth = this.dimensions.scaledCharWidth + Math.round(this._terminal.options.letterSpacing);
+ this.dimensions.scaledCellHeight = Math.floor(this.dimensions.scaledCharHeight * this._terminal.options.lineHeight);
+ this.dimensions.scaledCharLeft = 0;
+ this.dimensions.scaledCharTop = 0;
+ this.dimensions.scaledCanvasWidth = this.dimensions.scaledCellWidth * this._terminal.cols;
+ this.dimensions.scaledCanvasHeight = this.dimensions.scaledCellHeight * this._terminal.rows;
+ this.dimensions.canvasWidth = Math.round(this.dimensions.scaledCanvasWidth / window.devicePixelRatio);
+ this.dimensions.canvasHeight = Math.round(this.dimensions.scaledCanvasHeight / window.devicePixelRatio);
+ this.dimensions.actualCellWidth = this.dimensions.canvasWidth / this._terminal.cols;
+ this.dimensions.actualCellHeight = this.dimensions.canvasHeight / this._terminal.rows;
+ this._rowElements.forEach(function (element) {
+ element.style.width = _this.dimensions.canvasWidth + "px";
+ element.style.height = _this.dimensions.actualCellHeight + "px";
+ element.style.lineHeight = _this.dimensions.actualCellHeight + "px";
+ element.style.overflow = 'hidden';
+ });
+ if (!this._dimensionsStyleElement) {
+ this._dimensionsStyleElement = document.createElement('style');
+ this._terminal.screenElement.appendChild(this._dimensionsStyleElement);
+ }
+ var styles = this._terminalSelector + " ." + ROW_CONTAINER_CLASS + " span {" +
+ " display: inline-block;" +
+ " height: 100%;" +
+ " vertical-align: top;" +
+ (" width: " + this.dimensions.actualCellWidth + "px") +
+ "}";
+ this._dimensionsStyleElement.innerHTML = styles;
+ this._selectionContainer.style.height = this._terminal._viewportElement.style.height;
+ this._terminal.screenElement.style.width = this.dimensions.canvasWidth + "px";
+ this._terminal.screenElement.style.height = this.dimensions.canvasHeight + "px";
+ };
+ DomRenderer.prototype.setTheme = function (theme) {
+ var _this = this;
+ if (theme) {
+ this.colorManager.setTheme(theme);
+ }
+ if (!this._themeStyleElement) {
+ this._themeStyleElement = document.createElement('style');
+ this._terminal.screenElement.appendChild(this._themeStyleElement);
+ }
+ var styles = this._terminalSelector + " ." + ROW_CONTAINER_CLASS + " {" +
+ (" color: " + this.colorManager.colors.foreground.css + ";") +
+ (" background-color: " + this.colorManager.colors.background.css + ";") +
+ (" font-family: " + this._terminal.getOption('fontFamily') + ";") +
+ (" font-size: " + this._terminal.getOption('fontSize') + "px;") +
+ "}";
+ styles +=
+ this._terminalSelector + " span:not(." + DomRendererRowFactory_1.BOLD_CLASS + ") {" +
+ (" font-weight: " + this._terminal.options.fontWeight + ";") +
+ "}" +
+ (this._terminalSelector + " span." + DomRendererRowFactory_1.BOLD_CLASS + " {") +
+ (" font-weight: " + this._terminal.options.fontWeightBold + ";") +
+ "}" +
+ (this._terminalSelector + " span." + DomRendererRowFactory_1.ITALIC_CLASS + " {") +
+ " font-style: italic;" +
+ "}";
+ styles +=
+ this._terminalSelector + " ." + ROW_CONTAINER_CLASS + ":not(." + FOCUS_CLASS + ") ." + DomRendererRowFactory_1.CURSOR_CLASS + " {" +
+ (" outline: 1px solid " + this.colorManager.colors.cursor.css + ";") +
+ " outline-offset: -1px;" +
+ "}" +
+ (this._terminalSelector + " ." + ROW_CONTAINER_CLASS + "." + FOCUS_CLASS + " ." + DomRendererRowFactory_1.CURSOR_CLASS + "." + DomRendererRowFactory_1.CURSOR_STYLE_BLOCK_CLASS + " {") +
+ (" background-color: " + this.colorManager.colors.cursor.css + ";") +
+ (" color: " + this.colorManager.colors.cursorAccent.css + ";") +
+ "}" +
+ (this._terminalSelector + " ." + ROW_CONTAINER_CLASS + "." + FOCUS_CLASS + " ." + DomRendererRowFactory_1.CURSOR_CLASS + "." + DomRendererRowFactory_1.CURSOR_STYLE_BAR_CLASS + " {") +
+ (" box-shadow: 1px 0 0 " + this.colorManager.colors.cursor.css + " inset;") +
+ "}" +
+ (this._terminalSelector + " ." + ROW_CONTAINER_CLASS + "." + FOCUS_CLASS + " ." + DomRendererRowFactory_1.CURSOR_CLASS + "." + DomRendererRowFactory_1.CURSOR_STYLE_UNDERLINE_CLASS + " {") +
+ (" box-shadow: 0 -1px 0 " + this.colorManager.colors.cursor.css + " inset;") +
+ "}";
+ styles +=
+ this._terminalSelector + " ." + SELECTION_CLASS + " {" +
+ " position: absolute;" +
+ " top: 0;" +
+ " left: 0;" +
+ " z-index: 1;" +
+ " pointer-events: none;" +
+ "}" +
+ (this._terminalSelector + " ." + SELECTION_CLASS + " div {") +
+ " position: absolute;" +
+ (" background-color: " + this.colorManager.colors.selection.css + ";") +
+ "}";
+ this.colorManager.colors.ansi.forEach(function (c, i) {
+ styles +=
+ _this._terminalSelector + " ." + FG_CLASS_PREFIX + i + " { color: " + c.css + "; }" +
+ (_this._terminalSelector + " ." + BG_CLASS_PREFIX + i + " { background-color: " + c.css + "; }");
+ });
+ styles +=
+ this._terminalSelector + " ." + FG_CLASS_PREFIX + Types_1.INVERTED_DEFAULT_COLOR + " { color: " + this.colorManager.colors.background.css + "; }" +
+ (this._terminalSelector + " ." + BG_CLASS_PREFIX + Types_1.INVERTED_DEFAULT_COLOR + " { background-color: " + this.colorManager.colors.foreground.css + "; }");
+ this._themeStyleElement.innerHTML = styles;
+ return this.colorManager.colors;
+ };
+ DomRenderer.prototype.onWindowResize = function (devicePixelRatio) {
+ this._updateDimensions();
+ };
+ DomRenderer.prototype._refreshRowElements = function (cols, rows) {
+ for (var i = this._rowElements.length; i <= rows; i++) {
+ var row = document.createElement('div');
+ this._rowContainer.appendChild(row);
+ this._rowElements.push(row);
+ }
+ while (this._rowElements.length > rows) {
+ this._rowContainer.removeChild(this._rowElements.pop());
+ }
+ };
+ DomRenderer.prototype.onResize = function (cols, rows) {
+ this._refreshRowElements(cols, rows);
+ this._updateDimensions();
+ };
+ DomRenderer.prototype.onCharSizeChanged = function () {
+ this._updateDimensions();
+ };
+ DomRenderer.prototype.onBlur = function () {
+ this._rowContainer.classList.remove(FOCUS_CLASS);
+ };
+ DomRenderer.prototype.onFocus = function () {
+ this._rowContainer.classList.add(FOCUS_CLASS);
+ };
+ DomRenderer.prototype.onSelectionChanged = function (start, end, columnSelectMode) {
+ while (this._selectionContainer.children.length) {
+ this._selectionContainer.removeChild(this._selectionContainer.children[0]);
+ }
+ if (!start || !end) {
+ return;
+ }
+ var viewportStartRow = start[1] - this._terminal.buffer.ydisp;
+ var viewportEndRow = end[1] - this._terminal.buffer.ydisp;
+ var viewportCappedStartRow = Math.max(viewportStartRow, 0);
+ var viewportCappedEndRow = Math.min(viewportEndRow, this._terminal.rows - 1);
+ if (viewportCappedStartRow >= this._terminal.rows || viewportCappedEndRow < 0) {
+ return;
+ }
+ var documentFragment = document.createDocumentFragment();
+ if (columnSelectMode) {
+ documentFragment.appendChild(this._createSelectionElement(viewportCappedStartRow, start[0], end[0], viewportCappedEndRow - viewportCappedStartRow + 1));
+ }
+ else {
+ var startCol = viewportStartRow === viewportCappedStartRow ? start[0] : 0;
+ var endCol = viewportCappedStartRow === viewportCappedEndRow ? end[0] : this._terminal.cols;
+ documentFragment.appendChild(this._createSelectionElement(viewportCappedStartRow, startCol, endCol));
+ var middleRowsCount = viewportCappedEndRow - viewportCappedStartRow - 1;
+ documentFragment.appendChild(this._createSelectionElement(viewportCappedStartRow + 1, 0, this._terminal.cols, middleRowsCount));
+ if (viewportCappedStartRow !== viewportCappedEndRow) {
+ var endCol_1 = viewportEndRow === viewportCappedEndRow ? end[0] : this._terminal.cols;
+ documentFragment.appendChild(this._createSelectionElement(viewportCappedEndRow, 0, endCol_1));
+ }
+ }
+ this._selectionContainer.appendChild(documentFragment);
+ };
+ DomRenderer.prototype._createSelectionElement = function (row, colStart, colEnd, rowCount) {
+ if (rowCount === void 0) { rowCount = 1; }
+ var element = document.createElement('div');
+ element.style.height = rowCount * this.dimensions.actualCellHeight + "px";
+ element.style.top = row * this.dimensions.actualCellHeight + "px";
+ element.style.left = colStart * this.dimensions.actualCellWidth + "px";
+ element.style.width = this.dimensions.actualCellWidth * (colEnd - colStart) + "px";
+ return element;
+ };
+ DomRenderer.prototype.onCursorMove = function () {
+ };
+ DomRenderer.prototype.onOptionsChanged = function () {
+ this._updateDimensions();
+ this.setTheme(undefined);
+ this._terminal.refresh(0, this._terminal.rows - 1);
+ };
+ DomRenderer.prototype.clear = function () {
+ this._rowElements.forEach(function (e) { return e.innerHTML = ''; });
+ };
+ DomRenderer.prototype.refreshRows = function (start, end) {
+ this._renderDebouncer.refresh(start, end);
+ };
+ DomRenderer.prototype._renderRows = function (start, end) {
+ var terminal = this._terminal;
+ var cursorAbsoluteY = terminal.buffer.ybase + terminal.buffer.y;
+ var cursorX = this._terminal.buffer.x;
+ for (var y = start; y <= end; y++) {
+ var rowElement = this._rowElements[y];
+ rowElement.innerHTML = '';
+ var row = y + terminal.buffer.ydisp;
+ var lineData = terminal.buffer.lines.get(row);
+ var cursorStyle = terminal.options.cursorStyle;
+ rowElement.appendChild(this._rowFactory.createRow(lineData, row === cursorAbsoluteY, cursorStyle, cursorX, this.dimensions.actualCellWidth, terminal.cols));
+ }
+ this._terminal.emit('refresh', { start: start, end: end });
+ };
+ Object.defineProperty(DomRenderer.prototype, "_terminalSelector", {
+ get: function () {
+ return "." + TERMINAL_CLASS_PREFIX + this._terminalClass;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ DomRenderer.prototype.registerCharacterJoiner = function (handler) { return -1; };
+ DomRenderer.prototype.deregisterCharacterJoiner = function (joinerId) { return false; };
+ DomRenderer.prototype._onLinkHover = function (e) {
+ this._setCellUnderline(e.x1, e.x2, e.y1, e.y2, e.cols, true);
+ };
+ DomRenderer.prototype._onLinkLeave = function (e) {
+ this._setCellUnderline(e.x1, e.x2, e.y1, e.y2, e.cols, false);
+ };
+ DomRenderer.prototype._setCellUnderline = function (x, x2, y, y2, cols, enabled) {
+ while (x !== x2 || y !== y2) {
+ var row = this._rowElements[y];
+ if (!row) {
+ return;
+ }
+ var span = row.children[x];
+ if (span) {
+ span.style.textDecoration = enabled ? 'underline' : 'none';
+ }
+ if (++x >= cols) {
+ x = 0;
+ y++;
+ }
+ }
+ };
+ return DomRenderer;
+}(EventEmitter_1.EventEmitter));
+exports.DomRenderer = DomRenderer;
+
+},{"../../common/EventEmitter":19,"../../ui/RenderDebouncer":54,"../ColorManager":31,"../atlas/Types":46,"./DomRendererRowFactory":48}],48:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var Buffer_1 = require("../../Buffer");
+var Types_1 = require("../atlas/Types");
+exports.BOLD_CLASS = 'xterm-bold';
+exports.ITALIC_CLASS = 'xterm-italic';
+exports.CURSOR_CLASS = 'xterm-cursor';
+exports.CURSOR_STYLE_BLOCK_CLASS = 'xterm-cursor-block';
+exports.CURSOR_STYLE_BAR_CLASS = 'xterm-cursor-bar';
+exports.CURSOR_STYLE_UNDERLINE_CLASS = 'xterm-cursor-underline';
+var DomRendererRowFactory = (function () {
+ function DomRendererRowFactory(_document) {
+ this._document = _document;
+ }
+ DomRendererRowFactory.prototype.createRow = function (lineData, isCursorRow, cursorStyle, cursorX, cellWidth, cols) {
+ var fragment = this._document.createDocumentFragment();
+ var lineLength = 0;
+ for (var x = Math.min(lineData.length, cols) - 1; x >= 0; x--) {
+ var charData = lineData.get(x);
+ var code = charData[Buffer_1.CHAR_DATA_CODE_INDEX];
+ if (code !== Buffer_1.NULL_CELL_CODE || (isCursorRow && x === cursorX)) {
+ lineLength = x + 1;
+ break;
+ }
+ }
+ for (var x = 0; x < lineLength; x++) {
+ var charData = lineData.get(x);
+ var char = charData[Buffer_1.CHAR_DATA_CHAR_INDEX] || Buffer_1.WHITESPACE_CELL_CHAR;
+ var attr = charData[Buffer_1.CHAR_DATA_ATTR_INDEX];
+ var width = charData[Buffer_1.CHAR_DATA_WIDTH_INDEX];
+ if (width === 0) {
+ continue;
+ }
+ var charElement = this._document.createElement('span');
+ if (width > 1) {
+ charElement.style.width = cellWidth * width + "px";
+ }
+ var flags = attr >> 18;
+ var bg = attr & 0x1ff;
+ var fg = (attr >> 9) & 0x1ff;
+ if (isCursorRow && x === cursorX) {
+ charElement.classList.add(exports.CURSOR_CLASS);
+ switch (cursorStyle) {
+ case 'bar':
+ charElement.classList.add(exports.CURSOR_STYLE_BAR_CLASS);
+ break;
+ case 'underline':
+ charElement.classList.add(exports.CURSOR_STYLE_UNDERLINE_CLASS);
+ break;
+ default:
+ charElement.classList.add(exports.CURSOR_STYLE_BLOCK_CLASS);
+ break;
+ }
+ }
+ if (flags & 8) {
+ var temp = bg;
+ bg = fg;
+ fg = temp;
+ if (fg === Types_1.DEFAULT_COLOR) {
+ fg = Types_1.INVERTED_DEFAULT_COLOR;
+ }
+ if (bg === Types_1.DEFAULT_COLOR) {
+ bg = Types_1.INVERTED_DEFAULT_COLOR;
+ }
+ }
+ if (flags & 1) {
+ if (fg < 8) {
+ fg += 8;
+ }
+ charElement.classList.add(exports.BOLD_CLASS);
+ }
+ if (flags & 64) {
+ charElement.classList.add(exports.ITALIC_CLASS);
+ }
+ charElement.textContent = char;
+ if (fg !== Types_1.DEFAULT_COLOR) {
+ charElement.classList.add("xterm-fg-" + fg);
+ }
+ if (bg !== Types_1.DEFAULT_COLOR) {
+ charElement.classList.add("xterm-bg-" + bg);
+ }
+ fragment.appendChild(charElement);
+ }
+ return fragment;
+ };
+ return DomRendererRowFactory;
+}());
+exports.DomRendererRowFactory = DomRendererRowFactory;
+
+},{"../../Buffer":2,"../atlas/Types":46}],49:[function(require,module,exports){
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ }
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var EventEmitter_1 = require("../common/EventEmitter");
+var CharMeasure = (function (_super) {
+ __extends(CharMeasure, _super);
+ function CharMeasure(document, parentElement) {
+ var _this = _super.call(this) || this;
+ _this._document = document;
+ _this._parentElement = parentElement;
+ _this._measureElement = _this._document.createElement('span');
+ _this._measureElement.classList.add('xterm-char-measure-element');
+ _this._measureElement.textContent = 'W';
+ _this._measureElement.setAttribute('aria-hidden', 'true');
+ _this._parentElement.appendChild(_this._measureElement);
+ return _this;
+ }
+ Object.defineProperty(CharMeasure.prototype, "width", {
+ get: function () {
+ return this._width;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(CharMeasure.prototype, "height", {
+ get: function () {
+ return this._height;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ CharMeasure.prototype.measure = function (options) {
+ this._measureElement.style.fontFamily = options.fontFamily;
+ this._measureElement.style.fontSize = options.fontSize + "px";
+ var geometry = this._measureElement.getBoundingClientRect();
+ if (geometry.width === 0 || geometry.height === 0) {
+ return;
+ }
+ var adjustedHeight = Math.ceil(geometry.height);
+ if (this._width !== geometry.width || this._height !== adjustedHeight) {
+ this._width = geometry.width;
+ this._height = adjustedHeight;
+ this.emit('charsizechanged');
+ }
+ };
+ return CharMeasure;
+}(EventEmitter_1.EventEmitter));
+exports.CharMeasure = CharMeasure;
+
+},{"../common/EventEmitter":19}],50:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+function prepareTextForTerminal(text) {
+ return text.replace(/\r?\n/g, '\r');
+}
+exports.prepareTextForTerminal = prepareTextForTerminal;
+function bracketTextForPaste(text, bracketedPasteMode) {
+ if (bracketedPasteMode) {
+ return '\x1b[200~' + text + '\x1b[201~';
+ }
+ return text;
+}
+exports.bracketTextForPaste = bracketTextForPaste;
+function copyHandler(ev, term, selectionManager) {
+ if (term.browser.isMSIE) {
+ window.clipboardData.setData('Text', selectionManager.selectionText);
+ }
+ else {
+ ev.clipboardData.setData('text/plain', selectionManager.selectionText);
+ }
+ ev.preventDefault();
+}
+exports.copyHandler = copyHandler;
+function pasteHandler(ev, term) {
+ ev.stopPropagation();
+ var text;
+ var dispatchPaste = function (text) {
+ text = prepareTextForTerminal(text);
+ text = bracketTextForPaste(text, term.bracketedPasteMode);
+ term.handler(text);
+ term.textarea.value = '';
+ term.emit('paste', text);
+ term.cancel(ev);
+ };
+ if (term.browser.isMSIE) {
+ if (window.clipboardData) {
+ text = window.clipboardData.getData('Text');
+ dispatchPaste(text);
+ }
+ }
+ else {
+ if (ev.clipboardData) {
+ text = ev.clipboardData.getData('text/plain');
+ dispatchPaste(text);
+ }
+ }
+}
+exports.pasteHandler = pasteHandler;
+function moveTextAreaUnderMouseCursor(ev, term) {
+ var pos = term.screenElement.getBoundingClientRect();
+ var left = ev.clientX - pos.left - 10;
+ var top = ev.clientY - pos.top - 10;
+ term.textarea.style.position = 'absolute';
+ term.textarea.style.width = '20px';
+ term.textarea.style.height = '20px';
+ term.textarea.style.left = left + "px";
+ term.textarea.style.top = top + "px";
+ term.textarea.style.zIndex = '1000';
+ term.textarea.focus();
+ setTimeout(function () {
+ term.textarea.style.position = null;
+ term.textarea.style.width = null;
+ term.textarea.style.height = null;
+ term.textarea.style.left = null;
+ term.textarea.style.top = null;
+ term.textarea.style.zIndex = null;
+ }, 200);
+}
+exports.moveTextAreaUnderMouseCursor = moveTextAreaUnderMouseCursor;
+function rightClickHandler(ev, term, selectionManager, shouldSelectWord) {
+ moveTextAreaUnderMouseCursor(ev, term);
+ if (shouldSelectWord && !selectionManager.isClickInSelection(ev)) {
+ selectionManager.selectWordAtCursor(ev);
+ }
+ term.textarea.value = selectionManager.selectionText;
+ term.textarea.select();
+}
+exports.rightClickHandler = rightClickHandler;
+
+},{}],51:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+function addDisposableDomListener(node, type, handler, useCapture) {
+ node.addEventListener(type, handler, useCapture);
+ return {
+ dispose: function () {
+ if (!handler) {
+ return;
+ }
+ node.removeEventListener(type, handler, useCapture);
+ node = null;
+ handler = null;
+ }
+ };
+}
+exports.addDisposableDomListener = addDisposableDomListener;
+
+},{}],52:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var MouseHelper = (function () {
+ function MouseHelper(_renderer) {
+ this._renderer = _renderer;
+ }
+ MouseHelper.prototype.setRenderer = function (renderer) {
+ this._renderer = renderer;
+ };
+ MouseHelper.getCoordsRelativeToElement = function (event, element) {
+ var rect = element.getBoundingClientRect();
+ return [event.clientX - rect.left, event.clientY - rect.top];
+ };
+ MouseHelper.prototype.getCoords = function (event, element, charMeasure, colCount, rowCount, isSelection) {
+ if (!charMeasure.width || !charMeasure.height) {
+ return null;
+ }
+ var coords = MouseHelper.getCoordsRelativeToElement(event, element);
+ if (!coords) {
+ return null;
+ }
+ coords[0] = Math.ceil((coords[0] + (isSelection ? this._renderer.dimensions.actualCellWidth / 2 : 0)) / this._renderer.dimensions.actualCellWidth);
+ coords[1] = Math.ceil(coords[1] / this._renderer.dimensions.actualCellHeight);
+ coords[0] = Math.min(Math.max(coords[0], 1), colCount + (isSelection ? 1 : 0));
+ coords[1] = Math.min(Math.max(coords[1], 1), rowCount);
+ return coords;
+ };
+ MouseHelper.prototype.getRawByteCoords = function (event, element, charMeasure, colCount, rowCount) {
+ var coords = this.getCoords(event, element, charMeasure, colCount, rowCount);
+ var x = coords[0];
+ var y = coords[1];
+ x += 32;
+ y += 32;
+ return { x: x, y: y };
+ };
+ return MouseHelper;
+}());
+exports.MouseHelper = MouseHelper;
+
+},{}],53:[function(require,module,exports){
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ }
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var Lifecycle_1 = require("../common/Lifecycle");
+var Lifecycle_2 = require("./Lifecycle");
+var HOVER_DURATION = 500;
+var MouseZoneManager = (function (_super) {
+ __extends(MouseZoneManager, _super);
+ function MouseZoneManager(_terminal) {
+ var _this = _super.call(this) || this;
+ _this._terminal = _terminal;
+ _this._zones = [];
+ _this._areZonesActive = false;
+ _this._tooltipTimeout = null;
+ _this._currentZone = null;
+ _this._lastHoverCoords = [null, null];
+ _this.register(Lifecycle_2.addDisposableDomListener(_this._terminal.element, 'mousedown', function (e) { return _this._onMouseDown(e); }));
+ _this._mouseMoveListener = function (e) { return _this._onMouseMove(e); };
+ _this._mouseLeaveListener = function (e) { return _this._onMouseLeave(e); };
+ _this._clickListener = function (e) { return _this._onClick(e); };
+ return _this;
+ }
+ MouseZoneManager.prototype.dispose = function () {
+ _super.prototype.dispose.call(this);
+ this._deactivate();
+ };
+ MouseZoneManager.prototype.add = function (zone) {
+ this._zones.push(zone);
+ if (this._zones.length === 1) {
+ this._activate();
+ }
+ };
+ MouseZoneManager.prototype.clearAll = function (start, end) {
+ if (this._zones.length === 0) {
+ return;
+ }
+ if (!end) {
+ start = 0;
+ end = this._terminal.rows - 1;
+ }
+ for (var i = 0; i < this._zones.length; i++) {
+ var zone = this._zones[i];
+ if ((zone.y1 > start && zone.y1 <= end + 1) ||
+ (zone.y2 > start && zone.y2 <= end + 1) ||
+ (zone.y1 < start && zone.y2 > end + 1)) {
+ if (this._currentZone && this._currentZone === zone) {
+ this._currentZone.leaveCallback();
+ this._currentZone = null;
+ }
+ this._zones.splice(i--, 1);
+ }
+ }
+ if (this._zones.length === 0) {
+ this._deactivate();
+ }
+ };
+ MouseZoneManager.prototype._activate = function () {
+ if (!this._areZonesActive) {
+ this._areZonesActive = true;
+ this._terminal.element.addEventListener('mousemove', this._mouseMoveListener);
+ this._terminal.element.addEventListener('mouseleave', this._mouseLeaveListener);
+ this._terminal.element.addEventListener('click', this._clickListener);
+ }
+ };
+ MouseZoneManager.prototype._deactivate = function () {
+ if (this._areZonesActive) {
+ this._areZonesActive = false;
+ this._terminal.element.removeEventListener('mousemove', this._mouseMoveListener);
+ this._terminal.element.removeEventListener('mouseleave', this._mouseLeaveListener);
+ this._terminal.element.removeEventListener('click', this._clickListener);
+ }
+ };
+ MouseZoneManager.prototype._onMouseMove = function (e) {
+ if (this._lastHoverCoords[0] !== e.pageX || this._lastHoverCoords[1] !== e.pageY) {
+ this._onHover(e);
+ this._lastHoverCoords = [e.pageX, e.pageY];
+ }
+ };
+ MouseZoneManager.prototype._onHover = function (e) {
+ var _this = this;
+ var zone = this._findZoneEventAt(e);
+ if (zone === this._currentZone) {
+ return;
+ }
+ if (this._currentZone) {
+ this._currentZone.leaveCallback();
+ this._currentZone = null;
+ if (this._tooltipTimeout) {
+ clearTimeout(this._tooltipTimeout);
+ }
+ }
+ if (!zone) {
+ return;
+ }
+ this._currentZone = zone;
+ if (zone.hoverCallback) {
+ zone.hoverCallback(e);
+ }
+ this._tooltipTimeout = setTimeout(function () { return _this._onTooltip(e); }, HOVER_DURATION);
+ };
+ MouseZoneManager.prototype._onTooltip = function (e) {
+ this._tooltipTimeout = null;
+ var zone = this._findZoneEventAt(e);
+ if (zone && zone.tooltipCallback) {
+ zone.tooltipCallback(e);
+ }
+ };
+ MouseZoneManager.prototype._onMouseDown = function (e) {
+ if (!this._areZonesActive) {
+ return;
+ }
+ var zone = this._findZoneEventAt(e);
+ if (zone) {
+ if (zone.willLinkActivate(e)) {
+ e.preventDefault();
+ e.stopImmediatePropagation();
+ }
+ }
+ };
+ MouseZoneManager.prototype._onMouseLeave = function (e) {
+ if (this._currentZone) {
+ this._currentZone.leaveCallback();
+ this._currentZone = null;
+ if (this._tooltipTimeout) {
+ clearTimeout(this._tooltipTimeout);
+ }
+ }
+ };
+ MouseZoneManager.prototype._onClick = function (e) {
+ var zone = this._findZoneEventAt(e);
+ if (zone) {
+ zone.clickCallback(e);
+ e.preventDefault();
+ e.stopImmediatePropagation();
+ }
+ };
+ MouseZoneManager.prototype._findZoneEventAt = function (e) {
+ var coords = this._terminal.mouseHelper.getCoords(e, this._terminal.screenElement, this._terminal.charMeasure, this._terminal.cols, this._terminal.rows);
+ if (!coords) {
+ return null;
+ }
+ var x = coords[0];
+ var y = coords[1];
+ for (var i = 0; i < this._zones.length; i++) {
+ var zone = this._zones[i];
+ if (zone.y1 === zone.y2) {
+ if (y === zone.y1 && x >= zone.x1 && x < zone.x2) {
+ return zone;
+ }
+ }
+ else {
+ if ((y === zone.y1 && x >= zone.x1) ||
+ (y === zone.y2 && x < zone.x2) ||
+ (y > zone.y1 && y < zone.y2)) {
+ return zone;
+ }
+ }
+ }
+ return null;
+ };
+ return MouseZoneManager;
+}(Lifecycle_1.Disposable));
+exports.MouseZoneManager = MouseZoneManager;
+var MouseZone = (function () {
+ function MouseZone(x1, y1, x2, y2, clickCallback, hoverCallback, tooltipCallback, leaveCallback, willLinkActivate) {
+ this.x1 = x1;
+ this.y1 = y1;
+ this.x2 = x2;
+ this.y2 = y2;
+ this.clickCallback = clickCallback;
+ this.hoverCallback = hoverCallback;
+ this.tooltipCallback = tooltipCallback;
+ this.leaveCallback = leaveCallback;
+ this.willLinkActivate = willLinkActivate;
+ }
+ return MouseZone;
+}());
+exports.MouseZone = MouseZone;
+
+},{"../common/Lifecycle":20,"./Lifecycle":51}],54:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var RenderDebouncer = (function () {
+ function RenderDebouncer(_terminal, _callback) {
+ this._terminal = _terminal;
+ this._callback = _callback;
+ this._animationFrame = null;
+ }
+ RenderDebouncer.prototype.dispose = function () {
+ if (this._animationFrame) {
+ window.cancelAnimationFrame(this._animationFrame);
+ this._animationFrame = null;
+ }
+ };
+ RenderDebouncer.prototype.refresh = function (rowStart, rowEnd) {
+ var _this = this;
+ rowStart = rowStart !== null && rowStart !== undefined ? rowStart : 0;
+ rowEnd = rowEnd !== null && rowEnd !== undefined ? rowEnd : this._terminal.rows - 1;
+ var isRowStartSet = this._rowStart !== undefined && this._rowStart !== null;
+ var isRowEndSet = this._rowEnd !== undefined && this._rowEnd !== null;
+ this._rowStart = isRowStartSet ? Math.min(this._rowStart, rowStart) : rowStart;
+ this._rowEnd = isRowEndSet ? Math.max(this._rowEnd, rowEnd) : rowEnd;
+ if (this._animationFrame) {
+ return;
+ }
+ this._animationFrame = window.requestAnimationFrame(function () { return _this._innerRefresh(); });
+ };
+ RenderDebouncer.prototype._innerRefresh = function () {
+ this._rowStart = Math.max(this._rowStart, 0);
+ this._rowEnd = Math.min(this._rowEnd, this._terminal.rows - 1);
+ this._callback(this._rowStart, this._rowEnd);
+ this._rowStart = null;
+ this._rowEnd = null;
+ this._animationFrame = null;
+ };
+ return RenderDebouncer;
+}());
+exports.RenderDebouncer = RenderDebouncer;
+
+},{}],55:[function(require,module,exports){
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ }
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var Lifecycle_1 = require("../common/Lifecycle");
+var ScreenDprMonitor = (function (_super) {
+ __extends(ScreenDprMonitor, _super);
+ function ScreenDprMonitor() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ ScreenDprMonitor.prototype.setListener = function (listener) {
+ var _this = this;
+ if (this._listener) {
+ this.clearListener();
+ }
+ this._listener = listener;
+ this._outerListener = function () {
+ _this._listener(window.devicePixelRatio, _this._currentDevicePixelRatio);
+ _this._updateDpr();
+ };
+ this._updateDpr();
+ };
+ ScreenDprMonitor.prototype.dispose = function () {
+ _super.prototype.dispose.call(this);
+ this.clearListener();
+ };
+ ScreenDprMonitor.prototype._updateDpr = function () {
+ if (this._resolutionMediaMatchList) {
+ this._resolutionMediaMatchList.removeListener(this._outerListener);
+ }
+ this._currentDevicePixelRatio = window.devicePixelRatio;
+ this._resolutionMediaMatchList = window.matchMedia("screen and (resolution: " + window.devicePixelRatio + "dppx)");
+ this._resolutionMediaMatchList.addListener(this._outerListener);
+ };
+ ScreenDprMonitor.prototype.clearListener = function () {
+ if (!this._listener) {
+ return;
+ }
+ this._resolutionMediaMatchList.removeListener(this._outerListener);
+ this._listener = null;
+ this._outerListener = null;
+ };
+ return ScreenDprMonitor;
+}(Lifecycle_1.Disposable));
+exports.ScreenDprMonitor = ScreenDprMonitor;
+
+},{"../common/Lifecycle":20}],56:[function(require,module,exports){
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var Terminal_1 = require("./public/Terminal");
+module.exports = Terminal_1.Terminal;
+
+},{"./public/Terminal":28}]},{},[56])(56)
+});
+//# sourceMappingURL=xterm.js.map
diff --git a/release.sh b/release.sh
new file mode 100755
index 0000000..60c5a23
--- /dev/null
+++ b/release.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+PACKAGE_VERSION=$(grep 'version' package.json | cut -d '"' -f4)
+
+yarn build
+
+docker build -t wy373226722/electron-distribution:$PACKAGE_VERSION .
+
+docker tag wy373226722/electron-distribution:$PACKAGE_VERSION registry.cn-shenzhen.aliyuncs.com/yi-ge/electron-distribution:$PACKAGE_VERSION
+docker tag wy373226722/electron-distribution:$PACKAGE_VERSION registry.cn-shenzhen.aliyuncs.com/yi-ge/electron-distribution:latest
+docker tag wy373226722/electron-distribution:$PACKAGE_VERSION ccr.ccs.tencentyun.com/yi-ge/electron-distribution:$PACKAGE_VERSION
+docker tag wy373226722/electron-distribution:$PACKAGE_VERSION ccr.ccs.tencentyun.com/yi-ge/electron-distribution:latest
+docker tag wy373226722/electron-distribution:$PACKAGE_VERSION wy373226722/electron-distribution:latest
+
+docker push ccr.ccs.tencentyun.com/yi-ge/electron-distribution:$PACKAGE_VERSION
+docker push ccr.ccs.tencentyun.com/yi-ge/electron-distribution:latest
+docker push registry.cn-shenzhen.aliyuncs.com/yi-ge/electron-distribution:$PACKAGE_VERSION
+docker push registry.cn-shenzhen.aliyuncs.com/yi-ge/electron-distribution:latest
+docker push wy373226722/electron-distribution:$PACKAGE_VERSION
+docker push wy373226722/electron-distribution:latest
diff --git a/src/app.js b/src/app.js
new file mode 100644
index 0000000..ec1a460
--- /dev/null
+++ b/src/app.js
@@ -0,0 +1,99 @@
+import hapi from 'hapi'
+import swagger from './lib/swagger'
+import {
+ SERVER,
+ SYSTEM
+} from './config'
+import routes from './routes'
+import db from './lib/db'
+import moment from 'moment-timezone'
+import SocketIO from 'socket.io'
+import websocket from './websocket'
+import DockerOde from 'dockerode'
+import fs from 'fs'
+
+ ;(async () => {
+ const socketPath = SYSTEM.DOCKER_SOCKET
+ const stats = fs.statSync(socketPath)
+
+ if (!stats.isSocket()) {
+ console.log('Docker can\'t connect.')
+ }
+
+ const docker = new DockerOde({
+ socketPath: socketPath
+ })
+
+ const checkDockerEnv = async () => {
+ try {
+ const r = await docker.info()
+ if (r.Architecture !== 'x86_64') {
+ console.log('Require x86-64 system.')
+ }
+ } catch (err) {
+ console.log('Please make sure Docker is working.')
+ }
+
+ try {
+ const r = await docker.version()
+ if (r.Version.split('.')[0] < 18) {
+ console.log('Require Docker 18+ .')
+ }
+ } catch (err) {
+ console.log('Error: ' + err.toString())
+ }
+
+ console.log('Docker Runding...')
+ }
+
+ checkDockerEnv()
+
+ const server = hapi.server(SERVER)
+
+ await server.register([
+ ...swagger
+ ])
+
+ try {
+ server.bind({
+ docker,
+ $db: db,
+ $moment: moment,
+ /**
+ * send success data
+ */
+ success (data, status = 1, msg) {
+ return {
+ status,
+ msg,
+ result: data
+ }
+ },
+ /**
+ * send fail data
+ */
+ fail (data, status = 10000, msg) {
+ return {
+ status,
+ msg,
+ result: data
+ }
+ }
+ })
+ server.route(routes)
+ await server.start()
+
+ const io = SocketIO.listen(server.listener)
+
+ server.bind({
+ io
+ })
+
+ websocket(io, docker)
+
+ console.log('Server running at:', server.info.uri)
+ } catch (err) {
+ console.log(err)
+ process.exit(1)
+ }
+})()
diff --git a/src/config.js b/src/config.js
new file mode 100644
index 0000000..51a29b7
--- /dev/null
+++ b/src/config.js
@@ -0,0 +1,78 @@
+const isDev = process.env.NODE_ENV ? process.env.NODE_ENV === 'development' : false
+
+export const SYSTEM = {
+ NAME: process.env.NAME || 'APP',
+ TOKEN: process.env.TOKEN || '1jH27dJf9s852',
+ SCHEME: [isDev ? 'http' : (process.env.SCHEME || 'http')],
+ DOMAIN: process.env.DOMAIN || 'www.example.com',
+ REPOPATH: process.env.REPOPATH || 'git@github.com:yi-ge/electron-distribution.git',
+ WORKPATH: process.env.WORKPATH || '/data',
+ BUILD_TYPE: process.env.BUILD_TYPE ? process.env.BUILD_TYPE.split(',') : ['win', 'linux'], // ['linux', 'win', 'mac']
+ GH_TOKEN: process.env.GH_TOKEN || '', // If you set publish option
+ CSC_LINK: process.env.CSC_LINK || '', // https://www.electron.build/code-signing
+ CSC_KEY_PASSWORD: process.env.CSC_KEY_PASSWORD || '',
+ CSC_NAME: process.env.CSC_NAME || '',
+ CSC_IDENTITY_AUTO_DISCOVERY: 'false',
+ DOCKER_SOCKET: process.env.DOCKER_SOCKET || '/var/run/docker.sock',
+ MAC_SERVER_HOST: process.env.MAC_SERVER_HOST || '127.0.0.1',
+ MAC_SERVER_PORT: process.env.MAC_SERVER_PORT || '22',
+ MAC_SERVER_USERNAME: process.env.MAC_SERVER_USERNAME || 'guest',
+ LINUX_SERVER_HOST: process.env.LINUX_SERVER_HOST || '127.0.0.1',
+ LINUX_SERVER_PORT: process.env.LINUX_SERVER_PORT || '22',
+ LINUX_SERVER_USERNAME: process.env.LINUX_SERVER_USERNAME || 'root',
+ OBJECT_STORAGE_TYPE: process.env.OBJECT_STORAGE_TYPE || 'cos'
+}
+
+export const SERVER = {
+ port: isDev ? '65533' : (process.env.PORT || '80'),
+ host: isDev ? '0.0.0.0' : (process.env.HOST || '0.0.0.0'),
+ routes: {
+ cors: {
+ origin: ['*'],
+ additionalHeaders: ['Expect', 'X-GitHub-Delivery', 'X-GitHub-Event', 'X-Hub-Signature']
+ },
+ state: {
+ parse: false, // parse and store in request.state
+ failAction: 'ignore' // may also be 'ignore' or 'log'
+ }
+ }
+}
+
+// 腾讯云
+export const qcloudAccessKey = {
+ SecretId: process.env.COS_SECRE_ID || '',
+ SecretKey: process.env.COS_SECRE_KEY || ''
+}
+
+export const COS = {
+ bucket: process.env.COS_BUCKET || 'bucketname-12345678',
+ region: process.env.COS_REGION || 'ap-chengdu',
+ url: process.env.COS_URL || 'https://cdn.xxx.com'
+}
+
+// 阿里云OSS
+const AliyunAccessKey = {
+ accessKeyId: process.env.OSS_ACCESS_KEY_ID || 'id',
+ accessKeySecret: process.env.OSS_ACCESS_SECRET || 'key'
+}
+
+export const OSS = {
+ config: {
+ region: process.env.OSS_REGION || 'oss-cn-qingdao',
+ accessKeyId: AliyunAccessKey.accessKeyId,
+ accessKeySecret: AliyunAccessKey.accessKeySecret,
+ bucket: process.env.OSS_BUCKET || 'bucket',
+ internal: process.env.OSS_INTERNAL === 'true',
+ secure: true,
+ timeout: 1200000 // 20min
+ },
+ url: process.env.OSS_URL || 'https://cdn.xxx.com'
+}
+
+export const QINIU = {
+ accessKey: process.env.QINIU_ACCESS_KEY || '',
+ secretKey: process.env.QINIU_SECRET_KEY || '',
+ bucket: process.env.QINIU_BUCKET_KEY || '',
+ url: process.env.QINIU_URL || 'https://cdn.xxx.com',
+ zone: process.env.QINIU_ZONE || 'Zone_z0'
+}
diff --git a/src/dev.js b/src/dev.js
new file mode 100644
index 0000000..da0652e
--- /dev/null
+++ b/src/dev.js
@@ -0,0 +1,2 @@
+require('@babel/register')
+require('./app')
diff --git a/src/lib/ali-oss.js b/src/lib/ali-oss.js
new file mode 100644
index 0000000..4888125
--- /dev/null
+++ b/src/lib/ali-oss.js
@@ -0,0 +1,135 @@
+import fs from 'fs'
+import { OSS as OSSConfig } from '../config'
+import OSS from 'ali-oss'
+
+// 阿里云OSS接口,返回Promise,使用.then()获取结果,.catch()抓取错误。
+
+// web访问地址:OSSConfig.url + object_key
+const client = OSSConfig.config.accessKeyId !== 'id' ? new OSS(OSSConfig.config) : { list () {} }
+
+/***
+ * 查看所有文件
+ * 通过list来列出当前Bucket下的所有文件。主要的参数如下:
+
+ prefix 指定只列出符合特定前缀的文件
+ marker 指定只列出文件名大于marker之后的文件
+ delimiter 用于获取文件的公共前缀
+ max-keys 用于指定最多返回的文件个数
+ * @type {*}
+ */
+// 不带任何参数,默认最多返回1000个文件
+export const listFiles = client.list()
+
+/***
+ * 上传本地文件
+ * @param object_key 文件名
+ * @param local_file 本地文件路径
+ *
+ * join
+ *该方法将多个参数值字符串结合成一个路径字符串,使用方式如下:
+ *path.([path1], [path2], [...])
+ *在该方法中,可以使用一个或多个字符串值参数,该参数返回将这些字符串值参数结合而成的路径。
+ *var joinPath = path.join(__dirname, 'a', 'b', 'c');
+ *console.log(joinPath); // D:\nodePro\fileTest\a\b\c
+ *__dirname变量值代表程序运行的根目录。
+ *
+ * 用法示例:
+ import path from 'path';
+ return upload_local_file("test.js", path.join(__dirname, "address.js")).then(function (result) {
+ console.log(result);
+ }).catch(function (err) {
+ console.log(err);
+ });
+ return list_files.then(function (result) {
+ console.log(result.objects);
+ }).catch(function (err) {
+ console.error(err);
+ });
+ */
+export const uploadLocalFile = (objectKey, localFile) => {
+ return client.put(objectKey, localFile)
+}
+
+/***
+ * 流式上传
+ * 通过putStream接口来上传一个Stream中的内容,stream参数可以是任何实现了Readable Stream的对象,包含文件流,网络流等。当使用putStream接口时,SDK默认会发起一个chunked encoding的HTTP PUT请求。如果在options指定了contentLength参数,则不会使用chunked encoding。
+ * @param objectKey
+ * @param localFile
+ * @param chunked 是否使用chunked encoding 默认不使用
+ * @returns {Object}
+ */
+export const uploadStream = (objectKey, localFile, chunked = false) => {
+ // // use 'chunked encoding'
+ const stream = fs.createReadStream(localFile)
+ if (chunked) {
+ return client.putStream(objectKey, stream)
+ } else {
+ const size = fs.statSync(localFile).size // don't use 'chunked encoding'
+ return client.putStream(objectKey, stream, {
+ contentLength: size
+ })
+ }
+}
+
+/***
+ * 上传Buffer内容
+ * @param objectKey
+ * @param buffer Buffer对象,例如new Buffer('hello world')
+ */
+export const uploadBuffer = (objectKey, buffer) => {
+ return client.put(objectKey, buffer)
+}
+
+/***
+ * 分片上传
+ * 在需要上传的文件较大时,可以通过multipartUpload接口进行分片上传。分片上传的好处是将一个大请求分成多个小请求来执行,这样当其中一些请求失败后,不需要重新上传整个文件,而只需要上传失败的分片就可以了。一般对于大于100MB的文件,建议采用分片上传的方法。
+ * @param objectKey
+ * @param localFile
+ */
+export const uploadMultipart = (objectKey, localFile) => {
+ return client.multipartUpload(objectKey, localFile, {
+ progress: function * (p) {
+ console.log('Progress: ' + p)
+ }
+ })
+ // 上面的progress参数是一个进度回调函数,用于获取上传进度。progress可以是一个generator function(function*),也可以是一个”thunk”:
+ // const progress = function (p) {
+ // return function (done) {
+ // console.log(p);
+ // done();
+ // };
+ // };
+}
+
+/***
+ * 断点上传(需要循环调用)
+ * 分片上传提供progress参数允许用户传递一个进度回调,在回调中SDK将当前已经上传成功的比例和断点信息作为参数。为了实现断点上传,可以在上传过程中保存断点信息(checkpoint),发生错误后,再将已保存的checkpoint作为参数传递给multipartUpload,此时将从上次失败的地方继续上传。
+ * @param objectKey
+ * @param localFile
+ */
+export const uploadMultiparts = (objectKey, localFile) => {
+ let checkpoint
+ return client.multipartUpload(objectKey, localFile, {
+ checkpoint: checkpoint,
+ progress: function * (percentage, cpt) {
+ checkpoint = cpt
+ }
+ })
+ // 上面的代码只是将checkpoint保存在变量中,如果程序崩溃的话就丢失了,用户也可以将它保存在文件中,然后在程序重启后将checkpoint信息从文件中读取出来。
+}
+
+/***
+ * 下载文件到本地
+ * @param objectKey
+ * @param localFile 本地路径
+ */
+export const downloadLocalFile = (objectKey, localFile) => {
+ return client.get(objectKey, localFile)
+}
+
+// export const download_stream = (object_key, local_file) => {
+// var result = yield client.getStream(object_key)
+// console.log(result)
+// var writeStream = fs.createWriteStream(local_file)
+// result.stream.pipe(writeStream)
+// }
diff --git a/src/lib/auth.js b/src/lib/auth.js
new file mode 100644
index 0000000..8a821df
--- /dev/null
+++ b/src/lib/auth.js
@@ -0,0 +1,10 @@
+import JsSHA from 'jssha'
+import { SYSTEM } from '../config'
+
+export default (token) => {
+ const shaObj = new JsSHA('SHA-512', 'TEXT')
+ shaObj.update(SYSTEM.TOKEN)
+ const hash = shaObj.getHash('HEX')
+ if (token === hash) return true
+ return false
+}
diff --git a/src/lib/db.js b/src/lib/db.js
new file mode 100644
index 0000000..77083b9
--- /dev/null
+++ b/src/lib/db.js
@@ -0,0 +1,14 @@
+import low from 'lowdb'
+import path from 'path'
+import FileSync from 'lowdb/adapters/FileSync'
+import { SYSTEM } from '../config'
+
+const isDev = process.env.NODE_ENV ? process.env.NODE_ENV === 'development' : false
+const adapter = isDev ? new FileSync(path.join(SYSTEM.NAME + '-distribution-db.json')) : new FileSync(path.join(SYSTEM.WORKPATH, SYSTEM.NAME + '-distribution-db.json'))
+const db = low(adapter)
+
+if (!db.get('appLog').value()) {
+ db.defaults({ appLog: [], buildLog: [] }).write()
+}
+
+export default db
diff --git a/src/lib/qiniu.js b/src/lib/qiniu.js
new file mode 100644
index 0000000..af58251
--- /dev/null
+++ b/src/lib/qiniu.js
@@ -0,0 +1,41 @@
+
+import qiniu from 'qiniu'
+import { QINIU } from '../config'
+
+const mac = new qiniu.auth.digest.Mac(QINIU.accessKey, QINIU.secretKey)
+const putPolicy = new qiniu.rs.PutPolicy({
+ scope: QINIU.bucket
+})
+const uploadToken = putPolicy.uploadToken(mac)
+
+const config = new qiniu.conf.Config()
+// 空间对应的机房
+config.zone = qiniu.zone[QINIU.zone]
+// 是否使用https域名
+config.useHttpsDomain = true
+// 上传是否使用cdn加速
+// config.useCdnDomain = true;
+
+export const uploadLocalFileToQiniu = (key, localFile) => {
+ return new Promise((resolve, reject) => {
+ var resumeUploader = new qiniu.resume_up.ResumeUploader(config)
+ var putExtra = new qiniu.resume_up.PutExtra()
+ // 如果指定了断点记录文件,那么下次会从指定的该文件尝试读取上次上传的进度,以实现断点续传
+ // putExtra.resumeRecordFile = 'progress.log';
+ // 文件分片上传
+ const remoteKey = key.substr(1) // 删除开头的/
+ resumeUploader.putFile(uploadToken, remoteKey, localFile, putExtra, function (respErr,
+ respBody, respInfo) {
+ if (respErr) {
+ return reject(respErr)
+ }
+ if (respInfo.statusCode === 200) {
+ resolve(QINIU.url + key)
+ } else {
+ console.log(respInfo.statusCode)
+ console.log(respBody)
+ return reject(respInfo)
+ }
+ })
+ })
+}
diff --git a/src/lib/swagger.js b/src/lib/swagger.js
new file mode 100644
index 0000000..cca4898
--- /dev/null
+++ b/src/lib/swagger.js
@@ -0,0 +1,33 @@
+import inert from 'inert'
+import vision from 'vision'
+import hapiSwagger from 'hapi-swagger'
+import { SYSTEM } from '../config'
+import pack from '../../package'
+
+const swaggerOptions = {
+ schemes: SYSTEM.SCHEME,
+ info: {
+ title: 'Electron Distribution',
+ version: pack.version
+ },
+ grouping: 'tags',
+ tags: [
+ {
+ name: 'app',
+ description: 'App Distribution'
+ },
+ {
+ name: 'build',
+ description: 'APP Buils'
+ }
+ ]
+}
+
+export default [
+ inert,
+ vision,
+ {
+ plugin: hapiSwagger,
+ options: swaggerOptions
+ }
+]
diff --git a/src/lib/tencent-cos.js b/src/lib/tencent-cos.js
new file mode 100644
index 0000000..dc69f2a
--- /dev/null
+++ b/src/lib/tencent-cos.js
@@ -0,0 +1,26 @@
+import COSSDK from 'cos-nodejs-sdk-v5'
+import { qcloudAccessKey, COS } from '../config'
+
+const cos = new COSSDK(qcloudAccessKey)
+
+export const uploadToCOS = (key, filePath) => {
+ return new Promise((resolve, reject) => {
+ // 分片上传
+ cos.sliceUploadFile(
+ {
+ Bucket: COS.bucket,
+ Region: COS.region,
+ Key: key,
+ FilePath: filePath
+ },
+ function (err, data) {
+ if (err || !data) {
+ reject(err)
+ } else {
+ data.realPath = COS.url + key
+ resolve(data)
+ }
+ }
+ )
+ })
+}
diff --git a/src/lib/upload.js b/src/lib/upload.js
new file mode 100644
index 0000000..ac2196f
--- /dev/null
+++ b/src/lib/upload.js
@@ -0,0 +1,23 @@
+import { uploadToCOS } from './tencent-cos'
+import { uploadStream as uploadLocalFileToOSS } from './ali-oss'
+import { uploadLocalFileToQiniu } from './qiniu'
+import { OSS as OSSConfig, SYSTEM } from '../config'
+
+export default async (key, localFilePath) => {
+ switch (SYSTEM.OBJECT_STORAGE_TYPE) {
+ case 'cos':
+ const cos = await uploadToCOS(key, localFilePath)
+ return cos.realPath
+ case 'oss':
+ const oss = await uploadLocalFileToOSS(key, localFilePath)
+ // console.log(oss.url)
+ if (oss) {
+ return OSSConfig.url + key
+ } else {
+ return null
+ }
+ case 'qiniu':
+ const qiniu = await uploadLocalFileToQiniu(key, localFilePath)
+ return qiniu
+ }
+}
diff --git a/src/routes/auth.js b/src/routes/auth.js
new file mode 100644
index 0000000..fd585d8
--- /dev/null
+++ b/src/routes/auth.js
@@ -0,0 +1,26 @@
+import Joi from 'joi'
+import { SYSTEM } from '../config'
+import auth from '../lib/auth'
+
+export default [{
+ method: 'GET',
+ path: `/app/auth`,
+ config: {
+ auth: false,
+ tags: ['api', 'app'],
+ description: 'Check token.',
+ validate: {
+ query: {
+ token: Joi.string().required().description('Encrypted-Token')
+ }
+ }
+ },
+ async handler (request) {
+ if (auth(request.query.token)) {
+ return this.success({
+ buildType: SYSTEM.BUILD_TYPE
+ })
+ }
+ return this.fail(null, 403, 'Token Error.')
+ }
+}]
diff --git a/src/routes/build.js b/src/routes/build.js
new file mode 100644
index 0000000..d9aef96
--- /dev/null
+++ b/src/routes/build.js
@@ -0,0 +1,190 @@
+import Joi from 'joi'
+import fs from 'fs'
+import path from 'path'
+import { SYSTEM } from '../config'
+import { Client } from 'ssh2'
+import { spawn } from 'child_process'
+import auth from '../lib/auth'
+import JsSHA from 'jssha'
+
+const WIN_IMAGE_NAME = 'electronuserland/builder:wine-mono'
+const LINUX_IMAGE_NAME = 'electronuserland/builder:10'
+
+const mkdirsSync = (dirname) => {
+ if (fs.existsSync(dirname)) {
+ return true
+ } else {
+ if (mkdirsSync(path.dirname(dirname))) {
+ fs.mkdirSync(dirname)
+ return true
+ }
+ }
+}
+
+const getHashToken = () => {
+ const shaObj = new JsSHA('SHA-512', 'TEXT')
+ shaObj.update(SYSTEM.TOKEN)
+ return shaObj.getHash('HEX')
+}
+
+export default [
+ {
+ method: 'GET',
+ path: `/build/{type}`,
+ config: {
+ auth: false,
+ tags: ['api', 'build'],
+ description: 'App Build',
+ validate: {
+ params: {
+ type: Joi.string().required().description('Type')
+ },
+ query: {
+ token: Joi.string().required().description('Encrypted-Token')
+ }
+ }
+ },
+ async handler (request) {
+ if (!auth(request.query.token)) {
+ return this.fail(null, 403, 'Token Error.')
+ }
+ const shaObj = new JsSHA('SHA-512', 'TEXT')
+ shaObj.update(SYSTEM.TOKEN)
+ const hashToken = shaObj.getHash('HEX')
+
+ const publishOpt = SYSTEM.GH_TOKEN ? 'always' : 'never'
+
+ let containerCmd = 'yarn --ignore-engines'
+ let imageName = null
+ let workPath = SYSTEM.WORKPATH
+ let type = request.params.type
+ const sourcePath = path.join(workPath, '/source')
+ switch (type) {
+ case 'win':
+ workPath += '/win'
+ imageName = WIN_IMAGE_NAME
+ containerCmd += ' && yarn run build --' + type + ' --publish ' + publishOpt + ' && curl -X GET "' + SYSTEM.SCHEME + '://' + SYSTEM.DOMAIN + '/app/upload?platform=' + type + '&extended=x86-64&token=' + hashToken + '&logPath=$LOG_PATH" -H "cache-control: no-cache"'
+ break
+ case 'linux':
+ workPath += '/linux'
+ imageName = LINUX_IMAGE_NAME
+ containerCmd += ' && yarn run build --' + type + ' --publish ' + publishOpt + ' && curl -X GET "' + SYSTEM.SCHEME + '://' + SYSTEM.DOMAIN + '/app/upload?platform=' + type + '&extended=x86-64&token=' + hashToken + '&logPath=$LOG_PATH" -H "cache-control: no-cache"'
+ break
+ }
+
+ if (!fs.existsSync(SYSTEM.WORKPATH + '/logs/' + type)) mkdirsSync(SYSTEM.WORKPATH + '/logs/' + type)
+ const LogPath = SYSTEM.WORKPATH + '/logs/' + type + '/' + (new Date()).getTime() + '.log'
+
+ if (type === 'mac') {
+ // 1. rsync server -> mac
+ const writerStream = fs.createWriteStream(LogPath, {flags: 'a'})
+ const rsync = spawn('/usr/bin/rsync', ['-avrz', '-e', `'/usr/bin/ssh -p ${SYSTEM.MAC_SERVER_PORT}'`, '--delete-after', '--exclude', '"node_modules"', sourcePath + '/', SYSTEM.MAC_SERVER_USERNAME + '@' + SYSTEM.MAC_SERVER_HOST + ':/tmp/' + SYSTEM.NAME])
+
+ rsync.stdout.pipe(writerStream)
+ rsync.stderr.pipe(writerStream)
+
+ rsync.on('close', (code) => {
+ const writerStream = fs.createWriteStream(LogPath, {flags: 'a'})
+ writerStream.write(`\nChild process exited with code ${code} \n`)
+
+ // 2. build app and rsync mac build dir -> server build dir
+ let bashContent = ``
+ if (SYSTEM.CSC_LINK) bashContent += 'export CSC_LINK=' + SYSTEM.CSC_LINK + '\n'
+ if (SYSTEM.CSC_KEY_PASSWORD) bashContent += 'export CSC_KEY_PASSWORD=' + SYSTEM.CSC_KEY_PASSWORD + '\n'
+ if (SYSTEM.GH_TOKEN) bashContent += 'export GH_TOKEN=' + SYSTEM.GH_TOKEN + '\n'
+ bashContent += 'export LOG_PATH=' + LogPath + '\n'
+ bashContent += 'cd /tmp/' + SYSTEM.NAME + '\n'
+ bashContent += `yarn --ignore-engines` + ' && yarn run build --' + type + ' --publish ' + publishOpt + '\n'
+ // bashContent += `echo -e "Host ${SYSTEM.LINUX_SERVER_HOST}\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config\n`
+ bashContent += `rsync -avrz -e 'ssh -p ${SYSTEM.LINUX_SERVER_PORT}' --exclude "node_modules" /tmp/` + SYSTEM.NAME + '/build/ ' + SYSTEM.LINUX_SERVER_USERNAME + '@' + SYSTEM.LINUX_SERVER_HOST + ':' + sourcePath + '/build \n'
+ bashContent += 'curl -X GET "' + SYSTEM.SCHEME + '://' + SYSTEM.DOMAIN + '/app/upload?platform=' + type + '&extended=x86-64&token=' + getHashToken() + '&logPath=' + LogPath + '" -H "cache-control: no-cache"\n'
+ writerStream.write('Run command: \n')
+ writerStream.write(bashContent)
+
+ const conn = new Client()
+ conn.on('ready', function () {
+ const writerStream = fs.createWriteStream(LogPath, {flags: 'a'})
+ writerStream.write('Client :: ready\n')
+ conn.shell(function (err, stream) {
+ if (err) throw err
+ stream.pipe(writerStream)
+ stream.on('close', function () {
+ const writerStream = fs.createWriteStream(LogPath, {flags: 'a'})
+ writerStream.write('Stream :: close')
+ conn.end()
+ })
+ stream.end(bashContent)
+ })
+ }).connect({
+ host: SYSTEM.MAC_SERVER_HOST,
+ port: Number(SYSTEM.MAC_SERVER_PORT),
+ username: SYSTEM.MAC_SERVER_USERNAME,
+ privateKey: require('fs').readFileSync('/root/.ssh/id_rsa')
+ })
+ })
+ } else {
+ const Env = [
+ 'LOG_PATH=' + LogPath
+ ]
+
+ if (SYSTEM.CSC_LINK) Env.push('CSC_LINK=' + SYSTEM.CSC_LINK)
+ if (SYSTEM.CSC_KEY_PASSWORD) Env.push('CSC_KEY_PASSWORD=' + SYSTEM.CSC_KEY_PASSWORD)
+ if (SYSTEM.GH_TOKEN) Env.push('GH_TOKEN=' + SYSTEM.GH_TOKEN)
+
+ const optsc = {
+ 'AttachStdin': true,
+ 'AttachStdout': true,
+ 'AttachStderr': true,
+ 'Tty': true,
+ 'OpenStdin': true,
+ 'StdinOnce': false,
+ 'Env': Env,
+ 'Cmd': ['/bin/bash', '-c', containerCmd],
+ 'Image': imageName,
+ 'WorkingDir': '/project',
+ 'Volumes': {},
+ 'VolumesFrom': [],
+ 'HostConfig': {
+ Binds: [
+ workPath + ':/project:rw',
+ '/etc/localtime:/etc/localtime:ro',
+ workPath + '/.cache/electron:/root/.cache/electron',
+ workPath + '/.cache/electron-builder:/root/.cache/electron-builder'
+ ],
+ CpusetCpus: SYSTEM.BUILD_CPU_LIMIT || '0',
+ Memory: Number(SYSTEM.BUILD_MEMORY_LIMIT) || 0,
+ AutoRemove: true
+ }
+ }
+
+ const runDocker = () => {
+ return new Promise((resolve, reject) => {
+ this.docker.createContainer(optsc, (err, container) => {
+ if (err || !container) return reject(err || 'container is null')
+
+ container.attach({stream: true, stdout: true, stderr: true}, (err, stream) => {
+ if (err) return reject(err)
+ const writerStream = fs.createWriteStream(LogPath)
+ stream.pipe(writerStream)
+ })
+
+ container.start((err, data) => {
+ if (err) return reject(err)
+ console.log(data)
+ resolve(container.id)
+ })
+ })
+ })
+ }
+
+ try {
+ const res = await runDocker()
+ return this.success(res)
+ } catch (err) {
+ console.log(err)
+ return this.fail(null, 10001, err.toString())
+ }
+ }
+ }
+ }
+]
diff --git a/src/routes/encrypt.js b/src/routes/encrypt.js
new file mode 100644
index 0000000..7420fe4
--- /dev/null
+++ b/src/routes/encrypt.js
@@ -0,0 +1,22 @@
+import Joi from 'joi'
+import JsSHA from 'jssha'
+
+export default [{
+ method: 'GET',
+ path: `/app/encrypt`,
+ config: {
+ auth: false,
+ tags: ['api', 'app'],
+ description: 'Token encrypt service.',
+ validate: {
+ query: {
+ token: Joi.string().required().description('Token')
+ }
+ }
+ },
+ async handler (request) {
+ const shaObj = new JsSHA('SHA-512', 'TEXT')
+ shaObj.update(request.query.token)
+ return this.success(shaObj.getHash('HEX'))
+ }
+}]
diff --git a/src/routes/icon.ico.js b/src/routes/icon.ico.js
new file mode 100644
index 0000000..6ccc496
--- /dev/null
+++ b/src/routes/icon.ico.js
@@ -0,0 +1,12 @@
+export default [{
+ method: 'GET',
+ path: `/app/icon.ico`,
+ config: {
+ auth: false,
+ tags: ['api', 'app'],
+ description: 'Squirrel windows icon.'
+ },
+ handler (request, h) {
+ return h.file('public/icon.ico')
+ }
+}]
diff --git a/src/routes/index.js b/src/routes/index.js
new file mode 100644
index 0000000..74949c2
--- /dev/null
+++ b/src/routes/index.js
@@ -0,0 +1,19 @@
+import fs from 'fs'
+import path from 'path'
+
+const modules = []
+
+const files = fs.readdirSync(__dirname).filter((file) => {
+ return file.match(/\.(json|js)$/)
+})
+
+files.forEach(key => {
+ if (key === 'index.js') return
+
+ // const content = require(path.join(__dirname, key)).default
+ const content = require(path.join(__dirname, key)).default
+
+ if (Array.isArray(content)) { modules.push(...content) } else { modules.push(content) }
+})
+
+export default modules
diff --git a/src/routes/list.js b/src/routes/list.js
new file mode 100644
index 0000000..2cefbc7
--- /dev/null
+++ b/src/routes/list.js
@@ -0,0 +1,54 @@
+import Joi from 'joi'
+import { SYSTEM } from '../config'
+import auth from '../lib/auth'
+
+export default [{
+ method: 'GET',
+ path: `/app/list/release`,
+ config: {
+ auth: false,
+ tags: ['api', 'app'],
+ description: 'App release log list.',
+ validate: {
+ query: {
+ token: Joi.string().required().description('Encrypted-Token')
+ }
+ }
+ },
+ async handler (request) {
+ if (!auth(request.query.token)) {
+ return this.fail(null, 403, 'Token Error.')
+ }
+ return this.success({
+ name: SYSTEM.NAME,
+ list: this.$db.get('appLog') // .filter(o => o.type !== 'maczip')
+ .sortBy((item) => -item.releaseDate)
+ .value()
+ })
+ }
+},
+{
+ method: 'GET',
+ path: `/app/list/build`,
+ config: {
+ auth: false,
+ tags: ['api', 'app'],
+ description: 'App build log list.',
+ validate: {
+ query: {
+ token: Joi.string().required().description('Encrypted-Token')
+ }
+ }
+ },
+ async handler (request) {
+ if (!auth(request.query.token)) {
+ return this.fail(null, 403, 'Token Error.')
+ }
+ return this.success({
+ name: SYSTEM.NAME,
+ list: this.$db.get('buildLog')
+ .sortBy((item) => -item.startDate)
+ .value()
+ })
+ }
+}]
diff --git a/src/routes/log.log.js b/src/routes/log.log.js
new file mode 100644
index 0000000..01a11aa
--- /dev/null
+++ b/src/routes/log.log.js
@@ -0,0 +1,39 @@
+import fs from 'fs'
+import Joi from 'joi'
+
+export default [
+ {
+ method: 'GET',
+ path: `/build/log.log`,
+ config: {
+ auth: false,
+ tags: ['api', 'build'],
+ description: 'Get build log.',
+ validate: {
+ query: {
+ path: Joi.string().required().description('Log path.')
+ }
+ }
+ },
+ async handler (request) {
+ const path = decodeURI(request.query.path)
+
+ const logLast = this.$db.get('appLog')
+ .filter({logPath: path})
+ .sortBy((item) => -item.releaseDate)
+ .take()
+ .first()
+ .value()
+
+ if (logLast && logLast.logPath) {
+ try {
+ return fs.readFileSync(logLast.logPath)
+ } catch (err) {
+ return this.fail(err)
+ }
+ } else {
+ return this.fail(null, 10001, 'No file.')
+ }
+ }
+ }
+]
diff --git a/src/routes/nupkg.js b/src/routes/nupkg.js
new file mode 100644
index 0000000..290217a
--- /dev/null
+++ b/src/routes/nupkg.js
@@ -0,0 +1,78 @@
+import Joi from 'joi'
+import path from 'path'
+import { SYSTEM, COS, OSS, QINIU } from '../config'
+import axios from 'axios'
+
+export default [
+ {
+ method: 'GET',
+ path: `/app/nupkg/{version}/{releases}`,
+ config: {
+ auth: false,
+ tags: ['api', 'app'],
+ description: 'RELEASES file or download pukge.',
+ validate: {
+ params: {
+ version: Joi.string().required().description('Version'),
+ releases: Joi.string().required().description('RELEASES file or File name')
+ }
+ }
+ },
+ async handler (request, h) {
+ const version = request.params.version
+ const releases = request.params.releases
+
+ let objectStorageUrl = ''
+ switch (SYSTEM.OBJECT_STORAGE_TYPE) {
+ case 'cos':
+ objectStorageUrl = COS.url
+ break
+ case 'oss':
+ objectStorageUrl = OSS.url
+ break
+ case 'qiniu':
+ objectStorageUrl = QINIU.url
+ break
+ }
+
+ if (releases === 'RELEASES' || releases === 'releases') {
+ // TODO: ?id=name&localVersion=4.7.2&arch=amd64
+ const nupkgLast = this.$db.get('appLog')
+ .filter({type: 'RELEASES', version})
+ .sortBy((item) => -item.releaseDate)
+ .take()
+ .first()
+ .value()
+
+ if (nupkgLast) {
+ const RELEASESname = path.join('RELEASES-' + version, 'RELEASES')
+ const url = objectStorageUrl + '/app/' + nupkgLast.name + '/' + version + '/' + RELEASESname
+
+ try {
+ const { data } = await axios.get(url)
+ return data
+ } catch (err) {
+ console.log(err)
+ return ''
+ }
+ }
+ } else {
+ const fileName = releases
+ const nupkgLast = this.$db.get('appLog')
+ .filter({type: 'nupkg', version})
+ .sortBy((item) => -item.releaseDate)
+ .take()
+ .first()
+ .value()
+
+ if (nupkgLast) {
+ return h.redirect(objectStorageUrl + '/app/' + nupkgLast.name + '/' + version + '/' + fileName)
+ } else {
+ return ''
+ }
+ }
+
+ return this.fail()
+ }
+ }
+]
diff --git a/src/routes/public.js b/src/routes/public.js
new file mode 100644
index 0000000..8dd8c7b
--- /dev/null
+++ b/src/routes/public.js
@@ -0,0 +1,11 @@
+export default [
+ {
+ method: 'GET',
+ path: '/{param*}',
+ handler: {
+ directory: {
+ path: 'public'
+ }
+ }
+ }
+]
diff --git a/src/routes/release.js b/src/routes/release.js
new file mode 100644
index 0000000..e9b04cb
--- /dev/null
+++ b/src/routes/release.js
@@ -0,0 +1,40 @@
+import Joi from 'joi'
+import auth from '../lib/auth'
+
+export default [
+ {
+ method: 'POST',
+ path: `/app/release`,
+ config: {
+ auth: false,
+ tags: ['api', 'app'],
+ description: 'The app release.',
+ validate: {
+ payload: {
+ token: Joi.string().required().description('Encrypted-Token'),
+ name: Joi.string().required().description('The package.json name'),
+ downloadUrl: Joi.string().required().description('Download URL'),
+ version: Joi.string().required().description('APP version'),
+ platform: Joi.string().required().description('Platform'),
+ extended: Joi.string().required().description('Extended'),
+ type: Joi.string().required().description('Type'),
+ logPath: Joi.string().required().description('Log path'),
+ author: Joi.string().description('Author'),
+ authorEmail: Joi.string().description('Author Email'),
+ message: Joi.string().description('Message')
+ }
+ }
+ },
+ async handler (request) {
+ if (!auth(request.payload.token)) {
+ return this.fail(null, 403, 'Token Error.')
+ }
+
+ const data = request.payload
+ data.releaseDate = new Date().getTime().toString()
+ const result = this.$db.get('appLog').push(data).write()
+
+ return this.success(result)
+ }
+ }
+]
diff --git a/src/routes/release.json.js b/src/routes/release.json.js
new file mode 100644
index 0000000..1d9f95a
--- /dev/null
+++ b/src/routes/release.json.js
@@ -0,0 +1,26 @@
+export default [
+ {
+ method: 'GET',
+ path: `/app/release.json`,
+ config: {
+ auth: false,
+ tags: ['api', 'app'],
+ description: 'Get new JSON about MAC update.'
+ },
+ async handler () {
+ const maczipLast = this.$db.get('appLog')
+ .filter({type: 'maczip'})
+ .sortBy((item) => -item.releaseDate)
+ .take()
+ .first()
+ .value()
+
+ return maczipLast ? {
+ 'url': maczipLast.downloadUrl,
+ 'name': maczipLast.name,
+ 'notes': maczipLast.message,
+ 'pub_date': this.$moment(maczipLast.releaseDate).tz('Asia/Shanghai').format()
+ } : {}
+ }
+ }
+]
diff --git a/src/routes/updates.json.js b/src/routes/updates.json.js
new file mode 100644
index 0000000..5f2dd11
--- /dev/null
+++ b/src/routes/updates.json.js
@@ -0,0 +1,62 @@
+import { SYSTEM } from '../config'
+
+export default [{
+ method: 'GET',
+ path: `/app/updates.json`,
+ config: {
+ auth: false,
+ tags: ['api', 'app'],
+ description: 'Update check JSON.'
+ },
+ async handler () {
+ const macLast = this.$db.get('appLog')
+ .filter({
+ platform: 'mac',
+ type: 'install'
+ })
+ .sortBy((item) => -item.releaseDate)
+ .take()
+ .first()
+ .value()
+
+ const winLast = this.$db.get('appLog')
+ .filter({
+ platform: 'win',
+ type: 'install'
+ })
+ .sortBy((item) => -item.releaseDate)
+ .take()
+ .first()
+ .value()
+
+ const linuxLast = this.$db.get('appLog')
+ .filter({
+ platform: 'linux',
+ type: 'install'
+ })
+ .sortBy((item) => -item.releaseDate)
+ .take()
+ .first()
+ .value()
+
+ return {
+ 'win32-x64-prod': winLast ? {
+ 'readme': winLast.name,
+ 'update': SYSTEM.SCHEME + '://' + SYSTEM.DOMAIN + '/app/nupkg/' + winLast.version,
+ 'install': winLast.downloadUrl,
+ 'version': winLast.version
+ } : {},
+ 'darwin-x64-prod': macLast ? {
+ 'readme': macLast.name,
+ 'update': SYSTEM.SCHEME + '://' + SYSTEM.DOMAIN + '/app/release.json',
+ 'install': macLast.downloadUrl,
+ 'version': macLast.version
+ } : {},
+ 'linux-x64-prod': linuxLast ? {
+ 'update': linuxLast.downloadUrl,
+ 'install': linuxLast.downloadUrl,
+ 'version': linuxLast.version
+ } : {}
+ }
+ }
+}]
diff --git a/src/routes/upload.js b/src/routes/upload.js
new file mode 100644
index 0000000..53b196e
--- /dev/null
+++ b/src/routes/upload.js
@@ -0,0 +1,259 @@
+import fs from 'fs'
+import Joi from 'joi'
+import git from 'simple-git'
+import path from 'path'
+import uploadToObjectStorage from '../lib/upload'
+import auth from '../lib/auth'
+import {
+ SYSTEM
+} from '../config'
+
+const GIT_SSH_COMMAND = 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
+
+export default [{
+ method: 'GET',
+ path: `/app/upload`,
+ config: {
+ auth: false,
+ tags: ['api', 'app'],
+ description: 'Upload app to object storage.',
+ validate: {
+ query: {
+ platform: Joi.string().required().description('System platform'),
+ extended: Joi.string().default('x86-64').description('System extended'),
+ startDate: Joi.string().required().description('Build startDate'),
+ logPath: Joi.string().required().description('Log file path.'),
+ token: Joi.string().required().description('Encrypted-Token')
+ }
+ }
+ },
+ async handler (request) {
+ if (!auth(request.query.token)) {
+ return this.fail(null, 403, 'Token Error.')
+ }
+
+ const platform = request.query.platform
+ const extended = request.query.extended
+ const logPath = request.query.logPath
+ const startDate = request.query.startDate
+ const workPath = SYSTEM.WORKPATH
+ const sourcePath = path.join(workPath, '/source')
+
+ const gitLog = (workPath) => {
+ return new Promise((resolve, reject) => {
+ git(workPath).env({
+ ...process.env,
+ GIT_SSH_COMMAND
+ }).log({
+ n: 1
+ }, (err, status) => {
+ if (err) {
+ return reject(err)
+ }
+ resolve(status)
+ })
+ })
+ }
+
+ try {
+ const log = await gitLog(sourcePath)
+ if (log && log.all && log.all.length === 1) {
+ const gitInfo = log.all[0]
+ let packageJson = null
+ let linuxPath = null
+ let winPath = null
+ let filePath = null
+ let filePath2 = null
+ let filename = null
+ let filename2 = null
+ let nupkg = null
+ let RELEASES = null
+ let RELEASESname = null
+ let nupkgname = null
+
+ switch (platform) {
+ case 'mac':
+ packageJson = JSON.parse(fs.readFileSync(path.join(sourcePath, 'package.json'), 'utf-8'))
+ filePath = path.join(sourcePath, 'build', packageJson.build.productName + '-' + packageJson.version + '.dmg')
+ filePath2 = path.join(sourcePath, 'build', packageJson.build.productName + '-' + packageJson.version + '-mac.zip')
+ filename = packageJson.name + '-' + packageJson.version + '.dmg'
+ filename2 = packageJson.name + '-' + packageJson.version + '-mac.zip'
+ break
+ case 'linux':
+ linuxPath = path.join(workPath, '/linux')
+ packageJson = JSON.parse(fs.readFileSync(path.join(linuxPath, 'package.json'), 'utf-8'))
+ if (extended === 'armv7l') {
+ filePath = path.join(linuxPath, 'build', packageJson.name + '-' + packageJson.version + '-armv7l.AppImage')
+ filename = packageJson.name + '-' + packageJson.version + '-armv7l.AppImage'
+ } else {
+ filePath = path.join(linuxPath, 'build', packageJson.name + '-' + packageJson.version + '-x86_64.AppImage')
+ filename = packageJson.name + '-' + packageJson.version + '-x86_64.AppImage'
+ }
+ break
+ case 'win':
+ winPath = path.join(workPath, '/win')
+ packageJson = JSON.parse(fs.readFileSync(path.join(winPath, 'package.json'), 'utf-8'))
+ filePath = path.join(winPath, 'build', 'squirrel-windows', packageJson.build.productName + ' Setup ' + packageJson.version + '.exe')
+ filename = packageJson.name + '-' + packageJson.version + '.exe'
+ nupkg = path.join(winPath, 'build', 'squirrel-windows', packageJson.name + '-' + packageJson.version + '-full.nupkg')
+ RELEASES = path.join(winPath, 'build', 'squirrel-windows', 'RELEASES')
+ RELEASESname = path.join('RELEASES-' + packageJson.version, 'RELEASES')
+ nupkgname = packageJson.name + '-' + packageJson.version + '-full.nupkg'
+ break
+ }
+
+ this.$db.get('buildLog').find({
+ startDate
+ }).assign({
+ status: 'uploading'
+ }).write()
+
+ const fileFullPath = path.join('/app/', packageJson.name, packageJson.version, filename)
+
+ try {
+ var upload = () => {
+ uploadToObjectStorage(fileFullPath, filePath).then(res => {
+ this.$db.get('appLog').push({
+ name: packageJson.name,
+ downloadUrl: res,
+ version: packageJson.version,
+ platform,
+ extended,
+ action: 'release',
+ type: 'install',
+ logPath,
+ author: gitInfo.author_name,
+ authorEmail: gitInfo.author_email,
+ message: gitInfo.message,
+ releaseDate: new Date().getTime().toString()
+ }).write()
+
+ if (platform === 'linux') {
+ this.$db.get('buildLog').find({
+ startDate
+ }).assign({
+ status: 'finish'
+ }).write()
+ }
+ }).catch(err => {
+ console.log(err)
+ })
+ }
+ upload()
+ } catch (err) {
+ console.log(err)
+ upload()
+ }
+
+ if (filePath2) {
+ const fileFullPath2 = path.join('/app/', packageJson.name, packageJson.version, filename2)
+
+ try {
+ var upload2 = () => {
+ uploadToObjectStorage(fileFullPath2, filePath2).then(res => {
+ this.$db.get('appLog').push({
+ name: packageJson.name,
+ downloadUrl: res,
+ version: packageJson.version,
+ platform,
+ extended,
+ action: 'release',
+ type: 'maczip',
+ logPath,
+ author: gitInfo.author_name,
+ authorEmail: gitInfo.author_email,
+ message: gitInfo.message,
+ releaseDate: new Date().getTime().toString()
+ }).write()
+
+ this.$db.get('buildLog').find({
+ startDate
+ }).assign({
+ status: 'finish'
+ }).write()
+ }).catch(err => {
+ console.log(err)
+ })
+ }
+ upload2()
+ } catch (err) {
+ console.log(err)
+ upload2()
+ }
+ }
+
+ if (nupkg) {
+ const fileFullPath3 = path.join('/app/', packageJson.name, packageJson.version, nupkgname)
+
+ try {
+ var upload3 = () => {
+ uploadToObjectStorage(fileFullPath3, nupkg).then(res => {
+ this.$db.get('appLog').push({
+ name: packageJson.name,
+ downloadUrl: res,
+ version: packageJson.version,
+ platform,
+ extended,
+ action: 'release',
+ type: 'nupkg',
+ logPath,
+ author: gitInfo.author_name,
+ authorEmail: gitInfo.author_email,
+ message: gitInfo.message,
+ releaseDate: new Date().getTime().toString()
+ }).write()
+
+ this.$db.get('buildLog').find({
+ startDate
+ }).assign({
+ status: 'finish'
+ }).write()
+ }).catch(err => {
+ console.log(err)
+ })
+ }
+ upload3()
+ } catch (err) {
+ console.log(err)
+ upload3()
+ }
+
+ const fileFullPath4 = path.join('/app/', packageJson.name, packageJson.version, RELEASESname)
+ try {
+ var upload4 = () => {
+ uploadToObjectStorage(fileFullPath4, RELEASES).then(res => {
+ this.$db.get('appLog').push({
+ name: packageJson.name,
+ downloadUrl: res,
+ version: packageJson.version,
+ platform,
+ extended,
+ action: 'release',
+ type: 'RELEASES',
+ logPath,
+ author: gitInfo.author_name,
+ authorEmail: gitInfo.author_email,
+ message: gitInfo.message,
+ releaseDate: new Date().getTime().toString()
+ }).write()
+ }).catch(err => {
+ console.log(err)
+ })
+ }
+ upload4()
+ } catch (err) {
+ console.log(err)
+ upload4()
+ }
+ }
+
+ return this.success('ok')
+ } else {
+ return this.fail(null, 10003, 'Get git log content error.')
+ }
+ } catch (err) {
+ console.log(err)
+ return this.fail(err.toString(), 10001, 'Get git log error.')
+ }
+ }
+}]
diff --git a/src/routes/webhooks.js b/src/routes/webhooks.js
new file mode 100644
index 0000000..ce56085
--- /dev/null
+++ b/src/routes/webhooks.js
@@ -0,0 +1,363 @@
+import fs from 'fs'
+import path from 'path'
+import git from 'simple-git'
+import { SYSTEM } from '../config'
+import { Client } from 'ssh2'
+import { spawn } from 'child_process'
+import JsSHA from 'jssha'
+import Joi from 'joi'
+import db from '../lib/db'
+
+const repoPath = SYSTEM.REPOPATH
+const workPath = SYSTEM.WORKPATH
+const sourcePath = path.join(workPath, '/source')
+const linuxPath = path.join(workPath, '/linux')
+const winPath = path.join(workPath, '/win')
+
+const WIN_IMAGE_NAME = 'electronuserland/builder:wine-mono'
+const LINUX_IMAGE_NAME = 'electronuserland/builder:10'
+const GIT_SSH_COMMAND = 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
+
+const getHashToken = () => {
+ const shaObj = new JsSHA('SHA-512', 'TEXT')
+ shaObj.update(SYSTEM.TOKEN)
+ return shaObj.getHash('HEX')
+}
+
+const gitCodeUpdate = async (buidType) => {
+ const gitClone = (repoPath, workPath, type) => {
+ return new Promise((resolve, reject) => {
+ git().env({
+ ...process.env,
+ GIT_SSH_COMMAND
+ })
+ .clone(repoPath, workPath, (err) => {
+ if (err) {
+ reject(err)
+ return
+ }
+ resolve({
+ code: 1,
+ type: 'clone',
+ change: true
+ })
+ })
+ })
+ }
+
+ const gitPull = (workPath, type) => {
+ return new Promise((resolve, reject) => {
+ git(workPath).env({
+ ...process.env,
+ GIT_SSH_COMMAND
+ })
+ .pull((err, update) => {
+ if (err) {
+ reject(err)
+ return
+ }
+ if (update && update.summary.changes) {
+ resolve({
+ code: 1,
+ type: 'pull',
+ change: true
+ })
+ } else {
+ resolve({
+ code: 1,
+ type: 'clone',
+ change: false
+ })
+ }
+ })
+ })
+ }
+
+ const promiseList = []
+
+ if (buidType.includes('mac')) {
+ if (!fs.existsSync(sourcePath)) {
+ mkdirsSync(sourcePath)
+ promiseList.push(gitClone(repoPath, sourcePath, 'Source'))
+ } else {
+ if (fs.readdirSync(sourcePath).includes('.git')) {
+ promiseList.push(gitPull(sourcePath, 'Source'))
+ } else {
+ promiseList.push(gitClone(repoPath, sourcePath, 'Source'))
+ }
+ }
+ }
+
+ if (buidType.includes('linux')) {
+ if (!fs.existsSync(linuxPath)) {
+ mkdirsSync(linuxPath)
+ promiseList.push(gitClone(repoPath, linuxPath, 'Linux'))
+ } else {
+ if (fs.readdirSync(linuxPath).includes('.git')) {
+ promiseList.push(gitPull(linuxPath, 'Linux'))
+ } else {
+ promiseList.push(gitClone(repoPath, linuxPath, 'Linux'))
+ }
+ }
+ }
+
+ if (buidType.includes('win')) {
+ if (!fs.existsSync(winPath)) {
+ mkdirsSync(winPath)
+ promiseList.push(gitClone(repoPath, winPath, 'Win'))
+ } else {
+ if (fs.readdirSync(winPath).includes('.git')) {
+ promiseList.push(gitPull(winPath, 'Win'))
+ } else {
+ promiseList.push(gitClone(repoPath, winPath, 'Win'))
+ }
+ }
+ }
+
+ const res = await Promise.all(promiseList)
+
+ return res.every(a => a.code === 1)
+}
+
+const mkdirsSync = (dirname) => {
+ if (fs.existsSync(dirname)) {
+ return true
+ } else {
+ if (mkdirsSync(path.dirname(dirname))) {
+ fs.mkdirSync(dirname)
+ return true
+ }
+ }
+}
+
+const startDockerToBuild = async (name, version, type, docker) => {
+ const publishOpt = SYSTEM.GH_TOKEN ? 'always' : 'never'
+ const startDate = new Date().getTime().toString()
+
+ let containerCmd = 'yarn --ignore-engines'
+ let imageName = null
+ let workPath = SYSTEM.WORKPATH
+ switch (type) {
+ case 'win':
+ workPath += '/win'
+ imageName = WIN_IMAGE_NAME
+ containerCmd += ' && yarn run build --' + type + ' --publish ' + publishOpt + ' && curl -X GET "' + SYSTEM.SCHEME + '://' + SYSTEM.DOMAIN + '/app/upload?platform=' + type + '&extended=x86-64&token=' + getHashToken() + '&startDate=' + startDate + '&logPath=$LOG_PATH" -H "cache-control: no-cache"'
+ break
+ case 'linux':
+ workPath += '/linux'
+ imageName = LINUX_IMAGE_NAME
+ containerCmd += ' && yarn run build --' + type + ' --publish ' + publishOpt + ' && curl -X GET "' + SYSTEM.SCHEME + '://' + SYSTEM.DOMAIN + '/app/upload?platform=' + type + '&extended=x86-64&token=' + getHashToken() + '&startDate=' + startDate + '&logPath=$LOG_PATH" -H "cache-control: no-cache"'
+ break
+ }
+
+ if (!fs.existsSync(SYSTEM.WORKPATH + '/logs/' + type)) mkdirsSync(SYSTEM.WORKPATH + '/logs/' + type)
+ const logPath = SYSTEM.WORKPATH + '/logs/' + type + '/' + (new Date()).getTime() + '.log'
+
+ db.get('buildLog').push({
+ name,
+ version,
+ platform: type,
+ extended: 'x86-64',
+ action: 'build',
+ status: 'buiding',
+ logPath,
+ startDate
+ }).write()
+
+ const Env = [
+ 'LOG_PATH=' + logPath
+ ]
+
+ if (SYSTEM.CSC_LINK) Env.push('CSC_LINK=' + SYSTEM.CSC_LINK)
+ if (SYSTEM.CSC_KEY_PASSWORD) Env.push('CSC_KEY_PASSWORD=' + SYSTEM.CSC_KEY_PASSWORD)
+ if (SYSTEM.GH_TOKEN) Env.push('GH_TOKEN=' + SYSTEM.GH_TOKEN)
+
+ const optsc = {
+ 'AttachStdin': true,
+ 'AttachStdout': true,
+ 'AttachStderr': true,
+ 'Tty': true,
+ 'OpenStdin': true,
+ 'StdinOnce': false,
+ 'Env': Env,
+ 'Cmd': ['/bin/bash', '-c', containerCmd],
+ 'Image': imageName,
+ 'WorkingDir': '/project',
+ 'Volumes': {},
+ 'VolumesFrom': [],
+ 'HostConfig': {
+ Binds: [
+ workPath + ':/project:rw',
+ '/etc/localtime:/etc/localtime:ro',
+ workPath + '/.cache/electron:/root/.cache/electron',
+ workPath + '/.cache/electron-builder:/root/.cache/electron-builder'
+ ],
+ CpusetCpus: SYSTEM.BUILD_CPU_LIMIT || '0',
+ Memory: Number(SYSTEM.BUILD_MEMORY_LIMIT) || 0,
+ AutoRemove: true
+ }
+ }
+
+ const runDocker = (docker) => {
+ return new Promise((resolve, reject) => {
+ docker.createContainer(optsc, (err, container) => {
+ if (err || !container) return reject(err || 'container is null')
+
+ container.attach({stream: true, stdout: true, stderr: true}, (err, stream) => {
+ const writerStream = fs.createWriteStream(logPath)
+ if (err) return writerStream.write(err.toString())
+ stream.pipe(writerStream)
+ })
+
+ container.start((err, data) => {
+ if (err) return reject(err)
+ console.log(data)
+ resolve(container.id)
+ })
+ })
+ })
+ }
+
+ return runDocker(docker)
+}
+
+const macBuild = async (name, version) => {
+ const type = 'mac'
+ const publishOpt = SYSTEM.GH_TOKEN ? 'always' : 'never'
+
+ if (!fs.existsSync(SYSTEM.WORKPATH + '/logs/' + type)) mkdirsSync(SYSTEM.WORKPATH + '/logs/' + type)
+ const logPath = SYSTEM.WORKPATH + '/logs/' + type + '/' + (new Date()).getTime() + '.log'
+
+ const startDate = new Date().getTime().toString()
+ db.get('buildLog').push({
+ name,
+ version,
+ platform: type,
+ extended: 'x86-64',
+ action: 'build',
+ status: 'buiding',
+ logPath: logPath,
+ startDate
+ }).write()
+
+ // 1. rsync server -> mac
+ const writerStream = fs.createWriteStream(logPath, {flags: 'a'})
+ const cmd = `rsync -avrz -e 'ssh -p ${SYSTEM.MAC_SERVER_PORT}' --delete-after --exclude "node_modules" ${sourcePath}/ ${SYSTEM.MAC_SERVER_USERNAME}@${SYSTEM.MAC_SERVER_HOST}:/tmp/${SYSTEM.NAME}`
+ writerStream.write(cmd)
+ const rsync = spawn('/bin/sh', ['-c', cmd])
+ rsync.stdout.pipe(writerStream)
+ rsync.stderr.pipe(writerStream)
+
+ rsync.on('close', (code) => {
+ const writerStream = fs.createWriteStream(logPath, {flags: 'a'})
+ writerStream.write(`\nChild process exited with code ${code} \n`)
+
+ // 2. build app and rsync mac build dir -> server build dir
+ let bashContent = ''
+ if (SYSTEM.CSC_LINK) bashContent += 'export CSC_LINK=' + SYSTEM.CSC_LINK + '\n'
+ if (SYSTEM.CSC_KEY_PASSWORD) bashContent += 'export CSC_KEY_PASSWORD=' + SYSTEM.CSC_KEY_PASSWORD + '\n'
+ if (SYSTEM.GH_TOKEN) bashContent += 'export GH_TOKEN=' + SYSTEM.GH_TOKEN + '\n'
+ bashContent += 'export LOG_PATH=' + logPath + '\n'
+ bashContent += 'cd /tmp/' + SYSTEM.NAME + '\n'
+ bashContent += `yarn --ignore-engines` + ' && yarn run build --' + type + ' --publish ' + publishOpt + '\n'
+ // bashContent += `echo -e "Host ${SYSTEM.LINUX_SERVER_HOST}\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config\n`
+ bashContent += `rsync -avrz -e 'ssh -p ${SYSTEM.LINUX_SERVER_PORT}' --exclude "node_modules" /tmp/` + SYSTEM.NAME + '/build/ ' + SYSTEM.LINUX_SERVER_USERNAME + '@' + SYSTEM.LINUX_SERVER_HOST + ':' + sourcePath + '/build \n'
+ bashContent += 'curl -X GET "' + SYSTEM.SCHEME + '://' + SYSTEM.DOMAIN + '/app/upload?platform=' + type + '&extended=x86-64&token=' + getHashToken() + '&startDate=' + startDate + '&logPath=' + logPath + '" -H "cache-control: no-cache"\n'
+ writerStream.write('Run command: \n')
+ writerStream.write(bashContent)
+
+ const conn = new Client()
+ conn.on('ready', function () {
+ const writerStream = fs.createWriteStream(logPath, {flags: 'a'})
+ writerStream.write('Client :: ready\n')
+ conn.shell(function (err, stream) {
+ if (err) throw err
+ const writerStream = fs.createWriteStream(logPath, {flags: 'a'})
+ stream.pipe(writerStream)
+ stream.on('close', function () {
+ const writerStream = fs.createWriteStream(logPath, {flags: 'a'})
+ writerStream.write('\nStream :: close\n')
+ conn.end()
+ })
+ stream.end(bashContent)
+ })
+ }).connect({
+ host: SYSTEM.MAC_SERVER_HOST,
+ port: Number(SYSTEM.MAC_SERVER_PORT),
+ username: SYSTEM.MAC_SERVER_USERNAME,
+ privateKey: require('fs').readFileSync('/root/.ssh/id_rsa')
+ })
+ })
+}
+
+const linuxBuild = async (name, version, docker) => {
+ await startDockerToBuild(name, version, 'linux', docker)
+}
+
+const winBuild = async (name, version, docker) => {
+ await startDockerToBuild(name, version, 'win', docker)
+}
+
+const sleep = (s) => new Promise(resolve => setTimeout(resolve, s))
+
+export default [
+ {
+ method: 'POST',
+ path: `/build/webhooks`,
+ config: {
+ auth: false,
+ tags: ['api', 'build'],
+ description: 'Github webhook',
+ validate: {
+ headers: {
+ 'x-hub-signature': Joi.string().required().description('Github Secret.')
+ },
+ options: {
+ allowUnknown: true
+ }
+ }
+ },
+ async handler (request) {
+ try {
+ const shaObj = new JsSHA('SHA-1', 'TEXT')
+ shaObj.setHMACKey(SYSTEM.TOKEN, 'TEXT')
+ shaObj.update(JSON.stringify(request.payload))
+ const hash = shaObj.getHMAC('HEX')
+ if (request.headers && request.headers['x-hub-signature'] === 'sha1=' + hash) {
+ const updateCodeRes = await gitCodeUpdate(SYSTEM.BUILD_TYPE)
+ if (updateCodeRes) {
+ const packageJson = JSON.parse(fs.readFileSync(path.join(sourcePath, 'package.json'), 'utf-8'))
+
+ if (packageJson && packageJson.name && packageJson.version) {
+ const name = packageJson.name
+ const version = packageJson.version
+ if (SYSTEM.BUILD_TYPE.includes('mac')) {
+ macBuild(name, version) // async
+ await sleep(500)
+ }
+
+ if (SYSTEM.BUILD_TYPE.includes('linux')) {
+ linuxBuild(name, version, this.docker) // async
+ await sleep(500)
+ }
+
+ if (SYSTEM.BUILD_TYPE.includes('win')) {
+ winBuild(name, version, this.docker) // async
+ }
+ } else {
+ return this.fail(null, 10010, 'package read failed.')
+ }
+ } else {
+ return this.fail(null, 10009, 'code update failed.')
+ }
+
+ return this.success('ok')
+ } else {
+ return this.fail()
+ }
+ } catch (err) {
+ return this.fail(null, 10001, err.toString())
+ }
+ }
+ }
+]
diff --git a/src/tool/mac.js b/src/tool/mac.js
new file mode 100644
index 0000000..30ac503
--- /dev/null
+++ b/src/tool/mac.js
@@ -0,0 +1,5 @@
+// import { exec } from 'child_process'
+
+// const out = spawn(this.getJavaPath() + '\\java.exe', ['-jar', execPath], {
+// cwd: path.join(__dirname.replace('app.asar', 'app.asar.unpacked'))
+// })
diff --git a/src/util.js b/src/util.js
new file mode 100644
index 0000000..5cad867
--- /dev/null
+++ b/src/util.js
@@ -0,0 +1,23 @@
+import Chance from 'chance'
+
+const chance = new Chance()
+
+// 给数字字符串补零
+function preZeroFill (num, size) {
+ if (num >= Math.pow(10, size)) { // 如果num本身位数不小于size位
+ return num.toString()
+ } else {
+ var _str = Array(size + 1).join('0') + num
+ return _str.slice(_str.length - size)
+ }
+}
+
+/**
+ * 获取指定位数的整数随机数
+ * @param {int} size 位数
+ * @return {string} 定位数的整数随机数字符串
+ */
+export let getIntRandom = (size) => preZeroFill(chance.integer({
+ min: 0,
+ max: Array(size + 1).join(9)
+}), size)
diff --git a/src/websocket/container.js b/src/websocket/container.js
new file mode 100644
index 0000000..7744e8f
--- /dev/null
+++ b/src/websocket/container.js
@@ -0,0 +1,168 @@
+import { Transform } from 'stream'
+import chalk from 'chalk'
+
+const WIN_IMAGE_NAME = 'electronuserland/builder:wine-mono'
+const LINUX_IMAGE_NAME = 'electronuserland/builder:10'
+
+export default (io, socket, docker) => {
+ socket.on('exec', function (id, w, h) {
+ var container = docker.getContainer(id)
+ var cmd = {
+ 'AttachStdout': true,
+ 'AttachStderr': true,
+ 'AttachStdin': true,
+ 'Tty': true,
+ Cmd: ['/bin/bash']
+ }
+ container.exec(cmd, (err, exec) => {
+ var options = {
+ 'Tty': true,
+ stream: true,
+ stdin: true,
+ stdout: true,
+ stderr: true,
+ // fix vim
+ hijack: true
+ }
+
+ container.wait((err, data) => {
+ console.log(err)
+ socket.emit('end', 'ended')
+ })
+
+ if (err) {
+ return
+ }
+
+ exec.start(options, (err, stream) => {
+ console.log(err)
+ var dimensions = {
+ h,
+ w
+ }
+ if (dimensions.h !== 0 && dimensions.w !== 0) {
+ exec.resize(dimensions, () => {})
+ }
+
+ stream.on('data', (chunk) => {
+ socket.emit('show', chunk.toString())
+ })
+
+ socket.on('cmd', (data) => {
+ stream.write(data)
+ })
+ })
+ })
+ })
+
+ socket.on('logs', function (id) {
+ const container = docker.getContainer(id)
+
+ const logsOpts = {
+ follow: true,
+ stdout: true,
+ stderr: true,
+ timestamps: false
+ }
+
+ container.logs(logsOpts, (err, stream) => {
+ if (err) {
+ console.log(err)
+ socket.emit('err', chalk.red('Error:\n') + err + '.\n')
+ return
+ }
+
+ stream.on('data', (data) => { socket.emit('show', data.toString('utf-8')) })
+ stream.on('end', function () {
+ socket.emit('show', '\n===Stream finished===\n')
+ stream.destroy()
+ })
+ })
+ })
+
+ socket.on('pull', function (type) {
+ let imageName = null
+ switch (type) {
+ case 'win':
+ imageName = WIN_IMAGE_NAME
+ break
+ case 'linux':
+ imageName = LINUX_IMAGE_NAME
+ break
+ }
+
+ docker.pull(imageName, function (err, stream) {
+ if (err) {
+ console.log(err)
+ socket.emit('err', chalk.red('Error:\n') + err + '.\n')
+ return
+ }
+
+ const bytesToSize = (bytes) => {
+ if (bytes === 0) return '0 B'
+ const k = 1000 // or 1024
+ const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
+ const i = Math.floor(Math.log(bytes) / Math.log(k))
+ return (bytes / Math.pow(k, i)).toPrecision(3) + ' ' + sizes[i]
+ }
+
+ let downTmp = []
+ let downTmpId = []
+ const commaSplitter = new Transform({
+ readableObjectMode: true,
+ transform (chunk, encoding, callback) {
+ let tmp = ''
+ try {
+ var result = chunk.toString().match(/{(.*)}/)
+ result = result ? result[0] : null
+ if (!result) callback()
+ tmp = JSON.parse(result)
+ if (tmp.id) {
+ if (downTmpId.includes(tmp.id)) {
+ for (const n in downTmp) {
+ if (downTmp[n].id === tmp.id) {
+ if (tmp.progressDetail && tmp.progressDetail.current && tmp.progressDetail.total) {
+ const percentage = Math.floor(100 * tmp.progressDetail.current / tmp.progressDetail.total)
+ downTmp[n].val = ': [' + percentage + '%] Total ' + bytesToSize(tmp.progressDetail.total)
+ } else if (tmp.status) {
+ downTmp[n].val = ': ' + tmp.status
+ }
+ }
+ }
+ } else {
+ downTmpId.push(tmp.id)
+ const temp = {}
+ temp.id = tmp.id
+ if (tmp.progressDetail && tmp.progressDetail.current && tmp.progressDetail.total) {
+ const percentage = Math.floor(100 * tmp.progressDetail.current / tmp.progressDetail.total)
+ temp.val = ': [' + percentage + '%] Total ' + bytesToSize(tmp.progressDetail.total)
+ } else if (tmp.status) {
+ temp.val = ': ' + tmp.status
+ }
+ downTmp.push(temp)
+ }
+
+ let str = ''
+ for (const n in downTmp) {
+ str += downTmp[n].id + downTmp[n].val + '\n'
+ }
+ socket.emit('progress', str)
+ }
+ } catch (err) {
+ // console.log(err)
+ }
+
+ callback()
+ }
+ })
+
+ stream.pipe(commaSplitter)
+ stream.once('end', () => {
+ socket.emit('progress', chalk.green('All: [100%] Finish。\n'))
+ // socket.emit('end', imageName + ' install ' + chalk.green('success') + '.\n')
+ downTmp = []
+ downTmpId = []
+ })
+ })
+ })
+}
diff --git a/src/websocket/git.js b/src/websocket/git.js
new file mode 100644
index 0000000..acbc00b
--- /dev/null
+++ b/src/websocket/git.js
@@ -0,0 +1,93 @@
+import git from 'simple-git'
+import chalk from 'chalk'
+import fs from 'fs'
+import path from 'path'
+import { SYSTEM } from '../config'
+
+const GIT_SSH_COMMAND = 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
+
+const mkdirsSync = (dirname) => {
+ if (fs.existsSync(dirname)) {
+ return true
+ } else {
+ if (mkdirsSync(path.dirname(dirname))) {
+ fs.mkdirSync(dirname)
+ return true
+ }
+ }
+}
+
+export default (io, socket, docker) => {
+ socket.on('gitPull', (data) => {
+ const repoPath = SYSTEM.REPOPATH
+ const workPath = SYSTEM.WORKPATH
+ const sourcePath = path.join(workPath, '/source')
+ const linuxPath = path.join(workPath, '/linux')
+ const winPath = path.join(workPath, '/win')
+
+ const gitClone = (repoPath, workPath, type) => {
+ git().env({
+ ...process.env,
+ GIT_SSH_COMMAND
+ })
+ .clone(repoPath, workPath, (err) => {
+ if (err) {
+ socket.emit('err', chalk.red(type + ' clone error:\n') + err + '\n')
+ return
+ }
+ socket.emit('show', chalk.green(type + ' clone is finished!\n'))
+ })
+ }
+
+ const gitPull = (workPath, type) => {
+ git(workPath).env({
+ ...process.env,
+ GIT_SSH_COMMAND
+ })
+ .pull((err, update) => {
+ if (err) {
+ socket.emit('err', chalk.red(type + ' pull error:\n') + err + '\n')
+ return
+ }
+ if (update && update.summary.changes) {
+ socket.emit('show', chalk.green(type + ' update success.\n'))
+ } else {
+ socket.emit('show', chalk.green(type + ' update success, no change.\n'))
+ }
+ })
+ }
+
+ if (!fs.existsSync(sourcePath)) {
+ mkdirsSync(sourcePath)
+ gitClone(repoPath, sourcePath, 'Source')
+ } else {
+ if (fs.readdirSync(sourcePath).includes('.git')) {
+ gitPull(sourcePath, 'Source')
+ } else {
+ gitClone(repoPath, sourcePath, 'Source')
+ }
+ }
+
+ if (!fs.existsSync(linuxPath)) {
+ mkdirsSync(linuxPath)
+ gitClone(repoPath, linuxPath, 'Linux')
+ } else {
+ if (fs.readdirSync(linuxPath).includes('.git')) {
+ gitPull(linuxPath, 'Linux')
+ } else {
+ gitClone(repoPath, linuxPath, 'Linux')
+ }
+ }
+
+ if (!fs.existsSync(winPath)) {
+ mkdirsSync(winPath)
+ gitClone(repoPath, winPath, 'Win')
+ } else {
+ if (fs.readdirSync(winPath).includes('.git')) {
+ gitPull(winPath, 'Win')
+ } else {
+ gitClone(repoPath, winPath, 'Win')
+ }
+ }
+ })
+}
diff --git a/src/websocket/index.js b/src/websocket/index.js
new file mode 100644
index 0000000..5925a62
--- /dev/null
+++ b/src/websocket/index.js
@@ -0,0 +1,30 @@
+import container from './container'
+import git from './git'
+import log from './log'
+import JsSHA from 'jssha'
+import {
+ SYSTEM
+} from '../config'
+
+export default (io, docker) => {
+ console.log('Websocket Runing...')
+ io.on('connection', function (socket) {
+ console.log('One user connected - ' + socket.id)
+ socket.emit('requireAuth', 'distribution')
+ socket.emit('opend', new Date())
+
+ socket.on('auth', function (token) {
+ const shaObj = new JsSHA('SHA-512', 'TEXT')
+ shaObj.update(SYSTEM.TOKEN)
+ const hash = shaObj.getHash('HEX')
+ if (token === hash) {
+ container(io, socket, docker)
+ git(io, socket, docker)
+ log(io, socket, docker)
+ socket.emit('auth', 'success')
+ } else {
+ socket.emit('auth', 'fail')
+ }
+ })
+ })
+}
diff --git a/src/websocket/log.js b/src/websocket/log.js
new file mode 100644
index 0000000..d5ef9c5
--- /dev/null
+++ b/src/websocket/log.js
@@ -0,0 +1,25 @@
+import fs from 'fs'
+import db from '../lib/db'
+
+export default (io, socket, docker) => {
+ socket.on('log', function (path) {
+ path = decodeURI(path)
+
+ const logLast = db.get('buildLog')
+ .filter({logPath: path})
+ .sortBy((item) => -item.startDate)
+ .take()
+ .first()
+ .value()
+
+ if (logLast && logLast.logPath) {
+ try {
+ socket.emit('show', fs.readFileSync(logLast.logPath) + '\n')
+ } catch (err) {
+ socket.emit('show', err.toString() + '\n')
+ }
+ } else {
+ socket.emit('show', 'No file.')
+ }
+ })
+}
diff --git a/test/spawn.js b/test/spawn.js
new file mode 100644
index 0000000..8781931
--- /dev/null
+++ b/test/spawn.js
@@ -0,0 +1,15 @@
+const { spawn } = require('child_process')
+const fs = require('fs')
+
+const writerStream = fs.createWriteStream('test/test.log', {flags: 'a'})
+
+const cmd = `rsync -avrz -e 'ssh -p 22' --delete-after --exclude "node_modules" /data/ykfz/source/ root@xxxxxxx:/tmp/ykfz`
+writerStream.write(cmd)
+const rsync = spawn('/bin/sh', ['-c', cmd])
+rsync.stdout.pipe(writerStream)
+rsync.stderr.pipe(writerStream)
+
+rsync.on('close', (code) => {
+ const writerStream = fs.createWriteStream('test/test.log', {flags: 'a'})
+ writerStream.write(`\nChild process exited with code ${code} \n`)
+})
diff --git a/test/test.log b/test/test.log
new file mode 100644
index 0000000..62df91e
--- /dev/null
+++ b/test/test.log
@@ -0,0 +1 @@
+Child process exited with code 23
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 0000000..fddb939
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,4732 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/cli@^7.2.3":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.4.4.tgz#5454bb7112f29026a4069d8e6f0e1794e651966c"
+ integrity sha512-XGr5YjQSjgTa6OzQZY57FAJsdeVSAKR/u/KA5exWIz66IKtv/zXtHy+fIZcMry/EgYegwuHE7vzGnrFhjdIAsQ==
+ dependencies:
+ commander "^2.8.1"
+ convert-source-map "^1.1.0"
+ fs-readdir-recursive "^1.1.0"
+ glob "^7.0.0"
+ lodash "^4.17.11"
+ mkdirp "^0.5.1"
+ output-file-sync "^2.0.0"
+ slash "^2.0.0"
+ source-map "^0.5.0"
+ optionalDependencies:
+ chokidar "^2.0.4"
+
+"@babel/code-frame@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8"
+ integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==
+ dependencies:
+ "@babel/highlight" "^7.0.0"
+
+"@babel/core@^7.4.0":
+ version "7.4.5"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.5.tgz#081f97e8ffca65a9b4b0fdc7e274e703f000c06a"
+ integrity sha512-OvjIh6aqXtlsA8ujtGKfC7LYWksYSX8yQcM8Ay3LuvVeQ63lcOKgoZWVqcpFwkd29aYU9rVx7jxhfhiEDV9MZA==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@babel/generator" "^7.4.4"
+ "@babel/helpers" "^7.4.4"
+ "@babel/parser" "^7.4.5"
+ "@babel/template" "^7.4.4"
+ "@babel/traverse" "^7.4.5"
+ "@babel/types" "^7.4.4"
+ convert-source-map "^1.1.0"
+ debug "^4.1.0"
+ json5 "^2.1.0"
+ lodash "^4.17.11"
+ resolve "^1.3.2"
+ semver "^5.4.1"
+ source-map "^0.5.0"
+
+"@babel/generator@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.4.4.tgz#174a215eb843fc392c7edcaabeaa873de6e8f041"
+ integrity sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==
+ dependencies:
+ "@babel/types" "^7.4.4"
+ jsesc "^2.5.1"
+ lodash "^4.17.11"
+ source-map "^0.5.0"
+ trim-right "^1.0.1"
+
+"@babel/helper-annotate-as-pure@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32"
+ integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f"
+ integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==
+ dependencies:
+ "@babel/helper-explode-assignable-expression" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-call-delegate@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43"
+ integrity sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==
+ dependencies:
+ "@babel/helper-hoist-variables" "^7.4.4"
+ "@babel/traverse" "^7.4.4"
+ "@babel/types" "^7.4.4"
+
+"@babel/helper-create-class-features-plugin@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.4.tgz#fc3d690af6554cc9efc607364a82d48f58736dba"
+ integrity sha512-UbBHIa2qeAGgyiNR9RszVF7bUHEdgS4JAUNT8SiqrAN6YJVxlOxeLr5pBzb5kan302dejJ9nla4RyKcR1XT6XA==
+ dependencies:
+ "@babel/helper-function-name" "^7.1.0"
+ "@babel/helper-member-expression-to-functions" "^7.0.0"
+ "@babel/helper-optimise-call-expression" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-replace-supers" "^7.4.4"
+ "@babel/helper-split-export-declaration" "^7.4.4"
+
+"@babel/helper-define-map@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz#6969d1f570b46bdc900d1eba8e5d59c48ba2c12a"
+ integrity sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg==
+ dependencies:
+ "@babel/helper-function-name" "^7.1.0"
+ "@babel/types" "^7.4.4"
+ lodash "^4.17.11"
+
+"@babel/helper-explode-assignable-expression@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6"
+ integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==
+ dependencies:
+ "@babel/traverse" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-function-name@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53"
+ integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==
+ dependencies:
+ "@babel/helper-get-function-arity" "^7.0.0"
+ "@babel/template" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-get-function-arity@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3"
+ integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-hoist-variables@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a"
+ integrity sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==
+ dependencies:
+ "@babel/types" "^7.4.4"
+
+"@babel/helper-member-expression-to-functions@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f"
+ integrity sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-module-imports@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d"
+ integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz#96115ea42a2f139e619e98ed46df6019b94414b8"
+ integrity sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w==
+ dependencies:
+ "@babel/helper-module-imports" "^7.0.0"
+ "@babel/helper-simple-access" "^7.1.0"
+ "@babel/helper-split-export-declaration" "^7.4.4"
+ "@babel/template" "^7.4.4"
+ "@babel/types" "^7.4.4"
+ lodash "^4.17.11"
+
+"@babel/helper-optimise-call-expression@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5"
+ integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-plugin-utils@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250"
+ integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==
+
+"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.4.4.tgz#a47e02bc91fb259d2e6727c2a30013e3ac13c4a2"
+ integrity sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q==
+ dependencies:
+ lodash "^4.17.11"
+
+"@babel/helper-remap-async-to-generator@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f"
+ integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.0.0"
+ "@babel/helper-wrap-function" "^7.1.0"
+ "@babel/template" "^7.1.0"
+ "@babel/traverse" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-replace-supers@^7.1.0", "@babel/helper-replace-supers@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz#aee41783ebe4f2d3ab3ae775e1cc6f1a90cefa27"
+ integrity sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg==
+ dependencies:
+ "@babel/helper-member-expression-to-functions" "^7.0.0"
+ "@babel/helper-optimise-call-expression" "^7.0.0"
+ "@babel/traverse" "^7.4.4"
+ "@babel/types" "^7.4.4"
+
+"@babel/helper-simple-access@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c"
+ integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==
+ dependencies:
+ "@babel/template" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-split-export-declaration@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677"
+ integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==
+ dependencies:
+ "@babel/types" "^7.4.4"
+
+"@babel/helper-wrap-function@^7.1.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa"
+ integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==
+ dependencies:
+ "@babel/helper-function-name" "^7.1.0"
+ "@babel/template" "^7.1.0"
+ "@babel/traverse" "^7.1.0"
+ "@babel/types" "^7.2.0"
+
+"@babel/helpers@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.4.4.tgz#868b0ef59c1dd4e78744562d5ce1b59c89f2f2a5"
+ integrity sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==
+ dependencies:
+ "@babel/template" "^7.4.4"
+ "@babel/traverse" "^7.4.4"
+ "@babel/types" "^7.4.4"
+
+"@babel/highlight@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4"
+ integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==
+ dependencies:
+ chalk "^2.0.0"
+ esutils "^2.0.2"
+ js-tokens "^4.0.0"
+
+"@babel/parser@^7.4.4", "@babel/parser@^7.4.5":
+ version "7.4.5"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.5.tgz#04af8d5d5a2b044a2a1bffacc1e5e6673544e872"
+ integrity sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew==
+
+"@babel/plugin-proposal-async-generator-functions@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e"
+ integrity sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-remap-async-to-generator" "^7.1.0"
+ "@babel/plugin-syntax-async-generators" "^7.2.0"
+
+"@babel/plugin-proposal-class-properties@^7.4.0":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.4.tgz#93a6486eed86d53452ab9bab35e368e9461198ce"
+ integrity sha512-WjKTI8g8d5w1Bc9zgwSz2nfrsNQsXcCf9J9cdCvrJV6RF56yztwm4TmJC0MgJ9tvwO9gUA/mcYe89bLdGfiXFg==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.4.4"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-proposal-decorators@^7.4.0":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.4.4.tgz#de9b2a1a8ab0196f378e2a82f10b6e2a36f21cc0"
+ integrity sha512-z7MpQz3XC/iQJWXH9y+MaWcLPNSMY9RQSthrLzak8R8hCj0fuyNk+Dzi9kfNe/JxxlWQ2g7wkABbgWjW36MTcw==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.4.4"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-decorators" "^7.2.0"
+
+"@babel/plugin-proposal-json-strings@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317"
+ integrity sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-json-strings" "^7.2.0"
+
+"@babel/plugin-proposal-object-rest-spread@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz#1ef173fcf24b3e2df92a678f027673b55e7e3005"
+ integrity sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-object-rest-spread" "^7.2.0"
+
+"@babel/plugin-proposal-optional-catch-binding@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5"
+ integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.2.0"
+
+"@babel/plugin-proposal-optional-chaining@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.2.0.tgz#ae454f4c21c6c2ce8cb2397dc332ae8b420c5441"
+ integrity sha512-ea3Q6edZC/55wEBVZAEz42v528VulyO0eir+7uky/sT4XRcdkWJcFi1aPtitTlwUzGnECWJNExWww1SStt+yWw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-optional-chaining" "^7.2.0"
+
+"@babel/plugin-proposal-unicode-property-regex@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz#501ffd9826c0b91da22690720722ac7cb1ca9c78"
+ integrity sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-regex" "^7.4.4"
+ regexpu-core "^4.5.4"
+
+"@babel/plugin-syntax-async-generators@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f"
+ integrity sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-decorators@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz#c50b1b957dcc69e4b1127b65e1c33eef61570c1b"
+ integrity sha512-38QdqVoXdHUQfTpZo3rQwqQdWtCn5tMv4uV6r2RMfTqNBuv4ZBhz79SfaQWKTVmxHjeFv/DnXVC/+agHCklYWA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-json-strings@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470"
+ integrity sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-object-rest-spread@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e"
+ integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-optional-catch-binding@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c"
+ integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-optional-chaining@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.2.0.tgz#a59d6ae8c167e7608eaa443fda9fa8fa6bf21dff"
+ integrity sha512-HtGCtvp5Uq/jH/WNUPkK6b7rufnCPLLlDAFN7cmACoIjaOOiXxUt3SswU5loHqrhtqTsa/WoLQ1OQ1AGuZqaWA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-arrow-functions@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550"
+ integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-async-to-generator@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz#a3f1d01f2f21cadab20b33a82133116f14fb5894"
+ integrity sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA==
+ dependencies:
+ "@babel/helper-module-imports" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-remap-async-to-generator" "^7.1.0"
+
+"@babel/plugin-transform-block-scoped-functions@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190"
+ integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-block-scoping@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz#c13279fabf6b916661531841a23c4b7dae29646d"
+ integrity sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ lodash "^4.17.11"
+
+"@babel/plugin-transform-classes@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz#0ce4094cdafd709721076d3b9c38ad31ca715eb6"
+ integrity sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.0.0"
+ "@babel/helper-define-map" "^7.4.4"
+ "@babel/helper-function-name" "^7.1.0"
+ "@babel/helper-optimise-call-expression" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-replace-supers" "^7.4.4"
+ "@babel/helper-split-export-declaration" "^7.4.4"
+ globals "^11.1.0"
+
+"@babel/plugin-transform-computed-properties@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da"
+ integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-destructuring@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz#9d964717829cc9e4b601fc82a26a71a4d8faf20f"
+ integrity sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-dotall-regex@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz#361a148bc951444312c69446d76ed1ea8e4450c3"
+ integrity sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-regex" "^7.4.4"
+ regexpu-core "^4.5.4"
+
+"@babel/plugin-transform-duplicate-keys@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz#d952c4930f312a4dbfff18f0b2914e60c35530b3"
+ integrity sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-exponentiation-operator@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008"
+ integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==
+ dependencies:
+ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-for-of@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556"
+ integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-function-name@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz#e1436116abb0610c2259094848754ac5230922ad"
+ integrity sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==
+ dependencies:
+ "@babel/helper-function-name" "^7.1.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-literals@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1"
+ integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-member-expression-literals@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz#fa10aa5c58a2cb6afcf2c9ffa8cb4d8b3d489a2d"
+ integrity sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-modules-amd@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz#82a9bce45b95441f617a24011dc89d12da7f4ee6"
+ integrity sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.1.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-modules-commonjs@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz#0bef4713d30f1d78c2e59b3d6db40e60192cac1e"
+ integrity sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.4.4"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-simple-access" "^7.1.0"
+
+"@babel/plugin-transform-modules-systemjs@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz#dc83c5665b07d6c2a7b224c00ac63659ea36a405"
+ integrity sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ==
+ dependencies:
+ "@babel/helper-hoist-variables" "^7.4.4"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-modules-umd@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae"
+ integrity sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.1.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-named-capturing-groups-regex@^7.4.5":
+ version "7.4.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz#9d269fd28a370258199b4294736813a60bbdd106"
+ integrity sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg==
+ dependencies:
+ regexp-tree "^0.1.6"
+
+"@babel/plugin-transform-new-target@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz#18d120438b0cc9ee95a47f2c72bc9768fbed60a5"
+ integrity sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-object-super@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz#b35d4c10f56bab5d650047dad0f1d8e8814b6598"
+ integrity sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-replace-supers" "^7.1.0"
+
+"@babel/plugin-transform-parameters@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16"
+ integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==
+ dependencies:
+ "@babel/helper-call-delegate" "^7.4.4"
+ "@babel/helper-get-function-arity" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-property-literals@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz#03e33f653f5b25c4eb572c98b9485055b389e905"
+ integrity sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-regenerator@^7.4.5":
+ version "7.4.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f"
+ integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==
+ dependencies:
+ regenerator-transform "^0.14.0"
+
+"@babel/plugin-transform-reserved-words@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz#4792af87c998a49367597d07fedf02636d2e1634"
+ integrity sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-shorthand-properties@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0"
+ integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-spread@^7.2.0":
+ version "7.2.2"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz#3103a9abe22f742b6d406ecd3cd49b774919b406"
+ integrity sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-sticky-regex@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1"
+ integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-regex" "^7.0.0"
+
+"@babel/plugin-transform-template-literals@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0"
+ integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-typeof-symbol@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2"
+ integrity sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-unicode-regex@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz#ab4634bb4f14d36728bf5978322b35587787970f"
+ integrity sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-regex" "^7.4.4"
+ regexpu-core "^4.5.4"
+
+"@babel/preset-env@^7.4.2":
+ version "7.4.5"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.4.5.tgz#2fad7f62983d5af563b5f3139242755884998a58"
+ integrity sha512-f2yNVXM+FsR5V8UwcFeIHzHWgnhXg3NpRmy0ADvALpnhB0SLbCvrCRr4BLOUYbQNLS+Z0Yer46x9dJXpXewI7w==
+ dependencies:
+ "@babel/helper-module-imports" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-proposal-async-generator-functions" "^7.2.0"
+ "@babel/plugin-proposal-json-strings" "^7.2.0"
+ "@babel/plugin-proposal-object-rest-spread" "^7.4.4"
+ "@babel/plugin-proposal-optional-catch-binding" "^7.2.0"
+ "@babel/plugin-proposal-unicode-property-regex" "^7.4.4"
+ "@babel/plugin-syntax-async-generators" "^7.2.0"
+ "@babel/plugin-syntax-json-strings" "^7.2.0"
+ "@babel/plugin-syntax-object-rest-spread" "^7.2.0"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.2.0"
+ "@babel/plugin-transform-arrow-functions" "^7.2.0"
+ "@babel/plugin-transform-async-to-generator" "^7.4.4"
+ "@babel/plugin-transform-block-scoped-functions" "^7.2.0"
+ "@babel/plugin-transform-block-scoping" "^7.4.4"
+ "@babel/plugin-transform-classes" "^7.4.4"
+ "@babel/plugin-transform-computed-properties" "^7.2.0"
+ "@babel/plugin-transform-destructuring" "^7.4.4"
+ "@babel/plugin-transform-dotall-regex" "^7.4.4"
+ "@babel/plugin-transform-duplicate-keys" "^7.2.0"
+ "@babel/plugin-transform-exponentiation-operator" "^7.2.0"
+ "@babel/plugin-transform-for-of" "^7.4.4"
+ "@babel/plugin-transform-function-name" "^7.4.4"
+ "@babel/plugin-transform-literals" "^7.2.0"
+ "@babel/plugin-transform-member-expression-literals" "^7.2.0"
+ "@babel/plugin-transform-modules-amd" "^7.2.0"
+ "@babel/plugin-transform-modules-commonjs" "^7.4.4"
+ "@babel/plugin-transform-modules-systemjs" "^7.4.4"
+ "@babel/plugin-transform-modules-umd" "^7.2.0"
+ "@babel/plugin-transform-named-capturing-groups-regex" "^7.4.5"
+ "@babel/plugin-transform-new-target" "^7.4.4"
+ "@babel/plugin-transform-object-super" "^7.2.0"
+ "@babel/plugin-transform-parameters" "^7.4.4"
+ "@babel/plugin-transform-property-literals" "^7.2.0"
+ "@babel/plugin-transform-regenerator" "^7.4.5"
+ "@babel/plugin-transform-reserved-words" "^7.2.0"
+ "@babel/plugin-transform-shorthand-properties" "^7.2.0"
+ "@babel/plugin-transform-spread" "^7.2.0"
+ "@babel/plugin-transform-sticky-regex" "^7.2.0"
+ "@babel/plugin-transform-template-literals" "^7.4.4"
+ "@babel/plugin-transform-typeof-symbol" "^7.2.0"
+ "@babel/plugin-transform-unicode-regex" "^7.4.4"
+ "@babel/types" "^7.4.4"
+ browserslist "^4.6.0"
+ core-js-compat "^3.1.1"
+ invariant "^2.2.2"
+ js-levenshtein "^1.1.3"
+ semver "^5.5.0"
+
+"@babel/register@^7.4.0":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.4.4.tgz#370a68ba36f08f015a8b35d4864176c6b65d7a23"
+ integrity sha512-sn51H88GRa00+ZoMqCVgOphmswG4b7mhf9VOB0LUBAieykq2GnRFerlN+JQkO/ntT7wz4jaHNSRPg9IdMPEUkA==
+ dependencies:
+ core-js "^3.0.0"
+ find-cache-dir "^2.0.0"
+ lodash "^4.17.11"
+ mkdirp "^0.5.1"
+ pirates "^4.0.0"
+ source-map-support "^0.5.9"
+
+"@babel/template@^7.1.0", "@babel/template@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237"
+ integrity sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@babel/parser" "^7.4.4"
+ "@babel/types" "^7.4.4"
+
+"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.4", "@babel/traverse@^7.4.5":
+ version "7.4.5"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.5.tgz#4e92d1728fd2f1897dafdd321efbff92156c3216"
+ integrity sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@babel/generator" "^7.4.4"
+ "@babel/helper-function-name" "^7.1.0"
+ "@babel/helper-split-export-declaration" "^7.4.4"
+ "@babel/parser" "^7.4.5"
+ "@babel/types" "^7.4.4"
+ debug "^4.1.0"
+ globals "^11.1.0"
+ lodash "^4.17.11"
+
+"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.4.tgz#8db9e9a629bb7c29370009b4b779ed93fe57d5f0"
+ integrity sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==
+ dependencies:
+ esutils "^2.0.2"
+ lodash "^4.17.11"
+ to-fast-properties "^2.0.0"
+
+"@types/node@^8.0.7":
+ version "8.10.49"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.49.tgz#f331afc5efed0796798e5591d6e0ece636969b7b"
+ integrity sha512-YX30JVx0PvSmJ3Eqr74fYLGeBxD+C7vIL20ek+GGGLJeUbVYRUW3EzyAXpIRA0K8c8o0UWqR/GwEFYiFoz1T8w==
+
+JSONStream@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.2.tgz#c102371b6ec3a7cf3b847ca00c20bb0fce4c6dea"
+ integrity sha1-wQI3G27Dp887hHygDCC7D85Mbeo=
+ dependencies:
+ jsonparse "^1.2.0"
+ through ">=2.2.7 <3"
+
+abbrev@1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+ integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
+
+accept@3.x.x:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/accept/-/accept-3.1.3.tgz#29c3e2b3a8f4eedbc2b690e472b9ebbdc7385e87"
+ integrity sha512-OgOEAidVEOKPup+Gv2+2wdH2AgVKI9LxsJ4hicdJ6cY0faUuZdZoi56kkXWlHp9qicN1nWQLmW5ZRGk+SBS5xg==
+ dependencies:
+ boom "7.x.x"
+ hoek "6.x.x"
+
+accepts@~1.3.4:
+ version "1.3.7"
+ resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
+ integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
+ dependencies:
+ mime-types "~2.1.24"
+ negotiator "0.6.2"
+
+address@>=0.0.1, address@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/address/-/address-1.1.0.tgz#ef8e047847fcd2c5b6f50c16965f924fd99fe709"
+ integrity sha512-4diPfzWbLEIElVG4AnqP+00SULlPzNuyJFNnmMrLgyaxG6tZXJ1sn7mjBu4fHrJE+Yp/jgylOweJn2xsLMFggQ==
+
+after@0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f"
+ integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=
+
+agent-base@4, agent-base@^4.1.0, agent-base@^4.2.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee"
+ integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==
+ dependencies:
+ es6-promisify "^5.0.0"
+
+agent-base@~4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9"
+ integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==
+ dependencies:
+ es6-promisify "^5.0.0"
+
+agentkeepalive@3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.3.0.tgz#6d5de5829afd3be2712201a39275fd11c651857c"
+ integrity sha512-9yhcpXti2ZQE7bxuCsjjWNIZoQOd9sZ1ZBovHG0YeCRohFv73SLvcm73PC9T3olM4GyozaQb+4MGdQpcD8m7NQ==
+ dependencies:
+ humanize-ms "^1.2.1"
+
+agentkeepalive@^3.4.1:
+ version "3.5.2"
+ resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67"
+ integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==
+ dependencies:
+ humanize-ms "^1.2.1"
+
+ajv@^6.5.5:
+ version "6.10.0"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1"
+ integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==
+ dependencies:
+ fast-deep-equal "^2.0.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+ali-oss@^6.1.1:
+ version "6.1.1"
+ resolved "https://registry.yarnpkg.com/ali-oss/-/ali-oss-6.1.1.tgz#1a310a27a6070571a493e73a015a82656217e0df"
+ integrity sha512-+BKZlX/+aPjFF8al0fS5j93ynWlKy779p/i1nVxElUjyQA457ccbhoQTUKL6cbr8EMetIAUHnhS9XTI4RgW1PA==
+ dependencies:
+ address "^1.0.0"
+ agentkeepalive "^3.4.1"
+ any-promise "^1.3.0"
+ bowser "^1.6.0"
+ co-defer "^1.0.0"
+ copy-to "^2.0.1"
+ dateformat "^2.0.0"
+ debug "^2.2.0"
+ destroy "^1.0.4"
+ end-or-error "^1.0.1"
+ get-ready "^1.0.0"
+ humanize-ms "^1.2.0"
+ is-type-of "^1.0.0"
+ jstoxml "^0.2.3"
+ merge-descriptors "^1.0.1"
+ mime "^1.3.4"
+ mz-modules "^2.1.0"
+ platform "^1.3.1"
+ sdk-base "^2.0.1"
+ stream-http "2.8.2"
+ stream-wormhole "^1.0.4"
+ urllib "^2.33.1"
+ utility "^1.8.0"
+ xml2js "^0.4.16"
+
+ammo@3.x.x:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/ammo/-/ammo-3.0.3.tgz#502aafa9d8bfca264143e226e5f322716e746b0c"
+ integrity sha512-vo76VJ44MkUBZL/BzpGXaKzMfroF4ZR6+haRuw9p+eSWfoNaH2AxVc8xmiEPC08jhzJSeM6w7/iMUGet8b4oBQ==
+ dependencies:
+ hoek "6.x.x"
+
+ansi-align@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f"
+ integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=
+ dependencies:
+ string-width "^2.0.0"
+
+ansi-regex@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+ integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
+
+ansi-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+ integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
+
+ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+any-promise@^1.0.0, any-promise@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
+ integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
+
+anymatch@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
+ integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
+ dependencies:
+ micromatch "^3.1.4"
+ normalize-path "^2.1.1"
+
+aproba@^1.0.3:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+ integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
+
+are-we-there-yet@~1.1.2:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
+ integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.6"
+
+argparse@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ dependencies:
+ sprintf-js "~1.0.2"
+
+arr-diff@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+ integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
+
+arr-flatten@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+ integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+
+arr-union@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+ integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
+
+array-unique@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+ integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
+
+arraybuffer.slice@~0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675"
+ integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==
+
+asn1@~0.2.0, asn1@~0.2.3:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
+ integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
+ dependencies:
+ safer-buffer "~2.1.0"
+
+assert-plus@1.0.0, assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
+
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+ integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+
+ast-types@0.x.x:
+ version "0.13.1"
+ resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.1.tgz#9461428a270c5a27fda44b738dd3bab2e9353003"
+ integrity sha512-b+EeK0WlzrSmpMw5jktWvQGxblpWnvMrV+vOp69RLjzGiHwWV0vgq75DPKtUjppKni3yWwSW8WLGV3Ch/XIWcQ==
+
+async-each@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
+ integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
+
+async-limiter@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8"
+ integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
+
+atob@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+ integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+
+aws-sign2@~0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+ integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
+
+aws4@^1.8.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
+ integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==
+
+axios@^0.18.0:
+ version "0.18.1"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.1.tgz#ff3f0de2e7b5d180e757ad98000f1081b87bcea3"
+ integrity sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==
+ dependencies:
+ follow-redirects "1.5.10"
+ is-buffer "^2.0.2"
+
+b64@4.x.x:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/b64/-/b64-4.1.2.tgz#7015372ba8101f7fb18da070717a93c28c8580d8"
+ integrity sha512-+GUspBxlH3CJaxMUGUE1EBoWM6RKgWiYwUDal0qdf8m3ArnXNN1KzKVo5HOnE/FSq4HHyWf3TlHLsZI8PKQgrQ==
+ dependencies:
+ hoek "6.x.x"
+
+backo2@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
+ integrity sha1-MasayLEpNjRj41s+u2n038+6eUc=
+
+balanced-match@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+ integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+
+base64-arraybuffer@0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8"
+ integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg=
+
+base64id@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6"
+ integrity sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=
+
+base@^0.11.1:
+ version "0.11.2"
+ resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+ integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+ dependencies:
+ cache-base "^1.0.1"
+ class-utils "^0.3.5"
+ component-emitter "^1.2.1"
+ define-property "^1.0.0"
+ isobject "^3.0.1"
+ mixin-deep "^1.2.0"
+ pascalcase "^0.1.1"
+
+bcrypt-pbkdf@^1.0.0, bcrypt-pbkdf@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
+ integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
+ dependencies:
+ tweetnacl "^0.14.3"
+
+better-assert@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522"
+ integrity sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=
+ dependencies:
+ callsite "1.0.0"
+
+binary-extensions@^1.0.0:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
+ integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
+
+bl@^1.0.0:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c"
+ integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==
+ dependencies:
+ readable-stream "^2.3.5"
+ safe-buffer "^5.1.1"
+
+blob@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683"
+ integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==
+
+boom@7.x.x, boom@^7.1.1:
+ version "7.3.0"
+ resolved "https://registry.yarnpkg.com/boom/-/boom-7.3.0.tgz#733a6d956d33b0b1999da3fe6c12996950d017b9"
+ integrity sha512-Swpoyi2t5+GhOEGw8rEsKvTxFLIDiiKoUc2gsoV6Lyr43LHBIzch3k2MvYUs8RTROrIkVJ3Al0TkaOGjnb+B6A==
+ dependencies:
+ hoek "6.x.x"
+
+bounce@1.x.x:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/bounce/-/bounce-1.2.3.tgz#2b286d36eb21d5f08fe672dd8cd37a109baad121"
+ integrity sha512-3G7B8CyBnip5EahCZJjnvQ1HLyArC6P5e+xcolo13BVI9ogFaDOsNMAE7FIWliHtIkYI8/nTRCvCY9tZa3Mu4g==
+ dependencies:
+ boom "7.x.x"
+ hoek "6.x.x"
+
+bourne@1.x.x:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/bourne/-/bourne-1.1.2.tgz#e290b5bd7166635632eaf8ef12b006b2d4a75b83"
+ integrity sha512-b2dgVkTZhkQirNMohgC00rWfpVqEi9y5tKM1k3JvoNx05ODtfQoPPd4js9CYFQoY0IM8LAmnJulEuWv74zjUOg==
+
+bowser@^1.6.0:
+ version "1.9.4"
+ resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.9.4.tgz#890c58a2813a9d3243704334fa81b96a5c150c9a"
+ integrity sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ==
+
+boxen@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b"
+ integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==
+ dependencies:
+ ansi-align "^2.0.0"
+ camelcase "^4.0.0"
+ chalk "^2.0.1"
+ cli-boxes "^1.0.0"
+ string-width "^2.0.0"
+ term-size "^1.2.0"
+ widest-line "^2.0.0"
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+braces@^2.3.1, braces@^2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+ integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+ dependencies:
+ arr-flatten "^1.1.0"
+ array-unique "^0.3.2"
+ extend-shallow "^2.0.1"
+ fill-range "^4.0.0"
+ isobject "^3.0.1"
+ repeat-element "^1.1.2"
+ snapdragon "^0.8.1"
+ snapdragon-node "^2.0.1"
+ split-string "^3.0.2"
+ to-regex "^3.0.1"
+
+browserslist@^4.6.0:
+ version "4.6.1"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.6.1.tgz#ee5059b1aec18cbec9d055d6cb5e24ae50343a9b"
+ integrity sha512-1MC18ooMPRG2UuVFJTHFIAkk6mpByJfxCrnUyvSlu/hyQSFHMrlhM02SzNuCV+quTP4CKmqtOMAIjrifrpBJXQ==
+ dependencies:
+ caniuse-lite "^1.0.30000971"
+ electron-to-chromium "^1.3.137"
+ node-releases "^1.1.21"
+
+buffer-alloc-unsafe@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
+ integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==
+
+buffer-alloc@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
+ integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==
+ dependencies:
+ buffer-alloc-unsafe "^1.1.0"
+ buffer-fill "^1.0.0"
+
+buffer-fill@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
+ integrity sha1-+PeLdniYiO858gXNY39o5wISKyw=
+
+buffer-from@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+ integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+
+builtin-status-codes@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+ integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
+
+bytes@3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
+ integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
+
+cache-base@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+ integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+ dependencies:
+ collection-visit "^1.0.0"
+ component-emitter "^1.2.1"
+ get-value "^2.0.6"
+ has-value "^1.0.0"
+ isobject "^3.0.1"
+ set-value "^2.0.0"
+ to-object-path "^0.3.0"
+ union-value "^1.0.0"
+ unset-value "^1.0.0"
+
+call-me-maybe@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b"
+ integrity sha1-JtII6onje1y95gJQoV8DHBak1ms=
+
+call@5.x.x:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/call/-/call-5.0.3.tgz#5dc82c698141c2d45c51a9c3c7e0697f43ac46a2"
+ integrity sha512-eX16KHiAYXugbFu6VifstSdwH6aMuWWb4s0qvpq1nR1b+Sf+u68jjttg8ixDBEldPqBi30bDU35OJQWKeTLKxg==
+ dependencies:
+ boom "7.x.x"
+ hoek "6.x.x"
+
+callsite@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20"
+ integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA=
+
+camelcase@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
+ integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
+
+caniuse-lite@^1.0.30000971:
+ version "1.0.30000974"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000974.tgz#b7afe14ee004e97ce6dc73e3f878290a12928ad8"
+ integrity sha512-xc3rkNS/Zc3CmpMKuczWEdY2sZgx09BkAxfvkxlAEBTqcMHeL8QnPqhKse+5sRTi3nrw2pJwToD2WvKn1Uhvww==
+
+capture-stack-trace@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d"
+ integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==
+
+caseless@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+ integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
+
+catbox-memory@4.x.x:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/catbox-memory/-/catbox-memory-4.0.1.tgz#3371ae0dd91bbf5d9dd88dcab5332470354cbd1f"
+ integrity sha512-ZmqNiLsYCIu9qvBJ/MQbznDV2bFH5gFiH67TgIJgSSffJFtTXArT+MM3AvJQlby9NSkLHOX4eH/uuUqnch/Ldw==
+ dependencies:
+ boom "7.x.x"
+ hoek "6.x.x"
+
+catbox@10.x.x:
+ version "10.0.6"
+ resolved "https://registry.yarnpkg.com/catbox/-/catbox-10.0.6.tgz#d8d8dc3c36c965560539f94245904b229a8af428"
+ integrity sha512-gQWCnF/jbHcfwGbQ4FQxyRiAwLRipqWTTXjpq7rTqqdcsnZosFa0L3LsCZcPTF33QIeMMkS7QmFBHt6QdzGPvg==
+ dependencies:
+ boom "7.x.x"
+ hoek "6.x.x"
+ joi "14.x.x"
+
+chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chance@^1.0.18:
+ version "1.0.18"
+ resolved "https://registry.yarnpkg.com/chance/-/chance-1.0.18.tgz#79788fe6fca4c338bf404321c347eecc80f969ee"
+ integrity sha512-g9YLQVHVZS/3F+zIicfB58vjcxopvYQRp7xHzvyDFDhXH1aRZI/JhwSAO0X5qYiQluoGnaNAU6wByD2KTxJN1A==
+
+chokidar@^2.0.4, chokidar@^2.1.5:
+ version "2.1.6"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.6.tgz#b6cad653a929e244ce8a834244164d241fa954c5"
+ integrity sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==
+ dependencies:
+ anymatch "^2.0.0"
+ async-each "^1.0.1"
+ braces "^2.3.2"
+ glob-parent "^3.1.0"
+ inherits "^2.0.3"
+ is-binary-path "^1.0.0"
+ is-glob "^4.0.0"
+ normalize-path "^3.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.2.1"
+ upath "^1.1.1"
+ optionalDependencies:
+ fsevents "^1.2.7"
+
+chownr@^1.0.1, chownr@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494"
+ integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==
+
+ci-info@^1.5.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497"
+ integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==
+
+class-utils@^0.3.5:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+ integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+ dependencies:
+ arr-union "^3.1.0"
+ define-property "^0.2.5"
+ isobject "^3.0.0"
+ static-extend "^0.1.1"
+
+cli-boxes@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
+ integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM=
+
+co-defer@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/co-defer/-/co-defer-1.0.0.tgz#3e4a787a8eed6b0a21ee287c094f7e8de0d3c818"
+ integrity sha1-Pkp4eo7tawoh7ih8CU9+jeDTyBg=
+
+co@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+ integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
+collection-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+ integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
+ dependencies:
+ map-visit "^1.0.0"
+ object-visit "^1.0.0"
+
+color-convert@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
+combined-stream@^1.0.6, combined-stream@~1.0.6:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+ dependencies:
+ delayed-stream "~1.0.0"
+
+commander@^2.7.1, commander@^2.8.1, commander@~2.20.0:
+ version "2.20.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422"
+ integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==
+
+commondir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+ integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
+
+component-bind@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1"
+ integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=
+
+component-emitter@1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
+ integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=
+
+component-emitter@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
+ integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
+
+component-inherit@0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143"
+ integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+concat-stream@~1.6.2:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+ dependencies:
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+configstore@^3.0.0, configstore@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f"
+ integrity sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==
+ dependencies:
+ dot-prop "^4.1.0"
+ graceful-fs "^4.1.2"
+ make-dir "^1.0.0"
+ unique-string "^1.0.0"
+ write-file-atomic "^2.0.0"
+ xdg-basedir "^3.0.0"
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+ integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
+
+content-type@^1.0.2:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
+ integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
+
+content@4.x.x:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/content/-/content-4.0.6.tgz#76ffd96c5cbccf64fe3923cbb9c48b8bc04b273e"
+ integrity sha512-lR9ND3dXiMdmsE84K6l02rMdgiBVmtYWu1Vr/gfSGHcIcznBj2QxmSdUgDuNFOA+G9yrb1IIWkZ7aKtB6hDGyA==
+ dependencies:
+ boom "7.x.x"
+
+convert-source-map@^1.1.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20"
+ integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==
+ dependencies:
+ safe-buffer "~5.1.1"
+
+cookie@0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
+ integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=
+
+copy-descriptor@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+ integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
+
+copy-to@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/copy-to/-/copy-to-2.0.1.tgz#2680fbb8068a48d08656b6098092bdafc906f4a5"
+ integrity sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=
+
+core-js-compat@^3.1.1:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.1.3.tgz#0cc3ba4c7f62928c2837e1cffbe8dc78b4f1ae14"
+ integrity sha512-EP018pVhgwsKHz3YoN1hTq49aRe+h017Kjz0NQz3nXV0cCRMvH3fLQl+vEPGr4r4J5sk4sU3tUC7U1aqTCeJeA==
+ dependencies:
+ browserslist "^4.6.0"
+ core-js-pure "3.1.3"
+ semver "^6.1.0"
+
+core-js-pure@3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.1.3.tgz#4c90752d5b9471f641514f3728f51c1e0783d0b5"
+ integrity sha512-k3JWTrcQBKqjkjI0bkfXS0lbpWPxYuHWfMMjC1VDmzU4Q58IwSbuXSo99YO/hUHlw/EB4AlfA2PVxOGkrIq6dA==
+
+core-js@^2.5.7:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2"
+ integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==
+
+core-js@^3.0.0:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.1.3.tgz#95700bca5f248f5f78c0ec63e784eca663ec4138"
+ integrity sha512-PWZ+ZfuaKf178BIAg+CRsljwjIMRV8MY00CbZczkR6Zk5LfkSkjGoaab3+bqRQWVITNZxQB7TFYz+CFcyuamvA==
+
+core-util-is@1.0.2, core-util-is@^1.0.2, core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+cos-nodejs-sdk-v5@^2.5.7:
+ version "2.5.9"
+ resolved "https://registry.yarnpkg.com/cos-nodejs-sdk-v5/-/cos-nodejs-sdk-v5-2.5.9.tgz#002433429f7fffc3c3f3e68a838c69b265388640"
+ integrity sha512-DDJwMAk1MMVoGjpZ08B2hl1JryPFxm3nm9gUakYX9E9fdjhSIr9ncHUiZE8g2j1JxsjZrmGZ6Ahlr44ouf034w==
+ dependencies:
+ configstore "^3.1.2"
+ request "^2.81.0"
+ xml2js "^0.4.19"
+
+crc32@0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/crc32/-/crc32-0.2.2.tgz#7ad220d6ffdcd119f9fc127a7772cacea390a4ba"
+ integrity sha1-etIg1v/c0Rn5/BJ6d3LKzqOQpLo=
+
+create-error-class@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6"
+ integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=
+ dependencies:
+ capture-stack-trace "^1.0.0"
+
+cross-env@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.0.tgz#6ecd4c015d5773e614039ee529076669b9d126f2"
+ integrity sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg==
+ dependencies:
+ cross-spawn "^6.0.5"
+ is-windows "^1.0.0"
+
+cross-spawn@^5.0.1:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
+ integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
+ dependencies:
+ lru-cache "^4.0.1"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+cross-spawn@^6.0.5:
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+ integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
+ dependencies:
+ nice-try "^1.0.4"
+ path-key "^2.0.1"
+ semver "^5.5.0"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+cryptiles@4.x.x:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-4.1.3.tgz#2461d3390ea0b82c643a6ba79f0ed491b0934c25"
+ integrity sha512-gT9nyTMSUC1JnziQpPbxKGBbUg8VL7Zn2NB4E1cJYvuXdElHrwxrV9bmltZGDzet45zSDGyYceueke1TjynGzw==
+ dependencies:
+ boom "7.x.x"
+
+crypto-random-string@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
+ integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
+ dependencies:
+ assert-plus "^1.0.0"
+
+data-uri-to-buffer@2:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-2.0.1.tgz#ca8f56fe38b1fd329473e9d1b4a9afcd8ce1c045"
+ integrity sha512-OkVVLrerfAKZlW2ZZ3Ve2y65jgiWqBKsTfUIAFbn8nVbPcCZg6l6gikKlEYv0kXcmzqGm6mFq/Jf2vriuEkv8A==
+ dependencies:
+ "@types/node" "^8.0.7"
+
+dateformat@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062"
+ integrity sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=
+
+debug@3.1.0, debug@=3.1.0, debug@~3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
+ integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
+ dependencies:
+ ms "2.0.0"
+
+debug@4, debug@^4.0.1, debug@^4.1.0, debug@~4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
+ integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
+ dependencies:
+ ms "^2.1.1"
+
+debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+ dependencies:
+ ms "2.0.0"
+
+debug@^3.1.0, debug@^3.2.6:
+ version "3.2.6"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
+ integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
+ dependencies:
+ ms "^2.1.1"
+
+decode-uri-component@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+ integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
+
+deep-extend@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
+ integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
+
+deep-is@~0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+ integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
+
+default-user-agent@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/default-user-agent/-/default-user-agent-1.0.0.tgz#16c46efdcaba3edc45f24f2bd4868b01b7c2adc6"
+ integrity sha1-FsRu/cq6PtxF8k8r1IaLAbfCrcY=
+ dependencies:
+ os-name "~1.0.3"
+
+define-property@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+ integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
+ dependencies:
+ is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+ integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
+ dependencies:
+ is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+ integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+ dependencies:
+ is-descriptor "^1.0.2"
+ isobject "^3.0.1"
+
+degenerator@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-1.0.4.tgz#fcf490a37ece266464d9cc431ab98c5819ced095"
+ integrity sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=
+ dependencies:
+ ast-types "0.x.x"
+ escodegen "1.x.x"
+ esprima "3.x.x"
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+ integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
+
+depd@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
+ integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
+
+destroy@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
+ integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
+
+detect-libc@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
+ integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
+
+digest-header@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/digest-header/-/digest-header-0.0.1.tgz#11ccf6deec5766ac379744d901c12cba49514be6"
+ integrity sha1-Ecz23uxXZqw3l0TZAcEsuklRS+Y=
+ dependencies:
+ utility "0.1.11"
+
+docker-modem@^1.0.8:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/docker-modem/-/docker-modem-1.0.9.tgz#a1f13e50e6afb6cf3431b2d5e7aac589db6aaba8"
+ integrity sha512-lVjqCSCIAUDZPAZIeyM125HXfNvOmYYInciphNrLrylUtKyW66meAjSPXWchKVzoIYZx69TPnAepVSSkeawoIw==
+ dependencies:
+ JSONStream "1.3.2"
+ debug "^3.2.6"
+ readable-stream "~1.0.26-4"
+ split-ca "^1.0.0"
+
+dockerode@^2.5.8:
+ version "2.5.8"
+ resolved "https://registry.yarnpkg.com/dockerode/-/dockerode-2.5.8.tgz#1b661e36e1e4f860e25f56e0deabe9f87f1d0acc"
+ integrity sha512-+7iOUYBeDTScmOmQqpUYQaE7F4vvIt6+gIZNHWhqAQEI887tiPFB9OvXI/HzQYqfUNvukMK+9myLW63oTJPZpw==
+ dependencies:
+ concat-stream "~1.6.2"
+ docker-modem "^1.0.8"
+ tar-fs "~1.16.3"
+
+dot-prop@^4.1.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57"
+ integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==
+ dependencies:
+ is-obj "^1.0.0"
+
+duplexer3@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
+ integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=
+
+ecc-jsbn@~0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
+ integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
+ dependencies:
+ jsbn "~0.1.0"
+ safer-buffer "^2.1.0"
+
+ee-first@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+ integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
+
+electron-to-chromium@^1.3.137:
+ version "1.3.150"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.150.tgz#afb972b53a702b37c76db843c39c967e9f68464b"
+ integrity sha512-5wuYlaXhXbBvavSTij5ZyidICB6sAK/1BwgZZoPCgsniid1oDgzVvDOV/Dw6J25lKV9QZ9ZdQCp8MEfF0/OIKA==
+
+encodeurl@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
+ integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
+
+end-of-stream@^1.0.0, end-of-stream@^1.1.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
+ integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==
+ dependencies:
+ once "^1.4.0"
+
+end-or-error@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/end-or-error/-/end-or-error-1.0.1.tgz#dc7a6210fe78d372fee24a8b4899dbd155414dcb"
+ integrity sha1-3HpiEP5403L+4kqLSJnb0VVBTcs=
+
+engine.io-client@~3.3.1:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.3.2.tgz#04e068798d75beda14375a264bb3d742d7bc33aa"
+ integrity sha512-y0CPINnhMvPuwtqXfsGuWE8BB66+B6wTtCofQDRecMQPYX3MYUZXFNKDhdrSe3EVjgOu4V3rxdeqN/Tr91IgbQ==
+ dependencies:
+ component-emitter "1.2.1"
+ component-inherit "0.0.3"
+ debug "~3.1.0"
+ engine.io-parser "~2.1.1"
+ has-cors "1.1.0"
+ indexof "0.0.1"
+ parseqs "0.0.5"
+ parseuri "0.0.5"
+ ws "~6.1.0"
+ xmlhttprequest-ssl "~1.5.4"
+ yeast "0.1.2"
+
+engine.io-parser@~2.1.0, engine.io-parser@~2.1.1:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.3.tgz#757ab970fbf2dfb32c7b74b033216d5739ef79a6"
+ integrity sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==
+ dependencies:
+ after "0.8.2"
+ arraybuffer.slice "~0.0.7"
+ base64-arraybuffer "0.1.5"
+ blob "0.0.5"
+ has-binary2 "~1.0.2"
+
+engine.io@~3.3.1:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.3.2.tgz#18cbc8b6f36e9461c5c0f81df2b830de16058a59"
+ integrity sha512-AsaA9KG7cWPXWHp5FvHdDWY3AMWeZ8x+2pUVLcn71qE5AtAzgGbxuclOytygskw8XGmiQafTmnI9Bix3uihu2w==
+ dependencies:
+ accepts "~1.3.4"
+ base64id "1.0.0"
+ cookie "0.3.1"
+ debug "~3.1.0"
+ engine.io-parser "~2.1.0"
+ ws "~6.1.0"
+
+es6-promise@^4.0.3:
+ version "4.2.8"
+ resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a"
+ integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==
+
+es6-promisify@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
+ integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=
+ dependencies:
+ es6-promise "^4.0.3"
+
+escape-html@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+ integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
+
+escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+escodegen@1.x.x:
+ version "1.11.1"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.1.tgz#c485ff8d6b4cdb89e27f4a856e91f118401ca510"
+ integrity sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==
+ dependencies:
+ esprima "^3.1.3"
+ estraverse "^4.2.0"
+ esutils "^2.0.2"
+ optionator "^0.8.1"
+ optionalDependencies:
+ source-map "~0.6.1"
+
+esprima@3.x.x, esprima@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
+ integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=
+
+esprima@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+estraverse@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
+ integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=
+
+esutils@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+ integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
+
+execa@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
+ integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=
+ dependencies:
+ cross-spawn "^5.0.1"
+ get-stream "^3.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+expand-brackets@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+ integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
+ dependencies:
+ debug "^2.3.3"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ posix-character-classes "^0.1.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
+ dependencies:
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
+
+extend@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+ integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+
+extglob@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+ integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+ dependencies:
+ array-unique "^0.3.2"
+ define-property "^1.0.0"
+ expand-brackets "^2.1.4"
+ extend-shallow "^2.0.1"
+ fragment-cache "^0.2.1"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+extsprintf@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+ integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
+
+extsprintf@^1.2.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
+ integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
+
+fast-deep-equal@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
+ integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
+
+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"
+ integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
+
+fast-levenshtein@~2.0.4:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+
+file-uri-to-path@1:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
+ integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
+
+fill-range@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+ integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+ to-regex-range "^2.1.0"
+
+find-cache-dir@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
+ integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==
+ dependencies:
+ commondir "^1.0.1"
+ make-dir "^2.0.0"
+ pkg-dir "^3.0.0"
+
+find-up@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+ integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+ dependencies:
+ locate-path "^3.0.0"
+
+follow-redirects@1.5.10:
+ version "1.5.10"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a"
+ integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==
+ dependencies:
+ debug "=3.1.0"
+
+for-in@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+ integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+ integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
+
+form-data@~2.3.2:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
+ integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.6"
+ mime-types "^2.1.12"
+
+format-util@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/format-util/-/format-util-1.0.3.tgz#032dca4a116262a12c43f4c3ec8566416c5b2d95"
+ integrity sha1-Ay3KShFiYqEsQ/TD7IVmQWxbLZU=
+
+formstream@1.1.0, formstream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/formstream/-/formstream-1.1.0.tgz#51f3970f26136eb0ad44304de4cebb50207b4479"
+ integrity sha1-UfOXDyYTbrCtRDBN5M67UCB7RHk=
+ dependencies:
+ destroy "^1.0.4"
+ mime "^1.3.4"
+ pause-stream "~0.0.11"
+
+fragment-cache@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+ integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
+ dependencies:
+ map-cache "^0.2.2"
+
+fs-constants@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
+ integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
+
+fs-minipass@^1.2.5:
+ version "1.2.6"
+ resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07"
+ integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==
+ dependencies:
+ minipass "^2.2.1"
+
+fs-readdir-recursive@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27"
+ integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+fsevents@^1.2.7:
+ version "1.2.9"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f"
+ integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==
+ dependencies:
+ nan "^2.12.1"
+ node-pre-gyp "^0.12.0"
+
+ftp@~0.3.10:
+ version "0.3.10"
+ resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d"
+ integrity sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=
+ dependencies:
+ readable-stream "1.1.x"
+ xregexp "2.0.0"
+
+gauge@~2.7.3:
+ version "2.7.4"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
+ integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wide-align "^1.1.0"
+
+get-ready@^1.0.0, get-ready@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/get-ready/-/get-ready-1.0.0.tgz#f91817f1e9adecfea13a562adfc8de883ab34782"
+ integrity sha1-+RgX8emt7P6hOlYq38jeiDqzR4I=
+
+get-stream@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
+ integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
+
+get-uri@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.3.tgz#fa13352269781d75162c6fc813c9e905323fbab5"
+ integrity sha512-x5j6Ks7FOgLD/GlvjKwgu7wdmMR55iuRHhn8hj/+gA+eSbxQvZ+AEomq+3MgVEZj1vpi738QahGbCCSIDtXtkw==
+ dependencies:
+ data-uri-to-buffer "2"
+ debug "4"
+ extend "~3.0.2"
+ file-uri-to-path "1"
+ ftp "~0.3.10"
+ readable-stream "3"
+
+get-value@^2.0.3, get-value@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+ integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
+
+getpass@^0.1.1:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
+ dependencies:
+ assert-plus "^1.0.0"
+
+glob-parent@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
+ integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
+ dependencies:
+ is-glob "^3.1.0"
+ path-dirname "^1.0.0"
+
+glob@^7.0.0, glob@^7.1.2, glob@^7.1.3:
+ version "7.1.4"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255"
+ integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+global-dirs@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445"
+ integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=
+ dependencies:
+ ini "^1.3.4"
+
+globals@^11.1.0:
+ version "11.12.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+got@^6.7.1:
+ version "6.7.1"
+ resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0"
+ integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=
+ dependencies:
+ create-error-class "^3.0.0"
+ duplexer3 "^0.1.4"
+ get-stream "^3.0.0"
+ is-redirect "^1.0.0"
+ is-retry-allowed "^1.0.0"
+ is-stream "^1.0.0"
+ lowercase-keys "^1.0.0"
+ safe-buffer "^5.0.1"
+ timed-out "^4.0.0"
+ unzip-response "^2.0.1"
+ url-parse-lax "^1.0.0"
+
+graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3:
+ version "4.1.15"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
+ integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
+
+handlebars@^4.0.11:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67"
+ integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==
+ dependencies:
+ neo-async "^2.6.0"
+ optimist "^0.6.1"
+ source-map "^0.6.1"
+ optionalDependencies:
+ uglify-js "^3.1.4"
+
+hapi-swagger@^9.4.2:
+ version "9.4.2"
+ resolved "https://registry.yarnpkg.com/hapi-swagger/-/hapi-swagger-9.4.2.tgz#90e46ef7dc3da7de66ab8a02709722110d4439f3"
+ integrity sha512-IVxcEwszwabkEbUWQ5vbvAwHSs0xngKBVbk4/wKeCH0qNocl/ZUi1KX6wgmRovuD8EWISoQMKYo7cYOAlKV3bw==
+ dependencies:
+ boom "^7.1.1"
+ handlebars "^4.0.11"
+ hoek "^6.1.2"
+ http-status "^1.0.1"
+ joi "^13.1.2"
+ json-schema-ref-parser "^4.1.0"
+ swagger-parser "4.0.2"
+
+hapi@^18.1.0:
+ version "18.1.0"
+ resolved "https://registry.yarnpkg.com/hapi/-/hapi-18.1.0.tgz#98a2a5a8f37a41eb196bdad9727f66b1fbca5fec"
+ integrity sha512-nSU1VLyTAgp7P5gy47QzJIP2JAb+wOFvJIV3gnL0lFj/mD+HuTXhyUsDYXjF/dhADMVXVEz31z6SUHBJhtsvGA==
+ dependencies:
+ accept "3.x.x"
+ ammo "3.x.x"
+ boom "7.x.x"
+ bounce "1.x.x"
+ call "5.x.x"
+ catbox "10.x.x"
+ catbox-memory "4.x.x"
+ heavy "6.x.x"
+ hoek "6.x.x"
+ joi "14.x.x"
+ mimos "4.x.x"
+ podium "3.x.x"
+ shot "4.x.x"
+ somever "2.x.x"
+ statehood "6.x.x"
+ subtext "6.x.x"
+ teamwork "3.x.x"
+ topo "3.x.x"
+
+har-schema@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+ integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
+
+har-validator@~5.1.0:
+ version "5.1.3"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
+ integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
+ dependencies:
+ ajv "^6.5.5"
+ har-schema "^2.0.0"
+
+has-binary2@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d"
+ integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==
+ dependencies:
+ isarray "2.0.1"
+
+has-cors@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39"
+ integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+
+has-unicode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+ integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
+
+has-value@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+ integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
+ dependencies:
+ get-value "^2.0.3"
+ has-values "^0.1.4"
+ isobject "^2.0.0"
+
+has-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+ integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
+ dependencies:
+ get-value "^2.0.6"
+ has-values "^1.0.0"
+ isobject "^3.0.0"
+
+has-values@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+ integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
+
+has-values@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+ integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
+heavy@6.x.x:
+ version "6.1.2"
+ resolved "https://registry.yarnpkg.com/heavy/-/heavy-6.1.2.tgz#e5d56f18170a37b01d4381bc07fece5edc68520b"
+ integrity sha512-cJp884bqhiebNcEHydW0g6V1MUGYOXRPw9c7MFiHQnuGxtbWuSZpsbojwb2kxb3AA1/Rfs8CNiV9MMOF8pFRDg==
+ dependencies:
+ boom "7.x.x"
+ hoek "6.x.x"
+ joi "14.x.x"
+
+hoek@5.x.x:
+ version "5.0.4"
+ resolved "https://registry.yarnpkg.com/hoek/-/hoek-5.0.4.tgz#0f7fa270a1cafeb364a4b2ddfaa33f864e4157da"
+ integrity sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==
+
+hoek@6.x.x, hoek@^6.1.2:
+ version "6.1.3"
+ resolved "https://registry.yarnpkg.com/hoek/-/hoek-6.1.3.tgz#73b7d33952e01fe27a38b0457294b79dd8da242c"
+ integrity sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==
+
+http-errors@1.7.2:
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f"
+ integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.3"
+ setprototypeof "1.1.1"
+ statuses ">= 1.5.0 < 2"
+ toidentifier "1.0.0"
+
+http-proxy-agent@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405"
+ integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==
+ dependencies:
+ agent-base "4"
+ debug "3.1.0"
+
+http-signature@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+ integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
+ dependencies:
+ assert-plus "^1.0.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+http-status@^1.0.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/http-status/-/http-status-1.3.2.tgz#a4fb27db5e32948fecd2fb110b9b3afef4a07bf7"
+ integrity sha512-vR1YTaDyi2BukI0UiH01xy92oiZi4in7r0dmSPnrZg72Vu1SzyOLalwWP5NUk1rNiB2L+XVK2lcSVOqaertX8A==
+
+https-proxy-agent@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0"
+ integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==
+ dependencies:
+ agent-base "^4.1.0"
+ debug "^3.1.0"
+
+humanize-ms@^1.2.0, humanize-ms@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed"
+ integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=
+ dependencies:
+ ms "^2.0.0"
+
+iconv-lite@0.4.24, iconv-lite@^0.4.15, iconv-lite@^0.4.4:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
+ignore-by-default@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
+ integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk=
+
+ignore-walk@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8"
+ integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==
+ dependencies:
+ minimatch "^3.0.4"
+
+import-lazy@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43"
+ integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
+
+indexof@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
+ integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=
+
+inert@^5.1.2:
+ version "5.1.3"
+ resolved "https://registry.yarnpkg.com/inert/-/inert-5.1.3.tgz#6adeb32b055b308d9ede9b9626607c7029ac7c67"
+ integrity sha512-xLtqTOcJe+/RBaXkH0ZFai91SFj1a27ZXjFLLyiezLGhZCkBvMA+YGe6hNVVA678mb4EudKW35q1hATkxfUvMA==
+ dependencies:
+ ammo "3.x.x"
+ boom "7.x.x"
+ bounce "1.x.x"
+ hoek "6.x.x"
+ joi "14.x.x"
+ lru-cache "4.1.x"
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+ini@^1.3.4, ini@~1.3.0:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
+ integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
+
+invariant@^2.2.2:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
+ integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
+ dependencies:
+ loose-envify "^1.0.0"
+
+ip@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
+ integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
+
+iron@5.x.x:
+ version "5.0.6"
+ resolved "https://registry.yarnpkg.com/iron/-/iron-5.0.6.tgz#7121d4a6e3ac2f65e4d02971646fea1995434744"
+ integrity sha512-zYUMOSkEXGBdwlV/AXF9zJC0aLuTJUKHkGeYS5I2g225M5i6SrxQyGJGhPgOR8BK1omL6N5i6TcwfsXbP8/Exw==
+ dependencies:
+ b64 "4.x.x"
+ boom "7.x.x"
+ cryptiles "4.x.x"
+ hoek "6.x.x"
+
+is-accessor-descriptor@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+ integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-binary-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
+ dependencies:
+ binary-extensions "^1.0.0"
+
+is-buffer@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+ integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
+is-buffer@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725"
+ integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==
+
+is-ci@^1.0.10:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c"
+ integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==
+ dependencies:
+ ci-info "^1.5.0"
+
+is-class-hotfix@~0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/is-class-hotfix/-/is-class-hotfix-0.0.6.tgz#a527d31fb23279281dde5f385c77b5de70a72435"
+ integrity sha512-0n+pzCC6ICtVr/WXnN2f03TK/3BfXY7me4cjCAqT8TYXEl0+JBRoqBo94JJHXcyDSLUeWbNX8Fvy5g5RJdAstQ==
+
+is-data-descriptor@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-descriptor@^0.1.0:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+ integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+ dependencies:
+ is-accessor-descriptor "^0.1.6"
+ is-data-descriptor "^0.1.4"
+ kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
+ dependencies:
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+ dependencies:
+ is-plain-object "^2.0.4"
+
+is-extglob@^2.1.0, is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+ integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+
+is-glob@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
+ integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
+ dependencies:
+ is-extglob "^2.1.0"
+
+is-glob@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
+ integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-installed-globally@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80"
+ integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=
+ dependencies:
+ global-dirs "^0.1.0"
+ is-path-inside "^1.0.0"
+
+is-npm@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4"
+ integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ=
+
+is-number@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-obj@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+ integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
+
+is-path-inside@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
+ integrity sha1-jvW33lBDej/cprToZe96pVy0gDY=
+ dependencies:
+ path-is-inside "^1.0.1"
+
+is-plain-obj@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+ integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
+
+is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+ dependencies:
+ isobject "^3.0.1"
+
+is-promise@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
+ integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=
+
+is-redirect@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"
+ integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=
+
+is-retry-allowed@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34"
+ integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=
+
+is-stream@^1.0.0, is-stream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+ integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
+
+is-type-of@^1.0.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/is-type-of/-/is-type-of-1.2.1.tgz#e263ec3857aceb4f28c47130ec78db09a920f8c5"
+ integrity sha512-uK0kyX9LZYhSDS7H2sVJQJop1UnWPWmo5RvR3q2kFH6AUHYs7sOrVg0b4nyBHw29kRRNFofYN/JbHZDlHiItTA==
+ dependencies:
+ core-util-is "^1.0.2"
+ is-class-hotfix "~0.0.6"
+ isstream "~0.1.2"
+
+is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+
+is-windows@^1.0.0, is-windows@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+ integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+
+isarray@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+ integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
+
+isarray@1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isarray@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e"
+ integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=
+
+isemail@3.x.x:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/isemail/-/isemail-3.2.0.tgz#59310a021931a9fb06bbb51e155ce0b3f236832c"
+ integrity sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==
+ dependencies:
+ punycode "2.x.x"
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+ dependencies:
+ isarray "1.0.0"
+
+isobject@^3.0.0, isobject@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+ integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
+
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+ integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
+
+items@2.x.x:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/items/-/items-2.1.2.tgz#0849354595805d586dac98e7e6e85556ea838558"
+ integrity sha512-kezcEqgB97BGeZZYtX/MA8AG410ptURstvnz5RAgyFZ8wQFPMxHY8GpTq+/ZHKT3frSlIthUq7EvLt9xn3TvXg==
+
+joi@14.x.x:
+ version "14.3.1"
+ resolved "https://registry.yarnpkg.com/joi/-/joi-14.3.1.tgz#164a262ec0b855466e0c35eea2a885ae8b6c703c"
+ integrity sha512-LQDdM+pkOrpAn4Lp+neNIFV3axv1Vna3j38bisbQhETPMANYRbFJFUyOZcOClYvM/hppMhGWuKSFEK9vjrB+bQ==
+ dependencies:
+ hoek "6.x.x"
+ isemail "3.x.x"
+ topo "3.x.x"
+
+joi@^13.1.2, joi@^13.7.0:
+ version "13.7.0"
+ resolved "https://registry.yarnpkg.com/joi/-/joi-13.7.0.tgz#cfd85ebfe67e8a1900432400b4d03bbd93fb879f"
+ integrity sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q==
+ dependencies:
+ hoek "5.x.x"
+ isemail "3.x.x"
+ topo "3.x.x"
+
+js-levenshtein@^1.1.3:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d"
+ integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==
+
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-yaml@^3.10.0:
+ version "3.13.1"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
+ integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+jsbn@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+ integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
+
+jsesc@^2.5.1:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+ integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+jsesc@~0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+ integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
+
+json-schema-ref-parser@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/json-schema-ref-parser/-/json-schema-ref-parser-4.1.1.tgz#f7900efc15f693432d4ac6519dc1ee09c01aa40b"
+ integrity sha512-lByoCHZ6H2zgb6NtsXIqtzQ+6Ji7iVqnrhWxsXLhF+gXmgu6E8+ErpDxCMR439MUG1nfMjWI2HAoM8l0XgSNhw==
+ dependencies:
+ call-me-maybe "^1.0.1"
+ debug "^3.1.0"
+ js-yaml "^3.10.0"
+ ono "^4.0.3"
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+ integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
+
+json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+
+json5@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850"
+ integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==
+ dependencies:
+ minimist "^1.2.0"
+
+jsonparse@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
+ integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=
+
+jsprim@^1.2.2:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
+ integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
+ dependencies:
+ assert-plus "1.0.0"
+ extsprintf "1.3.0"
+ json-schema "0.2.3"
+ verror "1.10.0"
+
+jssha@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/jssha/-/jssha-2.3.1.tgz#147b2125369035ca4b2f7d210dc539f009b3de9a"
+ integrity sha1-FHshJTaQNcpLL30hDcU58Amz3po=
+
+jstoxml@^0.2.3:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/jstoxml/-/jstoxml-0.2.4.tgz#ff3fb67856883a032953c7ce8ce7486210f48447"
+ integrity sha1-/z+2eFaIOgMpU8fOjOdIYhD0hEc=
+
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+ integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+ integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+ integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
+ integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==
+
+ko-sleep@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/ko-sleep/-/ko-sleep-1.0.3.tgz#28a2a0a1485e8b7f415ff488dee17d24788ab082"
+ integrity sha1-KKKgoUhei39BX/SI3uF9JHiKsII=
+ dependencies:
+ ms "^2.0.0"
+
+latest-version@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15"
+ integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=
+ dependencies:
+ package-json "^4.0.0"
+
+levn@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
+ dependencies:
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+
+locate-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+ integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
+ dependencies:
+ p-locate "^3.0.0"
+ path-exists "^3.0.0"
+
+lodash.get@^4.0.0:
+ version "4.4.2"
+ resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
+ integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=
+
+lodash.isequal@^4.0.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
+ integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA=
+
+lodash@4, lodash@^4.17.11:
+ version "4.17.11"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
+ integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
+
+loose-envify@^1.0.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+ dependencies:
+ js-tokens "^3.0.0 || ^4.0.0"
+
+lowdb@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/lowdb/-/lowdb-1.0.0.tgz#5243be6b22786ccce30e50c9a33eac36b20c8064"
+ integrity sha512-2+x8esE/Wb9SQ1F9IHaYWfsC9FIecLOPrK4g17FGEayjUWH172H6nwicRovGvSE2CPZouc2MCIqCI7h9d+GftQ==
+ dependencies:
+ graceful-fs "^4.1.3"
+ is-promise "^2.1.0"
+ lodash "4"
+ pify "^3.0.0"
+ steno "^0.4.1"
+
+lowercase-keys@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
+ integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==
+
+lru-cache@4.1.x, lru-cache@^4.0.1, lru-cache@^4.1.2:
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
+ integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
+ dependencies:
+ pseudomap "^1.0.2"
+ yallist "^2.1.2"
+
+make-dir@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
+ integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==
+ dependencies:
+ pify "^3.0.0"
+
+make-dir@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
+ integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
+ dependencies:
+ pify "^4.0.1"
+ semver "^5.6.0"
+
+map-cache@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+ integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
+
+map-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+ integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
+ dependencies:
+ object-visit "^1.0.0"
+
+merge-descriptors@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+ integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
+
+micromatch@^3.1.10, micromatch@^3.1.4:
+ version "3.1.10"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+ integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ braces "^2.3.1"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ extglob "^2.0.4"
+ fragment-cache "^0.2.1"
+ kind-of "^6.0.2"
+ nanomatch "^1.2.9"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.2"
+
+mime-db@1.40.0, mime-db@1.x.x:
+ version "1.40.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32"
+ integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==
+
+mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24:
+ version "2.1.24"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81"
+ integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==
+ dependencies:
+ mime-db "1.40.0"
+
+mime@2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-2.3.1.tgz#b1621c54d63b97c47d3cfe7f7215f7d64517c369"
+ integrity sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==
+
+mime@^1.3.4:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+ integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
+
+mimos@4.x.x:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/mimos/-/mimos-4.0.2.tgz#f2762d7c60118ce51c2231afa090bc335d21d0f8"
+ integrity sha512-5XBsDqBqzSN88XPPH/TFpOalWOjHJM5Z2d3AMx/30iq+qXvYKd/8MPhqBwZDOLtoaIWInR3nLzMQcxfGK9djXA==
+ dependencies:
+ hoek "6.x.x"
+ mime-db "1.x.x"
+
+minimatch@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+ integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
+
+minimist@^1.1.0, minimist@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+ integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
+
+minimist@~0.0.1:
+ version "0.0.10"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
+ integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=
+
+minipass@^2.2.1, minipass@^2.3.5:
+ version "2.3.5"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848"
+ integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==
+ dependencies:
+ safe-buffer "^5.1.2"
+ yallist "^3.0.0"
+
+minizlib@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614"
+ integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==
+ dependencies:
+ minipass "^2.2.1"
+
+mixin-deep@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe"
+ integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==
+ dependencies:
+ for-in "^1.0.2"
+ is-extendable "^1.0.1"
+
+mkdirp@^0.5.0, mkdirp@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
+ dependencies:
+ minimist "0.0.8"
+
+moment-timezone@^0.5.23:
+ version "0.5.25"
+ resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.25.tgz#a11bfa2f74e088327f2cd4c08b3e7bdf55957810"
+ integrity sha512-DgEaTyN/z0HFaVcVbSyVCUU6HeFdnNC3vE4c9cgu2dgMTvjBUBdBzWfasTBmAW45u5OIMeCJtU8yNjM22DHucw==
+ dependencies:
+ moment ">= 2.9.0"
+
+"moment@>= 2.9.0":
+ version "2.24.0"
+ resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b"
+ integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+ms@^2.0.0, ms@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+mz-modules@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/mz-modules/-/mz-modules-2.1.0.tgz#7f529877afd0d42f409a7463b96986d61cfbcf96"
+ integrity sha512-sjk8lcRW3vrVYnZ+W+67L/2rL+jbO5K/N6PFGIcLWTiYytNr22Ah9FDXFs+AQntTM1boZcoHi5qS+CV1seuPog==
+ dependencies:
+ glob "^7.1.2"
+ ko-sleep "^1.0.3"
+ mkdirp "^0.5.1"
+ pump "^3.0.0"
+ rimraf "^2.6.1"
+
+mz@^2.7.0:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
+ integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
+ dependencies:
+ any-promise "^1.0.0"
+ object-assign "^4.0.1"
+ thenify-all "^1.0.0"
+
+nan@^2.12.1:
+ version "2.14.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c"
+ integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==
+
+nanomatch@^1.2.9:
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+ integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ fragment-cache "^0.2.1"
+ is-windows "^1.0.2"
+ kind-of "^6.0.2"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+needle@^2.2.1:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c"
+ integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==
+ dependencies:
+ debug "^3.2.6"
+ iconv-lite "^0.4.4"
+ sax "^1.2.4"
+
+negotiator@0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
+ integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
+
+neo-async@^2.6.0:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c"
+ integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==
+
+netmask@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35"
+ integrity sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=
+
+nice-try@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
+ integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+
+nigel@3.x.x:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/nigel/-/nigel-3.0.4.tgz#edcd82f2e9387fe34ba21e3127ae4891547c7945"
+ integrity sha512-3SZCCS/duVDGxFpTROHEieC+itDo4UqL9JNUyQJv3rljudQbK6aqus5B4470OxhESPJLN93Qqxg16rH7DUjbfQ==
+ dependencies:
+ hoek "6.x.x"
+ vise "3.x.x"
+
+node-modules-regexp@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40"
+ integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=
+
+node-pre-gyp@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149"
+ integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==
+ dependencies:
+ detect-libc "^1.0.2"
+ mkdirp "^0.5.1"
+ needle "^2.2.1"
+ nopt "^4.0.1"
+ npm-packlist "^1.1.6"
+ npmlog "^4.0.2"
+ rc "^1.2.7"
+ rimraf "^2.6.1"
+ semver "^5.3.0"
+ tar "^4"
+
+node-releases@^1.1.21:
+ version "1.1.23"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.23.tgz#de7409f72de044a2fa59c097f436ba89c39997f0"
+ integrity sha512-uq1iL79YjfYC0WXoHbC/z28q/9pOl8kSHaXdWmAAc8No+bDwqkZbzIJz55g/MUsPgSGm9LZ7QSUbzTcH5tz47w==
+ dependencies:
+ semver "^5.3.0"
+
+nodemon@^1.18.10:
+ version "1.19.1"
+ resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.19.1.tgz#576f0aad0f863aabf8c48517f6192ff987cd5071"
+ integrity sha512-/DXLzd/GhiaDXXbGId5BzxP1GlsqtMGM9zTmkWrgXtSqjKmGSbLicM/oAy4FR0YWm14jCHRwnR31AHS2dYFHrg==
+ dependencies:
+ chokidar "^2.1.5"
+ debug "^3.1.0"
+ ignore-by-default "^1.0.1"
+ minimatch "^3.0.4"
+ pstree.remy "^1.1.6"
+ semver "^5.5.0"
+ supports-color "^5.2.0"
+ touch "^3.1.0"
+ undefsafe "^2.0.2"
+ update-notifier "^2.5.0"
+
+nopt@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
+ integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=
+ dependencies:
+ abbrev "1"
+ osenv "^0.1.4"
+
+nopt@~1.0.10:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee"
+ integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=
+ dependencies:
+ abbrev "1"
+
+normalize-path@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+ integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
+ dependencies:
+ remove-trailing-separator "^1.0.1"
+
+normalize-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+npm-bundled@^1.0.1:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd"
+ integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==
+
+npm-packlist@^1.1.6:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc"
+ integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==
+ dependencies:
+ ignore-walk "^3.0.1"
+ npm-bundled "^1.0.1"
+
+npm-run-path@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
+ dependencies:
+ path-key "^2.0.0"
+
+npmlog@^4.0.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
+ integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.3"
+ set-blocking "~2.0.0"
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+ integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+
+oauth-sign@~0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
+ integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
+
+object-assign@^4.0.1, object-assign@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+
+object-component@0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291"
+ integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=
+
+object-copy@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+ integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
+ dependencies:
+ copy-descriptor "^0.1.0"
+ define-property "^0.2.5"
+ kind-of "^3.0.3"
+
+object-visit@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+ integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
+ dependencies:
+ isobject "^3.0.0"
+
+object.pick@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+ integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
+ dependencies:
+ isobject "^3.0.1"
+
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+ dependencies:
+ wrappy "1"
+
+ono@^4.0.3:
+ version "4.0.11"
+ resolved "https://registry.yarnpkg.com/ono/-/ono-4.0.11.tgz#c7f4209b3e396e8a44ef43b9cedc7f5d791d221d"
+ integrity sha512-jQ31cORBFE6td25deYeD80wxKBMj+zBmHTrVxnc6CKhx8gho6ipmWM5zj/oeoqioZ99yqBls9Z/9Nss7J26G2g==
+ dependencies:
+ format-util "^1.0.3"
+
+optimist@^0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
+ integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY=
+ dependencies:
+ minimist "~0.0.1"
+ wordwrap "~0.0.2"
+
+optionator@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
+ integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=
+ dependencies:
+ deep-is "~0.1.3"
+ fast-levenshtein "~2.0.4"
+ levn "~0.3.0"
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+ wordwrap "~1.0.0"
+
+os-homedir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+ integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
+
+os-name@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/os-name/-/os-name-1.0.3.tgz#1b379f64835af7c5a7f498b357cb95215c159edf"
+ integrity sha1-GzefZINa98Wn9JizV8uVIVwVnt8=
+ dependencies:
+ osx-release "^1.0.0"
+ win-release "^1.0.0"
+
+os-tmpdir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+
+osenv@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
+ integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.0"
+
+osx-release@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/osx-release/-/osx-release-1.1.0.tgz#f217911a28136949af1bf9308b241e2737d3cd6c"
+ integrity sha1-8heRGigTaUmvG/kwiyQeJzfTzWw=
+ dependencies:
+ minimist "^1.1.0"
+
+output-file-sync@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-2.0.1.tgz#f53118282f5f553c2799541792b723a4c71430c0"
+ integrity sha512-mDho4qm7WgIXIGf4eYU1RHN2UU5tPfVYVSRwDJw0uTmj35DQUt/eNp19N7v6T3SrR0ESTEf2up2CGO73qI35zQ==
+ dependencies:
+ graceful-fs "^4.1.11"
+ is-plain-obj "^1.1.0"
+ mkdirp "^0.5.1"
+
+p-finally@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+ integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
+
+p-limit@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2"
+ integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==
+ dependencies:
+ p-try "^2.0.0"
+
+p-locate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+ integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
+ dependencies:
+ p-limit "^2.0.0"
+
+p-try@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+ integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+pac-proxy-agent@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-3.0.0.tgz#11d578b72a164ad74bf9d5bac9ff462a38282432"
+ integrity sha512-AOUX9jES/EkQX2zRz0AW7lSx9jD//hQS8wFXBvcnd/J2Py9KaMJMqV/LPqJssj1tgGufotb2mmopGPR15ODv1Q==
+ dependencies:
+ agent-base "^4.2.0"
+ debug "^3.1.0"
+ get-uri "^2.0.0"
+ http-proxy-agent "^2.1.0"
+ https-proxy-agent "^2.2.1"
+ pac-resolver "^3.0.0"
+ raw-body "^2.2.0"
+ socks-proxy-agent "^4.0.1"
+
+pac-resolver@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-3.0.0.tgz#6aea30787db0a891704deb7800a722a7615a6f26"
+ integrity sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA==
+ dependencies:
+ co "^4.6.0"
+ degenerator "^1.0.4"
+ ip "^1.1.5"
+ netmask "^1.0.6"
+ thunkify "^2.1.2"
+
+package-json@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed"
+ integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=
+ dependencies:
+ got "^6.7.1"
+ registry-auth-token "^3.0.1"
+ registry-url "^3.0.3"
+ semver "^5.1.0"
+
+parseqs@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d"
+ integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=
+ dependencies:
+ better-assert "~1.0.0"
+
+parseuri@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a"
+ integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=
+ dependencies:
+ better-assert "~1.0.0"
+
+pascalcase@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+ integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
+
+path-dirname@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
+ integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+ integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-is-inside@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+ integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
+
+path-key@^2.0.0, path-key@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+ integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
+
+path-parse@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
+ integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
+
+pause-stream@~0.0.11:
+ version "0.0.11"
+ resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445"
+ integrity sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=
+ dependencies:
+ through "~2.3"
+
+performance-now@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+ integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
+
+pez@4.x.x:
+ version "4.0.5"
+ resolved "https://registry.yarnpkg.com/pez/-/pez-4.0.5.tgz#a975c49deff330d298d82851b39f81c2710556df"
+ integrity sha512-HvL8uiFIlkXbx/qw4B8jKDCWzo7Pnnd65Uvanf9OOCtb20MRcb9gtTVBf9NCnhETif1/nzbDHIjAWC/sUp7LIQ==
+ dependencies:
+ b64 "4.x.x"
+ boom "7.x.x"
+ content "4.x.x"
+ hoek "6.x.x"
+ nigel "3.x.x"
+
+pify@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+ integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
+
+pify@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
+ integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
+
+pirates@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87"
+ integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==
+ dependencies:
+ node-modules-regexp "^1.0.0"
+
+pkg-dir@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
+ integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==
+ dependencies:
+ find-up "^3.0.0"
+
+platform@^1.3.1:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.5.tgz#fb6958c696e07e2918d2eeda0f0bc9448d733444"
+ integrity sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q==
+
+podium@3.x.x:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/podium/-/podium-3.2.0.tgz#2a7c579ddd5408f412d014c9ffac080c41d83477"
+ integrity sha512-rbwvxwVkI6gRRlxZQ1zUeafrpGxZ7QPHIheinehAvGATvGIPfWRkaTeWedc5P4YjXJXEV8ZbBxPtglNylF9hjw==
+ dependencies:
+ hoek "6.x.x"
+ joi "14.x.x"
+
+posix-character-classes@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+ integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
+
+prelude-ls@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+ integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
+
+prepend-http@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
+ integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
+
+private@^0.1.6:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
+ integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==
+
+process-nextick-args@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
+ integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==
+
+proxy-agent@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-3.1.0.tgz#3cf86ee911c94874de4359f37efd9de25157c113"
+ integrity sha512-IkbZL4ClW3wwBL/ABFD2zJ8iP84CY0uKMvBPk/OceQe/cEjrxzN1pMHsLwhbzUoRhG9QbSxYC+Z7LBkTiBNvrA==
+ dependencies:
+ agent-base "^4.2.0"
+ debug "^3.1.0"
+ http-proxy-agent "^2.1.0"
+ https-proxy-agent "^2.2.1"
+ lru-cache "^4.1.2"
+ pac-proxy-agent "^3.0.0"
+ proxy-from-env "^1.0.0"
+ socks-proxy-agent "^4.0.1"
+
+proxy-from-env@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee"
+ integrity sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=
+
+pseudomap@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+ integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
+
+psl@^1.1.24:
+ version "1.1.32"
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.32.tgz#3f132717cf2f9c169724b2b6caf373cf694198db"
+ integrity sha512-MHACAkHpihU/REGGPLj4sEfc/XKW2bheigvHO1dUqjaKigMp1C8+WLQYRGgeKFMsw5PMfegZcaN8IDXK/cD0+g==
+
+pstree.remy@^1.1.6:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.7.tgz#c76963a28047ed61542dc361aa26ee55a7fa15f3"
+ integrity sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A==
+
+pump@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954"
+ integrity sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+punycode@2.x.x, punycode@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+ integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
+punycode@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
+
+qiniu@^7.2.1:
+ version "7.2.2"
+ resolved "https://registry.yarnpkg.com/qiniu/-/qiniu-7.2.2.tgz#94425193f6b1dbd093fd78583070a64dde6cc5e7"
+ integrity sha512-LHEKoJqjQBiXqvzM9BWuIc+8sV/nOKNR5nJmonsyv9S6XMcCvMCU5+xjLwyt0U2wc3IkqcDYvjAFVrL+sfghjA==
+ dependencies:
+ agentkeepalive "3.3.0"
+ crc32 "0.2.2"
+ encodeurl "^1.0.1"
+ formstream "1.1.0"
+ mime "2.3.1"
+ tunnel-agent "0.6.0"
+ urllib "2.22.0"
+
+qs@^6.4.0:
+ version "6.7.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
+ integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
+
+qs@~6.5.2:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
+ integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
+
+raw-body@^2.2.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332"
+ integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==
+ dependencies:
+ bytes "3.1.0"
+ http-errors "1.7.2"
+ iconv-lite "0.4.24"
+ unpipe "1.0.0"
+
+rc@^1.0.1, rc@^1.1.6, rc@^1.2.7:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+ integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
+ dependencies:
+ deep-extend "^0.6.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
+readable-stream@1.1.x:
+ version "1.1.14"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
+ integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk=
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "0.0.1"
+ string_decoder "~0.10.x"
+
+readable-stream@3:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc"
+ integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
+readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@^2.3.6:
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
+ integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+readable-stream@~1.0.26-4:
+ version "1.0.34"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
+ integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "0.0.1"
+ string_decoder "~0.10.x"
+
+readdirp@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
+ integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
+ dependencies:
+ graceful-fs "^4.1.11"
+ micromatch "^3.1.10"
+ readable-stream "^2.0.2"
+
+regenerate-unicode-properties@^8.0.2:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e"
+ integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==
+ dependencies:
+ regenerate "^1.4.0"
+
+regenerate@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
+ integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==
+
+regenerator-transform@^0.14.0:
+ version "0.14.0"
+ resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.0.tgz#2ca9aaf7a2c239dd32e4761218425b8c7a86ecaf"
+ integrity sha512-rtOelq4Cawlbmq9xuMR5gdFmv7ku/sFoB7sRiywx7aq53bc52b4j6zvH7Te1Vt/X2YveDKnCGUbioieU7FEL3w==
+ dependencies:
+ private "^0.1.6"
+
+regex-not@^1.0.0, regex-not@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+ integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+ dependencies:
+ extend-shallow "^3.0.2"
+ safe-regex "^1.1.0"
+
+regexp-tree@^0.1.6:
+ version "0.1.10"
+ resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.10.tgz#d837816a039c7af8a8d64d7a7c3cf6a1d93450bc"
+ integrity sha512-K1qVSbcedffwuIslMwpe6vGlj+ZXRnGkvjAtFHfDZZZuEdA/h0dxljAPu9vhUo6Rrx2U2AwJ+nSQ6hK+lrP5MQ==
+
+regexpu-core@^4.5.4:
+ version "4.5.4"
+ resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae"
+ integrity sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==
+ dependencies:
+ regenerate "^1.4.0"
+ regenerate-unicode-properties "^8.0.2"
+ regjsgen "^0.5.0"
+ regjsparser "^0.6.0"
+ unicode-match-property-ecmascript "^1.0.4"
+ unicode-match-property-value-ecmascript "^1.1.0"
+
+registry-auth-token@^3.0.1:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e"
+ integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==
+ dependencies:
+ rc "^1.1.6"
+ safe-buffer "^5.0.1"
+
+registry-url@^3.0.3:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942"
+ integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI=
+ dependencies:
+ rc "^1.0.1"
+
+regjsgen@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd"
+ integrity sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==
+
+regjsparser@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c"
+ integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==
+ dependencies:
+ jsesc "~0.5.0"
+
+remove-trailing-separator@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
+ integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
+
+repeat-element@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
+ integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
+
+repeat-string@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+
+request@^2.81.0:
+ version "2.88.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
+ integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==
+ dependencies:
+ aws-sign2 "~0.7.0"
+ aws4 "^1.8.0"
+ caseless "~0.12.0"
+ combined-stream "~1.0.6"
+ extend "~3.0.2"
+ forever-agent "~0.6.1"
+ form-data "~2.3.2"
+ har-validator "~5.1.0"
+ http-signature "~1.2.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.19"
+ oauth-sign "~0.9.0"
+ performance-now "^2.1.0"
+ qs "~6.5.2"
+ safe-buffer "^5.1.2"
+ tough-cookie "~2.4.3"
+ tunnel-agent "^0.6.0"
+ uuid "^3.3.2"
+
+resolve-url@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+ integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
+
+resolve@^1.3.2:
+ version "1.11.1"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e"
+ integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==
+ dependencies:
+ path-parse "^1.0.6"
+
+ret@~0.1.10:
+ version "0.1.15"
+ resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+ integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+
+rimraf@^2.6.1:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
+ integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
+ dependencies:
+ glob "^7.1.3"
+
+safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+ integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
+ dependencies:
+ ret "~0.1.10"
+
+"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sax@>=0.6.0, sax@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+ integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
+sdk-base@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/sdk-base/-/sdk-base-2.0.1.tgz#ba40289e8bdf272ed11dd9ea97eaf98e036d24c6"
+ integrity sha1-ukAonovfJy7RHdnql+r5jgNtJMY=
+ dependencies:
+ get-ready "~1.0.0"
+
+semver-diff@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36"
+ integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=
+ dependencies:
+ semver "^5.0.3"
+
+semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0:
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b"
+ integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==
+
+semver@^6.1.0:
+ version "6.1.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.1.1.tgz#53f53da9b30b2103cd4f15eab3a18ecbcb210c9b"
+ integrity sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==
+
+set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+
+set-value@^0.4.3:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"
+ integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE=
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.1"
+ to-object-path "^0.3.0"
+
+set-value@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"
+ integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.3"
+ split-string "^3.0.1"
+
+setprototypeof@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
+ integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
+
+shebang-command@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
+ dependencies:
+ shebang-regex "^1.0.0"
+
+shebang-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+ integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
+
+shot@4.x.x:
+ version "4.0.7"
+ resolved "https://registry.yarnpkg.com/shot/-/shot-4.0.7.tgz#b05d2858634fedc18ece99e8f638fab7c9f9d4c4"
+ integrity sha512-RKaKAGKxJ11EjJl0cf2fYVSsd4KB5Cncb9J0v7w+0iIaXpxNqFWTYNDNhBX7f0XSyDrjOH9a4OWZ9Gp/ZML+ew==
+ dependencies:
+ hoek "6.x.x"
+ joi "14.x.x"
+
+signal-exit@^3.0.0, signal-exit@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+ integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
+
+simple-git@^1.110.0:
+ version "1.113.0"
+ resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-1.113.0.tgz#668989728a1e9cf4ec6c72b69ea2eecc93489bea"
+ integrity sha512-i9WVsrK2u0G/cASI9nh7voxOk9mhanWY9eGtWBDSYql6m49Yk5/Fan6uZsDr/xmzv8n+eQ8ahKCoEr8cvU3h+g==
+ dependencies:
+ debug "^4.0.1"
+
+slash@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
+ integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
+
+smart-buffer@4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.0.2.tgz#5207858c3815cc69110703c6b94e46c15634395d"
+ integrity sha512-JDhEpTKzXusOqXZ0BUIdH+CjFdO/CR3tLlf5CN34IypI+xMmXW1uB16OOY8z3cICbJlDAVJzNbwBhNO0wt9OAw==
+
+snapdragon-node@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+ integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+ dependencies:
+ define-property "^1.0.0"
+ isobject "^3.0.0"
+ snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+ integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+ dependencies:
+ kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+ integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+ dependencies:
+ base "^0.11.1"
+ debug "^2.2.0"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ map-cache "^0.2.2"
+ source-map "^0.5.6"
+ source-map-resolve "^0.5.0"
+ use "^3.1.0"
+
+socket.io-adapter@~1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b"
+ integrity sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=
+
+socket.io-client@2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.2.0.tgz#84e73ee3c43d5020ccc1a258faeeb9aec2723af7"
+ integrity sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA==
+ dependencies:
+ backo2 "1.0.2"
+ base64-arraybuffer "0.1.5"
+ component-bind "1.0.0"
+ component-emitter "1.2.1"
+ debug "~3.1.0"
+ engine.io-client "~3.3.1"
+ has-binary2 "~1.0.2"
+ has-cors "1.1.0"
+ indexof "0.0.1"
+ object-component "0.0.3"
+ parseqs "0.0.5"
+ parseuri "0.0.5"
+ socket.io-parser "~3.3.0"
+ to-array "0.1.4"
+
+socket.io-parser@~3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.3.0.tgz#2b52a96a509fdf31440ba40fed6094c7d4f1262f"
+ integrity sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==
+ dependencies:
+ component-emitter "1.2.1"
+ debug "~3.1.0"
+ isarray "2.0.1"
+
+socket.io@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.2.0.tgz#f0f633161ef6712c972b307598ecd08c9b1b4d5b"
+ integrity sha512-wxXrIuZ8AILcn+f1B4ez4hJTPG24iNgxBBDaJfT6MsyOhVYiTXWexGoPkd87ktJG8kQEcL/NBvRi64+9k4Kc0w==
+ dependencies:
+ debug "~4.1.0"
+ engine.io "~3.3.1"
+ has-binary2 "~1.0.2"
+ socket.io-adapter "~1.1.0"
+ socket.io-client "2.2.0"
+ socket.io-parser "~3.3.0"
+
+socks-proxy-agent@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386"
+ integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==
+ dependencies:
+ agent-base "~4.2.1"
+ socks "~2.3.2"
+
+socks@~2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.2.tgz#ade388e9e6d87fdb11649c15746c578922a5883e"
+ integrity sha512-pCpjxQgOByDHLlNqlnh/mNSAxIUkyBBuwwhTcV+enZGbDaClPvHdvm6uvOwZfFJkam7cGhBNbb4JxiP8UZkRvQ==
+ dependencies:
+ ip "^1.1.5"
+ smart-buffer "4.0.2"
+
+somever@2.x.x:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/somever/-/somever-2.0.0.tgz#7bdbed3bee8ece2c7c8a2e7d9a1c022bd98d6c89"
+ integrity sha512-9JaIPP+HxwYGqCDqqK3tRaTqdtQHoK6Qy3IrXhIt2q5x8fs8RcfU7BMWlFTCOgFazK8p88zIv1tHQXvAwtXMyw==
+ dependencies:
+ bounce "1.x.x"
+ hoek "6.x.x"
+
+source-map-resolve@^0.5.0:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259"
+ integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==
+ dependencies:
+ atob "^2.1.1"
+ decode-uri-component "^0.2.0"
+ resolve-url "^0.2.1"
+ source-map-url "^0.4.0"
+ urix "^0.1.0"
+
+source-map-support@^0.5.9:
+ version "0.5.12"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599"
+ integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map-url@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
+ integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
+
+source-map@^0.5.0, source-map@^0.5.6:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+ integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
+
+source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+split-ca@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/split-ca/-/split-ca-1.0.1.tgz#6c83aff3692fa61256e0cd197e05e9de157691a6"
+ integrity sha1-bIOv82kvphJW4M0ZfgXp3hV2kaY=
+
+split-string@^3.0.1, split-string@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+ integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+ dependencies:
+ extend-shallow "^3.0.0"
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+ integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
+
+ssh2-streams@~0.4.4:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/ssh2-streams/-/ssh2-streams-0.4.4.tgz#7f07464c4b19ee93324995ec7164f110c5a13658"
+ integrity sha512-yNfPZgJO/N69TvYkpDHZBkXAXQzTpfzRkOphQu3PeUpZnrjp9VNa8RKDZkZDpjsWItay+I4NMAbZZ7DqHRt0AQ==
+ dependencies:
+ asn1 "~0.2.0"
+ bcrypt-pbkdf "^1.0.2"
+ streamsearch "~0.1.2"
+
+ssh2@^0.8.2:
+ version "0.8.4"
+ resolved "https://registry.yarnpkg.com/ssh2/-/ssh2-0.8.4.tgz#0a657d9371c1fe9f9e349bcff6144febee256aa6"
+ integrity sha512-qztb9t4b34wJSiWVpeTMVVN/5KCuBoyctBc2BcSe/Uq4NRnF0gB16Iu5p72ILhdYATcMNwB5WppzPIEs/3wB8Q==
+ dependencies:
+ ssh2-streams "~0.4.4"
+
+sshpk@^1.7.0:
+ version "1.16.1"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
+ integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ bcrypt-pbkdf "^1.0.0"
+ dashdash "^1.12.0"
+ ecc-jsbn "~0.1.1"
+ getpass "^0.1.1"
+ jsbn "~0.1.0"
+ safer-buffer "^2.0.2"
+ tweetnacl "~0.14.0"
+
+statehood@6.x.x:
+ version "6.0.9"
+ resolved "https://registry.yarnpkg.com/statehood/-/statehood-6.0.9.tgz#b347ae19818aec7fc26645fe1ec6a61928a57a3c"
+ integrity sha512-jbFg1+MYEqfC7ABAoWZoeF4cQUtp3LUvMDUGExL76cMmleBHG7I6xlZFsE8hRi7nEySIvutHmVlLmBe9+2R5LQ==
+ dependencies:
+ boom "7.x.x"
+ bounce "1.x.x"
+ bourne "1.x.x"
+ cryptiles "4.x.x"
+ hoek "6.x.x"
+ iron "5.x.x"
+ joi "14.x.x"
+
+static-extend@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+ integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
+ dependencies:
+ define-property "^0.2.5"
+ object-copy "^0.1.0"
+
+"statuses@>= 1.5.0 < 2", statuses@^1.3.1:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
+ integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
+
+steno@^0.4.1:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/steno/-/steno-0.4.4.tgz#071105bdfc286e6615c0403c27e9d7b5dcb855cb"
+ integrity sha1-BxEFvfwobmYVwEA8J+nXtdy4Vcs=
+ dependencies:
+ graceful-fs "^4.1.3"
+
+stream-http@2.8.2:
+ version "2.8.2"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.2.tgz#4126e8c6b107004465918aa2fc35549e77402c87"
+ integrity sha512-QllfrBhqF1DPcz46WxKTs6Mz1Bpc+8Qm6vbqOpVav5odAXwbyzwnEczoWqtxrsmlO+cJqtPrp/8gWKWjaKLLlA==
+ dependencies:
+ builtin-status-codes "^3.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.3.6"
+ to-arraybuffer "^1.0.0"
+ xtend "^4.0.0"
+
+stream-wormhole@^1.0.4:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/stream-wormhole/-/stream-wormhole-1.1.0.tgz#300aff46ced553cfec642a05251885417693c33d"
+ integrity sha512-gHFfL3px0Kctd6Po0M8TzEvt3De/xu6cnRrjlfYNhwbhLPLwigI2t1nc6jrzNuaYg5C4YF78PPFuQPzRiqn9ew==
+
+streamsearch@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a"
+ integrity sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=
+
+string-width@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+ integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^4.0.0"
+
+string_decoder@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d"
+ integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+ integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+ integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
+ dependencies:
+ ansi-regex "^3.0.0"
+
+strip-eof@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+ integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
+
+strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+ integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
+
+subtext@6.x.x:
+ version "6.0.12"
+ resolved "https://registry.yarnpkg.com/subtext/-/subtext-6.0.12.tgz#ac09be3eac1eca3396933adeadd65fc781f64fc1"
+ integrity sha512-yT1wCDWVgqvL9BIkWzWqgj5spUSYo/Enu09iUV8t2ZvHcr2tKGTGg2kc9tUpVEsdhp1ihsZeTAiDqh0TQciTPQ==
+ dependencies:
+ boom "7.x.x"
+ bourne "1.x.x"
+ content "4.x.x"
+ hoek "6.x.x"
+ pez "4.x.x"
+ wreck "14.x.x"
+
+supports-color@^5.2.0, supports-color@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+swagger-methods@^1.0.4:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/swagger-methods/-/swagger-methods-1.0.8.tgz#8baf37ee861d3c72ff7b2faad6d74c60b336e2ed"
+ integrity sha512-G6baCwuHA+C5jf4FNOrosE4XlmGsdjbOjdBK4yuiDDj/ro9uR4Srj3OR84oQMT8F3qKp00tYNv0YN730oTHPZA==
+
+swagger-parser@4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/swagger-parser/-/swagger-parser-4.0.2.tgz#4ffa0ceb714efaab72747822b767fcad3ce7d9f2"
+ integrity sha512-hKslog8LhsXICJ1sMLsA8b8hQ3oUEX0457aLCFJc4zz6m8drmnCtyjbVqS5HycaKFOKVolJc2wFoe8KDPWfp4g==
+ dependencies:
+ call-me-maybe "^1.0.1"
+ debug "^3.1.0"
+ json-schema-ref-parser "^4.1.0"
+ ono "^4.0.3"
+ swagger-methods "^1.0.4"
+ swagger-schema-official "2.0.0-bab6bed"
+ z-schema "^3.19.0"
+
+swagger-schema-official@2.0.0-bab6bed:
+ version "2.0.0-bab6bed"
+ resolved "https://registry.yarnpkg.com/swagger-schema-official/-/swagger-schema-official-2.0.0-bab6bed.tgz#70070468d6d2977ca5237b2e519ca7d06a2ea3fd"
+ integrity sha1-cAcEaNbSl3ylI3suUZyn0Gouo/0=
+
+tar-fs@~1.16.3:
+ version "1.16.3"
+ resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.3.tgz#966a628841da2c4010406a82167cbd5e0c72d509"
+ integrity sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==
+ dependencies:
+ chownr "^1.0.1"
+ mkdirp "^0.5.1"
+ pump "^1.0.0"
+ tar-stream "^1.1.2"
+
+tar-stream@^1.1.2:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555"
+ integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==
+ dependencies:
+ bl "^1.0.0"
+ buffer-alloc "^1.2.0"
+ end-of-stream "^1.0.0"
+ fs-constants "^1.0.0"
+ readable-stream "^2.3.0"
+ to-buffer "^1.1.1"
+ xtend "^4.0.0"
+
+tar@^4:
+ version "4.4.10"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1"
+ integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==
+ dependencies:
+ chownr "^1.1.1"
+ fs-minipass "^1.2.5"
+ minipass "^2.3.5"
+ minizlib "^1.2.1"
+ mkdirp "^0.5.0"
+ safe-buffer "^5.1.2"
+ yallist "^3.0.3"
+
+teamwork@3.x.x:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/teamwork/-/teamwork-3.2.0.tgz#27916edab815459c1a4686252eb18fb5925f49fa"
+ integrity sha512-xAmJ8PIVjRZMXAHgUuOP8ITsv0SedyWAit2UWiNImXgg/F+BxrsG46ZegElNBM0Dwp+iMfbigg/Ll/M2oDRYww==
+
+term-size@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69"
+ integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=
+ dependencies:
+ execa "^0.7.0"
+
+thenify-all@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
+ integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=
+ dependencies:
+ thenify ">= 3.1.0 < 4"
+
+"thenify@>= 3.1.0 < 4":
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839"
+ integrity sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=
+ dependencies:
+ any-promise "^1.0.0"
+
+"through@>=2.2.7 <3", through@~2.3:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
+
+thunkify@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/thunkify/-/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d"
+ integrity sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=
+
+timed-out@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
+ integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=
+
+to-array@0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890"
+ integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA=
+
+to-arraybuffer@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+ integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
+
+to-buffer@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80"
+ integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==
+
+to-fast-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+ integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
+
+to-object-path@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+ integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
+ dependencies:
+ kind-of "^3.0.2"
+
+to-regex-range@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+ integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
+ dependencies:
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+
+to-regex@^3.0.1, to-regex@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+ integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+ dependencies:
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ regex-not "^1.0.2"
+ safe-regex "^1.1.0"
+
+toidentifier@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
+ integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
+
+topo@3.x.x:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/topo/-/topo-3.0.3.tgz#d5a67fb2e69307ebeeb08402ec2a2a6f5f7ad95c"
+ integrity sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==
+ dependencies:
+ hoek "6.x.x"
+
+touch@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b"
+ integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==
+ dependencies:
+ nopt "~1.0.10"
+
+tough-cookie@~2.4.3:
+ version "2.4.3"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
+ integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==
+ dependencies:
+ psl "^1.1.24"
+ punycode "^1.4.1"
+
+trim-right@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
+ integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=
+
+tunnel-agent@0.6.0, tunnel-agent@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+ integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
+ dependencies:
+ safe-buffer "^5.0.1"
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+ integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
+
+type-check@~0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
+ dependencies:
+ prelude-ls "~1.1.2"
+
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+
+uglify-js@^3.1.4:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5"
+ integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==
+ dependencies:
+ commander "~2.20.0"
+ source-map "~0.6.1"
+
+undefsafe@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.2.tgz#225f6b9e0337663e0d8e7cfd686fc2836ccace76"
+ integrity sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=
+ dependencies:
+ debug "^2.2.0"
+
+unescape@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/unescape/-/unescape-1.0.1.tgz#956e430f61cad8a4d57d82c518f5e6cc5d0dda96"
+ integrity sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ==
+ dependencies:
+ extend-shallow "^2.0.1"
+
+unicode-canonical-property-names-ecmascript@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
+ integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==
+
+unicode-match-property-ecmascript@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c"
+ integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==
+ dependencies:
+ unicode-canonical-property-names-ecmascript "^1.0.4"
+ unicode-property-aliases-ecmascript "^1.0.4"
+
+unicode-match-property-value-ecmascript@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277"
+ integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==
+
+unicode-property-aliases-ecmascript@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57"
+ integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==
+
+union-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"
+ integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=
+ dependencies:
+ arr-union "^3.1.0"
+ get-value "^2.0.6"
+ is-extendable "^0.1.1"
+ set-value "^0.4.3"
+
+unique-string@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a"
+ integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=
+ dependencies:
+ crypto-random-string "^1.0.0"
+
+unpipe@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+ integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
+
+unset-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+ integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
+ dependencies:
+ has-value "^0.3.1"
+ isobject "^3.0.0"
+
+unzip-response@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97"
+ integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=
+
+upath@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068"
+ integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==
+
+update-notifier@^2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6"
+ integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==
+ dependencies:
+ boxen "^1.2.1"
+ chalk "^2.0.1"
+ configstore "^3.0.0"
+ import-lazy "^2.1.0"
+ is-ci "^1.0.10"
+ is-installed-globally "^0.1.0"
+ is-npm "^1.0.0"
+ latest-version "^3.0.0"
+ semver-diff "^2.0.0"
+ xdg-basedir "^3.0.0"
+
+uri-js@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
+ integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
+ dependencies:
+ punycode "^2.1.0"
+
+urix@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+ integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
+
+url-parse-lax@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"
+ integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=
+ dependencies:
+ prepend-http "^1.0.1"
+
+urllib@2.22.0:
+ version "2.22.0"
+ resolved "https://registry.yarnpkg.com/urllib/-/urllib-2.22.0.tgz#2965dc4ae127a6fb695b7db27d3184f17d82cb42"
+ integrity sha1-KWXcSuEnpvtpW32yfTGE8X2Cy0I=
+ dependencies:
+ any-promise "^1.3.0"
+ content-type "^1.0.2"
+ debug "^2.6.0"
+ default-user-agent "^1.0.0"
+ digest-header "^0.0.1"
+ ee-first "~1.1.1"
+ humanize-ms "^1.2.0"
+ iconv-lite "^0.4.15"
+ qs "^6.4.0"
+ statuses "^1.3.1"
+
+urllib@^2.33.1:
+ version "2.34.0"
+ resolved "https://registry.yarnpkg.com/urllib/-/urllib-2.34.0.tgz#91bc630cfde9dd990bfb42ae9b1a82c7f6adfe10"
+ integrity sha512-DzaVGXXJiMTMPyXjaZvkYA1iw5i1lSzotDzqd1nLbcWLcPKrQUyuQ/aazOAditoOKnbA/iSljyHiENkbu9eUSA==
+ dependencies:
+ any-promise "^1.3.0"
+ content-type "^1.0.2"
+ debug "^2.6.9"
+ default-user-agent "^1.0.0"
+ digest-header "^0.0.1"
+ ee-first "~1.1.1"
+ formstream "^1.1.0"
+ humanize-ms "^1.2.0"
+ iconv-lite "^0.4.15"
+ ip "^1.1.5"
+ proxy-agent "^3.1.0"
+ pump "^3.0.0"
+ qs "^6.4.0"
+ statuses "^1.3.1"
+ utility "^1.16.1"
+
+use@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+ integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+
+util-deprecate@^1.0.1, util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+utility@0.1.11:
+ version "0.1.11"
+ resolved "https://registry.yarnpkg.com/utility/-/utility-0.1.11.tgz#fde60cf9b4e4751947a0cf5d104ce29367226715"
+ integrity sha1-/eYM+bTkdRlHoM9dEEzik2ciZxU=
+ dependencies:
+ address ">=0.0.1"
+
+utility@^1.16.1, utility@^1.8.0:
+ version "1.16.1"
+ resolved "https://registry.yarnpkg.com/utility/-/utility-1.16.1.tgz#383f5cb63004414767371b49c1e48ca019e26b0f"
+ integrity sha512-atm+llzKSZpKnsV8LgnsOMdTQNoee9D7gH8yIN86MzahugAstSZFSUdsjCk1KSvK7n7bigM9XFSOQYYuVjvcaw==
+ dependencies:
+ copy-to "^2.0.1"
+ escape-html "^1.0.3"
+ mkdirp "^0.5.1"
+ mz "^2.7.0"
+ unescape "^1.0.1"
+
+uuid@^3.3.2:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
+ integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==
+
+validator@^10.0.0:
+ version "10.11.0"
+ resolved "https://registry.yarnpkg.com/validator/-/validator-10.11.0.tgz#003108ea6e9a9874d31ccc9e5006856ccd76b228"
+ integrity sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==
+
+verror@1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+ integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
+ dependencies:
+ assert-plus "^1.0.0"
+ core-util-is "1.0.2"
+ extsprintf "^1.2.0"
+
+vise@3.x.x:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/vise/-/vise-3.0.2.tgz#9a8b7450f783aa776faa327fe47d7bfddb227266"
+ integrity sha512-X52VtdRQbSBXdjcazRiY3eRgV3vTQ0B+7Wh8uC9cVv7lKfML5m9+9NHlbcgCY0R9EAqD1v/v7o9mhGh2A3ANFg==
+ dependencies:
+ hoek "6.x.x"
+
+vision@^5.4.4:
+ version "5.4.4"
+ resolved "https://registry.yarnpkg.com/vision/-/vision-5.4.4.tgz#981b2d811a6061cc14cf2d5d05ad3bbc3ee59572"
+ integrity sha512-jFeH7pU/ODYmTOpY5jutMKU/fDr+P621WYEnWgqwDikxutBWJ+koxlgGnkZQoKY6JlYdY4Awo+rPN3DNdTeDKg==
+ dependencies:
+ boom "7.x.x"
+ hoek "6.x.x"
+ items "2.x.x"
+ joi "14.x.x"
+
+which@^1.2.9:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+ dependencies:
+ isexe "^2.0.0"
+
+wide-align@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
+ integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
+ dependencies:
+ string-width "^1.0.2 || 2"
+
+widest-line@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc"
+ integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==
+ dependencies:
+ string-width "^2.1.1"
+
+win-release@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/win-release/-/win-release-1.1.1.tgz#5fa55e02be7ca934edfc12665632e849b72e5209"
+ integrity sha1-X6VeAr58qTTt/BJmVjLoSbcuUgk=
+ dependencies:
+ semver "^5.0.1"
+
+wordwrap@~0.0.2:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+ integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc=
+
+wordwrap@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+ integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+wreck@14.x.x:
+ version "14.2.0"
+ resolved "https://registry.yarnpkg.com/wreck/-/wreck-14.2.0.tgz#0064a5b930fc675f57830c1fd28342da1a70b0fc"
+ integrity sha512-NFFft3SMgqrJbXEVfYifh+QDWFxni+98/I7ut7rLbz3F0XOypluHsdo3mdEYssGSirMobM3fGlqhyikbWKDn2Q==
+ dependencies:
+ boom "7.x.x"
+ bourne "1.x.x"
+ hoek "6.x.x"
+
+write-file-atomic@^2.0.0:
+ version "2.4.3"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481"
+ integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==
+ dependencies:
+ graceful-fs "^4.1.11"
+ imurmurhash "^0.1.4"
+ signal-exit "^3.0.2"
+
+ws@~6.1.0:
+ version "6.1.4"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.4.tgz#5b5c8800afab925e94ccb29d153c8d02c1776ef9"
+ integrity sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==
+ dependencies:
+ async-limiter "~1.0.0"
+
+xdg-basedir@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"
+ integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=
+
+xml2js@^0.4.16, xml2js@^0.4.19:
+ version "0.4.19"
+ resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7"
+ integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==
+ dependencies:
+ sax ">=0.6.0"
+ xmlbuilder "~9.0.1"
+
+xmlbuilder@~9.0.1:
+ version "9.0.7"
+ resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"
+ integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=
+
+xmlhttprequest-ssl@~1.5.4:
+ version "1.5.5"
+ resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e"
+ integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=
+
+xregexp@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943"
+ integrity sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=
+
+xtend@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
+ integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
+
+yallist@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
+ integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
+
+yallist@^3.0.0, yallist@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
+ integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==
+
+yeast@0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"
+ integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk=
+
+z-schema@^3.19.0:
+ version "3.25.1"
+ resolved "https://registry.yarnpkg.com/z-schema/-/z-schema-3.25.1.tgz#7e14663be2b96003d938a56f644fb8561643fb7e"
+ integrity sha512-7tDlwhrBG+oYFdXNOjILSurpfQyuVgkRe3hB2q8TEssamDHB7BbLWYkYO98nTn0FibfdFroFKDjndbgufAgS/Q==
+ dependencies:
+ core-js "^2.5.7"
+ lodash.get "^4.0.0"
+ lodash.isequal "^4.0.0"
+ validator "^10.0.0"
+ optionalDependencies:
+ commander "^2.7.1"