├── .gitignore ├── .graphqlconfig.yml ├── README.md ├── database ├── datamodel.graphql └── prisma.yml ├── package.json ├── src ├── generated │ └── prisma.graphql ├── index.js └── schema.graphql └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /.graphqlconfig.yml: -------------------------------------------------------------------------------- 1 | projects: 2 | app: 3 | schemaPath: ./src/schema.graphql 4 | extensions: 5 | endpoints: 6 | default: http://localhost:4000 7 | database: 8 | schemaPath: ./src/generated/prisma.graphql 9 | extensions: 10 | prisma: database/prisma.yml -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Building a GraphQL Server with Node.JS 2 | 3 | This is the repository for the afternoon workshop at [GraphQL Day](https://www.graphqlday.org) 🇳🇱 4 | 5 | ## Overview 6 | 7 | This git repository contains several branches that correspond to the "steps" to be performed throughout the workshops. The `master` branch contains the final version of the code. 8 | 9 | - [Step 0](https://github.com/nikolasburk/graphqlday-workshop/tree/step0): Minimal GraphQL server 10 | - [Step 1](https://github.com/nikolasburk/graphqlday-workshop/tree/step1): Extend API with query arguments 11 | - [Step 2](https://github.com/nikolasburk/graphqlday-workshop/tree/step2): Complete API operations 12 | - [Step 3](https://github.com/nikolasburk/graphqlday-workshop/tree/step3): Add database layer with Prisma and Prisma bindings 13 | - [Step 4](https://github.com/nikolasburk/graphqlday-workshop/tree/step4): Complete API operations against the database 14 | 15 | ## Usage 16 | 17 | ### Clone the repository 18 | 19 | ```bash 20 | git clone git@github.com:nikolasburk/graphqlday-workshop.git 21 | cd graphqlday-workshop 22 | ``` 23 | 24 | ### Deploy the Prisma service 25 | 26 | ```bash 27 | npm install -g prisma 28 | prisma deploy 29 | ``` 30 | 31 | > **Note**: If you don't have [Docker](https://www.docker.com) installed on your machine, you need to remove the [`cluster`](./database/prisma.yml#L9) property from [`prisma.yml`](./database/prisma.yml) and select a _development cluster_ when prompted by the CLI where to deploy your Prisma API. The endpoint that's then printed by the CLI needs to be pasted into [`index.js`](./src/index.js#L29) where `Prisma` is instantied. 32 | 33 | ### Start the server 34 | 35 | ```bash 36 | node src/index.js 37 | ``` 38 | 39 | ### Open a GraphQL Playground 40 | 41 | ```bash 42 | npm install -g graphql-cli 43 | graphql playground 44 | ``` 45 | 46 | ![](https://imgur.com/bX5TSzs.png) 47 | 48 | The Playground now allows to work with both GraphQL APIs side-by-side. It receives its information about the corresponding endpoints and schemas from the configuration in [`.graphqlconfig.yml`](.graphqlconfig.yml): 49 | 50 | - `app`: The application layer built with `graphql-yoga` 51 | - `database` The database layer configured with Prisma 52 | 53 | ## Sample queries/mutations 54 | 55 | > In the following queries/mutation, `__POST_ID__` is a placeholder that needs to be replaced with the `id` of an actual `Post` item in your database. 56 | 57 | ### Application layer (`graphql-yoga`) 58 | 59 | ```graphql 60 | post(id: "__POST_ID__") { 61 | id 62 | title 63 | content 64 | published 65 | } 66 | ``` 67 | 68 | ```graphql 69 | mutation { 70 | createDraft( 71 | title: "How to GraphQL" 72 | content: "Learn best practices all around developing GraphQL APIs" 73 | ) { 74 | id 75 | published 76 | } 77 | } 78 | ``` 79 | 80 | ```graphql 81 | mutation { 82 | publish(id: "__POST_ID__") { 83 | id 84 | published 85 | } 86 | } 87 | ``` 88 | 89 | ```graphql 90 | mutation { 91 | deletePost(id: "__POST_ID__") { 92 | id 93 | title 94 | content 95 | published 96 | } 97 | } 98 | ``` 99 | 100 | ### Database layer (Prisma) 101 | 102 | ```graphql 103 | query { 104 | posts(where: { 105 | title_contains: "QL" 106 | }) { 107 | id 108 | title 109 | content 110 | published 111 | } 112 | } 113 | ``` 114 | 115 | ```graphql 116 | query { 117 | post(where: { 118 | id: "__POST_ID__" 119 | }) { 120 | id 121 | title 122 | content 123 | published 124 | } 125 | } 126 | ``` 127 | 128 | ```graphql 129 | mutation { 130 | updatePost( 131 | where: { 132 | id: "__POST_ID__" 133 | } 134 | data: { 135 | published: true 136 | } 137 | ) { 138 | id 139 | title 140 | content 141 | published 142 | } 143 | } 144 | ``` 145 | 146 | ```graphql 147 | mutation { 148 | deletePost(where: { 149 | id: "__POST_ID__" 150 | }) { 151 | id 152 | title 153 | content 154 | published 155 | } 156 | } 157 | ``` 158 | 159 | ## Technology stack 160 | 161 | The GraphQL server in this repository is build upon the following technologies: 162 | 163 | - [`graphql-yoga`](https://github.com/graphcool/graphql-yoga): A GraphQL server library based on Express.js. It features out-of-the-box support for [GraphQL Playgrounds](https://github.com/graphcool/graphql-playground) as well as realtime GraphQL subscriptions. 164 | - [Prisma](https://www.prisma.io): A GraphQL database proxy that makes it easy to connect your GraphQL server to a database and massively simplifies your [resolver](https://blog.graph.cool/graphql-server-basics-the-schema-ac5e2950214e#1880) implementations. 165 | - [Docker](https://www.docker.com) (optional): In case you have Docker installed, you can deploy your Prisma APIs locally. Otherwise you can use a free sandbox environment provided by Prisma Cloud. 166 | 167 | > **Note**: When using Docker to deploy Prisma locally, the Prisma API is backed by a local MySQL database. If you're using Prisma Cloud, your Prisma API is running against an instance of AWS Aurora. 168 | 169 | ![](https://imgur.com/Z2Yld5l.png) 170 | 171 | ## Recommended resources 172 | 173 | - [Node.JS Tutorial on How to GraphQL](https://www.howtographql.com/graphql-js/0-introduction/): In-depth tutorial covering topics like schema design, GraphQL bindings, authentication and realtime GraphQL subscriptions. 174 | - [GraphQL Boilerplates](https://github.com/graphql-boilerplates): Starter kits for your next GraphQL project, no matter if backend-only (Node, TypeScript, ...) or fullstack (React, Vue, ...). Each boilerplate is build upon industry best practices and uses the latest GraphQL tooling. 175 | - [Top 5 Reasons To Use GraphQL](https://blog.graph.cool/top-5-reasons-to-use-graphql-b60cfa683511): Learn the top arguments why GraphQL is the future of API development. 176 | - [How to wrap a REST API with GraphQL](https://blog.graph.cool/how-to-wrap-a-rest-api-with-graphql-8bf3fb17547d): 177 | - GraphQL Server Basics: 178 | - [Part I: GraphQL Schemas, TypeDefs & Resolvers Explained](https://blog.graph.cool/graphql-server-basics-the-schema-ac5e2950214e) 179 | - [Part II: The Network Layer](https://blog.graph.cool/graphql-server-basics-the-network-layer-51d97d21861) 180 | - [Part III: Demystifying the `info` object in GraphQL resolvers](https://blog.graph.cool/graphql-server-basics-demystifying-the-info-argument-in-graphql-resolvers-6f26249f613a) 181 | - Deployment tutorials: 182 | - GraphQL servers: 183 | - [Deploying GraphQL servers with Zeit Now](https://blog.graph.cool/deploying-graphql-servers-with-zeit-now-85f4757b79a7) 184 | - [Deploying GraphQL servers with Apex Up](https://blog.graph.cool/deploying-graphql-servers-with-apex-up-522f2b75a2ac) 185 | - Prisma: 186 | - [Deploying Prisma to AWS Fargate with Docker & CloudFormation](https://blog.graph.cool/how-to-deploy-a-prisma-cluster-to-aws-fargate-using-docker-cloudformation-293aa8727b89) 187 | - [Deploying Prisma DigitalOcean](https://www.prisma.io/docs/tutorials/cluster-deployment/digital-ocean-(docker-machine)-texoo9aemu) 188 | - [Deploying Prisma to Prisma Cloud](https://www.prisma.io/docs/tutorials/cluster-deployment/prisma-cloud-ua9gai4kie) 189 | 190 | ## 🇪🇺 GraphQL Europe 191 | 192 | Get your tickets for GraphQL Europe [here](https://www.graphql-europe.org/). 193 | -------------------------------------------------------------------------------- /database/datamodel.graphql: -------------------------------------------------------------------------------- 1 | type Post { 2 | id: ID! @unique 3 | title: String! 4 | content: String! 5 | published: Boolean! @default(value: "false") 6 | } -------------------------------------------------------------------------------- /database/prisma.yml: -------------------------------------------------------------------------------- 1 | service: graphqlday-demo 2 | 3 | stage: dev 4 | 5 | datamodel: datamodel.graphql 6 | 7 | secret: mysecret123 8 | 9 | cluster: local -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "graphqlday-workshop", 3 | "version": "1.0.0", 4 | "repository": "git@github.com:nikolasburk/graphqlday-workshop.git", 5 | "author": "Nikolas Burk ", 6 | "license": "MIT", 7 | "dependencies": { 8 | "graphql-yoga": "^1.8.5", 9 | "prisma-binding": "^1.5.17" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/generated/prisma.graphql: -------------------------------------------------------------------------------- 1 | # THIS FILE HAS BEEN AUTO-GENERATED BY "PRISMA DEPLOY" 2 | # DO NOT EDIT THIS FILE DIRECTLY 3 | 4 | # 5 | # Model Types 6 | # 7 | 8 | type Post implements Node { 9 | id: ID! 10 | title: String! 11 | content: String! 12 | published: Boolean! 13 | } 14 | 15 | 16 | # 17 | # Other Types 18 | # 19 | 20 | type AggregatePost { 21 | count: Int! 22 | } 23 | 24 | type BatchPayload { 25 | """ 26 | The number of nodes that have been affected by the Batch operation. 27 | """ 28 | count: Long! 29 | } 30 | 31 | """ 32 | The `Long` scalar type represents non-fractional signed whole numeric values. 33 | Long can represent values between -(2^63) and 2^63 - 1. 34 | """ 35 | scalar Long 36 | 37 | type Mutation { 38 | createPost(data: PostCreateInput!): Post! 39 | updatePost(data: PostUpdateInput!, where: PostWhereUniqueInput!): Post 40 | deletePost(where: PostWhereUniqueInput!): Post 41 | upsertPost(where: PostWhereUniqueInput!, create: PostCreateInput!, update: PostUpdateInput!): Post! 42 | updateManyPosts(data: PostUpdateInput!, where: PostWhereInput!): BatchPayload! 43 | deleteManyPosts(where: PostWhereInput!): BatchPayload! 44 | } 45 | 46 | enum MutationType { 47 | CREATED 48 | UPDATED 49 | DELETED 50 | } 51 | 52 | """ 53 | An object with an ID 54 | """ 55 | interface Node { 56 | """ 57 | The id of the object. 58 | """ 59 | id: ID! 60 | } 61 | 62 | """ 63 | Information about pagination in a connection. 64 | """ 65 | type PageInfo { 66 | """ 67 | When paginating forwards, are there more items? 68 | """ 69 | hasNextPage: Boolean! 70 | """ 71 | When paginating backwards, are there more items? 72 | """ 73 | hasPreviousPage: Boolean! 74 | """ 75 | When paginating backwards, the cursor to continue. 76 | """ 77 | startCursor: String 78 | """ 79 | When paginating forwards, the cursor to continue. 80 | """ 81 | endCursor: String 82 | } 83 | 84 | """ 85 | A connection to a list of items. 86 | """ 87 | type PostConnection { 88 | """ 89 | Information to aid in pagination. 90 | """ 91 | pageInfo: PageInfo! 92 | """ 93 | A list of edges. 94 | """ 95 | edges: [PostEdge]! 96 | aggregate: AggregatePost! 97 | } 98 | 99 | input PostCreateInput { 100 | title: String! 101 | content: String! 102 | published: Boolean 103 | } 104 | 105 | """ 106 | An edge in a connection. 107 | """ 108 | type PostEdge { 109 | """ 110 | The item at the end of the edge. 111 | """ 112 | node: Post! 113 | """ 114 | A cursor for use in pagination. 115 | """ 116 | cursor: String! 117 | } 118 | 119 | enum PostOrderByInput { 120 | id_ASC 121 | id_DESC 122 | title_ASC 123 | title_DESC 124 | content_ASC 125 | content_DESC 126 | published_ASC 127 | published_DESC 128 | updatedAt_ASC 129 | updatedAt_DESC 130 | createdAt_ASC 131 | createdAt_DESC 132 | } 133 | 134 | type PostPreviousValues { 135 | id: ID! 136 | title: String! 137 | content: String! 138 | published: Boolean! 139 | } 140 | 141 | type PostSubscriptionPayload { 142 | mutation: MutationType! 143 | node: Post 144 | updatedFields: [String!] 145 | previousValues: PostPreviousValues 146 | } 147 | 148 | input PostSubscriptionWhereInput { 149 | """ 150 | Logical AND on all given filters. 151 | """ 152 | AND: [PostSubscriptionWhereInput!] 153 | """ 154 | Logical OR on all given filters. 155 | """ 156 | OR: [PostSubscriptionWhereInput!] 157 | """ 158 | The subscription event gets dispatched when it's listed in mutation_in 159 | """ 160 | mutation_in: [MutationType!] 161 | """ 162 | The subscription event gets only dispatched when one of the updated fields names is included in this list 163 | """ 164 | updatedFields_contains: String 165 | """ 166 | The subscription event gets only dispatched when all of the field names included in this list have been updated 167 | """ 168 | updatedFields_contains_every: [String!] 169 | """ 170 | The subscription event gets only dispatched when some of the field names included in this list have been updated 171 | """ 172 | updatedFields_contains_some: [String!] 173 | node: PostWhereInput 174 | } 175 | 176 | input PostUpdateInput { 177 | title: String 178 | content: String 179 | published: Boolean 180 | } 181 | 182 | input PostWhereInput { 183 | """ 184 | Logical AND on all given filters. 185 | """ 186 | AND: [PostWhereInput!] 187 | """ 188 | Logical OR on all given filters. 189 | """ 190 | OR: [PostWhereInput!] 191 | id: ID 192 | """ 193 | All values that are not equal to given value. 194 | """ 195 | id_not: ID 196 | """ 197 | All values that are contained in given list. 198 | """ 199 | id_in: [ID!] 200 | """ 201 | All values that are not contained in given list. 202 | """ 203 | id_not_in: [ID!] 204 | """ 205 | All values less than the given value. 206 | """ 207 | id_lt: ID 208 | """ 209 | All values less than or equal the given value. 210 | """ 211 | id_lte: ID 212 | """ 213 | All values greater than the given value. 214 | """ 215 | id_gt: ID 216 | """ 217 | All values greater than or equal the given value. 218 | """ 219 | id_gte: ID 220 | """ 221 | All values containing the given string. 222 | """ 223 | id_contains: ID 224 | """ 225 | All values not containing the given string. 226 | """ 227 | id_not_contains: ID 228 | """ 229 | All values starting with the given string. 230 | """ 231 | id_starts_with: ID 232 | """ 233 | All values not starting with the given string. 234 | """ 235 | id_not_starts_with: ID 236 | """ 237 | All values ending with the given string. 238 | """ 239 | id_ends_with: ID 240 | """ 241 | All values not ending with the given string. 242 | """ 243 | id_not_ends_with: ID 244 | title: String 245 | """ 246 | All values that are not equal to given value. 247 | """ 248 | title_not: String 249 | """ 250 | All values that are contained in given list. 251 | """ 252 | title_in: [String!] 253 | """ 254 | All values that are not contained in given list. 255 | """ 256 | title_not_in: [String!] 257 | """ 258 | All values less than the given value. 259 | """ 260 | title_lt: String 261 | """ 262 | All values less than or equal the given value. 263 | """ 264 | title_lte: String 265 | """ 266 | All values greater than the given value. 267 | """ 268 | title_gt: String 269 | """ 270 | All values greater than or equal the given value. 271 | """ 272 | title_gte: String 273 | """ 274 | All values containing the given string. 275 | """ 276 | title_contains: String 277 | """ 278 | All values not containing the given string. 279 | """ 280 | title_not_contains: String 281 | """ 282 | All values starting with the given string. 283 | """ 284 | title_starts_with: String 285 | """ 286 | All values not starting with the given string. 287 | """ 288 | title_not_starts_with: String 289 | """ 290 | All values ending with the given string. 291 | """ 292 | title_ends_with: String 293 | """ 294 | All values not ending with the given string. 295 | """ 296 | title_not_ends_with: String 297 | content: String 298 | """ 299 | All values that are not equal to given value. 300 | """ 301 | content_not: String 302 | """ 303 | All values that are contained in given list. 304 | """ 305 | content_in: [String!] 306 | """ 307 | All values that are not contained in given list. 308 | """ 309 | content_not_in: [String!] 310 | """ 311 | All values less than the given value. 312 | """ 313 | content_lt: String 314 | """ 315 | All values less than or equal the given value. 316 | """ 317 | content_lte: String 318 | """ 319 | All values greater than the given value. 320 | """ 321 | content_gt: String 322 | """ 323 | All values greater than or equal the given value. 324 | """ 325 | content_gte: String 326 | """ 327 | All values containing the given string. 328 | """ 329 | content_contains: String 330 | """ 331 | All values not containing the given string. 332 | """ 333 | content_not_contains: String 334 | """ 335 | All values starting with the given string. 336 | """ 337 | content_starts_with: String 338 | """ 339 | All values not starting with the given string. 340 | """ 341 | content_not_starts_with: String 342 | """ 343 | All values ending with the given string. 344 | """ 345 | content_ends_with: String 346 | """ 347 | All values not ending with the given string. 348 | """ 349 | content_not_ends_with: String 350 | published: Boolean 351 | """ 352 | All values that are not equal to given value. 353 | """ 354 | published_not: Boolean 355 | } 356 | 357 | input PostWhereUniqueInput { 358 | id: ID 359 | } 360 | 361 | type Query { 362 | posts(where: PostWhereInput, orderBy: PostOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [Post]! 363 | post(where: PostWhereUniqueInput!): Post 364 | postsConnection(where: PostWhereInput, orderBy: PostOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): PostConnection! 365 | """ 366 | Fetches an object given its ID 367 | """ 368 | node(""" 369 | The ID of an object 370 | """ 371 | id: ID!): Node 372 | } 373 | 374 | type Subscription { 375 | post(where: PostSubscriptionWhereInput): PostSubscriptionPayload 376 | } 377 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | const { GraphQLServer } = require('graphql-yoga') 2 | const { Prisma } = require('prisma-binding') 3 | 4 | const resolvers = { 5 | Query: { 6 | info: () => `This is the API for a simple blogging application.`, 7 | posts: (_, args, context, info) => { 8 | return context.db.query.posts( 9 | { 10 | where: { 11 | OR: [ 12 | { 13 | title_contains: args.searchString, 14 | }, 15 | { 16 | content_contains: args.searchString, 17 | }, 18 | ], 19 | }, 20 | }, 21 | info, 22 | ) 23 | }, 24 | post: (_, args, context, info) => { 25 | return context.db.query.post( 26 | { 27 | where: { 28 | id: args.id, 29 | }, 30 | }, 31 | info, 32 | ) 33 | }, 34 | }, 35 | Mutation: { 36 | createDraft: (_, args, context, info) => { 37 | return context.db.mutation.createPost( 38 | { 39 | data: { 40 | title: args.title, 41 | content: args.content, 42 | }, 43 | }, 44 | info, 45 | ) 46 | }, 47 | publish: (_, args, context, info) => { 48 | return context.db.mutation.updatePost( 49 | { 50 | where: { 51 | id: args.id, 52 | }, 53 | data: { 54 | published: true, 55 | }, 56 | }, 57 | info, 58 | ) 59 | }, 60 | deletePost: (_, args, context, info) => { 61 | return context.db.mutation.deletePost( 62 | { 63 | where: { 64 | id: args.id, 65 | }, 66 | }, 67 | info, 68 | ) 69 | }, 70 | }, 71 | } 72 | 73 | const server = new GraphQLServer({ 74 | typeDefs: './src/schema.graphql', 75 | resolvers, 76 | context: req => ({ 77 | ...req, 78 | db: new Prisma({ 79 | typeDefs: './src/generated/prisma.graphql', 80 | endpoint: 'http://localhost:4466/graphqlday-demo/dev', 81 | secret: 'mysecret123', 82 | debug: true, 83 | }), 84 | }), 85 | }) 86 | server.start(() => 87 | console.log(`GraphQL server is running on http://localhost:4000`), 88 | ) 89 | -------------------------------------------------------------------------------- /src/schema.graphql: -------------------------------------------------------------------------------- 1 | # import Post from './generated/prisma.graphql' 2 | 3 | type Query { 4 | info: String! 5 | posts(searchString: String): [Post!]! 6 | post(id: ID!): Post 7 | } 8 | 9 | type Mutation { 10 | createDraft(title: String!, content: String!): Post! 11 | publish(id: ID!): Post 12 | deletePost(id: ID!): Post 13 | } -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/runtime@^7.0.0-beta.40": 6 | version "7.0.0-beta.44" 7 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.0.0-beta.44.tgz#ea5ad6c6fe9a2c1187b025bf42424d28050ee696" 8 | dependencies: 9 | core-js "^2.5.3" 10 | regenerator-runtime "^0.11.1" 11 | 12 | "@types/body-parser@*": 13 | version "1.16.8" 14 | resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.16.8.tgz#687ec34140624a3bec2b1a8ea9268478ae8f3be3" 15 | dependencies: 16 | "@types/express" "*" 17 | "@types/node" "*" 18 | 19 | "@types/cors@^2.8.3": 20 | version "2.8.3" 21 | resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.3.tgz#eaf6e476da0d36bee6b061a24d57e343ddce86d6" 22 | dependencies: 23 | "@types/express" "*" 24 | 25 | "@types/events@*": 26 | version "1.2.0" 27 | resolved "https://registry.yarnpkg.com/@types/events/-/events-1.2.0.tgz#81a6731ce4df43619e5c8c945383b3e62a89ea86" 28 | 29 | "@types/express-serve-static-core@*": 30 | version "4.11.1" 31 | resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.11.1.tgz#f6f7212382d59b19d696677bcaa48a37280f5d45" 32 | dependencies: 33 | "@types/events" "*" 34 | "@types/node" "*" 35 | 36 | "@types/express@*", "@types/express@^4.11.1": 37 | version "4.11.1" 38 | resolved "https://registry.yarnpkg.com/@types/express/-/express-4.11.1.tgz#f99663b3ab32d04cb11db612ef5dd7933f75465b" 39 | dependencies: 40 | "@types/body-parser" "*" 41 | "@types/express-serve-static-core" "*" 42 | "@types/serve-static" "*" 43 | 44 | "@types/graphql@0.12.6": 45 | version "0.12.6" 46 | resolved "https://registry.yarnpkg.com/@types/graphql/-/graphql-0.12.6.tgz#3d619198585fcabe5f4e1adfb5cf5f3388c66c13" 47 | 48 | "@types/graphql@^0.13.0": 49 | version "0.13.0" 50 | resolved "https://registry.yarnpkg.com/@types/graphql/-/graphql-0.13.0.tgz#78a33a7f429a06a64714817d9130d578e0f35ecb" 51 | 52 | "@types/mime@*": 53 | version "2.0.0" 54 | resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.0.tgz#5a7306e367c539b9f6543499de8dd519fac37a8b" 55 | 56 | "@types/node@*", "@types/node@^9.4.6": 57 | version "9.6.4" 58 | resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.4.tgz#0ef7b4cfc3499881c81e0ea1ce61a23f6f4f5b42" 59 | 60 | "@types/serve-static@*": 61 | version "1.13.1" 62 | resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.1.tgz#1d2801fa635d274cd97d4ec07e26b21b44127492" 63 | dependencies: 64 | "@types/express-serve-static-core" "*" 65 | "@types/mime" "*" 66 | 67 | "@types/zen-observable@^0.5.3": 68 | version "0.5.3" 69 | resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.5.3.tgz#91b728599544efbb7386d8b6633693a3c2e7ade5" 70 | 71 | accepts@~1.3.5: 72 | version "1.3.5" 73 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" 74 | dependencies: 75 | mime-types "~2.1.18" 76 | negotiator "0.6.1" 77 | 78 | apollo-cache-control@^0.1.0: 79 | version "0.1.0" 80 | resolved "https://registry.yarnpkg.com/apollo-cache-control/-/apollo-cache-control-0.1.0.tgz#0c7c9abc312dea3a60e1cb70e0869df2cd970688" 81 | dependencies: 82 | graphql-extensions "^0.0.x" 83 | 84 | apollo-link-error@1.0.7: 85 | version "1.0.7" 86 | resolved "https://registry.yarnpkg.com/apollo-link-error/-/apollo-link-error-1.0.7.tgz#df6d7b13e9b73f9a615547b65ec9a4c930ca7f18" 87 | dependencies: 88 | apollo-link "^1.2.1" 89 | 90 | apollo-link-ws@1.0.7: 91 | version "1.0.7" 92 | resolved "https://registry.yarnpkg.com/apollo-link-ws/-/apollo-link-ws-1.0.7.tgz#6cc3903cbfbbefe213ea9fc8121f5fed3cef1823" 93 | dependencies: 94 | apollo-link "^1.2.1" 95 | 96 | apollo-link@1.2.1: 97 | version "1.2.1" 98 | resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.1.tgz#c120b16059f9bd93401b9f72b94d2f80f3f305d2" 99 | dependencies: 100 | "@types/node" "^9.4.6" 101 | apollo-utilities "^1.0.0" 102 | zen-observable-ts "^0.8.6" 103 | 104 | apollo-link@^1.1.0, apollo-link@^1.2.1: 105 | version "1.2.2" 106 | resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.2.tgz#54c84199b18ac1af8d63553a68ca389c05217a03" 107 | dependencies: 108 | "@types/graphql" "0.12.6" 109 | apollo-utilities "^1.0.0" 110 | zen-observable-ts "^0.8.9" 111 | 112 | apollo-server-core@^1.3.4: 113 | version "1.3.4" 114 | resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-1.3.4.tgz#06715290b32375236d90701acb42f415ab78497f" 115 | dependencies: 116 | apollo-cache-control "^0.1.0" 117 | apollo-tracing "^0.1.0" 118 | graphql-extensions "^0.0.x" 119 | 120 | apollo-server-express@^1.3.4: 121 | version "1.3.4" 122 | resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-1.3.4.tgz#0ca0d0aa84f4a5489037d834e3c4b619a1a85237" 123 | dependencies: 124 | apollo-server-core "^1.3.4" 125 | apollo-server-module-graphiql "^1.3.4" 126 | 127 | apollo-server-lambda@1.3.4: 128 | version "1.3.4" 129 | resolved "https://registry.yarnpkg.com/apollo-server-lambda/-/apollo-server-lambda-1.3.4.tgz#fc168891e0034e2884f259b573f6ed208abc2fc2" 130 | dependencies: 131 | apollo-server-core "^1.3.4" 132 | apollo-server-module-graphiql "^1.3.4" 133 | 134 | apollo-server-module-graphiql@^1.3.4: 135 | version "1.3.4" 136 | resolved "https://registry.yarnpkg.com/apollo-server-module-graphiql/-/apollo-server-module-graphiql-1.3.4.tgz#50399b7c51b7267d0c841529f5173e5fc7304de4" 137 | 138 | apollo-tracing@^0.1.0: 139 | version "0.1.4" 140 | resolved "https://registry.yarnpkg.com/apollo-tracing/-/apollo-tracing-0.1.4.tgz#5b8ae1b01526b160ee6e552a7f131923a9aedcc7" 141 | dependencies: 142 | graphql-extensions "~0.0.9" 143 | 144 | apollo-upload-server@^5.0.0: 145 | version "5.0.0" 146 | resolved "https://registry.yarnpkg.com/apollo-upload-server/-/apollo-upload-server-5.0.0.tgz#c953b523608313966e0c8444637f4ae8ef77d5bc" 147 | dependencies: 148 | "@babel/runtime" "^7.0.0-beta.40" 149 | busboy "^0.2.14" 150 | object-path "^0.11.4" 151 | 152 | apollo-utilities@^1.0.0, apollo-utilities@^1.0.1: 153 | version "1.0.11" 154 | resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.0.11.tgz#cd36bfa6e5c04eea2caf0c204a0f38a0ad550802" 155 | 156 | argparse@^1.0.7: 157 | version "1.0.10" 158 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 159 | dependencies: 160 | sprintf-js "~1.0.2" 161 | 162 | array-flatten@1.1.1: 163 | version "1.1.1" 164 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 165 | 166 | async-limiter@~1.0.0: 167 | version "1.0.0" 168 | resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" 169 | 170 | aws-lambda@^0.1.2: 171 | version "0.1.2" 172 | resolved "https://registry.yarnpkg.com/aws-lambda/-/aws-lambda-0.1.2.tgz#19b1585075df31679597b976a5f1def61f12ccee" 173 | dependencies: 174 | aws-sdk "^*" 175 | commander "^2.5.0" 176 | dotenv "^0.4.0" 177 | 178 | aws-sdk@^*: 179 | version "2.224.1" 180 | resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.224.1.tgz#82fe93e10b3e818f315c35ce8667cdc8db94a0b3" 181 | dependencies: 182 | buffer "4.9.1" 183 | events "1.1.1" 184 | ieee754 "1.1.8" 185 | jmespath "0.15.0" 186 | querystring "0.2.0" 187 | sax "1.2.1" 188 | url "0.10.3" 189 | uuid "3.1.0" 190 | xml2js "0.4.17" 191 | xmlbuilder "4.2.1" 192 | 193 | backo2@^1.0.2: 194 | version "1.0.2" 195 | resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" 196 | 197 | balanced-match@^1.0.0: 198 | version "1.0.0" 199 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 200 | 201 | base64-js@^1.0.2: 202 | version "1.2.3" 203 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.3.tgz#fb13668233d9614cf5fb4bce95a9ba4096cdf801" 204 | 205 | base64url@2.0.0, base64url@^2.0.0: 206 | version "2.0.0" 207 | resolved "https://registry.yarnpkg.com/base64url/-/base64url-2.0.0.tgz#eac16e03ea1438eff9423d69baa36262ed1f70bb" 208 | 209 | body-parser-graphql@1.0.0: 210 | version "1.0.0" 211 | resolved "https://registry.yarnpkg.com/body-parser-graphql/-/body-parser-graphql-1.0.0.tgz#997de1792ed222cbc4845d404f4549eb88ec6d37" 212 | dependencies: 213 | body-parser "^1.18.2" 214 | 215 | body-parser@1.18.2, body-parser@^1.18.2: 216 | version "1.18.2" 217 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" 218 | dependencies: 219 | bytes "3.0.0" 220 | content-type "~1.0.4" 221 | debug "2.6.9" 222 | depd "~1.1.1" 223 | http-errors "~1.6.2" 224 | iconv-lite "0.4.19" 225 | on-finished "~2.3.0" 226 | qs "6.5.1" 227 | raw-body "2.3.2" 228 | type-is "~1.6.15" 229 | 230 | brace-expansion@^1.1.7: 231 | version "1.1.11" 232 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 233 | dependencies: 234 | balanced-match "^1.0.0" 235 | concat-map "0.0.1" 236 | 237 | buffer-equal-constant-time@1.0.1: 238 | version "1.0.1" 239 | resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" 240 | 241 | buffer@4.9.1: 242 | version "4.9.1" 243 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" 244 | dependencies: 245 | base64-js "^1.0.2" 246 | ieee754 "^1.1.4" 247 | isarray "^1.0.0" 248 | 249 | busboy@^0.2.14: 250 | version "0.2.14" 251 | resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453" 252 | dependencies: 253 | dicer "0.2.5" 254 | readable-stream "1.1.x" 255 | 256 | bytes@3.0.0: 257 | version "3.0.0" 258 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" 259 | 260 | commander@^2.5.0: 261 | version "2.15.1" 262 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" 263 | 264 | concat-map@0.0.1: 265 | version "0.0.1" 266 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 267 | 268 | content-disposition@0.5.2: 269 | version "0.5.2" 270 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" 271 | 272 | content-type@~1.0.4: 273 | version "1.0.4" 274 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 275 | 276 | cookie-signature@1.0.6: 277 | version "1.0.6" 278 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 279 | 280 | cookie@0.3.1: 281 | version "0.3.1" 282 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" 283 | 284 | core-js@^2.5.3: 285 | version "2.5.5" 286 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.5.tgz#b14dde936c640c0579a6b50cabcc132dd6127e3b" 287 | 288 | core-util-is@~1.0.0: 289 | version "1.0.2" 290 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 291 | 292 | cors@^2.8.4: 293 | version "2.8.4" 294 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.4.tgz#2bd381f2eb201020105cd50ea59da63090694686" 295 | dependencies: 296 | object-assign "^4" 297 | vary "^1" 298 | 299 | cross-fetch@2.0.0: 300 | version "2.0.0" 301 | resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-2.0.0.tgz#a17475449561e0f325146cea636a8619efb9b382" 302 | dependencies: 303 | node-fetch "2.0.0" 304 | whatwg-fetch "2.0.3" 305 | 306 | dataloader@^1.4.0: 307 | version "1.4.0" 308 | resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-1.4.0.tgz#bca11d867f5d3f1b9ed9f737bd15970c65dff5c8" 309 | 310 | debug@2.6.9: 311 | version "2.6.9" 312 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 313 | dependencies: 314 | ms "2.0.0" 315 | 316 | depd@1.1.1: 317 | version "1.1.1" 318 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" 319 | 320 | depd@~1.1.1, depd@~1.1.2: 321 | version "1.1.2" 322 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 323 | 324 | deprecated-decorator@^0.1.6: 325 | version "0.1.6" 326 | resolved "https://registry.yarnpkg.com/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz#00966317b7a12fe92f3cc831f7583af329b86c37" 327 | 328 | destroy@~1.0.4: 329 | version "1.0.4" 330 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 331 | 332 | dicer@0.2.5: 333 | version "0.2.5" 334 | resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.2.5.tgz#5996c086bb33218c812c090bddc09cd12facb70f" 335 | dependencies: 336 | readable-stream "1.1.x" 337 | streamsearch "0.1.2" 338 | 339 | dotenv@^0.4.0: 340 | version "0.4.0" 341 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-0.4.0.tgz#f6fb351363c2d92207245c737802c9ab5ae1495a" 342 | 343 | ecdsa-sig-formatter@1.0.9: 344 | version "1.0.9" 345 | resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz#4bc926274ec3b5abb5016e7e1d60921ac262b2a1" 346 | dependencies: 347 | base64url "^2.0.0" 348 | safe-buffer "^5.0.1" 349 | 350 | ee-first@1.1.1: 351 | version "1.1.1" 352 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 353 | 354 | encodeurl@~1.0.2: 355 | version "1.0.2" 356 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 357 | 358 | escape-html@~1.0.3: 359 | version "1.0.3" 360 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 361 | 362 | esprima@^4.0.0: 363 | version "4.0.0" 364 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" 365 | 366 | etag@~1.8.1: 367 | version "1.8.1" 368 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 369 | 370 | eventemitter3@^2.0.3: 371 | version "2.0.3" 372 | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-2.0.3.tgz#b5e1079b59fb5e1ba2771c0a993be060a58c99ba" 373 | 374 | events@1.1.1: 375 | version "1.1.1" 376 | resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" 377 | 378 | express@^4.16.3: 379 | version "4.16.3" 380 | resolved "https://registry.yarnpkg.com/express/-/express-4.16.3.tgz#6af8a502350db3246ecc4becf6b5a34d22f7ed53" 381 | dependencies: 382 | accepts "~1.3.5" 383 | array-flatten "1.1.1" 384 | body-parser "1.18.2" 385 | content-disposition "0.5.2" 386 | content-type "~1.0.4" 387 | cookie "0.3.1" 388 | cookie-signature "1.0.6" 389 | debug "2.6.9" 390 | depd "~1.1.2" 391 | encodeurl "~1.0.2" 392 | escape-html "~1.0.3" 393 | etag "~1.8.1" 394 | finalhandler "1.1.1" 395 | fresh "0.5.2" 396 | merge-descriptors "1.0.1" 397 | methods "~1.1.2" 398 | on-finished "~2.3.0" 399 | parseurl "~1.3.2" 400 | path-to-regexp "0.1.7" 401 | proxy-addr "~2.0.3" 402 | qs "6.5.1" 403 | range-parser "~1.2.0" 404 | safe-buffer "5.1.1" 405 | send "0.16.2" 406 | serve-static "1.13.2" 407 | setprototypeof "1.1.0" 408 | statuses "~1.4.0" 409 | type-is "~1.6.16" 410 | utils-merge "1.0.1" 411 | vary "~1.1.2" 412 | 413 | finalhandler@1.1.1: 414 | version "1.1.1" 415 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" 416 | dependencies: 417 | debug "2.6.9" 418 | encodeurl "~1.0.2" 419 | escape-html "~1.0.3" 420 | on-finished "~2.3.0" 421 | parseurl "~1.3.2" 422 | statuses "~1.4.0" 423 | unpipe "~1.0.0" 424 | 425 | forwarded@~0.1.2: 426 | version "0.1.2" 427 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" 428 | 429 | fresh@0.5.2: 430 | version "0.5.2" 431 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 432 | 433 | graphql-binding@1.2.5: 434 | version "1.2.5" 435 | resolved "https://registry.yarnpkg.com/graphql-binding/-/graphql-binding-1.2.5.tgz#1c45b9da055cb0722f0348b6354be2e11b0a8c17" 436 | dependencies: 437 | graphql-tools "2.21.0" 438 | iterall "1.2.2" 439 | 440 | graphql-config@2.0.0: 441 | version "2.0.0" 442 | resolved "https://registry.yarnpkg.com/graphql-config/-/graphql-config-2.0.0.tgz#daf69091055c6f675d63893a2d14c48f3fec3327" 443 | dependencies: 444 | graphql-import "^0.4.0" 445 | graphql-request "^1.4.0" 446 | js-yaml "^3.10.0" 447 | lodash "^4.17.4" 448 | minimatch "^3.0.4" 449 | 450 | graphql-extensions@^0.0.x, graphql-extensions@~0.0.9: 451 | version "0.0.10" 452 | resolved "https://registry.yarnpkg.com/graphql-extensions/-/graphql-extensions-0.0.10.tgz#34bdb2546d43f6a5bc89ab23c295ec0466c6843d" 453 | dependencies: 454 | core-js "^2.5.3" 455 | source-map-support "^0.5.1" 456 | 457 | graphql-import@0.4.5, graphql-import@^0.4.0: 458 | version "0.4.5" 459 | resolved "https://registry.yarnpkg.com/graphql-import/-/graphql-import-0.4.5.tgz#e2f18c28d335733f46df8e0733d8deb1c6e2a645" 460 | dependencies: 461 | lodash "^4.17.4" 462 | 463 | graphql-import@^0.5.0: 464 | version "0.5.0" 465 | resolved "https://registry.yarnpkg.com/graphql-import/-/graphql-import-0.5.0.tgz#5f678a6d4636d02a829308884aa1f2fa2197f06d" 466 | dependencies: 467 | lodash "^4.17.4" 468 | 469 | graphql-playground-html@1.5.5: 470 | version "1.5.5" 471 | resolved "https://registry.yarnpkg.com/graphql-playground-html/-/graphql-playground-html-1.5.5.tgz#e2aca543eb66b435ead495b45244b2604d6b2d48" 472 | dependencies: 473 | graphql-config "2.0.0" 474 | 475 | graphql-playground-middleware-express@1.6.1: 476 | version "1.6.1" 477 | resolved "https://registry.yarnpkg.com/graphql-playground-middleware-express/-/graphql-playground-middleware-express-1.6.1.tgz#d6287d124a1c55845a52a7d727c371da99cdf0b0" 478 | dependencies: 479 | graphql-playground-html "1.5.5" 480 | 481 | graphql-playground-middleware-lambda@1.5.0: 482 | version "1.5.0" 483 | resolved "https://registry.yarnpkg.com/graphql-playground-middleware-lambda/-/graphql-playground-middleware-lambda-1.5.0.tgz#41a06faf185103660a324257c5293e9f50839fce" 484 | dependencies: 485 | graphql-playground-html "1.5.5" 486 | 487 | graphql-request@^1.4.0: 488 | version "1.5.1" 489 | resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-1.5.1.tgz#cccdf5cce6432ca062b90f7b63793c77c821ff9a" 490 | dependencies: 491 | cross-fetch "2.0.0" 492 | 493 | graphql-subscriptions@^0.5.8: 494 | version "0.5.8" 495 | resolved "https://registry.yarnpkg.com/graphql-subscriptions/-/graphql-subscriptions-0.5.8.tgz#13a6143c546bce390404657dc73ca501def30aa7" 496 | dependencies: 497 | iterall "^1.2.1" 498 | 499 | graphql-tools@2.21.0: 500 | version "2.21.0" 501 | resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-2.21.0.tgz#c0d0fbda6f40a87c8d267a2989ade2ae8b9a288e" 502 | dependencies: 503 | apollo-link "^1.1.0" 504 | apollo-utilities "^1.0.1" 505 | deprecated-decorator "^0.1.6" 506 | iterall "^1.1.3" 507 | uuid "^3.1.0" 508 | 509 | graphql-tools@^2.23.1: 510 | version "2.24.0" 511 | resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-2.24.0.tgz#bbacaad03924012a0edb8735a5e65df5d5563675" 512 | dependencies: 513 | apollo-link "^1.2.1" 514 | apollo-utilities "^1.0.1" 515 | deprecated-decorator "^0.1.6" 516 | iterall "^1.1.3" 517 | uuid "^3.1.0" 518 | 519 | graphql-yoga@^1.8.5: 520 | version "1.8.5" 521 | resolved "https://registry.yarnpkg.com/graphql-yoga/-/graphql-yoga-1.8.5.tgz#e06c77fbfd6a186afeaf21baf9617bdf8636d502" 522 | dependencies: 523 | "@types/cors" "^2.8.3" 524 | "@types/express" "^4.11.1" 525 | "@types/graphql" "^0.13.0" 526 | "@types/zen-observable" "^0.5.3" 527 | apollo-server-express "^1.3.4" 528 | apollo-server-lambda "1.3.4" 529 | apollo-upload-server "^5.0.0" 530 | aws-lambda "^0.1.2" 531 | body-parser-graphql "1.0.0" 532 | cors "^2.8.4" 533 | express "^4.16.3" 534 | graphql "^0.11.0 || ^0.12.0 || ^0.13.0" 535 | graphql-import "^0.5.0" 536 | graphql-playground-middleware-express "1.6.1" 537 | graphql-playground-middleware-lambda "1.5.0" 538 | graphql-subscriptions "^0.5.8" 539 | graphql-tools "^2.23.1" 540 | subscriptions-transport-ws "^0.9.7" 541 | 542 | "graphql@^0.11.0 || ^0.12.0 || ^0.13.0": 543 | version "0.13.2" 544 | resolved "https://registry.yarnpkg.com/graphql/-/graphql-0.13.2.tgz#4c740ae3c222823e7004096f832e7b93b2108270" 545 | dependencies: 546 | iterall "^1.2.1" 547 | 548 | http-errors@1.6.2: 549 | version "1.6.2" 550 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" 551 | dependencies: 552 | depd "1.1.1" 553 | inherits "2.0.3" 554 | setprototypeof "1.0.3" 555 | statuses ">= 1.3.1 < 2" 556 | 557 | http-errors@~1.6.2: 558 | version "1.6.3" 559 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" 560 | dependencies: 561 | depd "~1.1.2" 562 | inherits "2.0.3" 563 | setprototypeof "1.1.0" 564 | statuses ">= 1.4.0 < 2" 565 | 566 | http-link-dataloader@^0.1.2: 567 | version "0.1.3" 568 | resolved "https://registry.yarnpkg.com/http-link-dataloader/-/http-link-dataloader-0.1.3.tgz#23705749f141fce5f0720e7060e957482f91ad10" 569 | dependencies: 570 | apollo-link "^1.2.1" 571 | cross-fetch "2.0.0" 572 | dataloader "^1.4.0" 573 | 574 | iconv-lite@0.4.19: 575 | version "0.4.19" 576 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" 577 | 578 | ieee754@1.1.8: 579 | version "1.1.8" 580 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" 581 | 582 | ieee754@^1.1.4: 583 | version "1.1.11" 584 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.11.tgz#c16384ffe00f5b7835824e67b6f2bd44a5229455" 585 | 586 | inherits@2.0.3, inherits@~2.0.1: 587 | version "2.0.3" 588 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 589 | 590 | ipaddr.js@1.6.0: 591 | version "1.6.0" 592 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.6.0.tgz#e3fa357b773da619f26e95f049d055c72796f86b" 593 | 594 | isarray@0.0.1: 595 | version "0.0.1" 596 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 597 | 598 | isarray@^1.0.0: 599 | version "1.0.0" 600 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 601 | 602 | iterall@1.2.2, iterall@^1.1.3, iterall@^1.2.1: 603 | version "1.2.2" 604 | resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7" 605 | 606 | jmespath@0.15.0: 607 | version "0.15.0" 608 | resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" 609 | 610 | js-yaml@^3.10.0: 611 | version "3.11.0" 612 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" 613 | dependencies: 614 | argparse "^1.0.7" 615 | esprima "^4.0.0" 616 | 617 | jsonwebtoken@^8.1.0: 618 | version "8.2.1" 619 | resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.2.1.tgz#333ee39aa8f238f32fa41693e7a2fb7e42f82b31" 620 | dependencies: 621 | jws "^3.1.4" 622 | lodash.includes "^4.3.0" 623 | lodash.isboolean "^3.0.3" 624 | lodash.isinteger "^4.0.4" 625 | lodash.isnumber "^3.0.3" 626 | lodash.isplainobject "^4.0.6" 627 | lodash.isstring "^4.0.1" 628 | lodash.once "^4.0.0" 629 | ms "^2.1.1" 630 | xtend "^4.0.1" 631 | 632 | jwa@^1.1.4: 633 | version "1.1.5" 634 | resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.1.5.tgz#a0552ce0220742cd52e153774a32905c30e756e5" 635 | dependencies: 636 | base64url "2.0.0" 637 | buffer-equal-constant-time "1.0.1" 638 | ecdsa-sig-formatter "1.0.9" 639 | safe-buffer "^5.0.1" 640 | 641 | jws@^3.1.4: 642 | version "3.1.4" 643 | resolved "https://registry.yarnpkg.com/jws/-/jws-3.1.4.tgz#f9e8b9338e8a847277d6444b1464f61880e050a2" 644 | dependencies: 645 | base64url "^2.0.0" 646 | jwa "^1.1.4" 647 | safe-buffer "^5.0.1" 648 | 649 | lodash.assign@^4.2.0: 650 | version "4.2.0" 651 | resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" 652 | 653 | lodash.includes@^4.3.0: 654 | version "4.3.0" 655 | resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" 656 | 657 | lodash.isboolean@^3.0.3: 658 | version "3.0.3" 659 | resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" 660 | 661 | lodash.isinteger@^4.0.4: 662 | version "4.0.4" 663 | resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" 664 | 665 | lodash.isnumber@^3.0.3: 666 | version "3.0.3" 667 | resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" 668 | 669 | lodash.isobject@^3.0.2: 670 | version "3.0.2" 671 | resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-3.0.2.tgz#3c8fb8d5b5bf4bf90ae06e14f2a530a4ed935e1d" 672 | 673 | lodash.isplainobject@^4.0.6: 674 | version "4.0.6" 675 | resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" 676 | 677 | lodash.isstring@^4.0.1: 678 | version "4.0.1" 679 | resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" 680 | 681 | lodash.once@^4.0.0: 682 | version "4.1.1" 683 | resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" 684 | 685 | lodash@^4.0.0, lodash@^4.17.4: 686 | version "4.17.5" 687 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" 688 | 689 | media-typer@0.3.0: 690 | version "0.3.0" 691 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 692 | 693 | merge-descriptors@1.0.1: 694 | version "1.0.1" 695 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 696 | 697 | methods@~1.1.2: 698 | version "1.1.2" 699 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 700 | 701 | mime-db@~1.33.0: 702 | version "1.33.0" 703 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" 704 | 705 | mime-types@~2.1.18: 706 | version "2.1.18" 707 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" 708 | dependencies: 709 | mime-db "~1.33.0" 710 | 711 | mime@1.4.1: 712 | version "1.4.1" 713 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" 714 | 715 | minimatch@^3.0.4: 716 | version "3.0.4" 717 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 718 | dependencies: 719 | brace-expansion "^1.1.7" 720 | 721 | ms@2.0.0: 722 | version "2.0.0" 723 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 724 | 725 | ms@^2.1.1: 726 | version "2.1.1" 727 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 728 | 729 | negotiator@0.6.1: 730 | version "0.6.1" 731 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" 732 | 733 | node-fetch@2.0.0: 734 | version "2.0.0" 735 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.0.0.tgz#982bba43ecd4f2922a29cc186a6bbb0bb73fcba6" 736 | 737 | object-assign@^4: 738 | version "4.1.1" 739 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 740 | 741 | object-path@^0.11.4: 742 | version "0.11.4" 743 | resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.4.tgz#370ae752fbf37de3ea70a861c23bba8915691949" 744 | 745 | on-finished@~2.3.0: 746 | version "2.3.0" 747 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 748 | dependencies: 749 | ee-first "1.1.1" 750 | 751 | parseurl@~1.3.2: 752 | version "1.3.2" 753 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" 754 | 755 | path-to-regexp@0.1.7: 756 | version "0.1.7" 757 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 758 | 759 | prisma-binding@^1.5.17: 760 | version "1.5.17" 761 | resolved "https://registry.yarnpkg.com/prisma-binding/-/prisma-binding-1.5.17.tgz#ed18ed3e7b8e4001270a96b162e687b7682e88cd" 762 | dependencies: 763 | apollo-link "1.2.1" 764 | apollo-link-error "1.0.7" 765 | apollo-link-ws "1.0.7" 766 | cross-fetch "2.0.0" 767 | graphql-binding "1.2.5" 768 | graphql-import "0.4.5" 769 | graphql-tools "2.21.0" 770 | http-link-dataloader "^0.1.2" 771 | jsonwebtoken "^8.1.0" 772 | subscriptions-transport-ws "0.9.6" 773 | 774 | proxy-addr@~2.0.3: 775 | version "2.0.3" 776 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341" 777 | dependencies: 778 | forwarded "~0.1.2" 779 | ipaddr.js "1.6.0" 780 | 781 | punycode@1.3.2: 782 | version "1.3.2" 783 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" 784 | 785 | qs@6.5.1: 786 | version "6.5.1" 787 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" 788 | 789 | querystring@0.2.0: 790 | version "0.2.0" 791 | resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" 792 | 793 | range-parser@~1.2.0: 794 | version "1.2.0" 795 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" 796 | 797 | raw-body@2.3.2: 798 | version "2.3.2" 799 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" 800 | dependencies: 801 | bytes "3.0.0" 802 | http-errors "1.6.2" 803 | iconv-lite "0.4.19" 804 | unpipe "1.0.0" 805 | 806 | readable-stream@1.1.x: 807 | version "1.1.14" 808 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" 809 | dependencies: 810 | core-util-is "~1.0.0" 811 | inherits "~2.0.1" 812 | isarray "0.0.1" 813 | string_decoder "~0.10.x" 814 | 815 | regenerator-runtime@^0.11.1: 816 | version "0.11.1" 817 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" 818 | 819 | safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@~5.1.0: 820 | version "5.1.1" 821 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" 822 | 823 | sax@1.2.1: 824 | version "1.2.1" 825 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" 826 | 827 | sax@>=0.6.0: 828 | version "1.2.4" 829 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" 830 | 831 | send@0.16.2: 832 | version "0.16.2" 833 | resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" 834 | dependencies: 835 | debug "2.6.9" 836 | depd "~1.1.2" 837 | destroy "~1.0.4" 838 | encodeurl "~1.0.2" 839 | escape-html "~1.0.3" 840 | etag "~1.8.1" 841 | fresh "0.5.2" 842 | http-errors "~1.6.2" 843 | mime "1.4.1" 844 | ms "2.0.0" 845 | on-finished "~2.3.0" 846 | range-parser "~1.2.0" 847 | statuses "~1.4.0" 848 | 849 | serve-static@1.13.2: 850 | version "1.13.2" 851 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" 852 | dependencies: 853 | encodeurl "~1.0.2" 854 | escape-html "~1.0.3" 855 | parseurl "~1.3.2" 856 | send "0.16.2" 857 | 858 | setprototypeof@1.0.3: 859 | version "1.0.3" 860 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" 861 | 862 | setprototypeof@1.1.0: 863 | version "1.1.0" 864 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" 865 | 866 | source-map-support@^0.5.1: 867 | version "0.5.4" 868 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.4.tgz#54456efa89caa9270af7cd624cc2f123e51fbae8" 869 | dependencies: 870 | source-map "^0.6.0" 871 | 872 | source-map@^0.6.0: 873 | version "0.6.1" 874 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 875 | 876 | sprintf-js@~1.0.2: 877 | version "1.0.3" 878 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 879 | 880 | "statuses@>= 1.3.1 < 2", "statuses@>= 1.4.0 < 2": 881 | version "1.5.0" 882 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 883 | 884 | statuses@~1.4.0: 885 | version "1.4.0" 886 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" 887 | 888 | streamsearch@0.1.2: 889 | version "0.1.2" 890 | resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" 891 | 892 | string_decoder@~0.10.x: 893 | version "0.10.31" 894 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 895 | 896 | subscriptions-transport-ws@0.9.6: 897 | version "0.9.6" 898 | resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.6.tgz#5ff86a0746316ca3eb2423b118b8bc74a6793e1b" 899 | dependencies: 900 | backo2 "^1.0.2" 901 | eventemitter3 "^2.0.3" 902 | iterall "^1.2.1" 903 | lodash.assign "^4.2.0" 904 | lodash.isobject "^3.0.2" 905 | lodash.isstring "^4.0.1" 906 | symbol-observable "^1.0.4" 907 | ws "^3.0.0" 908 | 909 | subscriptions-transport-ws@^0.9.7: 910 | version "0.9.7" 911 | resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.7.tgz#9be456d6e188c96a53c91f570850e59bee5840ac" 912 | dependencies: 913 | backo2 "^1.0.2" 914 | eventemitter3 "^2.0.3" 915 | iterall "^1.2.1" 916 | lodash.assign "^4.2.0" 917 | lodash.isobject "^3.0.2" 918 | lodash.isstring "^4.0.1" 919 | symbol-observable "^1.0.4" 920 | ws "^3.0.0" 921 | 922 | symbol-observable@^1.0.4: 923 | version "1.2.0" 924 | resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" 925 | 926 | type-is@~1.6.15, type-is@~1.6.16: 927 | version "1.6.16" 928 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" 929 | dependencies: 930 | media-typer "0.3.0" 931 | mime-types "~2.1.18" 932 | 933 | ultron@~1.1.0: 934 | version "1.1.1" 935 | resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" 936 | 937 | unpipe@1.0.0, unpipe@~1.0.0: 938 | version "1.0.0" 939 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 940 | 941 | url@0.10.3: 942 | version "0.10.3" 943 | resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" 944 | dependencies: 945 | punycode "1.3.2" 946 | querystring "0.2.0" 947 | 948 | utils-merge@1.0.1: 949 | version "1.0.1" 950 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 951 | 952 | uuid@3.1.0: 953 | version "3.1.0" 954 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" 955 | 956 | uuid@^3.1.0: 957 | version "3.2.1" 958 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" 959 | 960 | vary@^1, vary@~1.1.2: 961 | version "1.1.2" 962 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 963 | 964 | whatwg-fetch@2.0.3: 965 | version "2.0.3" 966 | resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" 967 | 968 | ws@^3.0.0: 969 | version "3.3.3" 970 | resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" 971 | dependencies: 972 | async-limiter "~1.0.0" 973 | safe-buffer "~5.1.0" 974 | ultron "~1.1.0" 975 | 976 | xml2js@0.4.17: 977 | version "0.4.17" 978 | resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.17.tgz#17be93eaae3f3b779359c795b419705a8817e868" 979 | dependencies: 980 | sax ">=0.6.0" 981 | xmlbuilder "^4.1.0" 982 | 983 | xmlbuilder@4.2.1, xmlbuilder@^4.1.0: 984 | version "4.2.1" 985 | resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.2.1.tgz#aa58a3041a066f90eaa16c2f5389ff19f3f461a5" 986 | dependencies: 987 | lodash "^4.0.0" 988 | 989 | xtend@^4.0.1: 990 | version "4.0.1" 991 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 992 | 993 | zen-observable-ts@^0.8.6, zen-observable-ts@^0.8.9: 994 | version "0.8.9" 995 | resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.8.9.tgz#d3c97af08c0afdca37ebcadf7cc3ee96bda9bab1" 996 | dependencies: 997 | zen-observable "^0.8.0" 998 | 999 | zen-observable@^0.8.0: 1000 | version "0.8.8" 1001 | resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.8.tgz#1ea93995bf098754a58215a1e0a7309e5749ec42" 1002 | --------------------------------------------------------------------------------