├── .gitignore ├── package.json ├── src ├── my-schema.js └── main.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !*.json 3 | !yarn.lock 4 | !src/ 5 | !src/**/*.js 6 | !.gitignore 7 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "graphql-rxjs-websocket-example", 3 | "version": "0.0.1", 4 | "description": "Example that shows integration between graphql-rxjs & websocket transport", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "node src/main.js" 8 | }, 9 | "author": "Hagai Cohen ", 10 | "license": "MIT", 11 | "dependencies": { 12 | "apollo-server-express": "^1.0.5", 13 | "body-parser": "^1.17.2", 14 | "express": "^4.15.3", 15 | "graphql": "^0.10.5", 16 | "graphql-rxjs": "^0.10.5-3", 17 | "graphql-tools": "^1.1.0", 18 | "rxjs": "^5.4.2", 19 | "subscriptions-transport-ws": "^0.8.2" 20 | }, 21 | "homepage": "https://github.com/DxCx/graphql-rxjs-websocket-example", 22 | "bugs": { 23 | "url": "https://github.com/DxCx/graphql-rxjs-websocket-example/issues" 24 | }, 25 | "repository": { 26 | "type": "git", 27 | "url": "http://github.com/DxCx/graphql-rxjs-websocket-example.git" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/my-schema.js: -------------------------------------------------------------------------------- 1 | const { Observable } = require('rxjs'); 2 | const { makeExecutableSchema } = require('graphql-tools'); 3 | 4 | const typeDefs = ` 5 | # Root Subscription 6 | type Query { 7 | someLiveInt: Int 8 | slowInt: Int 9 | simpleInt: Int 10 | } 11 | 12 | type Subscription { 13 | clock: String 14 | } 15 | `; 16 | 17 | const resolvers = { 18 | Query: { 19 | someLiveInt(root, args, ctx) { 20 | return Observable.interval(1000); 21 | }, 22 | slowInt(root, args, ctx) { 23 | return new Promise(resolve => { 24 | setTimeout(() => resolve(1), 5000); 25 | }); 26 | }, 27 | simpleInt(root, args, ctx) { 28 | return 10; 29 | }, 30 | }, 31 | Subscription: { 32 | clock(root, args, ctx) { 33 | return new Date().toString(); 34 | } 35 | } 36 | }; 37 | 38 | module.exports = { 39 | schema: makeExecutableSchema({typeDefs, resolvers}), 40 | rootValue: { 41 | // Used for subscription's subscribe 42 | clock: Observable.interval(1000).shareReplay(1), 43 | } 44 | }; 45 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | const { SubscriptionServer } = require('subscriptions-transport-ws'); 2 | const { 3 | prepareSchema, 4 | specifiedRules, 5 | executeReactive, 6 | subscribe 7 | } = require('graphql-rxjs'); 8 | const { graphqlExpress, graphiqlExpress } = require('apollo-server-express'); 9 | const express = require('express'); 10 | const { rootValue, schema } = require('./my-schema'); 11 | 12 | const GRAPHIQL_DEFAULT_QUERY = `query { 13 | slowInt @defer 14 | simpleInt 15 | }`; 16 | 17 | const WS_PORT = 5000; 18 | // TOOGLE This to switch to hybrid mode (Http + Ws) 19 | const HYBRID = false; 20 | let graphiqlWs = '/graphiql'; 21 | 22 | const app = express(); 23 | if ( HYBRID ) { 24 | const bodyParser = require('body-parser'); 25 | app.use('/graphql', bodyParser.json(), graphqlExpress({ 26 | schema, 27 | rootValue, 28 | validationRules: specifiedRules, 29 | })); 30 | 31 | app.use('/graphiql', graphiqlExpress({ 32 | endpointURL: `/graphql`, 33 | subscriptionsEndpoint: `ws://localhost:${WS_PORT}/graphql`, 34 | query: GRAPHIQL_DEFAULT_QUERY 35 | })); 36 | 37 | app.use('/graphiql-plain', graphiqlExpress({ 38 | endpointURL: `/graphql`, 39 | query: GRAPHIQL_DEFAULT_QUERY 40 | })); 41 | 42 | graphiqlWs = '/graphiql-full'; 43 | } 44 | 45 | app.use(graphiqlWs, graphiqlExpress({ 46 | endpointURL: `ws://localhost:${WS_PORT}/graphql`, 47 | subscriptionsEndpoint: `ws://localhost:${WS_PORT}/graphql`, 48 | query: GRAPHIQL_DEFAULT_QUERY 49 | })); 50 | 51 | // Set up schema for GraphQL-RxJs 52 | prepareSchema(schema); 53 | 54 | const server = app.listen(WS_PORT, () => { 55 | const subscriptionServer = SubscriptionServer.create( 56 | { 57 | schema, 58 | rootValue, 59 | execute: executeReactive, 60 | subscribe, 61 | validationRules: specifiedRules, 62 | }, 63 | { 64 | server: server, 65 | path: '/graphql', 66 | } 67 | ); 68 | 69 | console.log(`Websocket Server is now running on http://localhost:${WS_PORT}${graphiqlWs}`); 70 | }); 71 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/express-serve-static-core@*": 6 | version "4.0.49" 7 | resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.0.49.tgz#3438d68d26e39db934ba941f18e3862a1beeb722" 8 | dependencies: 9 | "@types/node" "*" 10 | 11 | "@types/express@^4.0.35": 12 | version "4.0.36" 13 | resolved "https://registry.yarnpkg.com/@types/express/-/express-4.0.36.tgz#14eb47de7ecb10319f0a2fb1cf971aa8680758c2" 14 | dependencies: 15 | "@types/express-serve-static-core" "*" 16 | "@types/serve-static" "*" 17 | 18 | "@types/graphql@^0.10.1": 19 | version "0.10.1" 20 | resolved "https://registry.yarnpkg.com/@types/graphql/-/graphql-0.10.1.tgz#3944e528bb3232e09cddb5364d75aba6342d068c" 21 | 22 | "@types/graphql@^0.9.0", "@types/graphql@^0.9.1": 23 | version "0.9.4" 24 | resolved "https://registry.yarnpkg.com/@types/graphql/-/graphql-0.9.4.tgz#cdeb6bcbef9b6c584374b81aa7f48ecf3da404fa" 25 | 26 | "@types/mime@*": 27 | version "1.3.1" 28 | resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.1.tgz#2cf42972d0931c1060c7d5fa6627fce6bd876f2f" 29 | 30 | "@types/node@*": 31 | version "8.0.19" 32 | resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.19.tgz#e46e2b0243de7d03f15b26b45c59ebb84f657a4e" 33 | 34 | "@types/serve-static@*": 35 | version "1.7.31" 36 | resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.7.31.tgz#15456de8d98d6b4cff31be6c6af7492ae63f521a" 37 | dependencies: 38 | "@types/express-serve-static-core" "*" 39 | "@types/mime" "*" 40 | 41 | accepts@~1.3.3: 42 | version "1.3.3" 43 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" 44 | dependencies: 45 | mime-types "~2.1.11" 46 | negotiator "0.6.1" 47 | 48 | apollo-server-core@^1.0.2: 49 | version "1.0.2" 50 | resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-1.0.2.tgz#6860a6b5680c42c8727153c524eefc84fb91e500" 51 | optionalDependencies: 52 | "@types/graphql" "^0.9.0" 53 | 54 | apollo-server-express@^1.0.5: 55 | version "1.0.5" 56 | resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-1.0.5.tgz#4475684462a9f530f1d2630112ed45295e98dcf1" 57 | dependencies: 58 | apollo-server-core "^1.0.2" 59 | apollo-server-module-graphiql "^1.0.5" 60 | optionalDependencies: 61 | "@types/express" "^4.0.35" 62 | "@types/graphql" "^0.9.1" 63 | 64 | apollo-server-module-graphiql@^1.0.5: 65 | version "1.0.5" 66 | resolved "https://registry.yarnpkg.com/apollo-server-module-graphiql/-/apollo-server-module-graphiql-1.0.5.tgz#31639acb1dc4bd7e2edb334cf619f84ebff600a6" 67 | 68 | array-flatten@1.1.1: 69 | version "1.1.1" 70 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 71 | 72 | backo2@^1.0.2: 73 | version "1.0.2" 74 | resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" 75 | 76 | body-parser@^1.17.2: 77 | version "1.17.2" 78 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.17.2.tgz#f8892abc8f9e627d42aedafbca66bf5ab99104ee" 79 | dependencies: 80 | bytes "2.4.0" 81 | content-type "~1.0.2" 82 | debug "2.6.7" 83 | depd "~1.1.0" 84 | http-errors "~1.6.1" 85 | iconv-lite "0.4.15" 86 | on-finished "~2.3.0" 87 | qs "6.4.0" 88 | raw-body "~2.2.0" 89 | type-is "~1.6.15" 90 | 91 | bytes@2.4.0: 92 | version "2.4.0" 93 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" 94 | 95 | content-disposition@0.5.2: 96 | version "0.5.2" 97 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" 98 | 99 | content-type@~1.0.2: 100 | version "1.0.2" 101 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" 102 | 103 | cookie-signature@1.0.6: 104 | version "1.0.6" 105 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 106 | 107 | cookie@0.3.1: 108 | version "0.3.1" 109 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" 110 | 111 | debug@2.6.7: 112 | version "2.6.7" 113 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.7.tgz#92bad1f6d05bbb6bba22cca88bcd0ec894c2861e" 114 | dependencies: 115 | ms "2.0.0" 116 | 117 | depd@1.1.0: 118 | version "1.1.0" 119 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" 120 | 121 | depd@~1.1.0: 122 | version "1.1.1" 123 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" 124 | 125 | deprecated-decorator@^0.1.6: 126 | version "0.1.6" 127 | resolved "https://registry.yarnpkg.com/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz#00966317b7a12fe92f3cc831f7583af329b86c37" 128 | 129 | destroy@~1.0.4: 130 | version "1.0.4" 131 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 132 | 133 | ee-first@1.1.1: 134 | version "1.1.1" 135 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 136 | 137 | encodeurl@~1.0.1: 138 | version "1.0.1" 139 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" 140 | 141 | es6-promise@^4.0.5: 142 | version "4.1.1" 143 | resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.1.1.tgz#8811e90915d9a0dba36274f0b242dbda78f9c92a" 144 | 145 | escape-html@~1.0.3: 146 | version "1.0.3" 147 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 148 | 149 | etag@~1.8.0: 150 | version "1.8.0" 151 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051" 152 | 153 | eventemitter3@^2.0.3: 154 | version "2.0.3" 155 | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-2.0.3.tgz#b5e1079b59fb5e1ba2771c0a993be060a58c99ba" 156 | 157 | express@^4.15.3: 158 | version "4.15.3" 159 | resolved "https://registry.yarnpkg.com/express/-/express-4.15.3.tgz#bab65d0f03aa80c358408972fc700f916944b662" 160 | dependencies: 161 | accepts "~1.3.3" 162 | array-flatten "1.1.1" 163 | content-disposition "0.5.2" 164 | content-type "~1.0.2" 165 | cookie "0.3.1" 166 | cookie-signature "1.0.6" 167 | debug "2.6.7" 168 | depd "~1.1.0" 169 | encodeurl "~1.0.1" 170 | escape-html "~1.0.3" 171 | etag "~1.8.0" 172 | finalhandler "~1.0.3" 173 | fresh "0.5.0" 174 | merge-descriptors "1.0.1" 175 | methods "~1.1.2" 176 | on-finished "~2.3.0" 177 | parseurl "~1.3.1" 178 | path-to-regexp "0.1.7" 179 | proxy-addr "~1.1.4" 180 | qs "6.4.0" 181 | range-parser "~1.2.0" 182 | send "0.15.3" 183 | serve-static "1.12.3" 184 | setprototypeof "1.0.3" 185 | statuses "~1.3.1" 186 | type-is "~1.6.15" 187 | utils-merge "1.0.0" 188 | vary "~1.1.1" 189 | 190 | finalhandler@~1.0.3: 191 | version "1.0.3" 192 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.3.tgz#ef47e77950e999780e86022a560e3217e0d0cc89" 193 | dependencies: 194 | debug "2.6.7" 195 | encodeurl "~1.0.1" 196 | escape-html "~1.0.3" 197 | on-finished "~2.3.0" 198 | parseurl "~1.3.1" 199 | statuses "~1.3.1" 200 | unpipe "~1.0.0" 201 | 202 | forwarded@~0.1.0: 203 | version "0.1.0" 204 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363" 205 | 206 | fresh@0.5.0: 207 | version "0.5.0" 208 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" 209 | 210 | graphql-rxjs@^0.10.5-2: 211 | version "0.10.5-2" 212 | resolved "https://registry.yarnpkg.com/graphql-rxjs/-/graphql-rxjs-0.10.5-2.tgz#18d0b981dfbe1d69ad68bb1779fd7075c9f8866e" 213 | optionalDependencies: 214 | "@types/graphql" "^0.10.1" 215 | 216 | graphql-subscriptions@^0.4.4: 217 | version "0.4.4" 218 | resolved "https://registry.yarnpkg.com/graphql-subscriptions/-/graphql-subscriptions-0.4.4.tgz#39cff32d08dd3c990113864bab77154403727e9b" 219 | dependencies: 220 | "@types/graphql" "^0.9.1" 221 | es6-promise "^4.0.5" 222 | iterall "^1.1.1" 223 | 224 | graphql-tag@^2.4.2: 225 | version "2.4.2" 226 | resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.4.2.tgz#6a63297d8522d03a2b72d26f1b239aab343840cd" 227 | 228 | graphql-tools@^1.1.0: 229 | version "1.1.0" 230 | resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-1.1.0.tgz#8d86ea6997b0dea3089b62dc655e47146a663ebb" 231 | dependencies: 232 | deprecated-decorator "^0.1.6" 233 | lodash "^4.3.0" 234 | uuid "^3.0.1" 235 | optionalDependencies: 236 | "@types/graphql" "^0.9.0" 237 | 238 | graphql@^0.10.5: 239 | version "0.10.5" 240 | resolved "https://registry.yarnpkg.com/graphql/-/graphql-0.10.5.tgz#c9be17ca2bdfdbd134077ffd9bbaa48b8becd298" 241 | dependencies: 242 | iterall "^1.1.0" 243 | 244 | http-errors@~1.6.1: 245 | version "1.6.1" 246 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257" 247 | dependencies: 248 | depd "1.1.0" 249 | inherits "2.0.3" 250 | setprototypeof "1.0.3" 251 | statuses ">= 1.3.1 < 2" 252 | 253 | iconv-lite@0.4.15: 254 | version "0.4.15" 255 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" 256 | 257 | inherits@2.0.3: 258 | version "2.0.3" 259 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 260 | 261 | ipaddr.js@1.4.0: 262 | version "1.4.0" 263 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.4.0.tgz#296aca878a821816e5b85d0a285a99bcff4582f0" 264 | 265 | iterall@^1.1.0, iterall@^1.1.1: 266 | version "1.1.1" 267 | resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.1.1.tgz#f7f0af11e9a04ec6426260f5019d9fcca4d50214" 268 | 269 | lodash.assign@^4.2.0: 270 | version "4.2.0" 271 | resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" 272 | 273 | lodash.isobject@^3.0.2: 274 | version "3.0.2" 275 | resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-3.0.2.tgz#3c8fb8d5b5bf4bf90ae06e14f2a530a4ed935e1d" 276 | 277 | lodash.isstring@^4.0.1: 278 | version "4.0.1" 279 | resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" 280 | 281 | lodash@^4.3.0: 282 | version "4.17.4" 283 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" 284 | 285 | media-typer@0.3.0: 286 | version "0.3.0" 287 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 288 | 289 | merge-descriptors@1.0.1: 290 | version "1.0.1" 291 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 292 | 293 | methods@~1.1.2: 294 | version "1.1.2" 295 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 296 | 297 | mime-db@~1.29.0: 298 | version "1.29.0" 299 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.29.0.tgz#48d26d235589651704ac5916ca06001914266878" 300 | 301 | mime-types@~2.1.11, mime-types@~2.1.15: 302 | version "2.1.16" 303 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.16.tgz#2b858a52e5ecd516db897ac2be87487830698e23" 304 | dependencies: 305 | mime-db "~1.29.0" 306 | 307 | mime@1.3.4: 308 | version "1.3.4" 309 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" 310 | 311 | ms@2.0.0: 312 | version "2.0.0" 313 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 314 | 315 | negotiator@0.6.1: 316 | version "0.6.1" 317 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" 318 | 319 | on-finished@~2.3.0: 320 | version "2.3.0" 321 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 322 | dependencies: 323 | ee-first "1.1.1" 324 | 325 | parseurl@~1.3.1: 326 | version "1.3.1" 327 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" 328 | 329 | path-to-regexp@0.1.7: 330 | version "0.1.7" 331 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 332 | 333 | proxy-addr@~1.1.4: 334 | version "1.1.5" 335 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.5.tgz#71c0ee3b102de3f202f3b64f608d173fcba1a918" 336 | dependencies: 337 | forwarded "~0.1.0" 338 | ipaddr.js "1.4.0" 339 | 340 | qs@6.4.0: 341 | version "6.4.0" 342 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" 343 | 344 | range-parser@~1.2.0: 345 | version "1.2.0" 346 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" 347 | 348 | raw-body@~2.2.0: 349 | version "2.2.0" 350 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.2.0.tgz#994976cf6a5096a41162840492f0bdc5d6e7fb96" 351 | dependencies: 352 | bytes "2.4.0" 353 | iconv-lite "0.4.15" 354 | unpipe "1.0.0" 355 | 356 | rxjs@^5.4.2: 357 | version "5.4.2" 358 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.4.2.tgz#2a3236fcbf03df57bae06fd6972fd99e5c08fcf7" 359 | dependencies: 360 | symbol-observable "^1.0.1" 361 | 362 | safe-buffer@~5.1.0: 363 | version "5.1.1" 364 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" 365 | 366 | send@0.15.3: 367 | version "0.15.3" 368 | resolved "https://registry.yarnpkg.com/send/-/send-0.15.3.tgz#5013f9f99023df50d1bd9892c19e3defd1d53309" 369 | dependencies: 370 | debug "2.6.7" 371 | depd "~1.1.0" 372 | destroy "~1.0.4" 373 | encodeurl "~1.0.1" 374 | escape-html "~1.0.3" 375 | etag "~1.8.0" 376 | fresh "0.5.0" 377 | http-errors "~1.6.1" 378 | mime "1.3.4" 379 | ms "2.0.0" 380 | on-finished "~2.3.0" 381 | range-parser "~1.2.0" 382 | statuses "~1.3.1" 383 | 384 | serve-static@1.12.3: 385 | version "1.12.3" 386 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.3.tgz#9f4ba19e2f3030c547f8af99107838ec38d5b1e2" 387 | dependencies: 388 | encodeurl "~1.0.1" 389 | escape-html "~1.0.3" 390 | parseurl "~1.3.1" 391 | send "0.15.3" 392 | 393 | setprototypeof@1.0.3: 394 | version "1.0.3" 395 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" 396 | 397 | "statuses@>= 1.3.1 < 2", statuses@~1.3.1: 398 | version "1.3.1" 399 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" 400 | 401 | subscriptions-transport-ws@^0.8.2: 402 | version "0.8.2" 403 | resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.8.2.tgz#2325b3cff1bdcd824b60a8ba7135cdfeb6161091" 404 | dependencies: 405 | backo2 "^1.0.2" 406 | eventemitter3 "^2.0.3" 407 | graphql-subscriptions "^0.4.4" 408 | graphql-tag "^2.4.2" 409 | iterall "^1.1.1" 410 | lodash.assign "^4.2.0" 411 | lodash.isobject "^3.0.2" 412 | lodash.isstring "^4.0.1" 413 | symbol-observable "^1.0.4" 414 | ws "^3.0.0" 415 | 416 | symbol-observable@^1.0.1, symbol-observable@^1.0.4: 417 | version "1.0.4" 418 | resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" 419 | 420 | type-is@~1.6.15: 421 | version "1.6.15" 422 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" 423 | dependencies: 424 | media-typer "0.3.0" 425 | mime-types "~2.1.15" 426 | 427 | ultron@~1.1.0: 428 | version "1.1.0" 429 | resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.0.tgz#b07a2e6a541a815fc6a34ccd4533baec307ca864" 430 | 431 | unpipe@1.0.0, unpipe@~1.0.0: 432 | version "1.0.0" 433 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 434 | 435 | utils-merge@1.0.0: 436 | version "1.0.0" 437 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" 438 | 439 | uuid@^3.0.1: 440 | version "3.1.0" 441 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" 442 | 443 | vary@~1.1.1: 444 | version "1.1.1" 445 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37" 446 | 447 | ws@^3.0.0: 448 | version "3.1.0" 449 | resolved "https://registry.yarnpkg.com/ws/-/ws-3.1.0.tgz#8afafecdeab46d572e5397ee880739367aa2f41c" 450 | dependencies: 451 | safe-buffer "~5.1.0" 452 | ultron "~1.1.0" 453 | --------------------------------------------------------------------------------