From 9a11db237b258931cf06af85663146d0f7e657aa Mon Sep 17 00:00:00 2001 From: Samuel Brekke Date: Sat, 14 Oct 2017 16:26:14 -0500 Subject: [PATCH 1/8] Added support for rotation on devices. This is done on the device side and not the channel side. Compatibile with all templates with a body tag. Also, Toast is rotated as well. TODO: Set up a selection on the device page. The rotation can be changed by sending 'rotate' passing 0, 90, 180, or, 270. Save rotation on the database somehow. FYI: These .pug files are making my eyes cry. --- build/css/channel.css | 46 +++++++++++++++++++++++++++++++++++++++---- build/js/client.js | 30 +++++++++++++++++++++++++++- 2 files changed, 71 insertions(+), 5 deletions(-) diff --git a/build/css/channel.css b/build/css/channel.css index 46d598f..83e03d0 100644 --- a/build/css/channel.css +++ b/build/css/channel.css @@ -1,14 +1,20 @@ html, body { - margin: 0; + margin: auto; padding: 0; width: 100%; height: 100%; } + +body iframe { + width: 100%; + height: 100% +} +/* body.fullscreen iframe { width: 100vw; height: 100vh; } - +*/ body.right-panel iframe:first-of-type { position: absolute; top: 0; left: 0; @@ -21,11 +27,43 @@ body.right-panel iframe:nth-of-type(2) { width: 20vw; height: 100vh; } +.rot0 { + width: 100vh; + height: 100vw; +} + +.rot90 { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + transform: rotate(90deg); + width: 100vh; + height: 100vw; +} + +.rot180 { + transform: rotate(180deg); + width: 100vw; + height: 100vh; +} + +.rot270 { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + transform: rotate(-90deg); + width: 100vh; + height: 100vw; +} + #toast.full-width { width: calc(100% - 20px); - left: 10px; bottom: 15px; right: 10px; } #toast.full-width .title { font-size: 7.5vh; -} \ No newline at end of file +} diff --git a/build/js/client.js b/build/js/client.js index 34ca92e..a179baf 100644 --- a/build/js/client.js +++ b/build/js/client.js @@ -23,6 +23,34 @@ socket.on('push', function(opts) { }) }) +socket.on('rotate', function(position) { + var bdy = $('body'); + switch(position) { + case '0': + bdy.removeClass(removeBodyRotation); + break; + case '90': + bdy.removeClass(removeBodyRotation); + bdy.addClass('rot90'); + break; + case '180': + bdy.removeClass(removeBodyRotation); + bdy.addClass('rot180'); + break; + case '270': + bdy.removeClass(removeBodyRotation); + bdy.addClass('rot270'); + break; + default: + console.log('Invalid parameter to Rotate event...ignoring'); + } +}); + +// Function passed to $('body').removeClass() +function removeBodyRotation(index, css) { + return (css.match (/(^|\s)rot\S+/g) || []).join(' '); +} + /* Google Cast */ if (cast) { cast.receiver.logger.setLevelValue(0); @@ -66,4 +94,4 @@ if (cast) { // initialize the CastReceiverManager with an application status message window.castReceiverManager.start({ statusText: 'Loading Hub...' }); console.log('Receiver Manager started'); -} \ No newline at end of file +} From 189812ebb7e2eb191923f106494bb7eea2609a04 Mon Sep 17 00:00:00 2001 From: Samuel Brekke Date: Sat, 14 Oct 2017 16:34:11 -0500 Subject: [PATCH 2/8] Updated package-lock.json --- package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 1edcec4..d22b244 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "multicast", - "version": "0.2.0", + "version": "1.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { From c12501300ead3bdb558df95e77b819805cbbe6c5 Mon Sep 17 00:00:00 2001 From: Samuel Brekke Date: Mon, 16 Oct 2017 04:41:45 -0500 Subject: [PATCH 3/8] Enabled rotation feature, also cleaned up some code in main.js. --- app/main.js | 181 +++++++++++++++++++----------- app/views/device.pug | 13 ++- app/views/layouts/empty.pug | 4 +- app/views/layouts/fullscreen.pug | 11 +- app/views/layouts/right-panel.pug | 4 +- app/views/layouts/template.pug | 4 +- build/css/channel.css | 2 +- build/js/client.js | 23 ---- 8 files changed, 140 insertions(+), 102 deletions(-) diff --git a/app/main.js b/app/main.js index add6443..24a1f6e 100644 --- a/app/main.js +++ b/app/main.js @@ -23,10 +23,29 @@ const serveOnly = process.argv.find(arg => arg == '--serve-only') var takeover = null +/* List of device rotations */ +var rotations = [ + { + value: 'rot0', + description: 'Landscape' + }, + { + value: 'rot90', + description: 'Portrait' + }, + { + value: 'rot180', + description: 'Landscape Reversed' + }, + { + value: 'rot270', + description: 'Portrait Reversed' + } +] + dbConnect(config) /* Establish connection with Chromecast devices on local network */ - var devices = [], findDevices = () => { @@ -59,7 +78,8 @@ findDevices = () => { deviceId: id, name: service.txtRecord.fn, address: service.addresses[0], - port: service.port + port: service.port, + rotation: 'rot0' }) } }) @@ -84,25 +104,31 @@ launchHub = (host) => { const client = new Client() client.connect(host, () => { - // reset number of failed connection attempts + /* Reset number of failed connection attempts */ d.connectionFailCount = 0 - // create various namespace handlers + /* Create various namespace handlers */ d.connection = client.createChannel('sender-0', 'receiver-0', 'urn:x-cast:com.google.cast.tp.connection', 'JSON') d.heartbeat = client.createChannel('sender-0', 'receiver-0', 'urn:x-cast:com.google.cast.tp.heartbeat', 'JSON') d.receiver = client.createChannel('sender-0', 'receiver-0', 'urn:x-cast:com.google.cast.receiver', 'JSON') - // establish virtual connection to the receiver + /* Establish virtual connection to the receiver */ d.connection.send({ type: 'CONNECT' }) - // start heartbeating + /* Start heartbeating */ d.missedHeartbeats = 0 d.pulse = setInterval(() => { d.missedHeartbeats++ - if (d.missedHeartbeats > 6) { // receiver has been offline for more than 30 seconds - d.status = 'offline' // mark receiver as offline - clearInterval(d.pulse) // stop checking for pulse :( - } else d.heartbeat.send({ type: 'PING' }) + /* + * If reciever has been offline for more than 30 seconds, mark as offline and stop pulse + * otherwise, keep sending pulses. + */ + if (d.missedHeartbeats > 6) { + d.status = 'offline' + clearInterval(d.pulse) + } else { + d.heartbeat.send({ type: 'PING' }) + } }, 5 * 1000) d.heartbeat.on('message', (data, broadcast) => { if (data.type == 'PONG') { @@ -111,39 +137,41 @@ launchHub = (host) => { } }) - // launch hub app + /* Launch the hub */ d.receiver.send({ type: 'LAUNCH', appId: config.appId, requestId: 1 }) - // monitor receiver status updates to insure hub is open + /* Monitor receiver status updates to insure hub is open */ d.receiver.on('message', (data, broadcast) => { if (data.type != 'RECEIVER_STATUS') console.log(data.type) if (data.type = 'RECEIVER_STATUS') { - // data.status contains relevant information about current app, volume, etc + /* data.status contains relevant information about current app, volume, etc */ if (data.status && data.status.applications) { var apps = data.status.applications /* Backdrop means that our hub applications has stopped running, so we need to restart it */ if (apps.find(a => a.displayName == 'Backdrop')) { - console.log('relaunching hub...') + console.log('Relaunching Hub...') d.receiver.send({ type: 'LAUNCH', appId: config.appId, requestId: 1 }) } - } } }) - }) client.on('error', () => { d.connectionFailCount++ - if (d.connectionFailCount > 6) { // receiver hasn't responded after 60 seconds + /* + * If an error is pulled more than 6 times, + * stop attempting the connection otherwise, + * try launching the hub again + */ + if (d.connectionFailCount > 6) { clearTimeout(d.connectionFail) - } else d.connectionFail = setTimeout(() => launchHub(host), 10 * 1000) + } else { + d.connectionFail = setTimeout(() => launchHub(host), 10 * 1000) + } }) - } - } - } /* Establish socket.io service */ @@ -209,14 +237,25 @@ app.post('/message/edit', (req, res) => { app.get('/landing', (req, res) => { - var ip = stripIPv6(req.connection.remoteAddress), // Get IPv4 address of device - d = devices.find(d => d.address == ip) // Find local info for device - if (d) res.redirect(`/device/${d.deviceId}`) // Redirect to device display - else res.render('setup-chromecast', { device: { // If not recognized, display information - address: ip, - deviceId: 'n/a', - name: 'Unrecognized Device' - }, registered: false, setupUrl: `${req.protocol}://${req.hostname}:${port}/` }) + var ip = stripIPv6(req.connection.remoteAddress), + d = devices.find(d => d.address == ip) + /* + * If chromecast is recognized, redirect to suitable device page. + * Otherwise, render the 'setup-chromecast' page + */ + if (d) { + res.redirect(`/device/${d.deviceId}`) + } else { + res.render('setup-chromecast', { + device: { + address: ip, + deviceId: 'n/a', + name: 'Unrecognized Device' + }, + registered: false, + setupUrl: `${req.protocol}://${req.hostname}:${port}/` + }) + } }) /* Devices */ @@ -228,7 +267,7 @@ app.get('/devices', (req, res) => { app.get('/device/new', (req, res) => { Channel.find().sort('name').exec((err, channels) => { if (err) console.log(err) - res.render('index', { render: 'device', devices: devices.filter(d => d.unregistered), channels: channels }) + res.render('index', { render: 'device', devices: devices.filter(d => d.unregistered), channels: channels, rotations: rotations, rotation: 0}) }) }) @@ -246,50 +285,47 @@ app.post('/device/new', (req, res) => { /* Launch hub on newly registered device */ var c = clients.find(c => stripIPv6(c.handshake.address) == devices[i].address) - if (c) c.emit('register', devices[i].deviceId) // emit 'register' to have setup page redirected - else launchHub(devices[i].address) // establish connection if client hasn't already connected + /* + * Emit 'register' to have setup page redirected if client is connected. + * Otherwise, establish a connection. + */ + if (c) c.emit('register', devices[i].deviceId) + else launchHub(devices[i].address) res.send(device.deviceId) }) }) app.get('/device/:device_id', (req, res) => { + var i = devices.findIndex(d => d.deviceId == req.params.device_id) Chromecast.findOne({ deviceId: req.params.device_id }).populate('channel').exec((err, device) => { if (err) console.log(err) if (device && device.channel) { - if (takeover) res.render(`layouts/${takeover.layout}`, { deviceId: req.params.device_id, channel: takeover, casting: true }) - else { - - /* device registered and channel set - display device page */ - res.render(`layouts/${device.channel.layout}`, { deviceId: req.params.device_id, channel: device.channel, casting: true }) - + if (takeover) { + res.render(`layouts/${takeover.layout}`, { deviceId: req.params.device_id, channel: takeover, rotation: devices[i].rotation, casting: true }) + } else { + /* Device registered and channel set display device page */ + res.render(`layouts/${device.channel.layout}`, { deviceId: req.params.device_id, channel: devices[i].channel, rotation: devices[i].rotation, casting: true }) } } else { - var localDevice = devices.find(d => d.deviceId == req.params.device_id) if (device) { - if (takeover) res.render(`layouts/${takeover.layout}`, { deviceId: req.params.device_id, channel: takeover, casting: true }) - else { - - /* device registered but no channel set - display setup page */ + if (takeover) { + res.render(`layouts/${takeover.layout}`, { deviceId: req.params.device_id, channel: takeover, rotation: devices[i].rotation, casting: true }) + } else { + /* Device registered but no channel set. display setup page */ res.render('setup-chromecast', { device: Object.assign(localDevice, device), registered: true, setupUrl: `${req.protocol}://${req.hostname}:${port}/` }) - } } else { - - /* device is not registered - display setup page */ + /* Device is not registered display setup page */ res.render('setup-chromecast', { device: Object.assign(localDevice, device), registered: false, setupUrl: `${req.protocol}://${req.hostname}:${port}/` }) - } } }) @@ -297,8 +333,10 @@ app.get('/device/:device_id', (req, res) => { app.get('/device/:device_id/connect', (req, res) => { var d = devices.find(d => d.deviceId == req.params.device_id) - if (d.status == 'offline' || d.status == 'waiting') launchHub(d.address) // launch hub if not already open - else { // hard reload page if already open + /* Launch hub if not already open otherwise, hard reload page */ + if (d.status == 'offline' || d.status == 'waiting') { + launchHub(d.address) + } else { var c = clients.find(c => stripIPv6(c.handshake.address) == d.address) if (c) c.emit('refresh') } @@ -309,17 +347,22 @@ app.post('/device/:device_id/edit', (req, res) => { Chromecast.update({ deviceId: req.params.device_id }, req.body, (err, numAffected, response) => { if (err) console.log(err) var i = devices.findIndex(d => d.deviceId == req.params.device_id) - devices[i].location = req.body.location // update local info with location + devices[i].location = req.body.location + devices[i].rotation = req.body.rotation if (req.body.channel) { Channel.findOne({ _id: req.body.channel }).exec((err, channel) => { var c = clients.find(c => stripIPv6(c.handshake.address) == devices[i].address) - if (c) c.emit('change_channel', channel) - devices[i].channel = channel // update local info with new channel info for any applicable devices + if (c) { + c.emit('change_channel', channel) + } + devices[i].channel = channel res.send(req.params.device_id) }) } else { var c = clients.find(c => stripIPv6(c.handshake.address) == devices[i].address) - if (c) c.emit('change_channel', null) + if (c) { + c.emit('change_channel', null) + } res.send(req.params.device_id) } }) @@ -332,6 +375,7 @@ app.delete('/device/:device_id/edit', (req, res) => { devices[i].unregistered = true delete devices[i].channel delete devices[i].location + delete devices[i].rotation res.sendStatus(200) }) }) @@ -343,7 +387,7 @@ app.get('/device/:device_id/edit', (req, res) => { if (err) console.log(err) if (device) { var localDevice = devices.find(d => d.deviceId == req.params.device_id) - res.render('index', { render: 'device', device: Object.assign(localDevice, device), channels: channels }) + res.render('index', { render: 'device', device: Object.assign(localDevice, device), channels: channels, rotations: rotations, rotation: device.rotation}) } else res.render('index', {}) }) }) @@ -383,7 +427,7 @@ app.post('/channel/:channel_id/edit', (req, res) => { for (var i in devices) { var d = devices[i] - /* update channel info on local info for any devices displaying this channel */ + /* Update channel info on local info for any devices displaying this channel */ if (d.channel && d.channel._id.toString() == req.params.channel_id.toString()) { Object.assign(devices[i].channel, req.body) } @@ -401,17 +445,17 @@ app.delete('/channel/:channel_id/edit', (req, res) => { var d = devices[i] if (d.channel && d.channel._id.toString() == req.params.channel_id.toString()) { - /* remove channel listing from local info of relevant devices */ + /* Remove channel listing from local info of relevant devices */ delete devices[i].channel - /* send devices on this channel back to setup page */ + /* Send devices on this channel back to setup page */ var c = clients.find(c => stripIPv6(c.handshake.address) == devices[i].address) if (c) c.emit('change_channel', null) } } - /* remove channel listing from Mongo */ + /* Remove channel listing from Mongo */ Chromecast.update({ channel: new mongoose.Types.ObjectId(req.params.channel_id) }, { $unset: { channel: 1 } }, (err, numAffected, result) => { res.sendStatus(200) }) @@ -473,11 +517,11 @@ app.post('/takeover/end', (req, res) => { server.listen(port, () => { console.log('MultiCast is live!') - console.log(`listening at port ${port}...`) + console.log(`Listening at port ${port}...`) if (!serveOnly) { - /* load saved devices */ + /* Load saved devices */ Chromecast.find().populate('channel').exec((err, _devices) => { for (var i in _devices) { var d = _devices[i].toObject() @@ -485,10 +529,10 @@ server.listen(port, () => { devices.push(d) } - /* poll for active devices */ + /* Poll for active devices */ findDevices() - /* start interval to continue polling for device status */ + /* Start interval to continue polling for device status */ setInterval(() => { findDevices() }, 30 * 1000) @@ -500,3 +544,10 @@ server.listen(port, () => { /* Utility */ var stripIPv6 = ip => ip.replace(/^.*:/, '') + +/* Neccessary Function to fetch rotation */ +function getRotationFromDeviceID(id) { + for (var i = 0; i <= devices.length; i++) { + + } +} diff --git a/app/views/device.pug b/app/views/device.pug index 9b50ec8..9a70062 100644 --- a/app/views/device.pug +++ b/app/views/device.pug @@ -38,6 +38,17 @@ form#edit-device option(value=c._id)= c.name else option(selected, disabled, value='') No channels available. + .form-group + label.form-label.label-lg(for='device-rotation') Rotation + select.form-select.input-lg#device-rotation(name='rotation') + if rotations.length + each rot in rotations + if device && device.rotation && (rot.value == device.rotation) + option(value=rot.value, selected)= rot.description + else + option(value=rot.value)= rot.description + else + option(value='0', selected) Something went wrong... .columns(style='margin-top: 15px') if device .column @@ -46,4 +57,4 @@ form#edit-device a.btn.btn-lg.btn-block(href='/devices') Cancel else .column - button.btn.btn-primary.btn-lg.btn-block(type='submit') Add Chromecast \ No newline at end of file + button.btn.btn-primary.btn-lg.btn-block(type='submit') Add Chromecast diff --git a/app/views/layouts/empty.pug b/app/views/layouts/empty.pug index 514f62c..07c855a 100644 --- a/app/views/layouts/empty.pug +++ b/app/views/layouts/empty.pug @@ -5,7 +5,7 @@ html(lang='en') include ../include/head.pug link(rel='stylesheet', href='/css/setup.css') - body + body(class=rotation) #center h1 #[span.emphasis This channel] hasn't been configured. @@ -15,4 +15,4 @@ html(lang='en') script(type='text/javascript', src='//www.gstatic.com/cast/sdk/libs/receiver/2.0.0/cast_receiver.js') script(type='text/javascript', src='/js/app.js') script(type='text/javascript', src='/js/client.js') - \ No newline at end of file + diff --git a/app/views/layouts/fullscreen.pug b/app/views/layouts/fullscreen.pug index 6c0b87c..64c331f 100644 --- a/app/views/layouts/fullscreen.pug +++ b/app/views/layouts/fullscreen.pug @@ -4,15 +4,14 @@ html(lang='en') title Multicast | #{channel.name} include ../include/head.pug link(rel='stylesheet', href='/css/channel.css') - - body.fullscreen - include ../include/toast.pug - if channel.URLs != null && channel.URLs.length - iframe(src=channel.URLs[0], frameborder=0, framespacing=0) + body(class='fullscreen ' + rotation) + include ../include/toast.pug + if channel.URLs != null && channel.URLs.length + iframe(src=channel.URLs[0], frameborder=0, framespacing=0) script(type='text/javascript', src='/js/jquery.min.js') script(type='text/javascript', src='/socket.io/socket.io.js') if casting script(type='text/javascript', src='//www.gstatic.com/cast/sdk/libs/receiver/2.0.0/cast_receiver.js') script(type='text/javascript', src='/js/app.js') - script(type='text/javascript', src='/js/client.js') \ No newline at end of file + script(type='text/javascript', src='/js/client.js') diff --git a/app/views/layouts/right-panel.pug b/app/views/layouts/right-panel.pug index af4f658..e4de96e 100644 --- a/app/views/layouts/right-panel.pug +++ b/app/views/layouts/right-panel.pug @@ -5,7 +5,7 @@ html(lang='en') include ../include/head.pug link(rel='stylesheet', href='/css/channel.css') - body.right-panel + body(class='right-panel' + rotation) include ../include/toast.pug if channel.URLS != null && channel.URLs.length iframe(src=channel.URLs[0], frameborder=0, framespacing=0) @@ -17,4 +17,4 @@ html(lang='en') if casting script(type='text/javascript', src='//www.gstatic.com/cast/sdk/libs/receiver/2.0.0/cast_receiver.js') script(type='text/javascript', src='/js/app.js') - script(type='text/javascript', src='/js/client.js') \ No newline at end of file + script(type='text/javascript', src='/js/client.js') diff --git a/app/views/layouts/template.pug b/app/views/layouts/template.pug index 5a44efd..26193a5 100644 --- a/app/views/layouts/template.pug +++ b/app/views/layouts/template.pug @@ -5,7 +5,7 @@ html(lang='en') include ../include/head.pug link(rel='stylesheet', href='/css/channel.css') - body.layout-name + body(class='layout-name' + rotation) include ../include/toast.pug if channel.URLS != null && channel.URLs.length each u in channel.URLS @@ -17,4 +17,4 @@ html(lang='en') if casting script(type='text/javascript', src='//www.gstatic.com/cast/sdk/libs/receiver/2.0.0/cast_receiver.js') script(type='text/javascript', src='/js/app.js') - script(type='text/javascript', src='/js/client.js') \ No newline at end of file + script(type='text/javascript', src='/js/client.js') diff --git a/build/css/channel.css b/build/css/channel.css index 83e03d0..e17085c 100644 --- a/build/css/channel.css +++ b/build/css/channel.css @@ -27,7 +27,7 @@ body.right-panel iframe:nth-of-type(2) { width: 20vw; height: 100vh; } -.rot0 { +.rot0, .fullscreen { width: 100vh; height: 100vw; } diff --git a/build/js/client.js b/build/js/client.js index a179baf..cb3026a 100644 --- a/build/js/client.js +++ b/build/js/client.js @@ -23,29 +23,6 @@ socket.on('push', function(opts) { }) }) -socket.on('rotate', function(position) { - var bdy = $('body'); - switch(position) { - case '0': - bdy.removeClass(removeBodyRotation); - break; - case '90': - bdy.removeClass(removeBodyRotation); - bdy.addClass('rot90'); - break; - case '180': - bdy.removeClass(removeBodyRotation); - bdy.addClass('rot180'); - break; - case '270': - bdy.removeClass(removeBodyRotation); - bdy.addClass('rot270'); - break; - default: - console.log('Invalid parameter to Rotate event...ignoring'); - } -}); - // Function passed to $('body').removeClass() function removeBodyRotation(index, css) { return (css.match (/(^|\s)rot\S+/g) || []).join(' '); From 160dbaf954bca57c4b0c5aed71e63590b3f89e4a Mon Sep 17 00:00:00 2001 From: Samuel Brekke Date: Mon, 16 Oct 2017 12:52:34 -0500 Subject: [PATCH 4/8] Clean the rotation feature --- app/main.js | 7 ------- app/views/layouts/fullscreen.pug | 2 +- app/views/layouts/right-panel.pug | 2 +- app/views/layouts/template.pug | 2 +- 4 files changed, 3 insertions(+), 10 deletions(-) diff --git a/app/main.js b/app/main.js index 24a1f6e..84718aa 100644 --- a/app/main.js +++ b/app/main.js @@ -544,10 +544,3 @@ server.listen(port, () => { /* Utility */ var stripIPv6 = ip => ip.replace(/^.*:/, '') - -/* Neccessary Function to fetch rotation */ -function getRotationFromDeviceID(id) { - for (var i = 0; i <= devices.length; i++) { - - } -} diff --git a/app/views/layouts/fullscreen.pug b/app/views/layouts/fullscreen.pug index 64c331f..b5f5c88 100644 --- a/app/views/layouts/fullscreen.pug +++ b/app/views/layouts/fullscreen.pug @@ -4,7 +4,7 @@ html(lang='en') title Multicast | #{channel.name} include ../include/head.pug link(rel='stylesheet', href='/css/channel.css') - body(class='fullscreen ' + rotation) + body.fullscreen(class=rotation) include ../include/toast.pug if channel.URLs != null && channel.URLs.length iframe(src=channel.URLs[0], frameborder=0, framespacing=0) diff --git a/app/views/layouts/right-panel.pug b/app/views/layouts/right-panel.pug index e4de96e..f1c2ef0 100644 --- a/app/views/layouts/right-panel.pug +++ b/app/views/layouts/right-panel.pug @@ -5,7 +5,7 @@ html(lang='en') include ../include/head.pug link(rel='stylesheet', href='/css/channel.css') - body(class='right-panel' + rotation) + body.right-panel(class=rotation) include ../include/toast.pug if channel.URLS != null && channel.URLs.length iframe(src=channel.URLs[0], frameborder=0, framespacing=0) diff --git a/app/views/layouts/template.pug b/app/views/layouts/template.pug index 26193a5..8112a99 100644 --- a/app/views/layouts/template.pug +++ b/app/views/layouts/template.pug @@ -5,7 +5,7 @@ html(lang='en') include ../include/head.pug link(rel='stylesheet', href='/css/channel.css') - body(class='layout-name' + rotation) + body.layout-name(class=rotation) include ../include/toast.pug if channel.URLS != null && channel.URLs.length each u in channel.URLS From f364c3d40bb230bd6e8afba8878f64b8aef567fe Mon Sep 17 00:00:00 2001 From: Samuel Brekke Date: Thu, 23 Nov 2017 20:48:01 -0600 Subject: [PATCH 5/8] Swapped `vw` and `vh` in device css to correct landscape view --- build/css/channel.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/css/channel.css b/build/css/channel.css index e17085c..642cf91 100644 --- a/build/css/channel.css +++ b/build/css/channel.css @@ -28,8 +28,8 @@ body.right-panel iframe:nth-of-type(2) { } .rot0, .fullscreen { - width: 100vh; - height: 100vw; + width: 100vw; + height: 100vh; } .rot90 { From e72c561b1986547f7a0567d0df2664cec3b76782 Mon Sep 17 00:00:00 2001 From: Aaron Ross Date: Sat, 30 Dec 2017 15:45:16 -0500 Subject: [PATCH 6/8] Bring rotation branch up to new project layout --- app/main.js | 0 app/views/layouts/fullscreen.pug | 0 app/views/layouts/right-panel.pug | 0 app/views/layouts/template.pug | 0 build/css/channel.css | 0 package-lock.json | 0 6 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 app/main.js mode change 100644 => 100755 app/views/layouts/fullscreen.pug mode change 100644 => 100755 app/views/layouts/right-panel.pug mode change 100644 => 100755 app/views/layouts/template.pug mode change 100644 => 100755 build/css/channel.css mode change 100644 => 100755 package-lock.json diff --git a/app/main.js b/app/main.js old mode 100644 new mode 100755 diff --git a/app/views/layouts/fullscreen.pug b/app/views/layouts/fullscreen.pug old mode 100644 new mode 100755 diff --git a/app/views/layouts/right-panel.pug b/app/views/layouts/right-panel.pug old mode 100644 new mode 100755 diff --git a/app/views/layouts/template.pug b/app/views/layouts/template.pug old mode 100644 new mode 100755 diff --git a/build/css/channel.css b/build/css/channel.css old mode 100644 new mode 100755 diff --git a/package-lock.json b/package-lock.json old mode 100644 new mode 100755 From 08096eb5a28056fbc54fd29517627a693ef37d1b Mon Sep 17 00:00:00 2001 From: Aaron Ross Date: Sat, 30 Dec 2017 16:50:20 -0500 Subject: [PATCH 7/8] Fix compatibility between rotation and new layout --- app/lib/devices.js | 4 +- app/lib/sockets.js | 4 + app/main.js | 22 +- app/models/Chromecast.js | 8 +- app/routes/devices.js | 141 ++- app/views/devices.pug | 2 +- app/views/layouts/fullscreen.pug | 0 app/views/layouts/right-panel.pug | 0 app/views/layouts/template.pug | 0 build/css/channel.css | 2 +- build/js/app.js | 6 +- build/js/client.js | 80 +- gulpfile.js | 35 +- package-lock.json | 1841 ++++------------------------- package.json | 15 +- 15 files changed, 434 insertions(+), 1726 deletions(-) mode change 100755 => 100644 app/main.js mode change 100755 => 100644 app/views/layouts/fullscreen.pug mode change 100755 => 100644 app/views/layouts/right-panel.pug mode change 100755 => 100644 app/views/layouts/template.pug mode change 100755 => 100644 build/css/channel.css mode change 100755 => 100644 package-lock.json diff --git a/app/lib/devices.js b/app/lib/devices.js index 10a4127..7a6d9f3 100644 --- a/app/lib/devices.js +++ b/app/lib/devices.js @@ -15,6 +15,7 @@ const func = { Chromecast.find() .populate('channel') .exec((err, chromecasts) => { + console.log(chromecasts) devices = chromecasts devices.forEach(d => (d.status = 'offline')) findDevices() @@ -129,7 +130,8 @@ const findDevices = () => { deviceId: id, name: service.txtRecord.fn, address: service.addresses[0], - port: service.port + port: service.port, + rotation: 'rot0' }) } }) diff --git a/app/lib/sockets.js b/app/lib/sockets.js index 7e99973..0c95223 100644 --- a/app/lib/sockets.js +++ b/app/lib/sockets.js @@ -9,6 +9,10 @@ const func = { init: server => { io = require('socket.io')(server) io.on('connection', client => { + console.log( + 'connected client with host:', + stripIPv6(client.handshake.address) + ) clients.push(client) client.on('disconnect', () => { console.log( diff --git a/app/main.js b/app/main.js old mode 100755 new mode 100644 index 7eae33a..53aa9ef --- a/app/main.js +++ b/app/main.js @@ -4,6 +4,7 @@ const express = require('express') const app = express() const server = require('http').createServer(app) +const cors = require('cors') const mongoose = require('mongoose') mongoose.Promise = require('bluebird') const bodyParser = require('body-parser') @@ -27,26 +28,6 @@ const port = config.port const serveOnly = process.argv.find(arg => arg == '--serve-only') // prettier-ignore-block -/* List of device rotations */ -const rotations = [ - { - value: 'rot0', - description: 'Landscape' - }, - { - value: 'rot90', - description: 'Portrait' - }, - { - value: 'rot180', - description: 'Landscape Reversed' - }, - { - value: 'rot270', - description: 'Portrait Reversed' - } -] - /* Establish database connection */ dbConnect(config) @@ -57,6 +38,7 @@ channels.init() sockets.init(server) /* Express Setup */ +app.use(cors()) app.set('view engine', 'pug') app.set('views', path.join(__dirname, 'views')) app.use(bodyParser.urlencoded({ extended: false })) diff --git a/app/models/Chromecast.js b/app/models/Chromecast.js index 24f4e2a..53c695e 100644 --- a/app/models/Chromecast.js +++ b/app/models/Chromecast.js @@ -1,12 +1,12 @@ -'use strict'; +'use strict' const mongoose = require('mongoose') const Schema = mongoose.Schema const ChromecastSchema = new Schema({ deviceId: String, // hexadecimal identifier provided by Chromecast - // don't confuse this with _id provided by Mongo location: String, - channel: { type: Schema.Types.ObjectId, ref: 'Channel' }, + rotation: String, + channel: { type: Schema.Types.ObjectId, ref: 'Channel' } }) -module.exports = mongoose.model('Chromecast', ChromecastSchema) \ No newline at end of file +module.exports = mongoose.model('Chromecast', ChromecastSchema) diff --git a/app/routes/devices.js b/app/routes/devices.js index 76b1988..6aaaf5f 100644 --- a/app/routes/devices.js +++ b/app/routes/devices.js @@ -12,6 +12,26 @@ const takeover = require('../lib/takeover') const port = require('../lib/config').port +/* List of device rotations */ +const rotations = [ + { + value: 'rot0', + description: 'Landscape' + }, + { + value: 'rot90', + description: 'Portrait' + }, + { + value: 'rot180', + description: 'Landscape Reversed' + }, + { + value: 'rot270', + description: 'Portrait Reversed' + } +] + router.get('/', (req, res) => { res.render('index', { render: 'devices', devices: devices.list() }) }) @@ -22,7 +42,9 @@ router res.render('index', { render: 'device', devices: devices.list().filter(d => d.unregistered), - channels: channels.list() + channels: channels.list(), + rotations: rotations, + rotation: 0 }) }) .post((req, res) => { @@ -34,45 +56,6 @@ router }) }) -router.get('/:device_id', (req, res) => { - let d = devices.withId(req.params.device_id) - if (d && takeover.isActive()) { - res.render(`layouts/${takeover.channel().layout}`, { - deviceId: req.params.device_id, - channel: takeover.channel(), - casting: true - }) - } else { - if (d) { - if (d.channel) { - /* device registered and channel set - display device page */ - res.render(`layouts/${d.channel.layout}`, { - deviceId: req.params.device_id, - channel: d.channel, - casting: true - }) - } else { - /* device registered but no channel set - display setup page */ - res.render('setup-chromecast', { - device: d, - registered: true, - setupUrl: `${req.protocol}://${req.hostname}:${port}/` - }) - } - } else { - /* device is not registered - display setup page */ - res.render('setup-chromecast', { - device: d, - registered: false, - setupUrl: `${req.protocol}://${req.hostname}:${port}/` - }) - } - } -}) - router.get('/:device_id/connect', (req, res) => { let d = devices.withId(req.params.device_id) if (!devices.isOnline(req.params.device_id)) devices.reconnect(d.address) @@ -89,35 +72,33 @@ router .route('/:device_id/edit') .get((req, res) => { let d = devices.withId(req.params.device_id) + console.log('rotation', d.rotation) if (d) { res.render('index', { render: 'device', device: d, - channels: channels.list() + channels: channels.list(), + rotations: rotations, + rotation: d.rotation }) } else render('index', {}) }) .post((req, res) => { - Chromecast.update( - { deviceId: req.params.device_id }, - req.body, - err => { - if (err) console.log(err) + Chromecast.update({ deviceId: req.params.device_id }, req.body, err => { + if (err) console.log(err) - let d = devices.withId(req.params.device_id) - d.location = req.body.location // update local info with location - console.log('host', d.address) - let c = sockets.withHost(d.address), - channel = null - if (req.body.channel) { - channel = channels.withId(req.body.channel) - d.channel = channel // update local info with channel - } - console.log('socket_client', c) - if (c) c.emit('change_channel', channel) - res.send(req.params.device_id) + let d = devices.withId(req.params.device_id) + d.location = req.body.location // update local info with location + d.rotation = req.body.rotation + let c = sockets.withHost(d.address), + channel = null + if (req.body.channel) { + channel = channels.withId(req.body.channel) + d.channel = channel // update local info with channel } - ) + if (c) c.emit('change_channel', channel) + res.send(req.params.device_id) + }) }) .delete((req, res) => { Chromecast.remove({ deviceId: req.params.device_id }, () => { @@ -126,8 +107,50 @@ router d.unregistered = true delete d.channel delete d.location + delete d.rotation res.sendStatus(200) }) }) +router.get('/:device_id/:preview*?', (req, res) => { + let d = devices.withId(req.params.device_id) + if (d && takeover.isActive()) { + res.render(`layouts/${takeover.channel().layout}`, { + deviceId: req.params.device_id, + channel: takeover.channel(), + rotation: d.rotation, + casting: !req.params.preview + }) + } else { + if (d) { + if (d.channel) { + /* device registered and channel set + display device page */ + res.render(`layouts/${d.channel.layout}`, { + deviceId: req.params.device_id, + channel: d.channel, + rotation: d.rotation, + casting: !req.params.preview + }) + } else { + /* device registered but no channel set + display setup page */ + res.render('setup-chromecast', { + device: d, + registered: true, + setupUrl: `${req.protocol}://${req.hostname}:${port}/` + }) + } + } else { + /* device is not registered + display setup page */ + res.render('setup-chromecast', { + device: d, + registered: false, + setupUrl: `${req.protocol}://${req.hostname}:${port}/` + }) + } + } +}) + module.exports = router diff --git a/app/views/devices.pug b/app/views/devices.pug index 4fab704..e536262 100644 --- a/app/views/devices.pug +++ b/app/views/devices.pug @@ -28,7 +28,7 @@ table.table else .text-gray no channel td.text-right - a(href=`/devices/${d.deviceId}`) Preview + a(href=`/devices/${d.deviceId}/preview`) Preview else tr td.text-gray(colspan=42) No devices available. \ No newline at end of file diff --git a/app/views/layouts/fullscreen.pug b/app/views/layouts/fullscreen.pug old mode 100755 new mode 100644 diff --git a/app/views/layouts/right-panel.pug b/app/views/layouts/right-panel.pug old mode 100755 new mode 100644 diff --git a/app/views/layouts/template.pug b/app/views/layouts/template.pug old mode 100755 new mode 100644 diff --git a/build/css/channel.css b/build/css/channel.css old mode 100755 new mode 100644 index 063887e..c683949 --- a/build/css/channel.css +++ b/build/css/channel.css @@ -1,6 +1,6 @@ html, body { - margin: 0; + margin: auto; padding: 0; width: 100%; height: 100%; diff --git a/build/js/app.js b/build/js/app.js index db32180..fd09f19 100644 --- a/build/js/app.js +++ b/build/js/app.js @@ -36,6 +36,7 @@ function displayError(message) { } function checkFrame(frame) { + console.log('checking') var html, failed = false try { @@ -51,5 +52,8 @@ function checkFrame(frame) { } $('iframe').each(function(i) { - checkFrame(this) + $(this).on('load error', function() { + console.log(this) + checkFrame(this) + }) }) diff --git a/build/js/client.js b/build/js/client.js index f37d674..8d61d96 100644 --- a/build/js/client.js +++ b/build/js/client.js @@ -1,11 +1,15 @@ /* socket.io */ var socket = io() -console.log('establishing socket.io connection') +//console.log('establishing socket.io connection') -socket.on('connect', function () { console.log('connection established!') }) -socket.on('disconnect', function() { }) -socket.on('refresh', function() { location.reload(true) }) +socket.on('connect', function() { + //console.log('connection established!') +}) +socket.on('disconnect', function() {}) +socket.on('refresh', function() { + location.reload(true) +}) socket.on('register', function(device_id) { window.location = `/device/${device_id}` @@ -27,50 +31,58 @@ socket.on('push', function(opts) { // Function passed to $('body').removeClass() function removeBodyRotation(index, css) { - return (css.match (/(^|\s)rot\S+/g) || []).join(' '); + return (css.match(/(^|\s)rot\S+/g) || []).join(' ') } /* Google Cast */ -if (cast) { - cast.receiver.logger.setLevelValue(0); - window.castReceiverManager = cast.receiver.CastReceiverManager.getInstance(); - console.log('Starting Receiver Manager'); +if (window.cast !== undefined) { + cast.receiver.logger.setLevelValue(0) + window.castReceiverManager = cast.receiver.CastReceiverManager.getInstance() + console.log('Starting Receiver Manager') // handler for the 'ready' event - castReceiverManager.onReady = function (event) { - console.log('Received Ready event: ' + JSON.stringify(event.data)); - window.castReceiverManager.setApplicationState($(document).find('title').text()); - }; + castReceiverManager.onReady = function(event) { + console.log('Received Ready event: ' + JSON.stringify(event.data)) + window.castReceiverManager.setApplicationState( + $(document) + .find('title') + .text() + ) + } // handler for 'senderconnected' event - castReceiverManager.onSenderConnected = function (event) { - console.log('Received Sender Connected event: ' + event.data); - console.log(window.castReceiverManager.getSender(event.data).userAgent); - }; + castReceiverManager.onSenderConnected = function(event) { + console.log('Received Sender Connected event: ' + event.data) + console.log(window.castReceiverManager.getSender(event.data).userAgent) + } // handler for 'senderdisconnected' event - castReceiverManager.onSenderDisconnected = function (event) { - console.log('Received Sender Disconnected event: ' + event.data); + castReceiverManager.onSenderDisconnected = function(event) { + console.log('Received Sender Disconnected event: ' + event.data) if (window.castReceiverManager.getSenders().length == 0) { - window.close(); + window.close() } - }; + } // handler for 'systemvolumechanged' event - castReceiverManager.onSystemVolumeChanged = function (event) { - console.log('Received System Volume Changed event: ' + event.data['level'] + ' ' + - event.data['muted']); - }; + castReceiverManager.onSystemVolumeChanged = function(event) { + console.log( + 'Received System Volume Changed event: ' + + event.data['level'] + + ' ' + + event.data['muted'] + ) + } // create a CastMessageBus to handle messages for a custom namespace - window.messageBus = - window.castReceiverManager.getCastMessageBus( - 'urn:x-cast:com.unitedcatalystcorporation.ucc-utility'); + window.messageBus = window.castReceiverManager.getCastMessageBus( + 'urn:x-cast:com.unitedcatalystcorporation.ucc-utility' + ) // handler for the CastMessageBus message event - window.messageBus.onMessage = function (event) { - console.log('Message [' + event.senderId + ']: ' + event.data); + window.messageBus.onMessage = function(event) { + console.log('Message [' + event.senderId + ']: ' + event.data) // display the message from the sender - displayText(event.data); + displayText(event.data) // inform all senders on the CastMessageBus of the incoming message event // sender message listener will be invoked - window.messageBus.send(event.senderId, event.data); + window.messageBus.send(event.senderId, event.data) } // initialize the CastReceiverManager with an application status message - window.castReceiverManager.start({ statusText: 'Loading Hub...' }); - console.log('Receiver Manager started'); + window.castReceiverManager.start({ statusText: 'Loading Hub...' }) + console.log('Receiver Manager started') } diff --git a/gulpfile.js b/gulpfile.js index 03cd2fe..0704871 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,31 +1,32 @@ -const gulp = require('gulp') -const uglify = require('gulp-uglify-es').default -const cleanCSS = require('gulp-clean-css') +const gulp = require('gulp') +const uglify = require('gulp-uglify-es').default +const cleanCSS = require('gulp-clean-css') gulp.task('js', () => { - return gulp.src('build/js/*') + return gulp + .src('build/js/*') .pipe(uglify().on('error', err => console.log(err))) .pipe(gulp.dest('public/js')) }) gulp.task('css', () => { - return gulp.src('build/css/*') + return gulp + .src('build/css/*') .pipe(cleanCSS()) .pipe(gulp.dest('public/css')) }) gulp.task('vendor', () => { - gulp.src('node_modules/jquery/dist/jquery.min.js') - .pipe(gulp.dest('public/js')) - gulp.src('node_modules/spectre.css/dist/spectre.min.css') - .pipe(gulp.dest('public/css')) - gulp.src('node_modules/font-awesome/css/*') - .pipe(gulp.dest('public/css')) - gulp.src('node_modules/font-awesome/fonts/*') - .pipe(gulp.dest('public/fonts')) - gulp.src('node_modules/bowser/bowser.min.js') - .pipe(gulp.dest('public/js')) + gulp + .src('node_modules/jquery/dist/jquery.min.js') + .pipe(gulp.dest('public/js')) + gulp + .src('node_modules/spectre.css/dist/spectre.min.css') + .pipe(gulp.dest('public/css')) + gulp.src('node_modules/font-awesome/css/*').pipe(gulp.dest('public/css')) + gulp.src('node_modules/font-awesome/fonts/*').pipe(gulp.dest('public/fonts')) + gulp.src('node_modules/bowser/bowser.min.js').pipe(gulp.dest('public/js')) }) -gulp.task('default', [ 'js', 'css', 'vendor' ]) -gulp.task('minify', [ 'js', 'css' ]) \ No newline at end of file +gulp.task('default', ['js', 'css', 'vendor']) +gulp.task('minify', ['js', 'css']) diff --git a/package-lock.json b/package-lock.json old mode 100755 new mode 100644 index a3f7eb5..50e8c69 --- a/package-lock.json +++ b/package-lock.json @@ -4,13 +4,6 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "@types/node": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.5.2.tgz", - "integrity": - "sha512-KA4GKOpgXnrqEH2eCVhiv2CsxgXGQJgV1X0vsGlh+WCnxbeAE1GT44ZsTU1IN5dEeV/gDupKa7gWo08V5IxWVQ==", - "dev": true - }, "accepts": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", @@ -27,8 +20,7 @@ }, "acorn-globals": { "version": "3.1.0", - "resolved": - "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", "requires": { "acorn": "4.0.13" @@ -48,8 +40,7 @@ }, "align-text": { "version": "0.1.4", - "resolved": - "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "requires": { "kind-of": "3.2.2", @@ -64,15 +55,13 @@ }, "ansi-regex": { "version": "2.1.1", - "resolved": - "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, "ansi-styles": { "version": "2.2.1", - "resolved": - "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true }, @@ -82,15 +71,6 @@ "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true }, - "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dev": true, - "requires": { - "sprintf-js": "1.0.3" - } - }, "arr-diff": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", @@ -102,67 +82,48 @@ }, "arr-flatten": { "version": "1.1.0", - "resolved": - "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": - "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "dev": true }, "array-differ": { "version": "1.0.0", - "resolved": - "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", "dev": true }, "array-each": { "version": "1.0.1", - "resolved": - "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", "dev": true }, "array-flatten": { "version": "1.1.1", - "resolved": - "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, "array-slice": { "version": "1.0.0", - "resolved": - "https://registry.npmjs.org/array-slice/-/array-slice-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.0.0.tgz", "integrity": "sha1-5zA08A3MH0CHYAj9IP6ud71LfC8=", "dev": true }, - "array-union": { - "version": "1.0.2", - "resolved": - "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "1.0.3" - } - }, "array-uniq": { "version": "1.0.3", - "resolved": - "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", "dev": true }, "array-unique": { "version": "0.2.1", - "resolved": - "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", "dev": true }, "arraybuffer.slice": { "version": "0.0.6", - "resolved": - "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=" }, "asap": { @@ -189,54 +150,23 @@ }, "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==" - }, - "babel-code-frame": { - "version": "7.0.0-alpha.12", - "resolved": - "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-7.0.0-alpha.12.tgz", - "integrity": - "sha512-5BmA2es52XNA9PN96HRfJg0co5CkmrKxWdvyW507LNqJmicnHM4we4HI16bIzgAuVeL7RKc4GJmTsyhkFco4Tw==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - } - }, - "babylon": { - "version": "7.0.0-beta.28", - "resolved": - "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.28.tgz", - "integrity": - "sha512-DBCCAejmP2ub9aCxA+ZN+Yv67Z/9yQqs4crzo9IuJxqbCNpR0KnvyzQxoB1S9G/R0vnAonPT0osaKjikuCAWqQ==", - "dev": true + "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=" }, - "bail": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.2.tgz", - "integrity": "sha1-99bBcxYwqfnw1NNe0fli4gdKF2Q=", - "dev": true - }, "balanced-match": { "version": "1.0.0", - "resolved": - "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, "base64-arraybuffer": { "version": "0.1.5", - "resolved": - "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" }, "base64id": { @@ -252,8 +182,7 @@ }, "better-assert": { "version": "1.0.2", - "resolved": - "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", "requires": { "callsite": "1.0.0" @@ -272,13 +201,11 @@ "bluebird": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": - "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" }, "body-parser": { "version": "1.18.2", - "resolved": - "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", "requires": { "bytes": "3.0.0", @@ -295,8 +222,7 @@ }, "brace-expansion": { "version": "1.1.8", - "resolved": - "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "dev": true, "requires": { @@ -322,20 +248,17 @@ }, "buffer-shims": { "version": "1.0.0", - "resolved": - "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=" }, "bufferview": { "version": "1.0.1", - "resolved": - "https://registry.npmjs.org/bufferview/-/bufferview-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/bufferview/-/bufferview-1.0.1.tgz", "integrity": "sha1-ev10pF+Tf6QiodM4wIu/3HbNcl0=" }, "bytebuffer": { "version": "3.5.5", - "resolved": - "https://registry.npmjs.org/bytebuffer/-/bytebuffer-3.5.5.tgz", + "resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-3.5.5.tgz", "integrity": "sha1-em+vGhNRSwg/H8+VQcTJv75+f9M=", "requires": { "bufferview": "1.0.1", @@ -368,8 +291,7 @@ }, "center-align": { "version": "0.1.3", - "resolved": - "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", "requires": { "align-text": "0.1.4", @@ -389,43 +311,14 @@ "supports-color": "2.0.0" } }, - "character-entities": { - "version": "1.2.1", - "resolved": - "https://registry.npmjs.org/character-entities/-/character-entities-1.2.1.tgz", - "integrity": "sha1-92hxvl72bdt/j440eOzDdMJ9bco=", - "dev": true - }, - "character-entities-legacy": { - "version": "1.1.1", - "resolved": - "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.1.tgz", - "integrity": "sha1-9Ad53xoQGHK7UQo9KV4fzPFHIC8=", - "dev": true - }, "character-parser": { "version": "2.2.0", - "resolved": - "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=", "requires": { "is-regex": "1.0.4" } }, - "character-reference-invalid": { - "version": "1.1.1", - "resolved": - "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.1.tgz", - "integrity": "sha1-lCg191Dk7GGjCOYMLvjMEBEgLvw=", - "dev": true - }, - "cjk-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cjk-regex/-/cjk-regex-1.0.2.tgz", - "integrity": - "sha512-NwSMtwULPLk8Ka9DEUcoFXhMRnV/bpyKDnoyDiVw/Qy5przhvHTvXLcsKaOmx13o8J4XEsPVT1baoCUj5zQs3w==", - "dev": true - }, "clean-css": { "version": "3.4.28", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", @@ -453,36 +346,10 @@ }, "clone-stats": { "version": "0.0.1", - "resolved": - "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", "dev": true }, - "collapse-white-space": { - "version": "1.0.3", - "resolved": - "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.3.tgz", - "integrity": "sha1-S5BvZw5aljqHt2sOFolkM0G2Ajw=", - "dev": true - }, - "color-convert": { - "version": "1.9.1", - "resolved": - "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", - "integrity": - "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", - "dev": true, - "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=", - "dev": true - }, "colour": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz", @@ -498,33 +365,28 @@ }, "component-bind": { "version": "1.0.0", - "resolved": - "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "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", + "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", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" }, "concat-map": { "version": "0.0.1", - "resolved": - "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "constantinople": { "version": "3.1.0", - "resolved": - "https://registry.npmjs.org/constantinople/-/constantinople-3.1.0.tgz", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.0.tgz", "integrity": "sha1-dWnKqKo/jVk11i4fqW+fcCzYHHk=", "requires": { "acorn": "3.3.0", @@ -533,16 +395,13 @@ }, "content-disposition": { "version": "0.5.2", - "resolved": - "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" }, "content-type": { "version": "1.0.4", - "resolved": - "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": - "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, "cookie": { "version": "0.3.1", @@ -551,56 +410,40 @@ }, "cookie-signature": { "version": "1.0.6", - "resolved": - "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, "core-util-is": { "version": "1.0.2", - "resolved": - "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, - "cosmiconfig": { - "version": "3.1.0", - "resolved": - "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-3.1.0.tgz", - "integrity": - "sha512-zedsBhLSbPBms+kE7AH4vHg6JsKDz6epSv2/+5XHs8ILHlgDciSJfSWf8sX9aQ52Jb7KI7VswUTsLpR/G0cr2Q==", - "dev": true, + "cors": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.4.tgz", + "integrity": "sha1-K9OB8usgECAQXNUOpZ2mMJBpRoY=", "requires": { - "is-directory": "0.3.1", - "js-yaml": "3.10.0", - "parse-json": "3.0.0", - "require-from-string": "2.0.1" + "object-assign": "4.1.1", + "vary": "1.1.2" } }, - "dashify": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dashify/-/dashify-0.2.2.tgz", - "integrity": "sha1-agdBWgHJH69KMuONnfunH2HLIP4=", - "dev": true - }, "dateformat": { "version": "2.2.0", - "resolved": - "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", "dev": true }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": - "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } }, "decamelize": { "version": "1.2.0", - "resolved": - "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, "defaults": { @@ -619,8 +462,7 @@ }, "deprecated": { "version": "0.0.1", - "resolved": - "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz", + "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz", "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=", "dev": true }, @@ -631,27 +473,13 @@ }, "detect-file": { "version": "0.1.0", - "resolved": - "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz", "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=", "dev": true, "requires": { "fs-exists-sync": "0.1.0" } }, - "detect-newline": { - "version": "2.1.0", - "resolved": - "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", - "dev": true - }, - "diff": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", - "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", - "dev": true - }, "doctypes": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", @@ -674,8 +502,7 @@ }, "readable-stream": { "version": "1.1.14", - "resolved": - "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { @@ -687,8 +514,7 @@ }, "string_decoder": { "version": "0.10.31", - "resolved": - "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true } @@ -699,14 +525,6 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, - "emoji-regex": { - "version": "6.5.1", - "resolved": - "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.1.tgz", - "integrity": - "sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ==", - "dev": true - }, "encodeurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", @@ -714,8 +532,7 @@ }, "end-of-stream": { "version": "0.1.5", - "resolved": - "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", "dev": true, "requires": { @@ -749,8 +566,7 @@ }, "engine.io-client": { "version": "3.1.4", - "resolved": - "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.4.tgz", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.4.tgz", "integrity": "sha1-T88TcLRxY70s6b4nM5ckMDUNTqE=", "requires": { "component-emitter": "1.2.1", @@ -768,8 +584,7 @@ }, "engine.io-parser": { "version": "2.1.1", - "resolved": - "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.1.tgz", + "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", @@ -779,47 +594,22 @@ "has-binary2": "1.0.2" } }, - "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "dev": true, - "requires": { - "is-arrayish": "0.2.1" - } - }, "es6-promise": { "version": "3.2.1", - "resolved": - "https://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz", "integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q=" }, "escape-html": { "version": "1.0.3", - "resolved": - "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, "escape-string-regexp": { "version": "1.0.5", - "resolved": - "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": - "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -827,8 +617,7 @@ }, "expand-brackets": { "version": "0.1.5", - "resolved": - "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { @@ -837,8 +626,7 @@ }, "expand-range": { "version": "1.8.2", - "resolved": - "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { @@ -847,8 +635,7 @@ }, "expand-tilde": { "version": "1.2.2", - "resolved": - "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", "dev": true, "requires": { @@ -894,15 +681,12 @@ "dependencies": { "setprototypeof": { "version": "1.1.0", - "resolved": - "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": - "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, "statuses": { "version": "1.3.1", - "resolved": - "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" } } @@ -932,26 +716,15 @@ "time-stamp": "1.1.0" } }, - "fault": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.1.tgz", - "integrity": "sha1-3o01Df1IviS13BsChn4IcbkTUJI=", - "dev": true, - "requires": { - "format": "0.2.2" - } - }, "filename-regex": { "version": "2.0.1", - "resolved": - "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", "dev": true }, "fill-range": { "version": "2.2.3", - "resolved": - "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", "dev": true, "requires": { @@ -964,8 +737,7 @@ }, "finalhandler": { "version": "1.1.0", - "resolved": - "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", "requires": { "debug": "2.6.9", @@ -979,23 +751,20 @@ "dependencies": { "statuses": { "version": "1.3.1", - "resolved": - "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" } } }, "find-index": { "version": "0.1.1", - "resolved": - "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=", "dev": true }, "findup-sync": { "version": "0.4.3", - "resolved": - "https://registry.npmjs.org/findup-sync/-/findup-sync-0.4.3.tgz", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.4.3.tgz", "integrity": "sha1-QAQ5Kee8YK3wt/SCfExudaDeyhI=", "dev": true, "requires": { @@ -1020,8 +789,7 @@ "dependencies": { "expand-tilde": { "version": "2.0.2", - "resolved": - "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", "dev": true, "requires": { @@ -1032,35 +800,19 @@ }, "first-chunk-stream": { "version": "1.0.0", - "resolved": - "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", "dev": true }, "flagged-respawn": { "version": "0.3.2", - "resolved": - "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-0.3.2.tgz", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-0.3.2.tgz", "integrity": "sha1-/xke3c1wiKZ1smEP/8l2vpuAdLU=", "dev": true }, - "flatten": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", - "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", - "dev": true - }, - "flow-parser": { - "version": "0.59.0", - "resolved": - "https://registry.npmjs.org/flow-parser/-/flow-parser-0.59.0.tgz", - "integrity": "sha1-9uvK5h/6GH5CCZnUDOCoAfObJjU=", - "dev": true - }, "font-awesome": { "version": "4.7.0", - "resolved": - "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz", + "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz", "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=" }, "for-in": { @@ -1078,12 +830,6 @@ "for-in": "1.0.2" } }, - "format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=", - "dev": true - }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", @@ -1096,24 +842,14 @@ }, "fs-exists-sync": { "version": "0.1.0", - "resolved": - "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", + "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=", "dev": true }, - "fs.realpath": { - "version": "1.0.0", - "resolved": - "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, "function-bind": { "version": "1.1.1", - "resolved": - "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": - "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "gaze": { "version": "0.5.2", @@ -1124,13 +860,6 @@ "globule": "0.1.0" } }, - "get-stream": { - "version": "3.0.0", - "resolved": - "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, "glob": { "version": "4.5.3", "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", @@ -1155,8 +884,7 @@ }, "glob-parent": { "version": "2.0.0", - "resolved": - "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, "requires": { @@ -1165,8 +893,7 @@ }, "glob-stream": { "version": "3.1.18", - "resolved": - "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", "dev": true, "requires": { @@ -1186,8 +913,7 @@ }, "readable-stream": { "version": "1.0.34", - "resolved": - "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { @@ -1199,15 +925,13 @@ }, "string_decoder": { "version": "0.10.31", - "resolved": - "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true }, "through2": { "version": "0.6.5", - "resolved": - "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { @@ -1219,8 +943,7 @@ }, "glob-watcher": { "version": "0.0.6", - "resolved": - "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", "dev": true, "requires": { @@ -1238,8 +961,7 @@ }, "global-modules": { "version": "0.2.3", - "resolved": - "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=", "dev": true, "requires": { @@ -1249,8 +971,7 @@ }, "global-prefix": { "version": "0.1.5", - "resolved": - "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=", "dev": true, "requires": { @@ -1260,47 +981,6 @@ "which": "1.3.0" } }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": - "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.3.3", - "path-is-absolute": "1.0.1" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": - "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": - "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - } - } - }, "globule": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", @@ -1325,15 +1005,13 @@ }, "graceful-fs": { "version": "1.2.3", - "resolved": - "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", "dev": true }, "inherits": { "version": "1.0.2", - "resolved": - "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", "dev": true }, @@ -1345,8 +1023,7 @@ }, "minimatch": { "version": "0.2.14", - "resolved": - "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", "dev": true, "requires": { @@ -1367,8 +1044,7 @@ }, "graceful-fs": { "version": "3.0.11", - "resolved": - "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", "dev": true, "requires": { @@ -1377,20 +1053,9 @@ }, "graceful-readlink": { "version": "1.0.1", - "resolved": - "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" }, - "graphql": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-0.10.5.tgz", - "integrity": - "sha512-Q7cx22DiLhwHsEfUnUip1Ww/Vfx7FS0w6+iHItNuN61+XpegHSa3k5U0+6M5BcpavQImBwFiy0z3uYwY7cXMLQ==", - "dev": true, - "requires": { - "iterall": "1.1.3" - } - }, "gulp": { "version": "3.9.1", "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", @@ -1422,10 +1087,8 @@ }, "gulp-clean-css": { "version": "3.9.0", - "resolved": - "https://registry.npmjs.org/gulp-clean-css/-/gulp-clean-css-3.9.0.tgz", - "integrity": - "sha512-CsqaSO2ZTMQI/WwbWloZWBudhsRMKgxBthzxt4bbcbWrjOY4pRFziyK9IH6YbTpaWAPKEwWpopPkpiAEoDofxw==", + "resolved": "https://registry.npmjs.org/gulp-clean-css/-/gulp-clean-css-3.9.0.tgz", + "integrity": "sha512-CsqaSO2ZTMQI/WwbWloZWBudhsRMKgxBthzxt4bbcbWrjOY4pRFziyK9IH6YbTpaWAPKEwWpopPkpiAEoDofxw==", "dev": true, "requires": { "clean-css": "4.1.9", @@ -1436,8 +1099,7 @@ "dependencies": { "clean-css": { "version": "4.1.9", - "resolved": - "https://registry.npmjs.org/clean-css/-/clean-css-4.1.9.tgz", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.9.tgz", "integrity": "sha1-Nc7ornaHpJuYA09w3gDE7dOCYwE=", "dev": true, "requires": { @@ -1446,8 +1108,7 @@ }, "source-map": { "version": "0.5.7", - "resolved": - "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true } @@ -1466,10 +1127,8 @@ }, "gulp-uglify-es": { "version": "0.1.4", - "resolved": - "https://registry.npmjs.org/gulp-uglify-es/-/gulp-uglify-es-0.1.4.tgz", - "integrity": - "sha512-gVAzB1ubmPScn49lU78fA+CZzW8jK6GGAY7p9M11WKO/yIs9DY+4WB+GUnZ53sD6Wq9GpaOPUPH7WRgmKxBsqw==", + "resolved": "https://registry.npmjs.org/gulp-uglify-es/-/gulp-uglify-es-0.1.4.tgz", + "integrity": "sha512-gVAzB1ubmPScn49lU78fA+CZzW8jK6GGAY7p9M11WKO/yIs9DY+4WB+GUnZ53sD6Wq9GpaOPUPH7WRgmKxBsqw==", "dev": true, "requires": { "gulp-exec": "2.1.3", @@ -1479,26 +1138,20 @@ "dependencies": { "commander": { "version": "2.11.0", - "resolved": - "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": - "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", "dev": true }, "source-map": { "version": "0.6.1", - "resolved": - "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": - "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "uglify-es": { "version": "3.1.10", - "resolved": - "https://registry.npmjs.org/uglify-es/-/uglify-es-3.1.10.tgz", - "integrity": - "sha512-RwBX0aOeHvO8MKKUeLCArQGb9OZ6xA+EqfVxsE9wqK0saFYFVLIFvHeeCOg61C6NO6KCuSiG9OjNjCA+OB4nzg==", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.1.10.tgz", + "integrity": "sha512-RwBX0aOeHvO8MKKUeLCArQGb9OZ6xA+EqfVxsE9wqK0saFYFVLIFvHeeCOg61C6NO6KCuSiG9OjNjCA+OB4nzg==", "dev": true, "requires": { "commander": "2.11.0", @@ -1535,8 +1188,7 @@ "dependencies": { "object-assign": { "version": "3.0.0", - "resolved": - "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", "dev": true } @@ -1570,8 +1222,7 @@ }, "has-binary2": { "version": "1.0.2", - "resolved": - "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.2.tgz", "integrity": "sha1-6D26SfC5vk0CbSc2U1DZ8D9Uvpg=", "requires": { "isarray": "2.0.1" @@ -1589,16 +1240,9 @@ "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=", - "dev": true - }, "has-gulplog": { "version": "0.1.0", - "resolved": - "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", "dev": true, "requires": { @@ -1607,8 +1251,7 @@ }, "homedir-polyfill": { "version": "1.0.1", - "resolved": - "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", "dev": true, "requires": { @@ -1617,15 +1260,12 @@ }, "hooks-fixed": { "version": "2.0.2", - "resolved": - "https://registry.npmjs.org/hooks-fixed/-/hooks-fixed-2.0.2.tgz", - "integrity": - "sha512-YurCM4gQSetcrhwEtpQHhQ4M7Zo7poNGqY4kQGeBS6eZtOcT3tnNs01ThFa0jYBByAiYt1MjMjP/YApG0EnAvQ==" + "resolved": "https://registry.npmjs.org/hooks-fixed/-/hooks-fixed-2.0.2.tgz", + "integrity": "sha512-YurCM4gQSetcrhwEtpQHhQ4M7Zo7poNGqY4kQGeBS6eZtOcT3tnNs01ThFa0jYBByAiYt1MjMjP/YApG0EnAvQ==" }, "http-errors": { "version": "1.6.2", - "resolved": - "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", "requires": { "depd": "1.1.1", @@ -1636,24 +1276,8 @@ }, "iconv-lite": { "version": "0.4.19", - "resolved": - "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": - "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" - }, - "ignore": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", - "integrity": - "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", - "dev": true - }, - "indexes-of": { - "version": "1.0.1", - "resolved": - "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" }, "indexof": { "version": "0.0.1", @@ -1678,8 +1302,7 @@ "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": - "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true }, "interpret": { @@ -1695,8 +1318,7 @@ }, "is-absolute": { "version": "0.2.6", - "resolved": - "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", "dev": true, "requires": { @@ -1704,62 +1326,20 @@ "is-windows": "0.2.0" } }, - "is-alphabetical": { - "version": "1.0.1", - "resolved": - "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.1.tgz", - "integrity": "sha1-x3B5zJHU76x3W+EDS/LSQ/lebwg=", - "dev": true - }, - "is-alphanumerical": { - "version": "1.0.1", - "resolved": - "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.1.tgz", - "integrity": "sha1-37SqTRCF4zvbYcLe6cgOnGwZ9Ts=", - "dev": true, - "requires": { - "is-alphabetical": "1.0.1", - "is-decimal": "1.0.1" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": - "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": - "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-decimal": { - "version": "1.0.1", - "resolved": - "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.1.tgz", - "integrity": "sha1-9ftqlJlq2ejjdh+/vQkfH8qMToI=", - "dev": true - }, - "is-directory": { - "version": "0.3.1", - "resolved": - "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-dotfile": { "version": "1.0.3", - "resolved": - "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", "dev": true }, "is-equal-shallow": { "version": "0.1.3", - "resolved": - "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "dev": true, "requires": { @@ -1768,8 +1348,7 @@ }, "is-expression": { "version": "2.1.0", - "resolved": - "https://registry.npmjs.org/is-expression/-/is-expression-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-2.1.0.tgz", "integrity": "sha1-kb6dR968/vB3l36XIr5tz7RGXvA=", "requires": { "acorn": "3.3.0", @@ -1778,25 +1357,16 @@ }, "is-extendable": { "version": "0.1.1", - "resolved": - "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true }, "is-extglob": { "version": "1.0.0", - "resolved": - "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", "dev": true }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": - "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, "is-glob": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", @@ -1806,13 +1376,6 @@ "is-extglob": "1.0.0" } }, - "is-hexadecimal": { - "version": "1.0.1", - "resolved": - "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.1.tgz", - "integrity": "sha1-bghLvJIGH7sJcexYts5tQE4k2mk=", - "dev": true - }, "is-number": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", @@ -1822,19 +1385,10 @@ "kind-of": "3.2.2" } }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": - "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, "is-plain-object": { "version": "2.0.4", - "resolved": - "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": - "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { "isobject": "3.0.1" @@ -1842,8 +1396,7 @@ "dependencies": { "isobject": { "version": "3.0.1", - "resolved": - "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true } @@ -1851,22 +1404,19 @@ }, "is-posix-bracket": { "version": "0.1.1", - "resolved": - "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", "dev": true }, "is-primitive": { "version": "2.0.0", - "resolved": - "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", "dev": true }, "is-promise": { "version": "2.1.0", - "resolved": - "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" }, "is-regex": { @@ -1879,8 +1429,7 @@ }, "is-relative": { "version": "0.2.1", - "resolved": - "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", "dev": true, "requires": { @@ -1889,8 +1438,7 @@ }, "is-unc-path": { "version": "0.1.2", - "resolved": - "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", "dev": true, "requires": { @@ -1903,27 +1451,12 @@ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, - "is-whitespace-character": { - "version": "1.0.1", - "resolved": - "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.1.tgz", - "integrity": "sha1-muAXbzKCtlRXoZks2whPil+DPjs=", - "dev": true - }, "is-windows": { "version": "0.2.0", - "resolved": - "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", "dev": true }, - "is-word-character": { - "version": "1.0.1", - "resolved": - "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.1.tgz", - "integrity": "sha1-WgP6HqkazopusMfNdw64bWXIvvs=", - "dev": true - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -1944,120 +1477,19 @@ "isarray": "1.0.0" } }, - "iterall": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.1.3.tgz", - "integrity": - "sha512-Cu/kb+4HiNSejAPhSaN1VukdNTTi/r4/e+yykqjlG/IW+1gZH5b4+Bq3whDX4tvbYugta3r8KTMUiqT3fIGxuQ==", - "dev": true - }, - "jest-docblock": { - "version": "21.3.0-beta.7", - "resolved": - "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.3.0-beta.7.tgz", - "integrity": - "sha512-Qk4si4BSb79ZNUsxYHGBXHf+nIUD9fbgfkipow+WGL8HSwp1cDOU1i127MC5kIqjoU7h9HOZcJlzBKcip4uizQ==", - "dev": true, - "requires": { - "detect-newline": "2.1.0" - } - }, - "jest-get-type": { - "version": "21.2.0", - "resolved": - "https://registry.npmjs.org/jest-get-type/-/jest-get-type-21.2.0.tgz", - "integrity": - "sha512-y2fFw3C+D0yjNSDp7ab1kcd6NUYfy3waPTlD8yWkAtiocJdBRQqNoRqVfMNxgj+IjT0V5cBIHJO0z9vuSSZ43Q==", - "dev": true - }, - "jest-validate": { - "version": "21.1.0", - "resolved": - "https://registry.npmjs.org/jest-validate/-/jest-validate-21.1.0.tgz", - "integrity": - "sha512-xS0cyErNWpsLFlGkn/b87pk/Mv7J+mCTs8hQ4KmtOIIoM1sHYobXII8AtkoN8FC7E3+Ptxjo+/3xWk6LK1dKcw==", - "dev": true, - "requires": { - "chalk": "2.3.0", - "jest-get-type": "21.2.0", - "leven": "2.1.0", - "pretty-format": "21.2.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": - "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": - "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": - "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "supports-color": { - "version": "4.5.0", - "resolved": - "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, "jquery": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.2.1.tgz", "integrity": "sha1-XE2d5lKvbNCncBVKYxu6ErAVx4c=" }, - "js-base64": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.0.tgz", - "integrity": - "sha512-Wehd+7Pf9tFvGb+ydPm9TjYjV8X1YHOVyG8QyELZxEMqOhemVwGRmoG8iQ/soqI3n8v4xn59zaLxiCJiaaRzKA==", - "dev": true - }, "js-stringify": { "version": "1.0.2", - "resolved": - "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=" }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "js-yaml": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", - "integrity": - "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", - "dev": true, - "requires": { - "argparse": "1.0.9", - "esprima": "4.0.0" - } - }, "jstransformer": { "version": "1.0.0", - "resolved": - "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", "requires": { "is-promise": "2.1.0", @@ -2079,16 +1511,9 @@ }, "lazy-cache": { "version": "1.0.4", - "resolved": - "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" }, - "leven": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", - "dev": true - }, "liftoff": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.3.0.tgz", @@ -2113,71 +1538,61 @@ }, "lodash._basecopy": { "version": "3.0.1", - "resolved": - "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", "dev": true }, "lodash._basetostring": { "version": "3.0.1", - "resolved": - "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", "dev": true }, "lodash._basevalues": { "version": "3.0.0", - "resolved": - "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", "dev": true }, "lodash._getnative": { "version": "3.9.1", - "resolved": - "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", "dev": true }, "lodash._isiterateecall": { "version": "3.0.9", - "resolved": - "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", "dev": true }, "lodash._reescape": { "version": "3.0.0", - "resolved": - "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", "dev": true }, "lodash._reevaluate": { "version": "3.0.0", - "resolved": - "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", "dev": true }, "lodash._reinterpolate": { "version": "3.0.0", - "resolved": - "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", "dev": true }, "lodash._root": { "version": "3.0.1", - "resolved": - "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", "dev": true }, "lodash.escape": { "version": "3.2.0", - "resolved": - "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", "dev": true, "requires": { @@ -2186,42 +1601,36 @@ }, "lodash.get": { "version": "4.4.2", - "resolved": - "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" }, "lodash.isarguments": { "version": "3.1.0", - "resolved": - "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", "dev": true }, "lodash.isarray": { "version": "3.0.4", - "resolved": - "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", "dev": true }, "lodash.isplainobject": { "version": "4.0.6", - "resolved": - "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", "dev": true }, "lodash.isstring": { "version": "4.0.1", - "resolved": - "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", "dev": true }, "lodash.keys": { "version": "3.1.2", - "resolved": - "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", "dev": true, "requires": { @@ -2232,22 +1641,19 @@ }, "lodash.mapvalues": { "version": "4.6.0", - "resolved": - "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", "dev": true }, "lodash.restparam": { "version": "3.6.1", - "resolved": - "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", "dev": true }, "lodash.template": { "version": "3.6.2", - "resolved": - "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", "dev": true, "requires": { @@ -2264,8 +1670,7 @@ }, "lodash.templatesettings": { "version": "3.1.1", - "resolved": - "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", "dev": true, "requires": { @@ -2273,13 +1678,6 @@ "lodash.escape": "3.2.0" } }, - "lodash.unescape": { - "version": "4.0.1", - "resolved": - "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", - "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", - "dev": true - }, "long": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/long/-/long-2.4.0.tgz", @@ -2302,18 +1700,10 @@ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, - "markdown-escapes": { - "version": "1.0.1", - "resolved": - "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.1.tgz", - "integrity": "sha1-GZTfLTr0gR3lmmcUk0wrIpJzRRg=", - "dev": true - }, "mdns": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/mdns/-/mdns-2.3.4.tgz", - "integrity": - "sha512-Z4WTKeTukCtJG53SS3BGNnsGkHdIXNZa9nwGMYeoohU1AjEBPS3c/1vIx95SEfeQKYduuOMTo1E4RfXDUt2ZYg==", + "integrity": "sha512-Z4WTKeTukCtJG53SS3BGNnsGkHdIXNZa9nwGMYeoohU1AjEBPS3c/1vIx95SEfeQKYduuOMTo1E4RfXDUt2ZYg==", "requires": { "bindings": "1.2.1", "nan": "2.3.5" @@ -2321,23 +1711,12 @@ }, "media-typer": { "version": "0.3.0", - "resolved": - "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", - "dev": true, - "requires": { - "mimic-fn": "1.1.0" - } - }, "merge-descriptors": { "version": "1.0.1", - "resolved": - "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, "methods": { @@ -2347,8 +1726,7 @@ }, "micromatch": { "version": "2.3.11", - "resolved": - "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { @@ -2370,8 +1748,7 @@ "mime": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": - "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" }, "mime-db": { "version": "1.30.0", @@ -2380,19 +1757,12 @@ }, "mime-types": { "version": "2.1.17", - "resolved": - "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "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" } }, - "mimic-fn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", - "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", - "dev": true - }, "minimatch": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", @@ -2419,8 +1789,7 @@ "dependencies": { "minimist": { "version": "0.0.8", - "resolved": - "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true } @@ -2438,8 +1807,7 @@ }, "mongodb-core": { "version": "2.1.17", - "resolved": - "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.17.tgz", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.17.tgz", "integrity": "sha1-pBizN6FKFJkPtRC5I97mqBMXPfg=", "requires": { "bson": "1.0.4", @@ -2449,8 +1817,7 @@ "mongoose": { "version": "4.13.4", "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-4.13.4.tgz", - "integrity": - "sha512-MYS9qWVmWz0PJ1tewtGisKT3/61ctcgX05w9epcy2WQ+1IH4HIPFO5hToR4u+ro7fyBWpSsTlUPMBJblzRLCzQ==", + "integrity": "sha512-MYS9qWVmWz0PJ1tewtGisKT3/61ctcgX05w9epcy2WQ+1IH4HIPFO5hToR4u+ro7fyBWpSsTlUPMBJblzRLCzQ==", "requires": { "async": "2.1.4", "bson": "1.0.4", @@ -2480,8 +1847,7 @@ "mquery": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/mquery/-/mquery-2.3.2.tgz", - "integrity": - "sha512-KXWMypZSvhCuqRtza+HMQZdYw7PfFBjBTFvP31NNAq0OX0/NTIgpcDpkWQ2uTxk6vGQtwQ2elhwhs+ZvCA8OaA==", + "integrity": "sha512-KXWMypZSvhCuqRtza+HMQZdYw7PfFBjBTFvP31NNAq0OX0/NTIgpcDpkWQ2uTxk6vGQtwQ2elhwhs+ZvCA8OaA==", "requires": { "bluebird": "3.5.1", "debug": "2.6.9", @@ -2513,8 +1879,7 @@ "muri": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/muri/-/muri-1.3.0.tgz", - "integrity": - "sha512-FiaFwKl864onHFFUV/a2szAl7X0fxVlSKNdhTf+BM8i8goEgYut8u5P9MqQqIYwvaMxjzVESsoEm/2kfkFH1rg==" + "integrity": "sha512-FiaFwKl864onHFFUV/a2szAl7X0fxVlSKNdhTf+BM8i8goEgYut8u5P9MqQqIYwvaMxjzVESsoEm/2kfkFH1rg==" }, "nan": { "version": "2.3.5", @@ -2529,14 +1894,12 @@ }, "negotiator": { "version": "0.6.1", - "resolved": - "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, "normalize-path": { "version": "2.1.1", - "resolved": - "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { @@ -2546,26 +1909,22 @@ "o-stream": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/o-stream/-/o-stream-0.2.2.tgz", - "integrity": - "sha512-V3j76KU3g/Gyl8rpdi2z72rn5zguMvTCQgAXfBe3pxEefKqXmOUOD7mvx/mNjykdxGqDVfpSoo8r+WdrkWg/1Q==", + "integrity": "sha512-V3j76KU3g/Gyl8rpdi2z72rn5zguMvTCQgAXfBe3pxEefKqXmOUOD7mvx/mNjykdxGqDVfpSoo8r+WdrkWg/1Q==", "dev": true }, "object-assign": { "version": "4.1.1", - "resolved": - "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "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", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" }, "object.defaults": { "version": "1.1.0", - "resolved": - "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", "dev": true, "requires": { @@ -2586,8 +1945,7 @@ }, "isobject": { "version": "3.0.1", - "resolved": - "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true } @@ -2595,8 +1953,7 @@ }, "object.omit": { "version": "2.0.1", - "resolved": - "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "dev": true, "requires": { @@ -2606,8 +1963,7 @@ }, "object.pick": { "version": "1.3.0", - "resolved": - "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { @@ -2616,8 +1972,7 @@ "dependencies": { "isobject": { "version": "3.0.1", - "resolved": - "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true } @@ -2625,8 +1980,7 @@ }, "on-finished": { "version": "2.3.0", - "resolved": - "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", "requires": { "ee-first": "1.1.1" @@ -2648,8 +2002,7 @@ }, "orchestrator": { "version": "0.3.8", - "resolved": - "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", + "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", "dev": true, "requires": { @@ -2660,37 +2013,19 @@ }, "ordered-read-streams": { "version": "0.1.0", - "resolved": - "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=", "dev": true }, "os-homedir": { "version": "1.0.2", - "resolved": - "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, - "parse-entities": { - "version": "1.1.1", - "resolved": - "https://registry.npmjs.org/parse-entities/-/parse-entities-1.1.1.tgz", - "integrity": "sha1-gRLYhHExnyerrk1klksSL+ThuJA=", - "dev": true, - "requires": { - "character-entities": "1.2.1", - "character-entities-legacy": "1.1.1", - "character-reference-invalid": "1.1.1", - "is-alphanumerical": "1.0.1", - "is-decimal": "1.0.1", - "is-hexadecimal": "1.0.1" - } - }, "parse-filepath": { "version": "1.0.1", - "resolved": - "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.1.tgz", "integrity": "sha1-FZ1hVdQ5BNFsEO9piRHaHpGWm3M=", "dev": true, "requires": { @@ -2701,8 +2036,7 @@ }, "parse-glob": { "version": "3.0.4", - "resolved": - "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "dev": true, "requires": { @@ -2712,33 +2046,12 @@ "is-glob": "2.0.1" } }, - "parse-json": { - "version": "3.0.0", - "resolved": - "https://registry.npmjs.org/parse-json/-/parse-json-3.0.0.tgz", - "integrity": "sha1-+m9HsY4jgm6tMvJj50TQ4ehH+xM=", - "dev": true, - "requires": { - "error-ex": "1.3.1" - } - }, "parse-passwd": { "version": "1.0.0", - "resolved": - "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", "dev": true }, - "parse5": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", - "integrity": - "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", - "dev": true, - "requires": { - "@types/node": "8.5.2" - } - }, "parseqs": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", @@ -2760,17 +2073,9 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": - "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, "path-parse": { "version": "1.0.5", - "resolved": - "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=" }, "path-root": { @@ -2784,347 +2089,43 @@ }, "path-root-regex": { "version": "0.1.2", - "resolved": - "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", "dev": true }, "path-to-regexp": { "version": "0.1.7", - "resolved": - "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": - "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "2.0.4" - } - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": - "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": - "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": - "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": - "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-less": { - "version": "1.1.1", - "resolved": - "https://registry.npmjs.org/postcss-less/-/postcss-less-1.1.1.tgz", - "integrity": - "sha512-zl0EEqq8Urh37Ppdv9zzhpZpLHrgkxmt6e3O4ftRa7/b8Uq2LV+/KBVM8/KuzmHNu+mthhOArg1lxbfqQ3NUdg==", - "dev": true, - "requires": { - "postcss": "5.2.18" - } - }, - "postcss-media-query-parser": { - "version": "0.2.3", - "resolved": - "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=", - "dev": true - }, - "postcss-scss": { - "version": "1.0.2", - "resolved": - "https://registry.npmjs.org/postcss-scss/-/postcss-scss-1.0.2.tgz", - "integrity": "sha1-/0XPM1S4ee6JpOtoaA9GrJuxT5Q=", - "dev": true, - "requires": { - "postcss": "6.0.14" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": - "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": - "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": - "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "postcss": { - "version": "6.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.14.tgz", - "integrity": - "sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog==", - "dev": true, - "requires": { - "chalk": "2.3.0", - "source-map": "0.6.1", - "supports-color": "4.5.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": - "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": - "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "4.5.0", - "resolved": - "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "postcss-selector-parser": { - "version": "2.2.3", - "resolved": - "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", - "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", - "dev": true, - "requires": { - "flatten": "1.0.2", - "indexes-of": "1.0.1", - "uniq": "1.0.1" - } - }, - "postcss-values-parser": { - "version": "1.3.1", - "resolved": - "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-1.3.1.tgz", - "integrity": - "sha512-chFn9CnFAAUpQ3cwrxvVjKB8c0y6BfONv6eapndJoTXJ3h8fr1uAiue8lGP3rUIpBI2KgJGdgCVk9KNvXh0n6A==", - "dev": true, - "requires": { - "flatten": "1.0.2", - "indexes-of": "1.0.1", - "uniq": "1.0.1" - } - }, "preserve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", "dev": true }, - "prettier": { - "version": - "git+https://github.com/superhawk610/prettier.git#be4bf4467857ad7f3ca45901dac48a9fcc61c521", - "dev": true, - "requires": { - "babel-code-frame": "7.0.0-alpha.12", - "babylon": "7.0.0-beta.28", - "camelcase": "4.1.0", - "chalk": "2.1.0", - "cjk-regex": "1.0.2", - "cosmiconfig": "3.1.0", - "dashify": "0.2.2", - "diff": "3.2.0", - "emoji-regex": "6.5.1", - "escape-string-regexp": "1.0.5", - "esutils": "2.0.2", - "flow-parser": "0.59.0", - "get-stream": "3.0.0", - "globby": "6.1.0", - "graphql": "0.10.5", - "ignore": "3.3.7", - "jest-docblock": "21.3.0-beta.7", - "jest-validate": "21.1.0", - "leven": "2.1.0", - "mem": "1.1.0", - "minimatch": "3.0.4", - "minimist": "1.2.0", - "parse5": "3.0.3", - "postcss-less": "1.1.1", - "postcss-media-query-parser": "0.2.3", - "postcss-scss": "1.0.2", - "postcss-selector-parser": "2.2.3", - "postcss-values-parser": "1.3.1", - "remark-frontmatter": "1.1.0", - "remark-parse": "4.0.0", - "semver": "5.4.1", - "string-width": "2.1.1", - "typescript": "2.5.3", - "typescript-eslint-parser": - "git://github.com/eslint/typescript-eslint-parser.git#9c71a627da36e97da52ed2731d58509c952b67ae", - "unicode-regex": "1.0.1", - "unified": "6.1.5" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": - "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": - "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "camelcase": { - "version": "4.1.0", - "resolved": - "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "chalk": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", - "integrity": - "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": - "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": - "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - }, - "supports-color": { - "version": "4.5.0", - "resolved": - "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "pretty-format": { - "version": "21.2.1", - "resolved": - "https://registry.npmjs.org/pretty-format/-/pretty-format-21.2.1.tgz", - "integrity": - "sha512-ZdWPGYAnYfcVP8yKA3zFjCn8s4/17TeYH28MXuC8vTp0o21eXjbFGcOAXZEaDaOFJjc3h2qa7HQNHNshhvoh2A==", - "dev": true, - "requires": { - "ansi-regex": "3.0.0", - "ansi-styles": "3.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": - "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.0", - "resolved": - "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": - "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - } - } - }, "pretty-hrtime": { "version": "1.0.3", - "resolved": - "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", "dev": true }, "process-nextick-args": { "version": "1.0.7", - "resolved": - "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" }, "promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": - "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", "requires": { "asap": "2.0.6" } }, "protobufjs": { "version": "3.8.2", - "resolved": - "https://registry.npmjs.org/protobufjs/-/protobufjs-3.8.2.tgz", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-3.8.2.tgz", "integrity": "sha1-vIJuNMOvRpfo0K96Zp5NYSrtzRc=", "requires": { "ascli": "0.3.0", @@ -3133,8 +2134,7 @@ }, "proxy-addr": { "version": "2.0.2", - "resolved": - "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=", "requires": { "forwarded": "0.1.2", @@ -3144,8 +2144,7 @@ "pug": { "version": "2.0.0-rc.4", "resolved": "https://registry.npmjs.org/pug/-/pug-2.0.0-rc.4.tgz", - "integrity": - "sha512-SL7xovj6E2Loq9N0UgV6ynjMLW4urTFY/L/Fprhvz13Xc5vjzkjZjI1QHKq31200+6PSD8PyU6MqrtCTJj6/XA==", + "integrity": "sha512-SL7xovj6E2Loq9N0UgV6ynjMLW4urTFY/L/Fprhvz13Xc5vjzkjZjI1QHKq31200+6PSD8PyU6MqrtCTJj6/XA==", "requires": { "pug-code-gen": "2.0.0", "pug-filters": "2.1.5", @@ -3169,10 +2168,8 @@ }, "pug-code-gen": { "version": "2.0.0", - "resolved": - "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-2.0.0.tgz", - "integrity": - "sha512-E4oiJT+Jn5tyEIloj8dIJQognbiNNp0i0cAJmYtQTFS0soJ917nlIuFtqVss3IXMEyQKUew3F4gIkBpn18KbVg==", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-2.0.0.tgz", + "integrity": "sha512-E4oiJT+Jn5tyEIloj8dIJQognbiNNp0i0cAJmYtQTFS0soJ917nlIuFtqVss3IXMEyQKUew3F4gIkBpn18KbVg==", "requires": { "constantinople": "3.1.0", "doctypes": "1.1.0", @@ -3191,10 +2188,8 @@ }, "pug-filters": { "version": "2.1.5", - "resolved": - "https://registry.npmjs.org/pug-filters/-/pug-filters-2.1.5.tgz", - "integrity": - "sha512-xkw71KtrC4sxleKiq+cUlQzsiLn8pM5+vCgkChW2E6oNOzaqTSIBKIQ5cl4oheuDzvJYCTSYzRaVinMUrV4YLQ==", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-2.1.5.tgz", + "integrity": "sha512-xkw71KtrC4sxleKiq+cUlQzsiLn8pM5+vCgkChW2E6oNOzaqTSIBKIQ5cl4oheuDzvJYCTSYzRaVinMUrV4YLQ==", "requires": { "clean-css": "3.4.28", "constantinople": "3.1.0", @@ -3222,8 +2217,7 @@ }, "is-expression": { "version": "3.0.0", - "resolved": - "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz", "integrity": "sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=", "requires": { "acorn": "4.0.13", @@ -3234,10 +2228,8 @@ }, "pug-linker": { "version": "3.0.3", - "resolved": - "https://registry.npmjs.org/pug-linker/-/pug-linker-3.0.3.tgz", - "integrity": - "sha512-DCKczglCXOzJ1lr4xUj/lVHYvS+lGmR2+KTCjZjtIpdwaN7lNOoX2SW6KFX5X4ElvW+6ThwB+acSUg08UJFN5A==", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-3.0.3.tgz", + "integrity": "sha512-DCKczglCXOzJ1lr4xUj/lVHYvS+lGmR2+KTCjZjtIpdwaN7lNOoX2SW6KFX5X4ElvW+6ThwB+acSUg08UJFN5A==", "requires": { "pug-error": "1.3.2", "pug-walk": "1.1.5" @@ -3246,8 +2238,7 @@ "pug-load": { "version": "2.0.9", "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.9.tgz", - "integrity": - "sha512-BDdZOCru4mg+1MiZwRQZh25+NTRo/R6/qArrdWIf308rHtWA5N9kpoUskRe4H6FslaQujC+DigH9LqlBA4gf6Q==", + "integrity": "sha512-BDdZOCru4mg+1MiZwRQZh25+NTRo/R6/qArrdWIf308rHtWA5N9kpoUskRe4H6FslaQujC+DigH9LqlBA4gf6Q==", "requires": { "object-assign": "4.1.1", "pug-walk": "1.1.5" @@ -3255,10 +2246,8 @@ }, "pug-parser": { "version": "4.0.0", - "resolved": - "https://registry.npmjs.org/pug-parser/-/pug-parser-4.0.0.tgz", - "integrity": - "sha512-ocEUFPdLG9awwFj0sqi1uiZLNvfoodCMULZzkRqILryIWc/UUlDlxqrKhKjAIIGPX/1SNsvxy63+ayEGocGhQg==", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-4.0.0.tgz", + "integrity": "sha512-ocEUFPdLG9awwFj0sqi1uiZLNvfoodCMULZzkRqILryIWc/UUlDlxqrKhKjAIIGPX/1SNsvxy63+ayEGocGhQg==", "requires": { "pug-error": "1.3.2", "token-stream": "0.0.1" @@ -3266,14 +2255,12 @@ }, "pug-runtime": { "version": "2.0.3", - "resolved": - "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.3.tgz", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.3.tgz", "integrity": "sha1-mBYmB7D86eJU1CfzOYelrucWi9o=" }, "pug-strip-comments": { "version": "1.0.2", - "resolved": - "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-1.0.2.tgz", "integrity": "sha1-0xOvoBvMN0mA4TmeI+vy65vchRM=", "requires": { "pug-error": "1.3.2" @@ -3282,21 +2269,17 @@ "pug-walk": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.5.tgz", - "integrity": - "sha512-rJlH1lXerCIAtImXBze3dtKq/ykZMA4rpO9FnPcIgsWcxZLOvd8zltaoeOVFyBSSqCkhhJWbEbTMga8UxWUUSA==" + "integrity": "sha512-rJlH1lXerCIAtImXBze3dtKq/ykZMA4rpO9FnPcIgsWcxZLOvd8zltaoeOVFyBSSqCkhhJWbEbTMga8UxWUUSA==" }, "qs": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": - "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" }, "randomatic": { "version": "1.1.7", - "resolved": - "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": - "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", "dev": true, "requires": { "is-number": "3.0.0", @@ -3305,8 +2288,7 @@ "dependencies": { "is-number": { "version": "3.0.0", - "resolved": - "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { @@ -3315,8 +2297,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", - "resolved": - "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { @@ -3338,8 +2319,7 @@ }, "range-parser": { "version": "1.2.0", - "resolved": - "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" }, "raw-body": { @@ -3355,8 +2335,7 @@ }, "readable-stream": { "version": "2.2.7", - "resolved": - "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz", "integrity": "sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE=", "requires": { "buffer-shims": "1.0.0", @@ -3379,10 +2358,8 @@ }, "regex-cache": { "version": "0.4.4", - "resolved": - "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": - "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "dev": true, "requires": { "is-equal-shallow": "0.1.3" @@ -3390,87 +2367,36 @@ }, "regexp-clone": { "version": "0.0.1", - "resolved": - "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz", + "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz", "integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk=" }, - "remark-frontmatter": { - "version": "1.1.0", - "resolved": - "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-1.1.0.tgz", - "integrity": - "sha512-mLbYtwP9w1L9TA8dX+I/HyDF5lCpa0dmYvvW9Io+zUPpqEZ49QMKWb0hSpunpLVA+Squy0SowzSzjHVPbxWq1g==", - "dev": true, - "requires": { - "fault": "1.0.1", - "xtend": "4.0.1" - } - }, - "remark-parse": { - "version": "4.0.0", - "resolved": - "https://registry.npmjs.org/remark-parse/-/remark-parse-4.0.0.tgz", - "integrity": - "sha512-XZgICP2gJ1MHU7+vQaRM+VA9HEL3X253uwUM/BGgx3iv6TH2B3bF3B8q00DKcyP9YrJV+/7WOWEWBFF/u8cIsw==", - "dev": true, - "requires": { - "collapse-white-space": "1.0.3", - "is-alphabetical": "1.0.1", - "is-decimal": "1.0.1", - "is-whitespace-character": "1.0.1", - "is-word-character": "1.0.1", - "markdown-escapes": "1.0.1", - "parse-entities": "1.1.1", - "repeat-string": "1.6.1", - "state-toggle": "1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "1.1.0", - "unherit": "1.1.0", - "unist-util-remove-position": "1.1.1", - "vfile-location": "2.0.2", - "xtend": "4.0.1" - } - }, "remove-trailing-separator": { "version": "1.1.0", - "resolved": - "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", "dev": true }, "repeat-element": { "version": "1.1.2", - "resolved": - "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", "dev": true }, "repeat-string": { "version": "1.6.1", - "resolved": - "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, "replace-ext": { "version": "0.0.1", - "resolved": - "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", "dev": true }, - "require-from-string": { - "version": "2.0.1", - "resolved": - "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.1.tgz", - "integrity": "sha1-xUUjPp19pmFunVmt+zn8n1iGdv8=", - "dev": true - }, "require_optional": { "version": "1.0.1", - "resolved": - "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", - "integrity": - "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", + "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", + "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", "requires": { "resolve-from": "2.0.0", "semver": "5.4.1" @@ -3479,16 +2405,14 @@ "resolve": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", - "integrity": - "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", + "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", "requires": { "path-parse": "1.0.5" } }, "resolve-dir": { "version": "0.1.1", - "resolved": - "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=", "dev": true, "requires": { @@ -3498,14 +2422,12 @@ }, "resolve-from": { "version": "2.0.0", - "resolved": - "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" }, "right-align": { "version": "0.1.3", - "resolved": - "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", "requires": { "align-text": "0.1.4" @@ -3513,22 +2435,18 @@ }, "safe-buffer": { "version": "5.1.1", - "resolved": - "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": - "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + "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==" + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" }, "send": { "version": "0.16.1", "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", - "integrity": - "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", + "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", "requires": { "debug": "2.6.9", "depd": "1.1.1", @@ -3547,25 +2465,21 @@ "dependencies": { "statuses": { "version": "1.3.1", - "resolved": - "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" } } }, "sequencify": { "version": "0.0.7", - "resolved": - "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", + "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=", "dev": true }, "serve-static": { "version": "1.13.1", - "resolved": - "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", - "integrity": - "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", + "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", "requires": { "encodeurl": "1.0.1", "escape-html": "1.0.3", @@ -3575,8 +2489,7 @@ }, "setprototypeof": { "version": "1.0.3", - "resolved": - "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" }, "sigmund": { @@ -3604,14 +2517,12 @@ }, "socket.io-adapter": { "version": "1.1.1", - "resolved": - "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "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", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz", "integrity": "sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=", "requires": { "backo2": "1.0.2", @@ -3631,8 +2542,7 @@ }, "socket.io-parser": { "version": "3.1.2", - "resolved": - "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.2.tgz", + "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", @@ -3650,8 +2560,7 @@ }, "source-map": { "version": "0.4.4", - "resolved": - "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "requires": { "amdefine": "1.0.1" @@ -3665,82 +2574,31 @@ }, "spectre.css": { "version": "0.4.6", - "resolved": - "https://registry.npmjs.org/spectre.css/-/spectre.css-0.4.6.tgz", + "resolved": "https://registry.npmjs.org/spectre.css/-/spectre.css-0.4.6.tgz", "integrity": "sha1-HfmK0Qk/rpDebHSHlmDVnNAphU8=" }, - "sprintf-js": { - "version": "1.0.3", - "resolved": - "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "state-toggle": { - "version": "1.0.0", - "resolved": - "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.0.tgz", - "integrity": "sha1-0g+aYWu08MO5i5GSLSW2QKorxCU=", - "dev": true - }, "statuses": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": - "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" }, "stream-consume": { "version": "0.1.0", - "resolved": - "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.0.tgz", + "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.0.tgz", "integrity": "sha1-pB6tGm1ggc63n2WwYZAbbY89HQ8=", "dev": true }, - "string-width": { - "version": "2.1.1", - "resolved": - "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": - "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": - "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": - "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, "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==", + "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", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -3759,8 +2617,7 @@ }, "supports-color": { "version": "2.0.0", - "resolved": - "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true }, @@ -3785,8 +2642,7 @@ }, "time-stamp": { "version": "1.1.0", - "resolved": - "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", "dev": true }, @@ -3797,29 +2653,9 @@ }, "token-stream": { "version": "0.0.1", - "resolved": - "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=" }, - "trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", - "dev": true - }, - "trim-trailing-lines": { - "version": "1.1.0", - "resolved": - "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.0.tgz", - "integrity": "sha1-eu+7eAjfnWafbaLkOMrIxGradoQ=", - "dev": true - }, - "trough": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.1.tgz", - "integrity": "sha1-qf2LA5Swro//guBjOgo2zK1bX4Y=", - "dev": true - }, "type-is": { "version": "1.6.15", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", @@ -3829,23 +2665,6 @@ "mime-types": "2.1.17" } }, - "typescript": { - "version": "2.5.3", - "resolved": - "https://registry.npmjs.org/typescript/-/typescript-2.5.3.tgz", - "integrity": - "sha512-ptLSQs2S4QuS6/OD1eAKG+S5G8QQtrU5RT32JULdZQtM1L3WTi34Wsu48Yndzi8xsObRAB9RPt/KhA9wlpEF6w==", - "dev": true - }, - "typescript-eslint-parser": { - "version": - "git://github.com/eslint/typescript-eslint-parser.git#9c71a627da36e97da52ed2731d58509c952b67ae", - "dev": true, - "requires": { - "lodash.unescape": "4.0.1", - "semver": "5.4.1" - } - }, "uglify-js": { "version": "2.8.29", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", @@ -3858,112 +2677,34 @@ "dependencies": { "source-map": { "version": "0.5.7", - "resolved": - "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" } } }, "uglify-to-browserify": { "version": "1.0.2", - "resolved": - "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", "optional": true }, "ultron": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": - "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" }, "unc-path-regex": { "version": "0.1.2", - "resolved": - "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", "dev": true }, - "unherit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.0.tgz", - "integrity": "sha1-a5qu379z3xdWrZ4xbdmBiFhAzX0=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "xtend": "4.0.1" - } - }, - "unicode-regex": { - "version": "1.0.1", - "resolved": - "https://registry.npmjs.org/unicode-regex/-/unicode-regex-1.0.1.tgz", - "integrity": "sha1-+BngUBkdW5VhozmljdO5CV7ZSzU=", - "dev": true - }, - "unified": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/unified/-/unified-6.1.5.tgz", - "integrity": "sha1-cWk3hyYhpjE15iztLzrGoGPG+4c=", - "dev": true, - "requires": { - "bail": "1.0.2", - "extend": "3.0.1", - "is-plain-obj": "1.1.0", - "trough": "1.0.1", - "vfile": "2.3.0", - "x-is-function": "1.0.4", - "x-is-string": "0.1.0" - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, "unique-stream": { "version": "1.0.0", - "resolved": - "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz", "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=", "dev": true }, - "unist-util-is": { - "version": "2.1.1", - "resolved": - "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.1.tgz", - "integrity": "sha1-DDEmKeP5YMZukx6BLT2A53AQlHs=", - "dev": true - }, - "unist-util-remove-position": { - "version": "1.1.1", - "resolved": - "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.1.tgz", - "integrity": "sha1-WoXBVV/BugwQG4ZwfRXlD6TIcbs=", - "dev": true, - "requires": { - "unist-util-visit": "1.3.0" - } - }, - "unist-util-stringify-position": { - "version": "1.1.1", - "resolved": - "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.1.tgz", - "integrity": "sha1-PMvcU2ee7W7PN3fdf14yKcG2qjw=", - "dev": true - }, - "unist-util-visit": { - "version": "1.3.0", - "resolved": - "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.3.0.tgz", - "integrity": - "sha512-9ntYcxPFtl44gnwXrQKZ5bMqXMY0ZHzUpqMFiU4zcc8mmf/jzYm8GhYgezuUlX4cJIM1zIDYaO6fG/fI+L6iiQ==", - "dev": true, - "requires": { - "unist-util-is": "2.1.1" - } - }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -3977,14 +2718,12 @@ }, "util-deprecate": { "version": "1.0.2", - "resolved": - "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "utils-merge": { "version": "1.0.1", - "resolved": - "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uws": { @@ -4007,46 +2746,6 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, - "vfile": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz", - "integrity": - "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==", - "dev": true, - "requires": { - "is-buffer": "1.1.6", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "1.1.1", - "vfile-message": "1.0.0" - }, - "dependencies": { - "replace-ext": { - "version": "1.0.0", - "resolved": - "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - } - } - }, - "vfile-location": { - "version": "2.0.2", - "resolved": - "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.2.tgz", - "integrity": "sha1-02dcWch3SY5JK0dW/2Xkrxp1IlU=", - "dev": true - }, - "vfile-message": { - "version": "1.0.0", - "resolved": - "https://registry.npmjs.org/vfile-message/-/vfile-message-1.0.0.tgz", - "integrity": - "sha512-HPREhzTOB/sNDc9/Mxf8w0FmHnThg5CRSJdR9VRFkD2riqYWs+fuXlj5z8mIpv2LrD7uU41+oPWFOL4Mjlf+dw==", - "dev": true, - "requires": { - "unist-util-stringify-position": "1.1.1" - } - }, "vinyl": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", @@ -4088,8 +2787,7 @@ }, "readable-stream": { "version": "1.0.34", - "resolved": - "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { @@ -4101,15 +2799,13 @@ }, "string_decoder": { "version": "0.10.31", - "resolved": - "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true }, "through2": { "version": "0.6.5", - "resolved": - "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { @@ -4131,8 +2827,7 @@ }, "vinyl-sourcemaps-apply": { "version": "0.2.1", - "resolved": - "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", + "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", "dev": true, "requires": { @@ -4141,8 +2836,7 @@ "dependencies": { "source-map": { "version": "0.5.7", - "resolved": - "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true } @@ -4150,15 +2844,13 @@ }, "void-elements": { "version": "2.0.1", - "resolved": - "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" }, "which": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": - "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", "dev": true, "requires": { "isexe": "2.0.0" @@ -4166,8 +2858,7 @@ }, "window-size": { "version": "0.1.0", - "resolved": - "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" }, "with": { @@ -4193,32 +2884,16 @@ "ws": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.2.tgz", - "integrity": - "sha512-t+WGpsNxhMR4v6EClXS8r8km5ZljKJzyGhJf7goJz9k5Ye3+b5Bvno5rjqPuIBn5mnn5GBb7o8IrIWHxX1qOLQ==", + "integrity": "sha512-t+WGpsNxhMR4v6EClXS8r8km5ZljKJzyGhJf7goJz9k5Ye3+b5Bvno5rjqPuIBn5mnn5GBb7o8IrIWHxX1qOLQ==", "requires": { "async-limiter": "1.0.0", "safe-buffer": "5.1.1", "ultron": "1.1.1" } }, - "x-is-function": { - "version": "1.0.4", - "resolved": - "https://registry.npmjs.org/x-is-function/-/x-is-function-1.0.4.tgz", - "integrity": "sha1-XSlNw9Joy90GJYDgxd93o5HR+h4=", - "dev": true - }, - "x-is-string": { - "version": "0.1.0", - "resolved": - "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", - "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=", - "dev": true - }, "xmlhttprequest-ssl": { "version": "1.5.4", - "resolved": - "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.4.tgz", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.4.tgz", "integrity": "sha1-BPVgkVcks4kIhxXMDteBPpZ3v1c=" }, "xtend": { diff --git a/package.json b/package.json index 2c4a7bb..315a9da 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,7 @@ { "name": "multicast", "version": "1.1.0", - "description": - "Service for persisting a session indefinitely across multiple Chromecast devices.", + "description": "Service for persisting a session indefinitely across multiple Chromecast devices.", "main": "index.js", "scripts": { "prepublishOnly": "gulp", @@ -16,9 +15,14 @@ "type": "git", "url": "git+https://github.com/superhawk610/multicast.git" }, - "keywords": ["chrome", "chromecast", "multiple", "screens", "persist"], - "author": - "Aaron Ross (https://github.com/superhawk610)", + "keywords": [ + "chrome", + "chromecast", + "multiple", + "screens", + "persist" + ], + "author": "Aaron Ross (https://github.com/superhawk610)", "license": "ISC", "bugs": { "url": "https://github.com/superhawk610/multicast/issues" @@ -28,6 +32,7 @@ "bluebird": "^3.5.0", "body-parser": "^1.18.2", "castv2": "^0.1.9", + "cors": "^2.8.4", "express": "^4.16.1", "font-awesome": "^4.7.0", "jquery": "^3.2.1", From 7d881dd261567dc3d3ddb765cf34cf65487d1896 Mon Sep 17 00:00:00 2001 From: Aaron Ross Date: Sat, 30 Dec 2017 20:09:17 -0500 Subject: [PATCH 8/8] Add channel URL timed rotation --- app/lib/cleanObject.js | 7 + app/lib/connection.js | 26 +- app/lib/devices.js | 1 - app/lib/squashKeyedArrays.js | 30 + app/lib/takeover.js | 5 +- app/models/Channel.js | 11 +- app/routes/channels.js | 14 +- app/routes/devices.js | 1 - app/views/channel.pug | 54 +- app/views/include/nav.pug | 7 + app/views/include/rotation.pug | 5 + app/views/layouts/fullscreen.pug | 3 +- app/views/layouts/right-panel.pug | 5 +- app/views/layouts/template.pug | 4 +- build/css/channel-edit.css | 41 +- build/css/main.css | 3 +- build/js/app.js | 31 +- build/js/channel.js | 81 ++- package-lock.json | 965 +++++++++++++++++++++++++++++- package.json | 2 +- 20 files changed, 1238 insertions(+), 58 deletions(-) create mode 100644 app/lib/cleanObject.js create mode 100644 app/lib/squashKeyedArrays.js create mode 100644 app/views/include/rotation.pug diff --git a/app/lib/cleanObject.js b/app/lib/cleanObject.js new file mode 100644 index 0000000..8a1ed8e --- /dev/null +++ b/app/lib/cleanObject.js @@ -0,0 +1,7 @@ +module.exports = obj => { + let keys = Object.keys(obj) + keys.forEach(k => { + if (!obj[k]) delete obj[k] + }) + return obj +} diff --git a/app/lib/connection.js b/app/lib/connection.js index d19922f..6edf358 100644 --- a/app/lib/connection.js +++ b/app/lib/connection.js @@ -99,16 +99,28 @@ let func = { hasErrors: () => Object.keys(errors).length > 0, getErrors: () => errors, addError: (device, message) => { - if (!errors[device.deviceId]) - errors[device.deviceId] = { - name: device.location, + // you can pass a tag directly instead of a device + let tag = typeof device === 'object' ? device.deviceId : device + if (!errors[tag]) + errors[tag] = { + name: typeof device === 'object' ? device.location : device, messages: [] } - if (errors[device.deviceId].messages.indexOf(message) == -1) - errors[device.deviceId].messages.push(message) + if (errors[tag].messages.indexOf(message) == -1) + errors[tag].messages.push(message) }, - clearErrors: device => delete errors[device.deviceId] + clearErrors: device => + delete errors[typeof device === 'object' ? device.deviceId : device], + hasStatus: () => status.length > 0, + getStatus: () => status.map(s => s.message), + addStatus: (tag, message) => + status.push({ + tag: tag, + message: message + }), + clearStatus: tag => (status = status.filter(s => s.tag != tag)) }, - errors = {} + errors = {}, + status = [] module.exports = func diff --git a/app/lib/devices.js b/app/lib/devices.js index 7a6d9f3..fa914d1 100644 --- a/app/lib/devices.js +++ b/app/lib/devices.js @@ -15,7 +15,6 @@ const func = { Chromecast.find() .populate('channel') .exec((err, chromecasts) => { - console.log(chromecasts) devices = chromecasts devices.forEach(d => (d.status = 'offline')) findDevices() diff --git a/app/lib/squashKeyedArrays.js b/app/lib/squashKeyedArrays.js new file mode 100644 index 0000000..5c3ea22 --- /dev/null +++ b/app/lib/squashKeyedArrays.js @@ -0,0 +1,30 @@ +module.exports = (obj, upgradeElementsToArrays) => { + let keys = Object.keys(obj), + arrays = [] + keys.forEach(k => { + let key = /(.+)\[\d+\]$/.exec(k) + if (key && arrays.indexOf(key[1]) == -1) arrays.push(key[1]) + }) + + arrays.forEach(a => { + let _arr = {}, + arr = [], + highestIndex = 0 + keys.forEach(k => { + let index = new RegExp(`${a}\\[(\\d+)\\]`).exec(k) + if (index) { + highestIndex = Math.max(highestIndex, index) + let item = obj[k] + if (upgradeElementsToArrays && !Array.isArray(item)) item = [item] + arr[index[1]] = item + delete obj[k] + } + }) + for (let i = 0; i < highestIndex; i++) { + if (_arr.hasOwnProperty(i)) arr.push(_arr[i]) + else arr.push(upgradeElementsToArrays ? [] : null) + } + obj[a] = arr + }) + return obj +} diff --git a/app/lib/takeover.js b/app/lib/takeover.js index 4c47014..06d4519 100644 --- a/app/lib/takeover.js +++ b/app/lib/takeover.js @@ -3,6 +3,7 @@ const Channel = require('../models/Channel') const devices = require('../lib/devices') const sockets = require('../lib/sockets') +const connection = require('../lib/connection') var takeover = null @@ -14,14 +15,16 @@ const func = { if (err) console.log(err) takeover = channel + connection.addStatus('takeover', 'Takeover is currently active!') devices.refreshAll(() => callback()) }) }, deactivate: callback => { takeover = null + connection.clearStatus('takeover') sockets.list().forEach(c => c.emit('refresh')) callback() } } -module.exports = func \ No newline at end of file +module.exports = func diff --git a/app/models/Channel.js b/app/models/Channel.js index 995371a..9a0c649 100644 --- a/app/models/Channel.js +++ b/app/models/Channel.js @@ -1,11 +1,12 @@ -'use strict'; -const mongoose = require('mongoose') -const Schema = mongoose.Schema +'use strict' +const mongoose = require('mongoose') +const Schema = mongoose.Schema const ChannelSchema = new Schema({ name: String, layout: String, - URLs: [String] + URLs: [[String]], + duration: Number }) -module.exports = mongoose.model('Channel', ChannelSchema) \ No newline at end of file +module.exports = mongoose.model('Channel', ChannelSchema) diff --git a/app/routes/channels.js b/app/routes/channels.js index 4324670..bdd2e52 100644 --- a/app/routes/channels.js +++ b/app/routes/channels.js @@ -7,6 +7,8 @@ const Chromecast = require('../models/Chromecast') const Channel = require('../models/Channel') const port = require('../lib/config').port +const squashKeyedArrays = require('../lib/squashKeyedArrays') +const cleanObject = require('../lib/cleanObject') router.use((req, res, next) => { if (req.body.URLs) req.body.URLs = req.body.URLs.filter(u => u.trim() != '') @@ -49,7 +51,13 @@ router }) else res.render('index', {}) }) - .post((req, res) => channels.update(req.params.channel_id, req.body, id => res.send(id))) - .delete((req, res) => channels.remove(req.params.channel_id, () => res.sendStatus(200))) + .post((req, res) => { + channels.update(req.params.channel_id, squashKeyedArrays(req.body), id => + res.send(id) + ) + }) + .delete((req, res) => + channels.remove(req.params.channel_id, () => res.sendStatus(200)) + ) -module.exports = router \ No newline at end of file +module.exports = router diff --git a/app/routes/devices.js b/app/routes/devices.js index 6aaaf5f..3794828 100644 --- a/app/routes/devices.js +++ b/app/routes/devices.js @@ -72,7 +72,6 @@ router .route('/:device_id/edit') .get((req, res) => { let d = devices.withId(req.params.device_id) - console.log('rotation', d.rotation) if (d) { res.render('index', { render: 'device', diff --git a/app/views/channel.pug b/app/views/channel.pug index 949da09..66af0c6 100644 --- a/app/views/channel.pug +++ b/app/views/channel.pug @@ -23,18 +23,48 @@ form#edit-channel .layout.right-panel(class=(channel && channel.layout == 'right-panel' ? 'active' : '')) .contents 1 label Contents with Sidebar - if channel - each url, i in channel.URLs - .form-group.display-section.visible - label.form-label.label-lg Section #{i+1} - input.form-input.input-lg(type='text', name='URLs', placeholder='http://192.168.1.100/page.html', value=url) - - var maxSectionCount = 4 - - var length = 0 - - if (channel && channel.URLs) length = channel.URLs.length - each url, i in [...Array(maxSectionCount-length)] - .form-group.display-section(class=((!channel && i == 0) ? 'visible' : '' )) - label.form-label.label-lg Section #{length+i+1} - input.form-input.input-lg(type='text', name='URLs', placeholder='http://192.168.1.100/page.html') + + #channel-list + if channel + each URLs, i in channel.URLs + .display-section.visible + div + label.form-label.label-lg Section #{i+1} + each url, j in URLs + .form-group + label.form-label URL #{j+1} + input.form-input.input-lg(class=(j > 0 ? 'pad-right' : ''), type='text', name='URLs[' + i + ']', placeholder='http://192.168.1.100/page.html', value=url) + if j > 0 + button.btn.btn-lg.btn-link.remove-url + i.fa.fa-trash + button.btn.btn-link.mt-1.add-url + i.fa.fa-plus.mr-2 + | Add Another URL + - var maxSectionCount = 4 + - var length = 0 + - if (channel && channel.URLs) length = channel.URLs.length + each url, i in [...Array(maxSectionCount - length)] + .display-section + div + label.form-label.label-lg Section #{length+i+1} + .form-group + label.form-label URL 1 + input.form-input.input-lg(type='text', name='URLs[' + (length+i) + ']', placeholder='http://192.168.1.100/page.html') + button.btn.btn-link.mt-1.add-url + i.fa.fa-plus.mr-2 + | Add Another URL + + + .form-group#rotation-duration + label.form-label.label-lg Rotation Duration + button.btn.btn-lg.btn-primary(data-duration=15 * 1000) 15s + button.btn.btn-lg(data-duration= 30 * 1000) 30s + button.btn.btn-lg(data-duration= 60 * 1000) 1m + button.btn.btn-lg(data-duration= 2 * 60 * 1000) 2m + button.btn.btn-lg(data-duration= 5 * 60 * 1000) 5m + button.btn.btn-lg(data-duration=30 * 60 * 1000) 30m + button.btn.btn-lg(data-duration=60 * 60 * 1000) 1h + .columns(style='margin-top: 15px') .column button.btn.btn-primary.btn-lg.btn-block(type='submit') Save Channel diff --git a/app/views/include/nav.pug b/app/views/include/nav.pug index 1f02d2e..9359044 100644 --- a/app/views/include/nav.pug +++ b/app/views/include/nav.pug @@ -19,5 +19,12 @@ if connection.hasErrors() i.fa.fa-angle-right |   = m + +if connection.hasStatus() + .toast.status-messages + strong Active Status Conditions + ul + each s in connection.getStatus() + li= s include toast.pug \ No newline at end of file diff --git a/app/views/include/rotation.pug b/app/views/include/rotation.pug new file mode 100644 index 0000000..1b08aea --- /dev/null +++ b/app/views/include/rotation.pug @@ -0,0 +1,5 @@ +if (channel.URLs.find(panel => panel.length > 1)) + - console.log(channel) + script(type='text/javascript'). + var rotationDuration = #{channel.duration}, + rotationChannels = !{JSON.stringify(channel.URLs)} \ No newline at end of file diff --git a/app/views/layouts/fullscreen.pug b/app/views/layouts/fullscreen.pug index 4d3d593..5576366 100644 --- a/app/views/layouts/fullscreen.pug +++ b/app/views/layouts/fullscreen.pug @@ -9,8 +9,9 @@ html(lang='en') include ../include/error.pug include ../include/toast.pug if channel.URLs != null && channel.URLs.length - iframe(src=channel.URLs[0], frameborder=0, framespacing=0) + iframe(src=channel.URLs[0][0], frameborder=0, framespacing=0) + include ../include/rotation.pug script(type='text/javascript', src='/js/jquery.min.js') script(type='text/javascript', src='/socket.io/socket.io.js') if casting diff --git a/app/views/layouts/right-panel.pug b/app/views/layouts/right-panel.pug index 401548b..00affd8 100644 --- a/app/views/layouts/right-panel.pug +++ b/app/views/layouts/right-panel.pug @@ -9,10 +9,11 @@ html(lang='en') include ../include/error.pug include ../include/toast.pug if channel.URLS != null && channel.URLs.length - iframe(src=channel.URLs[0], frameborder=0, framespacing=0) + iframe(src=channel.URLs[0][0], frameborder=0, framespacing=0) if channel.URLs.length > 1 - iframe(src=channel.URLS[1], frameborder=0, framespacing=0) + iframe(src=channel.URLS[1][0], frameborder=0, framespacing=0) + include ../include/rotation.pug script(type='text/javascript', src='/js/jquery.min.js') script(type='text/javascript', src='/socket.io/socket.io.js') if casting diff --git a/app/views/layouts/template.pug b/app/views/layouts/template.pug index ebb4983..abe8f4c 100644 --- a/app/views/layouts/template.pug +++ b/app/views/layouts/template.pug @@ -10,9 +10,9 @@ html(lang='en') include ../include/toast.pug if channel.URLS != null && channel.URLs.length each u in channel.URLS - iframe(src=u, frameborder=0, framespacing=0) + iframe(src=u[0], frameborder=0, framespacing=0) - + include ../include/rotation.pug script(type='text/javascript', src='/js/jquery.min.js') script(type='text/javascript', src='/socket.io/socket.io.js') if casting diff --git a/build/css/channel-edit.css b/build/css/channel-edit.css index b25ce97..8f3a05a 100644 --- a/build/css/channel-edit.css +++ b/build/css/channel-edit.css @@ -5,7 +5,7 @@ #channel-layout .layout:not(:last-child) { margin-right: 15px; -} +} #channel-layout .layout label { margin-top: 8px; @@ -46,20 +46,47 @@ } #channel-layout .layout.right-panel .contents::after { - content: "2"; + content: '2'; position: absolute; - top: -1px; right: -50px; - height: 150px; width: 50px; + top: -1px; + right: -50px; + height: 150px; + width: 50px; display: block; line-height: 146px; border: 1px solid rgb(202, 206, 215); border-left: none; } -#channel-layout ~ .display-section:not(.visible) { +#channel-list .display-section:not(.visible) { display: none; } -#channel-layout + .display-section { +#channel-list .display-section { display: block; -} \ No newline at end of file +} + +#channel-list .form-group > label { + display: inline-block; + width: 65px; +} + +#channel-list .form-group > input { + display: inline-block; + width: calc(100% - 65px); +} + +#channel-list .form-group > input.pad-right { + display: inline-block; + width: calc(100% - 110px); +} + +#channel-list .form-group > button { + display: inline-block; + vertical-align: top; + width: 26px; +} + +#rotation-duration button:not(:last-of-type) { + margin-right: 10px; +} diff --git a/build/css/main.css b/build/css/main.css index 8db2d2f..173903f 100644 --- a/build/css/main.css +++ b/build/css/main.css @@ -24,7 +24,8 @@ body { display: none; } -.connection-errors > ul { +.connection-errors > ul, +.status-messages > ul { list-style: none; margin: 0; padding: 0; diff --git a/build/js/app.js b/build/js/app.js index fd09f19..e006757 100644 --- a/build/js/app.js +++ b/build/js/app.js @@ -36,7 +36,6 @@ function displayError(message) { } function checkFrame(frame) { - console.log('checking') var html, failed = false try { @@ -51,9 +50,31 @@ function checkFrame(frame) { displayError('Frame loading blocked due to cross-origin prevention') } +function checkCORS() { + $('#error') + .empty() + .hide() + if (window.rotationDuration) setTimeout(rotateChannels, rotationDuration) +} + +function rotateChannels() { + if (window.rotationChannels) { + $('iframe').each(function(i) { + var rotationIndex = $(this).attr('data-rotation-index') || 0 + if (rotationIndex < rotationChannels[i].length - 1) rotationIndex++ + else rotationIndex = 0 + $(this).attr('data-rotation-index', rotationIndex) + $(this).attr('src', rotationChannels[i][rotationIndex]) + }) + checkCORS() + } +} + $('iframe').each(function(i) { - $(this).on('load error', function() { - console.log(this) - checkFrame(this) - }) + $(this) + .off() + .on('load error', function() { + checkFrame(this) + }) }) +checkCORS() diff --git a/build/js/channel.js b/build/js/channel.js index 86f578c..6af7d24 100644 --- a/build/js/channel.js +++ b/build/js/channel.js @@ -1,13 +1,31 @@ $('#channel-layout .layout').on('click', function() { - $(this).addClass('active').siblings().removeClass('active') - if ($(this).is('.fullscreen')) $('.display-section').find('input').slice(1).val('').end().end().hide().eq(0).show() - if ($(this).is('.right-panel')) $('.display-section').hide().slice(0, 2).show() + $(this) + .addClass('active') + .siblings() + .removeClass('active') + if ($(this).is('.fullscreen')) + $('.display-section') + .find('input') + .slice(1) + .val('') + .end() + .end() + .hide() + .eq(0) + .show() + if ($(this).is('.right-panel')) + $('.display-section') + .hide() + .slice(0, 2) + .show() }) -$('#edit-channel [type="submit"]').on('click', function (e) { +$('#edit-channel [type="submit"]').on('click', function(e) { e.preventDefault() $('input.is-error').removeClass('is-error') - $empty = $('#edit-channel input:visible').filter(function() { return !this.value }) + $empty = $('#edit-channel input:visible').filter(function() { + return !this.value + }) $empty.addClass('is-error') if ($empty.length || !$('.layout.active').length) { notify({ @@ -16,13 +34,16 @@ $('#edit-channel [type="submit"]').on('click', function (e) { }) } else { var $layout = $('#channel-layout .layout.active'), - layout + layout, + duration = $('#rotation-duration .btn-primary').attr('data-duration') if ($layout.is('.fullscreen')) layout = 'fullscreen' if ($layout.is('.right-panel')) layout = 'right-panel' $.ajax({ method: 'post', - data: `${$('#edit-channel').serialize()}&layout=${layout}`, - success: function (response) { + data: `${$( + '#edit-channel' + ).serialize()}&layout=${layout}&duration=${duration}`, + success: function(response) { window.location = '/channels' } }) @@ -40,3 +61,47 @@ $('#delete-channel').on('click', function() { } return false }) + +$('#channel-list').on('click', '.add-url', function() { + var $section = $(this).prev(), + $prev = $section.find('.form-group').last(), + id = + parseInt( + $prev + .find('label') + .text() + .split(' ') + .pop() + ) + 1, + groupId = + $section + .find('label') + .first() + .text() + .split(' ') + .pop() - 1 + $section.append(` +
+ + +
+ `) + return false +}) + +$('#channel-list').on('click', '.remove-url', function() { + $(this) + .parent() + .remove() + return false +}) + +$('#rotation-duration .btn').on('click', function() { + $(this) + .addClass('btn-primary') + .siblings() + .removeClass('btn-primary') + return false +}) diff --git a/package-lock.json b/package-lock.json index 50e8c69..37c5c91 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,9 +1,15 @@ { "name": "multicast", - "version": "1.1.0", + "version": "2.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { + "@types/node": { + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.5.2.tgz", + "integrity": "sha512-KA4GKOpgXnrqEH2eCVhiv2CsxgXGQJgV1X0vsGlh+WCnxbeAE1GT44ZsTU1IN5dEeV/gDupKa7gWo08V5IxWVQ==", + "dev": true + }, "accepts": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", @@ -71,6 +77,15 @@ "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true }, + "argparse": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, "arr-diff": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", @@ -109,6 +124,15 @@ "integrity": "sha1-5zA08A3MH0CHYAj9IP6ud71LfC8=", "dev": true }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "1.0.3" + } + }, "array-uniq": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", @@ -153,11 +177,34 @@ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" }, + "babel-code-frame": { + "version": "7.0.0-alpha.12", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-7.0.0-alpha.12.tgz", + "integrity": "sha512-5BmA2es52XNA9PN96HRfJg0co5CkmrKxWdvyW507LNqJmicnHM4we4HI16bIzgAuVeL7RKc4GJmTsyhkFco4Tw==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } + }, + "babylon": { + "version": "7.0.0-beta.28", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.28.tgz", + "integrity": "sha512-DBCCAejmP2ub9aCxA+ZN+Yv67Z/9yQqs4crzo9IuJxqbCNpR0KnvyzQxoB1S9G/R0vnAonPT0osaKjikuCAWqQ==", + "dev": true + }, "backo2": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" }, + "bail": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.2.tgz", + "integrity": "sha1-99bBcxYwqfnw1NNe0fli4gdKF2Q=", + "dev": true + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -311,6 +358,18 @@ "supports-color": "2.0.0" } }, + "character-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.1.tgz", + "integrity": "sha1-92hxvl72bdt/j440eOzDdMJ9bco=", + "dev": true + }, + "character-entities-legacy": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.1.tgz", + "integrity": "sha1-9Ad53xoQGHK7UQo9KV4fzPFHIC8=", + "dev": true + }, "character-parser": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", @@ -319,6 +378,18 @@ "is-regex": "1.0.4" } }, + "character-reference-invalid": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.1.tgz", + "integrity": "sha1-lCg191Dk7GGjCOYMLvjMEBEgLvw=", + "dev": true + }, + "cjk-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cjk-regex/-/cjk-regex-1.0.2.tgz", + "integrity": "sha512-NwSMtwULPLk8Ka9DEUcoFXhMRnV/bpyKDnoyDiVw/Qy5przhvHTvXLcsKaOmx13o8J4XEsPVT1baoCUj5zQs3w==", + "dev": true + }, "clean-css": { "version": "3.4.28", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", @@ -350,6 +421,27 @@ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", "dev": true }, + "collapse-white-space": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.3.tgz", + "integrity": "sha1-S5BvZw5aljqHt2sOFolkM0G2Ajw=", + "dev": true + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "dev": true, + "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=", + "dev": true + }, "colour": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz", @@ -427,6 +519,24 @@ "vary": "1.1.2" } }, + "cosmiconfig": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-3.1.0.tgz", + "integrity": "sha512-zedsBhLSbPBms+kE7AH4vHg6JsKDz6epSv2/+5XHs8ILHlgDciSJfSWf8sX9aQ52Jb7KI7VswUTsLpR/G0cr2Q==", + "dev": true, + "requires": { + "is-directory": "0.3.1", + "js-yaml": "3.10.0", + "parse-json": "3.0.0", + "require-from-string": "2.0.1" + } + }, + "dashify": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dashify/-/dashify-0.2.2.tgz", + "integrity": "sha1-agdBWgHJH69KMuONnfunH2HLIP4=", + "dev": true + }, "dateformat": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", @@ -480,6 +590,18 @@ "fs-exists-sync": "0.1.0" } }, + "detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", + "dev": true + }, + "diff": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", + "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", + "dev": true + }, "doctypes": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", @@ -525,6 +647,12 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, + "emoji-regex": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.1.tgz", + "integrity": "sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ==", + "dev": true + }, "encodeurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", @@ -594,6 +722,15 @@ "has-binary2": "1.0.2" } }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, "es6-promise": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz", @@ -610,6 +747,18 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -716,6 +865,15 @@ "time-stamp": "1.1.0" } }, + "fault": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.1.tgz", + "integrity": "sha1-3o01Df1IviS13BsChn4IcbkTUJI=", + "dev": true, + "requires": { + "format": "0.2.2" + } + }, "filename-regex": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", @@ -810,6 +968,18 @@ "integrity": "sha1-/xke3c1wiKZ1smEP/8l2vpuAdLU=", "dev": true }, + "flatten": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", + "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", + "dev": true + }, + "flow-parser": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.59.0.tgz", + "integrity": "sha1-9uvK5h/6GH5CCZnUDOCoAfObJjU=", + "dev": true + }, "font-awesome": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz", @@ -830,6 +1000,12 @@ "for-in": "1.0.2" } }, + "format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=", + "dev": true + }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", @@ -846,6 +1022,12 @@ "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=", "dev": true }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -860,6 +1042,12 @@ "globule": "0.1.0" } }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, "glob": { "version": "4.5.3", "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", @@ -981,6 +1169,44 @@ "which": "1.3.0" } }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.3.3", + "path-is-absolute": "1.0.1" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + } + } + }, "globule": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", @@ -1056,6 +1282,15 @@ "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" }, + "graphql": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-0.10.5.tgz", + "integrity": "sha512-Q7cx22DiLhwHsEfUnUip1Ww/Vfx7FS0w6+iHItNuN61+XpegHSa3k5U0+6M5BcpavQImBwFiy0z3uYwY7cXMLQ==", + "dev": true, + "requires": { + "iterall": "1.1.3" + } + }, "gulp": { "version": "3.9.1", "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", @@ -1240,6 +1475,12 @@ "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=", + "dev": true + }, "has-gulplog": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", @@ -1279,6 +1520,18 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" }, + "ignore": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", + "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", + "dev": true + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, "indexof": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", @@ -1326,11 +1579,45 @@ "is-windows": "0.2.0" } }, + "is-alphabetical": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.1.tgz", + "integrity": "sha1-x3B5zJHU76x3W+EDS/LSQ/lebwg=", + "dev": true + }, + "is-alphanumerical": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.1.tgz", + "integrity": "sha1-37SqTRCF4zvbYcLe6cgOnGwZ9Ts=", + "dev": true, + "requires": { + "is-alphabetical": "1.0.1", + "is-decimal": "1.0.1" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, + "is-decimal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.1.tgz", + "integrity": "sha1-9ftqlJlq2ejjdh+/vQkfH8qMToI=", + "dev": true + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, "is-dotfile": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", @@ -1367,6 +1654,12 @@ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", "dev": true }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, "is-glob": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", @@ -1376,6 +1669,12 @@ "is-extglob": "1.0.0" } }, + "is-hexadecimal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.1.tgz", + "integrity": "sha1-bghLvJIGH7sJcexYts5tQE4k2mk=", + "dev": true + }, "is-number": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", @@ -1385,6 +1684,12 @@ "kind-of": "3.2.2" } }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -1451,12 +1756,24 @@ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, + "is-whitespace-character": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.1.tgz", + "integrity": "sha1-muAXbzKCtlRXoZks2whPil+DPjs=", + "dev": true + }, "is-windows": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", "dev": true }, + "is-word-character": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.1.tgz", + "integrity": "sha1-WgP6HqkazopusMfNdw64bWXIvvs=", + "dev": true + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -1477,16 +1794,102 @@ "isarray": "1.0.0" } }, + "iterall": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.1.3.tgz", + "integrity": "sha512-Cu/kb+4HiNSejAPhSaN1VukdNTTi/r4/e+yykqjlG/IW+1gZH5b4+Bq3whDX4tvbYugta3r8KTMUiqT3fIGxuQ==", + "dev": true + }, + "jest-docblock": { + "version": "21.3.0-beta.7", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.3.0-beta.7.tgz", + "integrity": "sha512-Qk4si4BSb79ZNUsxYHGBXHf+nIUD9fbgfkipow+WGL8HSwp1cDOU1i127MC5kIqjoU7h9HOZcJlzBKcip4uizQ==", + "dev": true, + "requires": { + "detect-newline": "2.1.0" + } + }, + "jest-get-type": { + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-21.2.0.tgz", + "integrity": "sha512-y2fFw3C+D0yjNSDp7ab1kcd6NUYfy3waPTlD8yWkAtiocJdBRQqNoRqVfMNxgj+IjT0V5cBIHJO0z9vuSSZ43Q==", + "dev": true + }, + "jest-validate": { + "version": "21.1.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-21.1.0.tgz", + "integrity": "sha512-xS0cyErNWpsLFlGkn/b87pk/Mv7J+mCTs8hQ4KmtOIIoM1sHYobXII8AtkoN8FC7E3+Ptxjo+/3xWk6LK1dKcw==", + "dev": true, + "requires": { + "chalk": "2.3.0", + "jest-get-type": "21.2.0", + "leven": "2.1.0", + "pretty-format": "21.2.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.5.0" + } + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, "jquery": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.2.1.tgz", "integrity": "sha1-XE2d5lKvbNCncBVKYxu6ErAVx4c=" }, + "js-base64": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.0.tgz", + "integrity": "sha512-Wehd+7Pf9tFvGb+ydPm9TjYjV8X1YHOVyG8QyELZxEMqOhemVwGRmoG8iQ/soqI3n8v4xn59zaLxiCJiaaRzKA==", + "dev": true + }, "js-stringify": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=" }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", + "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", + "dev": true, + "requires": { + "argparse": "1.0.9", + "esprima": "4.0.0" + } + }, "jstransformer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", @@ -1514,6 +1917,12 @@ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" }, + "leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "dev": true + }, "liftoff": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.3.0.tgz", @@ -1678,6 +2087,12 @@ "lodash.escape": "3.2.0" } }, + "lodash.unescape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", + "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", + "dev": true + }, "long": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/long/-/long-2.4.0.tgz", @@ -1700,6 +2115,12 @@ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, + "markdown-escapes": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.1.tgz", + "integrity": "sha1-GZTfLTr0gR3lmmcUk0wrIpJzRRg=", + "dev": true + }, "mdns": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/mdns/-/mdns-2.3.4.tgz", @@ -1714,6 +2135,15 @@ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "1.1.0" + } + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -1763,6 +2193,12 @@ "mime-db": "1.30.0" } }, + "mimic-fn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", + "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", + "dev": true + }, "minimatch": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", @@ -2023,6 +2459,20 @@ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, + "parse-entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.1.1.tgz", + "integrity": "sha1-gRLYhHExnyerrk1klksSL+ThuJA=", + "dev": true, + "requires": { + "character-entities": "1.2.1", + "character-entities-legacy": "1.1.1", + "character-reference-invalid": "1.1.1", + "is-alphanumerical": "1.0.1", + "is-decimal": "1.0.1", + "is-hexadecimal": "1.0.1" + } + }, "parse-filepath": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.1.tgz", @@ -2046,12 +2496,30 @@ "is-glob": "2.0.1" } }, + "parse-json": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-3.0.0.tgz", + "integrity": "sha1-+m9HsY4jgm6tMvJj50TQ4ehH+xM=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, "parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", "dev": true }, + "parse5": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "dev": true, + "requires": { + "@types/node": "8.5.2" + } + }, "parseqs": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", @@ -2073,6 +2541,12 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, "path-parse": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", @@ -2098,12 +2572,277 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.0", + "source-map": "0.5.7", + "supports-color": "3.2.3" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-less": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-1.1.1.tgz", + "integrity": "sha512-zl0EEqq8Urh37Ppdv9zzhpZpLHrgkxmt6e3O4ftRa7/b8Uq2LV+/KBVM8/KuzmHNu+mthhOArg1lxbfqQ3NUdg==", + "dev": true, + "requires": { + "postcss": "5.2.18" + } + }, + "postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=", + "dev": true + }, + "postcss-scss": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-1.0.2.tgz", + "integrity": "sha1-/0XPM1S4ee6JpOtoaA9GrJuxT5Q=", + "dev": true, + "requires": { + "postcss": "6.0.14" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.5.0" + } + }, + "postcss": { + "version": "6.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.14.tgz", + "integrity": "sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog==", + "dev": true, + "requires": { + "chalk": "2.3.0", + "source-map": "0.6.1", + "supports-color": "4.5.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "postcss-selector-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", + "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", + "dev": true, + "requires": { + "flatten": "1.0.2", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + }, + "postcss-values-parser": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-1.3.1.tgz", + "integrity": "sha512-chFn9CnFAAUpQ3cwrxvVjKB8c0y6BfONv6eapndJoTXJ3h8fr1uAiue8lGP3rUIpBI2KgJGdgCVk9KNvXh0n6A==", + "dev": true, + "requires": { + "flatten": "1.0.2", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + }, "preserve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", "dev": true }, + "prettier": { + "version": "git+https://github.com/superhawk610/prettier.git#be4bf4467857ad7f3ca45901dac48a9fcc61c521", + "dev": true, + "requires": { + "babel-code-frame": "7.0.0-alpha.12", + "babylon": "7.0.0-beta.28", + "camelcase": "4.1.0", + "chalk": "2.1.0", + "cjk-regex": "1.0.2", + "cosmiconfig": "3.1.0", + "dashify": "0.2.2", + "diff": "3.2.0", + "emoji-regex": "6.5.1", + "escape-string-regexp": "1.0.5", + "esutils": "2.0.2", + "flow-parser": "0.59.0", + "get-stream": "3.0.0", + "globby": "6.1.0", + "graphql": "0.10.5", + "ignore": "3.3.7", + "jest-docblock": "21.3.0-beta.7", + "jest-validate": "21.1.0", + "leven": "2.1.0", + "mem": "1.1.0", + "minimatch": "3.0.4", + "minimist": "1.2.0", + "parse5": "3.0.3", + "postcss-less": "1.1.1", + "postcss-media-query-parser": "0.2.3", + "postcss-scss": "1.0.2", + "postcss-selector-parser": "2.2.3", + "postcss-values-parser": "1.3.1", + "remark-frontmatter": "1.1.0", + "remark-parse": "4.0.0", + "semver": "5.4.1", + "string-width": "2.1.1", + "typescript": "2.5.3", + "typescript-eslint-parser": "git://github.com/eslint/typescript-eslint-parser.git#9c71a627da36e97da52ed2731d58509c952b67ae", + "unicode-regex": "1.0.1", + "unified": "6.1.5" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "chalk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", + "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.5.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "pretty-format": { + "version": "21.2.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-21.2.1.tgz", + "integrity": "sha512-ZdWPGYAnYfcVP8yKA3zFjCn8s4/17TeYH28MXuC8vTp0o21eXjbFGcOAXZEaDaOFJjc3h2qa7HQNHNshhvoh2A==", + "dev": true, + "requires": { + "ansi-regex": "3.0.0", + "ansi-styles": "3.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + } + } + }, "pretty-hrtime": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", @@ -2370,6 +3109,39 @@ "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz", "integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk=" }, + "remark-frontmatter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-1.1.0.tgz", + "integrity": "sha512-mLbYtwP9w1L9TA8dX+I/HyDF5lCpa0dmYvvW9Io+zUPpqEZ49QMKWb0hSpunpLVA+Squy0SowzSzjHVPbxWq1g==", + "dev": true, + "requires": { + "fault": "1.0.1", + "xtend": "4.0.1" + } + }, + "remark-parse": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-4.0.0.tgz", + "integrity": "sha512-XZgICP2gJ1MHU7+vQaRM+VA9HEL3X253uwUM/BGgx3iv6TH2B3bF3B8q00DKcyP9YrJV+/7WOWEWBFF/u8cIsw==", + "dev": true, + "requires": { + "collapse-white-space": "1.0.3", + "is-alphabetical": "1.0.1", + "is-decimal": "1.0.1", + "is-whitespace-character": "1.0.1", + "is-word-character": "1.0.1", + "markdown-escapes": "1.0.1", + "parse-entities": "1.1.1", + "repeat-string": "1.6.1", + "state-toggle": "1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "1.1.0", + "unherit": "1.1.0", + "unist-util-remove-position": "1.1.1", + "vfile-location": "2.0.2", + "xtend": "4.0.1" + } + }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -2393,6 +3165,12 @@ "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", "dev": true }, + "require-from-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.1.tgz", + "integrity": "sha1-xUUjPp19pmFunVmt+zn8n1iGdv8=", + "dev": true + }, "require_optional": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", @@ -2577,6 +3355,18 @@ "resolved": "https://registry.npmjs.org/spectre.css/-/spectre.css-0.4.6.tgz", "integrity": "sha1-HfmK0Qk/rpDebHSHlmDVnNAphU8=" }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "state-toggle": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.0.tgz", + "integrity": "sha1-0g+aYWu08MO5i5GSLSW2QKorxCU=", + "dev": true + }, "statuses": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", @@ -2588,6 +3378,33 @@ "integrity": "sha1-pB6tGm1ggc63n2WwYZAbbY89HQ8=", "dev": true }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", @@ -2656,6 +3473,24 @@ "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=" }, + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", + "dev": true + }, + "trim-trailing-lines": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.0.tgz", + "integrity": "sha1-eu+7eAjfnWafbaLkOMrIxGradoQ=", + "dev": true + }, + "trough": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.1.tgz", + "integrity": "sha1-qf2LA5Swro//guBjOgo2zK1bX4Y=", + "dev": true + }, "type-is": { "version": "1.6.15", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", @@ -2665,6 +3500,20 @@ "mime-types": "2.1.17" } }, + "typescript": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.5.3.tgz", + "integrity": "sha512-ptLSQs2S4QuS6/OD1eAKG+S5G8QQtrU5RT32JULdZQtM1L3WTi34Wsu48Yndzi8xsObRAB9RPt/KhA9wlpEF6w==", + "dev": true + }, + "typescript-eslint-parser": { + "version": "git://github.com/eslint/typescript-eslint-parser.git#9c71a627da36e97da52ed2731d58509c952b67ae", + "dev": true, + "requires": { + "lodash.unescape": "4.0.1", + "semver": "5.4.1" + } + }, "uglify-js": { "version": "2.8.29", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", @@ -2699,12 +3548,79 @@ "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", "dev": true }, + "unherit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.0.tgz", + "integrity": "sha1-a5qu379z3xdWrZ4xbdmBiFhAzX0=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "xtend": "4.0.1" + } + }, + "unicode-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unicode-regex/-/unicode-regex-1.0.1.tgz", + "integrity": "sha1-+BngUBkdW5VhozmljdO5CV7ZSzU=", + "dev": true + }, + "unified": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-6.1.5.tgz", + "integrity": "sha1-cWk3hyYhpjE15iztLzrGoGPG+4c=", + "dev": true, + "requires": { + "bail": "1.0.2", + "extend": "3.0.1", + "is-plain-obj": "1.1.0", + "trough": "1.0.1", + "vfile": "2.3.0", + "x-is-function": "1.0.4", + "x-is-string": "0.1.0" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, "unique-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz", "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=", "dev": true }, + "unist-util-is": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.1.tgz", + "integrity": "sha1-DDEmKeP5YMZukx6BLT2A53AQlHs=", + "dev": true + }, + "unist-util-remove-position": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.1.tgz", + "integrity": "sha1-WoXBVV/BugwQG4ZwfRXlD6TIcbs=", + "dev": true, + "requires": { + "unist-util-visit": "1.3.0" + } + }, + "unist-util-stringify-position": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.1.tgz", + "integrity": "sha1-PMvcU2ee7W7PN3fdf14yKcG2qjw=", + "dev": true + }, + "unist-util-visit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.3.0.tgz", + "integrity": "sha512-9ntYcxPFtl44gnwXrQKZ5bMqXMY0ZHzUpqMFiU4zcc8mmf/jzYm8GhYgezuUlX4cJIM1zIDYaO6fG/fI+L6iiQ==", + "dev": true, + "requires": { + "unist-util-is": "2.1.1" + } + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -2746,6 +3662,41 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, + "vfile": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz", + "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==", + "dev": true, + "requires": { + "is-buffer": "1.1.6", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "1.1.1", + "vfile-message": "1.0.0" + }, + "dependencies": { + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + } + } + }, + "vfile-location": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.2.tgz", + "integrity": "sha1-02dcWch3SY5JK0dW/2Xkrxp1IlU=", + "dev": true + }, + "vfile-message": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.0.0.tgz", + "integrity": "sha512-HPREhzTOB/sNDc9/Mxf8w0FmHnThg5CRSJdR9VRFkD2riqYWs+fuXlj5z8mIpv2LrD7uU41+oPWFOL4Mjlf+dw==", + "dev": true, + "requires": { + "unist-util-stringify-position": "1.1.1" + } + }, "vinyl": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", @@ -2891,6 +3842,18 @@ "ultron": "1.1.1" } }, + "x-is-function": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/x-is-function/-/x-is-function-1.0.4.tgz", + "integrity": "sha1-XSlNw9Joy90GJYDgxd93o5HR+h4=", + "dev": true + }, + "x-is-string": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", + "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=", + "dev": true + }, "xmlhttprequest-ssl": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.4.tgz", diff --git a/package.json b/package.json index 315a9da..a3992ba 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "multicast", - "version": "1.1.0", + "version": "2.0.0", "description": "Service for persisting a session indefinitely across multiple Chromecast devices.", "main": "index.js", "scripts": {