From 13a3a8b581266f349dcb390f97106b1ae807bd80 Mon Sep 17 00:00:00 2001 From: Louis PERRIN Date: Thu, 16 Nov 2017 15:08:39 +0100 Subject: [PATCH] handle triggers + other + complete test script --- controllerConfiguration/buttons.json | 1 - controllerConfiguration/sticks.json | 20 + lib/linux-connector.js | 40 +- lib/stick.js | 48 +- lib/test.js | 254 ++------- lib/xbox-controller.js | 16 +- package-lock.json | 735 +++++++++++++++++++++++++++ package.json | 6 +- 8 files changed, 866 insertions(+), 254 deletions(-) create mode 100644 package-lock.json diff --git a/controllerConfiguration/buttons.json b/controllerConfiguration/buttons.json index 7777eba..e5f09da 100644 --- a/controllerConfiguration/buttons.json +++ b/controllerConfiguration/buttons.json @@ -36,7 +36,6 @@ "rb": 5, "back": 6, "start": 7, - "start": 7, "xboxButton": 8, "leftstickpress": 9, "rightstickpress": 10, diff --git a/controllerConfiguration/sticks.json b/controllerConfiguration/sticks.json index 68c0b12..50bcbd7 100644 --- a/controllerConfiguration/sticks.json +++ b/controllerConfiguration/sticks.json @@ -13,5 +13,25 @@ "axisX": 3, "axisY": 4 + }, + + "leftTriggerCoordinates": { + "x": 0, + + "axisX": 2 + }, + + "rightTriggerCoordinates": { + "x": 4, + + "axisX": 5 + }, + + "crossCoordinates": { + "x": 0, + "y": 2, + + "axisX": 6, + "axisY": 7 } } diff --git a/lib/linux-connector.js b/lib/linux-connector.js index 8280fe9..13f6461 100644 --- a/lib/linux-connector.js +++ b/lib/linux-connector.js @@ -37,12 +37,31 @@ function LinuxConnector(opts) { console.log(chalk.green('Notice:'), 'Xbox controller connected'); this.leftStick = new Stick({ + reference : 'leftStick', controller: this.controller, isLinux: true }); this.rightStick = new Stick({ - reference: 'RIGHT', + reference : 'rightStick', + controller: this.controller, + isLinux: true + }); + + this.leftTrigger = new Stick({ + reference : 'leftTrigger', + controller: this.controller, + isLinux: true + }); + + this.rightTrigger = new Stick({ + reference: 'rightTrigger', + controller: this.controller, + isLinux: true + }); + + this.cross = new Stick({ + reference : 'cross', controller: this.controller, isLinux: true }); @@ -68,9 +87,22 @@ function LinuxConnector(opts) { }.bind(this)); this.xboxJoystick.on('axis', function (data) { - - this.leftStick.fireStickEvents(data); - this.rightStick.fireStickEvents(data); + // Xbox + // axis 0 LS.x left is -32767 + // axis 1 LS.y top is -32767 + // axis 2 LT.x released is -32767 + // axis 3 RS.x left is -32767 + // axis 4 RS.y top is -32767 + // axis 5 LT.x released is -32767 + // axis 6 CR.x left is -32767 + // axis 7 CR.y top is -32767 + // console.log(data.number + ' → ' + data.value); + + if(data.number == 0 || data.number == 1) this.leftStick.fireStickEvents(data); + if(data.number == 2) this.leftTrigger.fireStickEvents(data); + if(data.number == 3 || data.number == 4) this.rightStick.fireStickEvents(data); + if(data.number == 5) this.rightTrigger.fireStickEvents(data); + if(data.number == 6 || data.number == 7) this.cross.fireStickEvents(data); }.bind(this)); }.bind(this); diff --git a/lib/stick.js b/lib/stick.js index 6d413c9..01db271 100644 --- a/lib/stick.js +++ b/lib/stick.js @@ -6,12 +6,7 @@ function Stick(opts) { this.controller = (opts && opts.controller) || null; this.isLinux = (opts && opts.isLinux) || false; this.lastMoveEvent = null; - - if (this.reference == 'RIGHT') { - this.HIDCoordinates = sticks.rightStickCoordinates; - }else{ - this.HIDCoordinates = sticks.leftStickCoordinates; - } + this.HIDCoordinates = sticks[this.reference + 'Coordinates']; } Stick.prototype.fireStickEvents = function (data) { @@ -28,7 +23,7 @@ Stick.prototype.fireStickEvents = function (data) { var _emitStickEvents = function (data) { var xbox = this.controller, position, btnRef; - + if(this.isLinux){ position = this._getLinuxAxisPosition(data); }else{ @@ -37,14 +32,14 @@ Stick.prototype.fireStickEvents = function (data) { btnRef = this.reference.toLowerCase(); - xbox.emit(btnRef + 'stickMove', position); + xbox.emit('anyStickMove', {ref:btnRef,position:position}) + xbox.emit(btnRef + 'Move', position); if (this.lastMoveEvent) { if (this.lastMoveEvent.axis == 'x' && (position.x != 'none' && position.x != this.lastMoveEvent.bufferValue)) { xbox.emit(this.lastMoveEvent.name + ':release'); - this.lastMoveEvent = null; }else if (this.lastMoveEvent.axis == 'y' && (position.y != 'none' && position.y != this.lastMoveEvent.bufferValue)){ xbox.emit(this.lastMoveEvent.name + ':release'); @@ -53,35 +48,35 @@ Stick.prototype.fireStickEvents = function (data) { } if(position.x == 255){ - setLastMoveEvent(btnRef + 'stickRight', 255, 'x'); + setLastMoveEvent(btnRef + 'Right', 255, 'x'); - xbox.emit(btnRef + 'stickRight'); + xbox.emit(btnRef + 'Right'); }else{ - xbox.emit(btnRef + 'stickRight:none'); + xbox.emit(btnRef + 'Right:none'); } if(position.x === 0){ - setLastMoveEvent(btnRef + 'stickLeft', 0, 'x'); + setLastMoveEvent(btnRef + 'Left', 0, 'x'); - xbox.emit(btnRef + 'stickLeft'); + xbox.emit(btnRef + 'Left'); }else{ - xbox.emit(btnRef + 'stickLeft:none'); + xbox.emit(btnRef + 'Left:none'); } if(position.y == 255){ - setLastMoveEvent(btnRef + 'stickDown', 255, 'y'); + setLastMoveEvent(btnRef + 'Down', 255, 'y'); - xbox.emit(btnRef + 'stickDown'); + xbox.emit(btnRef + 'Down'); }else{ - xbox.emit(btnRef + 'stickDown:none'); + xbox.emit(btnRef + 'Down:none'); } if(position.y === 0){ - setLastMoveEvent(btnRef + 'stickUp', 0, 'y'); + setLastMoveEvent(btnRef + 'Up', 0, 'y'); - xbox.emit(btnRef + 'stickUp'); + xbox.emit(btnRef + 'Up'); }else{ - xbox.emit(btnRef + 'stickUp:none'); + xbox.emit(btnRef + 'Up:none'); } }.bind(this); @@ -107,18 +102,17 @@ Stick.prototype._getDirectionalPosition = function (data) { * @private */ Stick.prototype._getLinuxAxisPosition = function (data) { - var reduceData = 128 - (Math.floor(data.value / 256) * -1), + var reduceData = Math.round(data.value / 256), x, y; - if (this.HIDCoordinates.axisX == data.number) { x = reduceData; }else if(this.HIDCoordinates.axisY == data.number){ - y = reduceData; + y = reduceData !== 0 ? -1*reduceData : 0; } - + return { - x: (x || x === 0) ? x : 'none', - y: (y || y === 0) ? y : 'none' + x: (x)||x===0 ? x : undefined, + y: (y)||y===0 ? y : undefined }; }; diff --git a/lib/test.js b/lib/test.js index e54d0ce..c5332ae 100644 --- a/lib/test.js +++ b/lib/test.js @@ -1,213 +1,41 @@ -var xbox = require('../lib/xbox-controller'); - -xbox.on('a', function () { - console.log('[A] button press'); -}); - -xbox.on('b', function () { - console.log('[B] button press'); -}); - -xbox.on('y', function () { - console.log('[Y] button press'); -}); - -xbox.on('x', function () { - console.log('[X] button press'); -}); - -xbox.on('rb', function () { - console.log('[RB] button press'); -}); - -xbox.on('lb', function () { - console.log('[LB] button press'); -}); - -xbox.on('start', function () { - console.log('[START] button press'); -}); - -xbox.on('back', function () { - console.log('[BACK] button press'); -}); - -xbox.on('up', function () { - console.log('[UP] button press'); -}); - -xbox.on('down', function () { - console.log('[DOWN] button press'); -}); - -xbox.on('left', function () { - console.log('[LEFT] button press'); -}); - -xbox.on('right', function () { - console.log('[RIGHT] button press'); -}); - -xbox.on('upright', function () { - console.log('[UPRIGHT] buttons combination press'); -}); - -xbox.on('upleft', function () { - console.log('[UPLEFT] buttons combination press'); -}); - -xbox.on('downright', function () { - console.log('[DOWNRIGHT] buttons combination press'); -}); - -xbox.on('downleft', function () { - console.log('[DOWNLEFT] buttons combination press'); -}); - -xbox.on('leftstickpress', function () { - console.log('[LEFTSTICK] button press'); -}); - -xbox.on('rightstickpress', function () { - console.log('[RIGHTSTICK] button press'); -}); - -xbox.on('a:release', function () { - console.log('[A] button release'); -}); - -xbox.on('b:release', function () { - console.log('[B] button release'); -}); - -xbox.on('y:release', function () { - console.log('[Y] button release'); -}); - -xbox.on('x:release', function () { - console.log('[X] button release'); -}); - -xbox.on('rb:release', function () { - console.log('[RB] button release'); -}); - -xbox.on('lb:release', function () { - console.log('[LB] button release'); -}); - -xbox.on('start:release', function () { - console.log('[START] button release'); -}); - -xbox.on('back:release', function () { - console.log('[BACK] button release'); -}); - -xbox.on('up:release', function () { - console.log('[UP] button release'); -}); - -xbox.on('down:release', function () { - console.log('[DOWN] button release'); -}); - -xbox.on('left:release', function () { - console.log('[LEFT] button release'); -}); - -xbox.on('right:release', function () { - console.log('[RIGHT] button release'); -}); - -xbox.on('upright:release', function () { - console.log('[UPRIGHT] buttons combination release'); -}); - -xbox.on('upleft:release', function () { - console.log('[UPLEFT] buttons combination release'); -}); - -xbox.on('downright:release', function () { - console.log('[DOWNRIGHT] buttons combination release'); -}); - -xbox.on('downleft:release', function () { - console.log('[DOWNLEFT] buttons combination release'); -}); - -xbox.on('leftstickpress:release', function () { - console.log('[LEFTSTICK] button release'); -}); - -xbox.on('rightstickpress:release', function () { - console.log('[RIGHTSTICK] button release'); -}); - -/* Stick events */ - -xbox.on('leftstickLeft', function () { - console.log('Moving [LEFTSTICK] LEFT'); -}); - -xbox.on('leftstickRight', function () { - console.log('Moving [LEFTSTICK] RIGHT'); -}); - -xbox.on('leftstickDown', function () { - console.log('Moving [LEFTSTICK] DOWN'); -}); - -xbox.on('leftstickUp', function () { - console.log('Moving [LEFTSTICK] UP'); -}); - -xbox.on('rightstickLeft', function () { - console.log('Moving [RIGHTSTICK] LEFT'); -}); - -xbox.on('rightstickRight', function () { - console.log('Moving [RIGHTSTICK] RIGHT'); -}); - -xbox.on('rightstickDown', function () { - console.log('Moving [RIGHTSTICK] DOWN'); -}); - -xbox.on('rightstickUp', function () { - console.log('Moving [RIGHTSTICK] UP'); -}); - -/* Stick release events */ - -xbox.on('leftstickLeft:release', function () { - console.log('Released [LEFTSTICK] LEFT'); -}); - -xbox.on('leftstickRight:release', function () { - console.log('Released [LEFTSTICK] RIGHT'); -}); - -xbox.on('leftstickDown:release', function () { - console.log('Released [LEFTSTICK] DOWN'); -}); - -xbox.on('leftstickUp:release', function () { - console.log('Released [LEFTSTICK] UP'); -}); - -xbox.on('rightstickLeft:release', function () { - console.log('Released [RIGHTSTICK] LEFT'); -}); - -xbox.on('rightstickRight:release', function () { - console.log('Released [RIGHTSTICK] RIGHT'); -}); - -xbox.on('rightstickDown:release', function () { - console.log('Released [RIGHTSTICK] DOWN'); -}); - -xbox.on('rightstickUp:release', function () { - console.log('Released [RIGHTSTICK] UP'); -}); +var xbox = require('./xbox-controller') +let buttonTable = ['a', 'b', 'x', 'y', 'lb', 'rb', 'start', 'back', 'leftstickpress', 'rightstickpress'] + +var joypadStatus = { + sticks : { + 'leftstick' : {x : 0, y : 0}, + 'rightstick' : {x : 0, y : 0}, + 'cross' : {x : 0, y : 0}, + 'lefttrigger' : {x : 0}, + 'righttrigger' : {x : 0}, + }, + buttons : { // 0 = nothing, 1 = press + 'a' : {status : 0}, + 'b' : {status : 0}, + 'x' : {status : 0}, + 'y' : {status : 0}, + 'lb' : {status : 0}, + 'rb' : {status : 0}, + 'start' : {status : 0}, + 'back' : {status : 0}, + 'leftstickpress': {status : 0}, + 'rightstickpress': {status : 0} + } +} + +xbox.on('anyStickMove', function (data) { + joypadStatus.sticks[data.ref].x = data.position.x !== undefined ? data.position.x : joypadStatus.sticks[data.ref].x; + joypadStatus.sticks[data.ref].y = data.position.y !== undefined ? data.position.y : joypadStatus.sticks[data.ref].y; + console.log(joypadStatus); +}); + +buttonTable.forEach(function (button) { + xbox.on(button, function () { + joypadStatus.buttons[button].status = 1 + console.log(joypadStatus) + }), + xbox.on(button+':release', function () { + joypadStatus.buttons[button].status = 0 + console.log(joypadStatus); + }) +}) diff --git a/lib/xbox-controller.js b/lib/xbox-controller.js index 2462f70..6abeefc 100644 --- a/lib/xbox-controller.js +++ b/lib/xbox-controller.js @@ -24,14 +24,14 @@ function XboxController(opts){ }else{ HID.devices().forEach(function(d){ var product = (typeof d === 'object' && d.product) || ''; - + if(product.toLowerCase().indexOf(this.HIDProduct.toLowerCase()) !== -1){ - + this.HIDController = new HID.HID(d.path); console.log(chalk.green('Notice:'), 'Xbox controller connected'); } }.bind(this)); - + if(!this.HIDController){ console.log(chalk.red('Error:'), 'Xbox controller not found'); }else{ @@ -42,7 +42,7 @@ function XboxController(opts){ reference: 'RIGHT', controller: this }); - + interpretControllerData(); } } @@ -50,11 +50,15 @@ function XboxController(opts){ var interpretControllerData = function() { this.HIDController.on('data', function (data) { + console.log(data); this.controlButton = data[this.HIDConfig.controlBtnsBlock] || data[10]; this.directionalButton = data[this.HIDConfig.directionalBtnsBlock] || data[11]; - this.leftStick.fireStickEvents(data); - this.rightStick.fireStickEvents(data); + if(data.number == 0 || data.number == 1) this.leftStick.fireStickEvents(data); + if(data.number == 2) this.leftTrigger.fireStickEvents(data); + if(data.number == 3 || data.number == 4) this.rightStick.fireStickEvents(data); + if(data.number == 5) this.rightTrigger.fireStickEvents(data); + if(data.number == 6 || data.number == 7) this.cross.fireStickEvents(data); _fireButtonEvents(this.directionalButton, this.controlButton); }.bind(this)); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..11a5639 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,735 @@ +{ + "name": "xbox-controller-node", + "version": "1.6.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "accepts": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "requires": { + "mime-types": "2.1.17", + "negotiator": "0.6.1" + } + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "requires": { + "color-convert": "1.9.1" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.3" + } + }, + "arraybuffer.slice": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", + "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=" + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=" + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "requires": { + "callsite": "1.0.0" + } + }, + "bindings": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz", + "integrity": "sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw==" + }, + "bl": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", + "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", + "requires": { + "readable-stream": "2.3.3" + } + }, + "blob": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=" + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" + }, + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.5.0" + } + }, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=" + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "end-of-stream": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", + "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", + "requires": { + "once": "1.4.0" + } + }, + "engine.io": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.4.tgz", + "integrity": "sha1-PQIRtwpVLOhB/8fahiezAamkFi4=", + "requires": { + "accepts": "1.3.3", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "2.6.9", + "engine.io-parser": "2.1.1", + "uws": "0.14.5", + "ws": "3.3.1" + } + }, + "engine.io-client": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.4.tgz", + "integrity": "sha1-T88TcLRxY70s6b4nM5ckMDUNTqE=", + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "2.6.9", + "engine.io-parser": "2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "3.3.1", + "xmlhttprequest-ssl": "1.5.4", + "yeast": "0.1.2" + } + }, + "engine.io-parser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.1.tgz", + "integrity": "sha1-4Ps/DgRi9/WLt3waUun1p+JuRmg=", + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "0.0.6", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary2": "1.0.2" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "expand-template": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.0.tgz", + "integrity": "sha512-kkjwkMqj0h4w/sb32ERCDxCQkREMCAgS39DscDnSwDsbxnwwM1BTZySdC3Bn1lhY7vL08n9GoO/fVTynjDgRyQ==" + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" + }, + "has-binary2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.2.tgz", + "integrity": "sha1-6D26SfC5vk0CbSc2U1DZ8D9Uvpg=", + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "1.0.1" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "joystick": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/joystick/-/joystick-0.1.2.tgz", + "integrity": "sha1-DmfAkubYtGOItz9C8XBcCY0pBPM=" + }, + "mime-db": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" + }, + "mime-types": { + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "requires": { + "mime-db": "1.30.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "nan": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz", + "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=" + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "node-abi": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.1.2.tgz", + "integrity": "sha512-hmUtb8m75RSi7N+zZLYqe75XDvZB+6LyTBPkj2DConvNgQet2e3BIqEwe1LLvqMrfyjabuT5ZOrTioLCH1HTdA==", + "requires": { + "semver": "5.4.1" + } + }, + "node-hid": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-0.5.7.tgz", + "integrity": "sha512-dwwpOetL2+MGYgivbO22ML+45ieCGbueWv1rYxRgBoEc2QMp6UF6ZucEkYts1IA3YPWJNkmpGh6dqQ85n19szw==", + "requires": { + "bindings": "1.3.0", + "nan": "2.8.0", + "prebuild-install": "2.3.0" + } + }, + "noop-logger": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", + "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "requires": { + "better-assert": "1.0.2" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "requires": { + "better-assert": "1.0.2" + } + }, + "prebuild-install": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-2.3.0.tgz", + "integrity": "sha512-gzjq2oHB8oMbzJSsSh9MQ64zrXZGt092/uT4TLZlz2qnrPxpWqp4vYB7LZrDxnlxf5RfbCjkgDI/z0EIVuYzAw==", + "requires": { + "expand-template": "1.1.0", + "github-from-package": "0.0.0", + "minimist": "1.2.0", + "mkdirp": "0.5.1", + "node-abi": "2.1.2", + "noop-logger": "0.1.1", + "npmlog": "4.1.2", + "os-homedir": "1.0.2", + "pump": "1.0.2", + "rc": "1.2.2", + "simple-get": "1.4.3", + "tar-fs": "1.16.0", + "tunnel-agent": "0.6.0", + "xtend": "4.0.1" + } + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "pump": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.2.tgz", + "integrity": "sha1-Oz7mUS+U8OV1U4wXmV+fFpkKXVE=", + "requires": { + "end-of-stream": "1.4.0", + "once": "1.4.0" + } + }, + "rc": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.2.tgz", + "integrity": "sha1-2M6ctX6NZNnHut2YdsfDTL48cHc=", + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + } + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "simple-get": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-1.4.3.tgz", + "integrity": "sha1-6XVe2kB+ltpAxeUVjJ6jezO+y+s=", + "requires": { + "once": "1.4.0", + "unzip-response": "1.0.2", + "xtend": "4.0.1" + } + }, + "socket.io": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.4.tgz", + "integrity": "sha1-waRZDO/4fs8TxyZS8Eb3FrKeYBQ=", + "requires": { + "debug": "2.6.9", + "engine.io": "3.1.4", + "socket.io-adapter": "1.1.1", + "socket.io-client": "2.0.4", + "socket.io-parser": "3.1.2" + } + }, + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=" + }, + "socket.io-client": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz", + "integrity": "sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=", + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "2.6.9", + "engine.io-client": "3.1.4", + "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.1.2", + "to-array": "0.1.4" + } + }, + "socket.io-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.2.tgz", + "integrity": "sha1-28IoIVH8T6675Aru3Ady66YZ9/I=", + "requires": { + "component-emitter": "1.2.1", + "debug": "2.6.9", + "has-binary2": "1.0.2", + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + } + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "requires": { + "has-flag": "2.0.0" + } + }, + "tar-fs": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.0.tgz", + "integrity": "sha512-I9rb6v7mjWLtOfCau9eH5L7sLJyU2BnxtEZRQ5Mt+eRKmf1F0ohXmT/Jc3fr52kDvjJ/HV5MH3soQfPL5bQ0Yg==", + "requires": { + "chownr": "1.0.1", + "mkdirp": "0.5.1", + "pump": "1.0.2", + "tar-stream": "1.5.5" + } + }, + "tar-stream": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.5.tgz", + "integrity": "sha512-mQdgLPc/Vjfr3VWqWbfxW8yQNiJCbAZ+Gf6GDu1Cy0bdb33ofyiNGBtAY96jHFhDuivCwgW1H9DgTON+INiXgg==", + "requires": { + "bl": "1.2.1", + "end-of-stream": "1.4.0", + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "ultron": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.0.tgz", + "integrity": "sha1-sHoualQagV/Go0zNRTO67DB8qGQ=" + }, + "unzip-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", + "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uws": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/uws/-/uws-0.14.5.tgz", + "integrity": "sha1-Z6rzPEaypYel9mZtAPdpEyjxSdw=", + "optional": true + }, + "wide-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "ws": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.1.tgz", + "integrity": "sha512-8A/uRMnQy8KCQsmep1m7Bk+z/+LIkeF7w+TDMLtX1iZm5Hq9HsUDmgFGaW1ACW5Cj0b2Qo7wCvRhYN2ErUVp/A==", + "requires": { + "async-limiter": "1.0.0", + "safe-buffer": "5.1.1", + "ultron": "1.1.0" + } + }, + "xmlhttprequest-ssl": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.4.tgz", + "integrity": "sha1-BPVgkVcks4kIhxXMDteBPpZ3v1c=" + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + } + } +} diff --git a/package.json b/package.json index c0e8a5e..f7002bb 100644 --- a/package.json +++ b/package.json @@ -4,10 +4,10 @@ "description": "Simple interface to Xbox controller using Node.js", "main": "./lib/xbox-controller.js", "dependencies": { - "chalk": "^1.0.0", + "chalk": "^2.3.0", "joystick": "^0.1.2", - "node-hid": "^0.4.0", - "socket.io": "^1.3.5" + "node-hid": "^0.5.7", + "socket.io": "^2.0.4" }, "scripts": { "test": "node lib/test.js"