diff --git a/.babelrc b/.babelrc index 054205c..0d33cac 100644 --- a/.babelrc +++ b/.babelrc @@ -23,16 +23,6 @@ "transform-runtime", "transform-es2015-modules-commonjs" ] - }, - "commonjs": { - "plugins": [ - [ - "transform-es2015-modules-commonjs", - { - "loose": true - } - ] - ] } } } \ No newline at end of file diff --git a/.gitignore b/.gitignore index 7d6a754..e392505 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,6 @@ .DS_Store *.log node_modules -dist lib es coverage diff --git a/example/index.html b/example/index.html index 307e868..003fcdd 100644 --- a/example/index.html +++ b/example/index.html @@ -29,7 +29,7 @@

PeerCDN Example

- + diff --git a/example/js/main.js b/example/js/main.js index a79c922..fffcf46 100644 --- a/example/js/main.js +++ b/example/js/main.js @@ -24,7 +24,6 @@ if ("serviceWorker" in navigator) { // handler and taken control of the page, so you should see this message event fire once. // You can force it to fire again by visiting this page in an Incognito window. navigator.serviceWorker.addEventListener('message', function (event) { - console.log('onMessage', event.data); const request = new Request(event.data.url); // mock sw event wrapping request with object const middleware = peerPlugin.getMiddleware({ request }); @@ -44,10 +43,7 @@ if ("serviceWorker" in navigator) { navigator.serviceWorker.register("sw.js") .then(function (registration) { // Registration was successful - console.log( - "ServiceWorker registration successful with scope: ", - registration.scope - ); + console.log("ServiceWorker registration successful with scope: ", registration.scope); }) .catch(function (error) { console.error("Service Worker Error", error); diff --git a/example/package.json b/example/package.json index 7097d76..cfcc326 100644 --- a/example/package.json +++ b/example/package.json @@ -17,10 +17,7 @@ "dependencies": { "cookie-parser": "1.4.3", "express": "^4.15.3", - "peer-cdn": "^0.1.0-alpha", - "peer-data": "^3.0.23", - "peer-data-server": "^1.0.9", - "socket.io": "^2.0.2" + "peer-cdn": "^0.1.0-alpha" }, "devDependencies": {} } diff --git a/example/server.js b/example/server.js index a227f4c..cad969b 100644 --- a/example/server.js +++ b/example/server.js @@ -3,7 +3,8 @@ const fspath = require("path"); const cookieParser = require("cookie-parser"); const http = require("http"); const fs = require("fs"); -const PeerDataServer = require("peer-data-server"); +// const PeerCdnServer = require("peer-cdn/server"); +const PeerCdnServer = require("../src/server"); const PeerEventType = { PEER: "PEER" }; const port = process.env.PORT || 3000; @@ -16,8 +17,8 @@ app.use("/css", express.static(fspath.join(__dirname, "css"))); app.use("/fonts", express.static(fspath.join(__dirname, "fonts"))); app.use("/images", express.static(fspath.join(__dirname, "images"))); app.use("/js", express.static(fspath.join(__dirname, "js"))); -// app.use("/vendor", express.static(fspath.join(__dirname, "./node_modules/peer-cdn/dist"))); -app.use("/vendor", express.static(fspath.join(__dirname, "../dist"))); +// app.use("/vendor", express.static(fspath.join(__dirname, "./node_modules/peer-cdn/lib"))); +app.use("/peer-cdn", express.static(fspath.join(__dirname, "../lib"))); app.use(cookieParser()); app.get("/favicon.ico", (req, res) => res.sendStatus(404)); app.get("*", (req, res) => res.sendFile(index)); @@ -69,17 +70,9 @@ app.get("/movie.mp4", (req, res) => { const server = http.createServer(app); -const createPeerDataServer = PeerDataServer.default || PeerDataServer; -createPeerDataServer(server, function (socket, event) { - switch (event.type) { - case PeerEventType.PEER: - // todo: we should pick best peer and ask only one socket to connect - socket.broadcast.emit("message", event); - break; - default: - socket.broadcast.to(event.room.id).emit("message", event); - } -}); +// Setup peer-cdn signaling server +const appendPeerCdnServer = PeerCdnServer.default || PeerCdnServer; +appendPeerCdnServer(server); server.listen(port, () => { // eslint-disable-next-line no-console diff --git a/example/sw.js b/example/sw.js index f3da5fd..607b9ff 100644 --- a/example/sw.js +++ b/example/sw.js @@ -1,7 +1,7 @@ (function () { "use strict"; - self.importScripts("/vendor/peer-cdn.js"); + self.importScripts("/peer-cdn/index.js"); const cachePlugin = new CachePlugin({ version: 1 }); // since sw does not support webrtc yet we use PeerPlugin on client side @@ -11,9 +11,7 @@ function run() { const cdn = new PeerCDN(); - cdn.GET("/", STRATEGIES.ordered, - // cdn.GET("/js/main.js", STRATEGIES.ordered, - // all of the following plugins are required + cdn.GET("/css/main.css", STRATEGIES.ordered, cachePlugin.getMiddleware, delegatePlugin.getMiddleware, networkPlugin.getMiddleware diff --git a/example/yarn.lock b/example/yarn.lock index b2f7f1b..6b86cd2 100644 --- a/example/yarn.lock +++ b/example/yarn.lock @@ -2,13 +2,6 @@ # yarn lockfile v1 -accepts@1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" - dependencies: - mime-types "~2.1.11" - negotiator "0.6.1" - accepts@~1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f" @@ -16,44 +9,10 @@ accepts@~1.3.4: mime-types "~2.1.16" negotiator "0.6.1" -after@0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" - array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" -arraybuffer.slice@~0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" - -async-limiter@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" - -backo2@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" - -base64-arraybuffer@0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" - -base64id@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" - -better-assert@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" - dependencies: - callsite "1.0.0" - -blob@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" - body-parser@1.18.2: version "1.18.2" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" @@ -73,22 +32,6 @@ bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" -callsite@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" - -component-bind@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" - -component-emitter@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - -component-inherit@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" - content-disposition@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" @@ -112,7 +55,7 @@ cookie@0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" -debug@2.6.9, debug@~2.6.4, debug@~2.6.6, debug@~2.6.9: +debug@2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: @@ -134,45 +77,6 @@ encodeurl@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" -engine.io-client@~3.1.0: - version "3.1.4" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.1.4.tgz#4fcf1370b47163bd2ce9be2733972430350d4ea1" - dependencies: - component-emitter "1.2.1" - component-inherit "0.0.3" - debug "~2.6.9" - engine.io-parser "~2.1.1" - has-cors "1.1.0" - indexof "0.0.1" - parseqs "0.0.5" - parseuri "0.0.5" - ws "~3.3.1" - xmlhttprequest-ssl "~1.5.4" - yeast "0.1.2" - -engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.2.tgz#4c0f4cff79aaeecbbdcfdea66a823c6085409196" - dependencies: - after "0.8.2" - arraybuffer.slice "~0.0.7" - base64-arraybuffer "0.1.5" - blob "0.0.4" - has-binary2 "~1.0.2" - -engine.io@~3.1.0: - version "3.1.4" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.1.4.tgz#3d0211b70a552ce841ffc7da8627b301a9a4162e" - dependencies: - accepts "1.3.3" - base64id "1.0.0" - cookie "0.3.1" - debug "~2.6.9" - engine.io-parser "~2.1.0" - ws "~3.3.1" - optionalDependencies: - uws "~0.14.4" - escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -236,16 +140,6 @@ fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" -has-binary2@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.2.tgz#e83dba49f0b9be4d026d27365350d9f03f54be98" - dependencies: - isarray "2.0.1" - -has-cors@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" - http-errors@1.6.2, http-errors@~1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" @@ -259,10 +153,6 @@ iconv-lite@0.4.19: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" -indexof@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" @@ -271,10 +161,6 @@ ipaddr.js@1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.5.2.tgz#d4b505bde9946987ccf0fc58d9010ff9607e3fa0" -isarray@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" - media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -291,7 +177,7 @@ mime-db@~1.30.0: version "1.30.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" -mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.16: +mime-types@~2.1.15, mime-types@~2.1.16: version "2.1.17" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" dependencies: @@ -309,28 +195,12 @@ negotiator@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" -object-component@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" - on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" dependencies: ee-first "1.1.1" -parseqs@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" - dependencies: - better-assert "~1.0.0" - -parseuri@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" - dependencies: - better-assert "~1.0.0" - parseurl@~1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" @@ -345,16 +215,6 @@ peer-cdn@^0.1.0-alpha: dependencies: webrtc-adapter "^6.1.0" -peer-data-server@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/peer-data-server/-/peer-data-server-1.0.9.tgz#0d3e5aa851b46a6c9242972315094ced835132d5" - -peer-data@^3.0.23: - version "3.0.23" - resolved "https://registry.yarnpkg.com/peer-data/-/peer-data-3.0.23.tgz#21850b2ff0e9acc37dbfcdba14014e2b08d65bc6" - dependencies: - webrtc-adapter "^6.0.1" - proxy-addr@~2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.2.tgz#6571504f47bb988ec8180253f85dd7e14952bdec" @@ -385,7 +245,7 @@ rtcpeerconnection-shim@^1.1.13: dependencies: sdp "^2.2.0" -safe-buffer@5.1.1, safe-buffer@~5.1.0: +safe-buffer@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" @@ -428,47 +288,6 @@ setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" -socket.io-adapter@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b" - -socket.io-client@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.0.4.tgz#0918a552406dc5e540b380dcd97afc4a64332f8e" - dependencies: - backo2 "1.0.2" - base64-arraybuffer "0.1.5" - component-bind "1.0.0" - component-emitter "1.2.1" - debug "~2.6.4" - engine.io-client "~3.1.0" - has-cors "1.1.0" - indexof "0.0.1" - object-component "0.0.3" - parseqs "0.0.5" - parseuri "0.0.5" - socket.io-parser "~3.1.1" - to-array "0.1.4" - -socket.io-parser@~3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.1.2.tgz#dbc2282151fc4faebbe40aeedc0772eba619f7f2" - dependencies: - component-emitter "1.2.1" - debug "~2.6.4" - has-binary2 "~1.0.2" - isarray "2.0.1" - -socket.io@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.0.4.tgz#c1a4590ceff87ecf13c72652f046f716b29e6014" - dependencies: - debug "~2.6.6" - engine.io "~3.1.0" - socket.io-adapter "~1.1.0" - socket.io-client "2.0.4" - socket.io-parser "~3.1.1" - "statuses@>= 1.3.1 < 2": version "1.4.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" @@ -477,10 +296,6 @@ statuses@~1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" -to-array@0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" - type-is@~1.6.15: version "1.6.15" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" @@ -488,10 +303,6 @@ type-is@~1.6.15: media-typer "0.3.0" mime-types "~2.1.15" -ultron@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" - unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -500,40 +311,13 @@ utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" -uws@~0.14.4: - version "0.14.5" - resolved "https://registry.yarnpkg.com/uws/-/uws-0.14.5.tgz#67aaf33c46b2a587a5f6666d00f7691328f149dc" - vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" -webrtc-adapter@^6.0.1: - version "6.0.3" - resolved "https://registry.yarnpkg.com/webrtc-adapter/-/webrtc-adapter-6.0.3.tgz#850ab1649099922086c2c038c87c10c46d0c42cc" - dependencies: - rtcpeerconnection-shim "^1.1.13" - sdp "^2.3.0" - webrtc-adapter@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/webrtc-adapter/-/webrtc-adapter-6.1.0.tgz#238ad8c510558798d4dd8978aaf80e2675bbc1ea" dependencies: rtcpeerconnection-shim "^1.1.13" sdp "^2.3.0" - -ws@~3.3.1: - version "3.3.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" - dependencies: - async-limiter "~1.0.0" - safe-buffer "~5.1.0" - ultron "~1.1.0" - -xmlhttprequest-ssl@~1.5.4: - version "1.5.4" - resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.4.tgz#04f560915724b389088715cc0ed7813e9677bf57" - -yeast@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" diff --git a/package.json b/package.json index dc3d00f..dd8a80f 100644 --- a/package.json +++ b/package.json @@ -2,28 +2,25 @@ "name": "peer-cdn", "version": "0.1.0-alpha", "description": "Lightweight library providing peer to peer CDN functionality", - "browser": "dist/peer-cdn.min.js", + "browser": "lib/index.js", "main": "lib/index.js", "module": "es/index.js", "jsnext:main": "es/index.js", "files": [ - "dist", "lib", "es", "src" ], "scripts": { - "clean": "rimraf lib dist es coverage", + "clean": "rimraf lib es coverage", "lint": "eslint src test build", "test": "cross-env BABEL_ENV=test jest --no-cache --config jest-config.js", "posttest": "yarn run lint", "test:watch": "yarn test --watch", "test:cov": "yarn test --coverage", - "build:commonjs": "cross-env BABEL_ENV=commonjs babel src --out-dir lib", - "build:es": "cross-env BABEL_ENV=es babel src --out-dir es", - "build:umd": "cross-env BABEL_ENV=es NODE_ENV=development rollup -c -i src/index.js -o dist/peer-cdn.js", - "build:umd:min": "cross-env BABEL_ENV=es NODE_ENV=production rollup -c -i src/index.js -o dist/peer-cdn.min.js", - "build": "yarn run build:commonjs & yarn run build:es & yarn run build:umd & yarn run build:umd:min", + "build": "cross-env NODE_ENV=production rollup -c", + "builddev": "cross-env NODE_ENV=development rollup -c", + "prebuilddev": "yarn run clean", "prepare": "yarn run build", "prebuild": "yarn run clean", "preversion": "yarn test", @@ -71,7 +68,9 @@ "jest": { "testRegex": "(/test/.*\\.spec.js)$" }, - "dependencies": {}, + "dependencies": { + "socket.io": "^2.0.4" + }, "devDependencies": { "babel-cli": "^6.3.15", "babel-core": "^6.26.0", @@ -106,6 +105,7 @@ "rollup-plugin-node-resolve": "^3.0.0", "rollup-plugin-replace": "^2.0.0", "rollup-plugin-uglify": "^2.0.1", + "uglify-es": "^3.3.9", "webrtc-adapter": "^6.1.0" } -} +} \ No newline at end of file diff --git a/rollup.config.js b/rollup.config.js index 55ff58c..37f9460 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -5,48 +5,66 @@ import replace from 'rollup-plugin-replace'; import uglify from "rollup-plugin-uglify"; import gzip from "rollup-plugin-gzip"; import filesize from 'rollup-plugin-filesize'; +import pkg from './package.json'; +import { minify } from 'uglify-es'; -var env = process.env.NODE_ENV; -var config = { - output: { format: 'umd' }, - name: 'peer-cdn', - exports: 'named', - plugins: [ - resolve({ - jsnext: true, - browser: true - }), - babel({ - exclude: 'node_modules/**' - }), - commonjs({ - namedExports: { - 'node_modules/peer-data/dist/bundle.js': [ - 'SocketChannel', - 'AppEventType', - 'EventDispatcher', - ], - } - }), - replace({ - 'process.env.NODE_ENV': JSON.stringify(env) - }) - ] -}; +const env = process.env.NODE_ENV; +const isProd = env === 'production'; + +const plugins = [ + replace({ + 'process.env.NODE_ENV': JSON.stringify(env) + }), + resolve({ + jsnext: true, + browser: true, + preferBuiltins: true, + }), + babel({ + exclude: 'node_modules/**', + }), + commonjs({ + namedExports: { + 'node_modules/peer-data/dist/bundle.js': [ + 'SocketChannel', + 'AppEventType', + 'EventDispatcher', + ], + } + }), +]; -if (env === 'production') { - config.plugins.push( - uglify({ - compress: { - pure_getters: true, - unsafe: true, - unsafe_comps: true, - warnings: false - } - }), +if (isProd) { + plugins.push( + // Since we're using ES modules we need this _hack_ + // https://github.com/TrySound/rollup-plugin-uglify#warning + uglify({}, minify), gzip(), filesize(), ); } +let config = { + name: 'peer-cdn', + banner: `/* peer-cdn version ${pkg.version} */`, + footer: '/* Join our community! http://rafallorenz.com/peer-cdn */', + input: 'src/index.js', + extend: true, + output: [ + { + file: pkg.main, + format: 'umd', + exports: 'named', + sourcemap: !isProd + }, + { + file: pkg.module, + format: 'es', + exports: 'named', + sourcemap: !isProd + }, + ], + plugins, +}; + export default config; diff --git a/src/clients/MessageClient.js b/src/clients/MessageClient.js index 580f422..cb47b30 100644 --- a/src/clients/MessageClient.js +++ b/src/clients/MessageClient.js @@ -19,7 +19,7 @@ export default class MessageClient { // controller.postMessage() and set up the onmessage handler independently of a promise, but this is // a convenient wrapper. return await new Promise((resolve, reject) => { - let messageChannel = new MessageChannel(); + const messageChannel = new MessageChannel(); messageChannel.port1.onmessage = function (event) { if (event.data && event.data.error) { reject(event.data.error); diff --git a/src/clients/PeerClient.js b/src/clients/PeerClient.js index ef8e177..3bb710c 100644 --- a/src/clients/PeerClient.js +++ b/src/clients/PeerClient.js @@ -41,9 +41,7 @@ export default class PeerClient { room.on("participant", function (participant) { participant.then(peer => { - console.log('participant', peer); peer.on("message", function (message) { - console.log('message', message); if (!message) { return; } @@ -60,7 +58,6 @@ export default class PeerClient { }); const url = new URL(request.url); - console.log('Ask for:', url.pathname, request); EventDispatcher.getInstance().dispatch("send", { type: PeerEventType.PEER, caller: null, @@ -79,13 +76,10 @@ export default class PeerClient { } sendToRoom(roomId, response) { - console.log('Connect to:', roomId); // signaling server needs us to seed // we will connected to a given room const room = this.peerData.connect(roomId); room.on("participant", participant => participant.then(function (peer) { - console.log('participant', peer); - console.log('response', response); //this peer disconnected from room peer.on("disconnected", function () { room.disconnect() }); // send the response diff --git a/src/plugins/Cache.js b/src/plugins/Cache.js index 7f42e53..9605d3a 100644 --- a/src/plugins/Cache.js +++ b/src/plugins/Cache.js @@ -19,22 +19,25 @@ export default class Cache { const request = event.request.clone(); return { - get: () => { + get: async () => { // do not cache ranged responses // https://github.com/vardius/peer-cdn/issues/7 if (request.headers.has("range")) { return null; } - // caches.match() will look for a cache entry in all of the caches available to the service worker. - // It's an alternative to first opening a specific named cache and then matching on that. - caches.match(request).then(function (response) { + try { + // caches.match() will look for a cache entry in all of the caches available to the service worker. + // It's an alternative to first opening a specific named cache and then matching on that. + const response = await caches.match(request); if (response) { return response; } return null; - }); + } catch (e) { + return null; + } }, put: response => { // do not cache ranged responses diff --git a/src/plugins/Peer.js b/src/plugins/Peer.js index 52eb5b5..e5aa126 100644 --- a/src/plugins/Peer.js +++ b/src/plugins/Peer.js @@ -39,7 +39,6 @@ export default class Peer { return null; } catch (e) { - console.log('PeerPlugin Error', e); return null; } } @@ -47,11 +46,9 @@ export default class Peer { } _onPeerRequest(e) { - console.log('_onPeerRequest', e) // caches.match() will look for a cache entry in all of the caches available to the service worker. caches.open(this.cacheName).then(cache => { cache.match(e.data).then(response => { - console.log('cache.match', response); if (response) { this.client.sendToRoom(e.room.id, response); } diff --git a/src/router/Middleware.js b/src/router/Middleware.js index 4307c45..f066ecf 100644 --- a/src/router/Middleware.js +++ b/src/router/Middleware.js @@ -48,7 +48,7 @@ export default class Middleware { return funcs.reduce((a, b) => async request => { const x = await a(request); let response = await x.get(); - if (response !== null) { + if (response) { // pass response to put method x.put && x.put(response); diff --git a/src/server/index.js b/src/server/index.js new file mode 100644 index 0000000..fe7301d --- /dev/null +++ b/src/server/index.js @@ -0,0 +1,79 @@ +const os = require("os"); +const SocketIO = require("socket.io"); +const { SignalingEventType } = require("peer-data"); + +const PeerEventType = { PEER: "PEER" }; + +function PeerCdnServer(server, callback) { + const io = SocketIO.listen(server); + io.on("connection", function (socket) { + function log() { + socket.emit("log", ...arguments); + } + + function onConnect(id) { + socket.join(id); + } + + function onDisconnect(id) { + socket.leave(id); + } + + socket.on("message", function (event) { + event.caller = { + id: socket.id + }; + + log("SERVER_LOG", event); + + switch (event.type) { + case SignalingEventType.CONNECT: + onConnect(event.room.id); + socket.broadcast.to(event.room.id).emit("message", event); + break; + case SignalingEventType.DISCONNECT: + onDisconnect(event.room.id); + socket.broadcast.to(event.room.id).emit("message", event); + break; + case SignalingEventType.OFFER: + case SignalingEventType.ANSWER: + case SignalingEventType.CANDIDATE: + socket.broadcast.to(event.callee.id).emit("message", event); + break; + case PeerEventType.PEER: + // todo: we should pick best peer and ask only one socket to connect + socket.broadcast.emit("message", event); + break; + default: + if (callback) { + callback(socket, event); + } else { + socket.broadcast.to(event.room.id).emit("message", event); + } + } + }); + + socket.on("ipaddr", function () { + var ifaces = os.networkInterfaces(); + for (var dev in ifaces) { + ifaces[dev].forEach(function (details) { + if (details.family === "IPv4" && details.address !== "127.0.0.1") { + socket.emit("ipaddr", details.address); + } + }); + } + }); + + socket.on("disconnect", function () { + socket.broadcast.emit({ + type: SignalingEventType.DISCONNECT, + caller: { id: socket.id }, + callee: null, + room: null, + data: null + }); + }); + }); +} + +module.exports = PeerCdnServer; diff --git a/src/server/server.js b/src/server/server.js deleted file mode 100644 index a227f4c..0000000 --- a/src/server/server.js +++ /dev/null @@ -1,87 +0,0 @@ -const express = require("express"); -const fspath = require("path"); -const cookieParser = require("cookie-parser"); -const http = require("http"); -const fs = require("fs"); -const PeerDataServer = require("peer-data-server"); - -const PeerEventType = { PEER: "PEER" }; -const port = process.env.PORT || 3000; -const index = fspath.join(__dirname, "index.html"); -const sw = fspath.join(__dirname, "sw.js"); - -const app = express(); -app.get("/sw.js", (req, res) => res.sendFile(sw)); -app.use("/css", express.static(fspath.join(__dirname, "css"))); -app.use("/fonts", express.static(fspath.join(__dirname, "fonts"))); -app.use("/images", express.static(fspath.join(__dirname, "images"))); -app.use("/js", express.static(fspath.join(__dirname, "js"))); -// app.use("/vendor", express.static(fspath.join(__dirname, "./node_modules/peer-cdn/dist"))); -app.use("/vendor", express.static(fspath.join(__dirname, "../dist"))); -app.use(cookieParser()); -app.get("/favicon.ico", (req, res) => res.sendStatus(404)); -app.get("*", (req, res) => res.sendFile(index)); - -app.get("/movie.mp4", (req, res) => { - const file = fspath.resolve(__dirname, "movie.mp4"); - fs.stat(file, function (err, stats) { - if (err) { - if (err.code === "ENOENT") { - // 404 Error if file not found - return res.sendStatus(404); - } - res.end(err); - } - const range = req.headers.range; - if (!range) { - // 416 Wrong range - return res.sendStatus(416); - } - const positions = range.replace(/bytes=/, "").split("-"); - const start = parseInt(positions[0], 10); - const total = stats.size; - - let end = positions[1] ? parseInt(positions[1], 10) : total - 1; - let chunksize = end - start + 1; - const maxChunk = 1024 * 1024; // 1MB at a time - if (chunksize > maxChunk) { - end = start + maxChunk - 1; - chunksize = end - start + 1; - } - - res.writeHead(206, { - "Content-Range": "bytes " + start + "-" + end + "/" + total, - "Accept-Ranges": "bytes", - "Content-Length": chunksize, - "Content-Type": "video/mp4" - }); - - const stream = fs - .createReadStream(file, { start: start, end: end, autoClose: true }) - .on("open", function () { - stream.pipe(res); - }) - .on("error", function (err) { - res.end(err); - }); - }); -}); - -const server = http.createServer(app); - -const createPeerDataServer = PeerDataServer.default || PeerDataServer; -createPeerDataServer(server, function (socket, event) { - switch (event.type) { - case PeerEventType.PEER: - // todo: we should pick best peer and ask only one socket to connect - socket.broadcast.emit("message", event); - break; - default: - socket.broadcast.to(event.room.id).emit("message", event); - } -}); - -server.listen(port, () => { - // eslint-disable-next-line no-console - console.log(`Server started at port ${port}`); -}); diff --git a/yarn.lock b/yarn.lock index 506d25f..5d9fba8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -62,6 +62,13 @@ abbrev@1: version "1.1.0" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f" +accepts@1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" + dependencies: + mime-types "~2.1.11" + negotiator "0.6.1" + acorn-globals@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" @@ -86,6 +93,10 @@ acorn@^5.2.1: version "5.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.3.0.tgz#7446d39459c54fb49a80e6ee6478149b940ec822" +after@0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" + ajv-keywords@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" @@ -183,8 +194,8 @@ arr-diff@^2.0.0: arr-flatten "^1.0.1" arr-flatten@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1" + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" array-equal@^1.0.0: version "1.0.0" @@ -204,6 +215,10 @@ array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" +arraybuffer.slice@~0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" + arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -232,6 +247,10 @@ async-each@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" +async-limiter@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + async@^1.4.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" @@ -1083,6 +1102,10 @@ babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" +backo2@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -1091,16 +1114,34 @@ base62@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/base62/-/base62-1.2.0.tgz#31e7e560dc846c9f44c1a531df6514da35474157" +base64-arraybuffer@0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" + +base64id@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" + bcrypt-pbkdf@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" dependencies: tweetnacl "^0.14.3" +better-assert@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" + dependencies: + callsite "1.0.0" + binary-extensions@^1.0.0: version "1.8.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" +blob@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" + block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" @@ -1173,6 +1214,10 @@ caller-path@^0.1.0: dependencies: callsites "^0.2.0" +callsite@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" + callsites@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" @@ -1339,7 +1384,7 @@ commander@^2.5.0, commander@~2.9.0: dependencies: graceful-readlink ">= 1.0.0" -commander@^2.8.1: +commander@^2.8.1, commander@~2.13.0: version "2.13.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" @@ -1357,6 +1402,18 @@ commoner@^0.10.1: q "^1.1.2" recast "^0.11.17" +component-bind@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" + +component-emitter@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + +component-inherit@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -1385,6 +1442,10 @@ convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + core-js@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" @@ -1446,6 +1507,12 @@ debug@^3.0.1, debug@^3.1.0: dependencies: ms "2.0.0" +debug@~2.6.4, debug@~2.6.6, debug@~2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + decamelize@^1.0.0, decamelize@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -1528,7 +1595,7 @@ doctrine@1.5.0: esutils "^2.0.2" isarray "^1.0.0" -doctrine@^2.0.2: +doctrine@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" dependencies: @@ -1548,6 +1615,45 @@ electron-to-chromium@^1.3.11: version "1.3.14" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.14.tgz#64af0f9efd3c3c6acd57d71f83b49ca7ee9c4b43" +engine.io-client@~3.1.0: + version "3.1.4" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.1.4.tgz#4fcf1370b47163bd2ce9be2733972430350d4ea1" + dependencies: + component-emitter "1.2.1" + component-inherit "0.0.3" + debug "~2.6.9" + engine.io-parser "~2.1.1" + has-cors "1.1.0" + indexof "0.0.1" + parseqs "0.0.5" + parseuri "0.0.5" + ws "~3.3.1" + xmlhttprequest-ssl "~1.5.4" + yeast "0.1.2" + +engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.2.tgz#4c0f4cff79aaeecbbdcfdea66a823c6085409196" + dependencies: + after "0.8.2" + arraybuffer.slice "~0.0.7" + base64-arraybuffer "0.1.5" + blob "0.0.4" + has-binary2 "~1.0.2" + +engine.io@~3.1.0: + version "3.1.4" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.1.4.tgz#3d0211b70a552ce841ffc7da8627b301a9a4162e" + dependencies: + accepts "1.3.3" + base64id "1.0.0" + cookie "0.3.1" + debug "~2.6.9" + engine.io-parser "~2.1.0" + ws "~3.3.1" + optionalDependencies: + uws "~0.14.4" + "errno@>=0.1.1 <0.2.0-0": version "0.1.4" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" @@ -1602,8 +1708,8 @@ eslint-plugin-babel@^4.1.1: resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-4.1.2.tgz#79202a0e35757dd92780919b2336f1fa2fe53c1e" eslint-plugin-flowtype@^2.34.0: - version "2.41.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.41.0.tgz#fd5221c60ba917c059d7ef69686a99cca09fd871" + version "2.42.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.42.0.tgz#7fcc98df4ed9482a22ac10ba4ca48d649c4c733a" dependencies: lodash "^4.15.0" @@ -1634,8 +1740,8 @@ eslint-visitor-keys@^1.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" eslint@^4.1.0: - version "4.15.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.15.0.tgz#89ab38c12713eec3d13afac14e4a89e75ef08145" + version "4.16.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.16.0.tgz#934ada9e98715e1d7bbfd6f6f0519ed2fab35cc1" dependencies: ajv "^5.3.0" babel-code-frame "^6.22.0" @@ -1643,7 +1749,7 @@ eslint@^4.1.0: concat-stream "^1.6.0" cross-spawn "^5.1.0" debug "^3.1.0" - doctrine "^2.0.2" + doctrine "^2.1.0" eslint-scope "^3.7.1" eslint-visitor-keys "^1.0.0" espree "^3.5.2" @@ -1728,8 +1834,8 @@ estree-walker@^0.3.0: resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.3.1.tgz#e6b1a51cf7292524e7237c312e5fe6660c1ce1aa" estree-walker@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.5.0.tgz#aae3b57c42deb8010e349c892462f0e71c5dd1aa" + version "0.5.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.5.1.tgz#64fc375053abc6f57d73e9bd2f004644ad3c5854" esutils@^2.0.2: version "2.0.2" @@ -2006,7 +2112,11 @@ glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^11.0.1, globals@^11.1.0: +globals@^11.0.1: + version "11.2.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.2.0.tgz#aa2ece052a787563ba70a3dcd9dc2eb8a9a0488c" + +globals@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.1.0.tgz#632644457f5f0e3ae711807183700ebf2e4633e4" @@ -2070,6 +2180,16 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" +has-binary2@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.2.tgz#e83dba49f0b9be4d026d27365350d9f03f54be98" + dependencies: + isarray "2.0.1" + +has-cors@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" + has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" @@ -2146,6 +2266,10 @@ imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -2201,8 +2325,8 @@ is-binary-path@^1.0.0: binary-extensions "^1.0.0" is-buffer@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" is-builtin-module@^1.0.0: version "1.0.0" @@ -2305,8 +2429,8 @@ is-promise@^2.1.0: resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" is-resolvable@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.1.tgz#acca1cd36dbe44b974b924321555a70ba03b1cf4" + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" is-stream@^1.1.0: version "1.1.0" @@ -2328,6 +2452,10 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" +isarray@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -2877,12 +3005,22 @@ mime-db@~1.27.0: version "1.27.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" +mime-db@~1.30.0: + version "1.30.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" + mime-types@^2.1.12, mime-types@~2.1.7: version "2.1.15" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" dependencies: mime-db "~1.27.0" +mime-types@~2.1.11: + version "2.1.17" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" + dependencies: + mime-db "~1.30.0" + mimic-fn@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" @@ -2927,6 +3065,10 @@ natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -3036,6 +3178,10 @@ object-assign@^4.0.1, object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" +object-component@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" + object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" @@ -3141,6 +3287,18 @@ parse5@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" +parseqs@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" + dependencies: + better-assert "~1.0.0" + +parseuri@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" + dependencies: + better-assert "~1.0.0" + path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" @@ -3379,11 +3537,10 @@ regenerator-transform@0.9.11: private "^0.1.6" regex-cache@^0.4.2: - version "0.4.3" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" + version "0.4.4" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" dependencies: is-equal-shallow "^0.1.3" - is-primitive "^2.0.0" regexpu-core@^2.0.0: version "2.0.0" @@ -3404,8 +3561,8 @@ regjsparser@^0.1.4: jsesc "~0.5.0" remove-trailing-separator@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz#69b062d978727ad14dc6b56ba4ab772fd8d70511" + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" repeat-element@^1.1.2: version "1.1.2" @@ -3471,13 +3628,13 @@ resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.1.6: +resolve@^1.1.6, resolve@^1.4.0: version "1.5.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" dependencies: path-parse "^1.0.5" -resolve@^1.2.0, resolve@^1.4.0: +resolve@^1.2.0: version "1.4.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86" dependencies: @@ -3515,8 +3672,8 @@ rollup-plugin-babel@^3.0.2: rollup-pluginutils "^1.5.0" rollup-plugin-commonjs@^8.0.2: - version "8.2.6" - resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-8.2.6.tgz#27e5b9069ff94005bb01e01bb46a1e4873784677" + version "8.3.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-8.3.0.tgz#91b4ba18f340951e39ed7b1901f377a80ab3f9c3" dependencies: acorn "^5.2.1" estree-walker "^0.5.0" @@ -3682,6 +3839,47 @@ sntp@1.x.x: dependencies: hoek "2.x.x" +socket.io-adapter@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b" + +socket.io-client@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.0.4.tgz#0918a552406dc5e540b380dcd97afc4a64332f8e" + dependencies: + backo2 "1.0.2" + base64-arraybuffer "0.1.5" + component-bind "1.0.0" + component-emitter "1.2.1" + debug "~2.6.4" + engine.io-client "~3.1.0" + has-cors "1.1.0" + indexof "0.0.1" + object-component "0.0.3" + parseqs "0.0.5" + parseuri "0.0.5" + socket.io-parser "~3.1.1" + to-array "0.1.4" + +socket.io-parser@~3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.1.2.tgz#dbc2282151fc4faebbe40aeedc0772eba619f7f2" + dependencies: + component-emitter "1.2.1" + debug "~2.6.4" + has-binary2 "~1.0.2" + isarray "2.0.1" + +socket.io@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.0.4.tgz#c1a4590ceff87ecf13c72652f046f716b29e6014" + dependencies: + debug "~2.6.6" + engine.io "~3.1.0" + socket.io-adapter "~1.1.0" + socket.io-client "2.0.4" + socket.io-parser "~3.1.1" + source-map-support@^0.4.15: version "0.4.18" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" @@ -3710,6 +3908,10 @@ source-map@~0.2.0: dependencies: amdefine ">=0.0.4" +source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + spdx-correct@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" @@ -3894,6 +4096,10 @@ tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" +to-array@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" + to-fast-properties@^1.0.1, to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" @@ -3936,6 +4142,13 @@ typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" +uglify-es@^3.3.9: + version "3.3.9" + resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" + dependencies: + commander "~2.13.0" + source-map "~0.6.1" + uglify-js@^2.6: version "2.8.28" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.28.tgz#e335032df9bb20dcb918f164589d5af47f38834a" @@ -3960,6 +4173,10 @@ uid-number@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + user-home@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" @@ -3972,6 +4189,10 @@ uuid@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" +uws@~0.14.4: + version "0.14.5" + resolved "https://registry.yarnpkg.com/uws/-/uws-0.14.5.tgz#67aaf33c46b2a587a5f6666d00f7691328f149dc" + v8flags@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" @@ -3992,8 +4213,8 @@ verror@1.3.6: extsprintf "1.0.2" vlq@^0.2.1: - version "0.2.2" - resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.2.tgz#e316d5257b40b86bb43cb8d5fea5d7f54d6b0ca1" + version "0.2.3" + resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" walker@~1.0.5: version "1.0.7" @@ -4115,10 +4336,22 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" +ws@~3.3.1: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + xml-name-validator@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" +xmlhttprequest-ssl@~1.5.4: + version "1.5.5" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" + "xtend@>=4.0.0 <4.1.0-0": version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" @@ -4163,3 +4396,7 @@ yargs@~3.10.0: cliui "^2.1.0" decamelize "^1.0.0" window-size "0.1.0" + +yeast@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"