├── .DS_Store ├── .gitignore ├── Day1 ├── LessonNotes.md └── excercises.md ├── Day2 ├── LessonNotes.md ├── bootcampProject.png └── excercises.md ├── Day3 ├── LessonNotes.md ├── apollo-example │ ├── package-lock.json │ ├── package.json │ └── src │ │ └── index.js ├── excercises.md ├── express-graphql │ ├── package.json │ ├── src │ │ └── index.js │ └── yarn.lock └── graphql-yoga-example │ ├── package.json │ ├── src │ ├── index.js │ └── schema.graphql │ └── yarn.lock ├── Day4 ├── LessonNotes.md ├── excercises.md └── graphql-yoga-example │ ├── package.json │ ├── src │ ├── index.js │ └── schema.graphql │ └── yarn.lock ├── README.md └── run-hasura-locally.sh /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vnovick/graphql-fullstack-bootcamp/f2076b60579619bf4e23bd7f52dd42380a26b3aa/.DS_Store -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | */**/node_modules 2 | .idea/ 3 | livecoding -------------------------------------------------------------------------------- /Day1/LessonNotes.md: -------------------------------------------------------------------------------- 1 | ## Core principles and Syntax 2 | 3 | Executing Post request 4 | 5 | ``` 6 | curl \ 7 | -X POST \ 8 | -H "Content-Type: application/json" \ 9 | --data '{ "query": "{ posts { subject } }" }' \ 10 | http://localhost:8080/v1alpha1/graphql 11 | ``` 12 | 13 | 14 | 15 | ## Queries 16 | 17 | GraphQL is asking for a specific fields on objects 18 | ``` 19 | { 20 | allFilms { 21 | films { 22 | title 23 | } 24 | } 25 | } 26 | ``` 27 | 28 | ### Arguments 29 | 30 | ``` 31 | { 32 | allFilms(first:1) { 33 | films { 34 | title 35 | } 36 | } 37 | } 38 | ``` 39 | 40 | ### Aliases 41 | 42 | ``` 43 | query getPosts { 44 | first_post: posts(order_by: [{ timestamp:asc}], limit: 1) { 45 | subject 46 | } 47 | last_post: posts(order_by: [{ timestamp:asc}], limit: 1) { 48 | subject 49 | } 50 | } 51 | 52 | ``` 53 | 54 | ### Operation name 55 | 56 | ``` 57 | query getPosts 58 | ``` 59 | 60 | ### variables 61 | 62 | ``` 63 | 64 | mutation deletePost($postId: uuid!) { 65 | delete_posts(where:{id: {_eq: $postId}}) { 66 | affected_rows 67 | returning { 68 | id 69 | } 70 | } 71 | } 72 | 73 | ``` 74 | 75 | default variables 76 | 77 | use `=` for setting default values 78 | 79 | 80 | ## Mutations 81 | 82 | ``` 83 | mutation { 84 | insert_posts(objects: [{ 85 | subject: "First blog post" 86 | content: "Hello there" 87 | user: { 88 | data: { 89 | firstName:"John" 90 | lastName:"Smith" 91 | profile: { 92 | data:{ avatarUrl:"some url" bio:"Lorem ipsum"} 93 | } 94 | } 95 | } 96 | }]) { 97 | returning { 98 | id 99 | subject 100 | content 101 | user { 102 | firstName 103 | lastName 104 | } 105 | 106 | } 107 | } 108 | } 109 | ``` 110 | 111 | ## Subscriptions 112 | 113 | ``` 114 | subscription subscribeToMostLikedPosts { 115 | posts(order_by:{ likes:asc} limit: 3) { 116 | subject 117 | content 118 | } 119 | } 120 | ``` 121 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /Day1/excercises.md: -------------------------------------------------------------------------------- 1 | # Exercises Day1 2 | 3 | [Install Hasura on Heroku](https://docs.hasura.io/1.0/graphql/manual/getting-started/heroku-simple.html) 4 | 5 | Go to Heroku dashboard 6 | Settings -> Reveal config vars. 7 | Copy DATABASE_URL 8 | 9 | Install Hasura Console on local environment 10 | 11 | ### Prerequisites 12 | For running GraphQL Api locally [Install Docker](https://docs.docker.com/install/) 13 | 14 | Edit `./run-hasura-locally.sh` and substitute HASURA_GRAPHQL_DATABASE_URL to the one you've got from heroku 15 | 16 | then run `./run-hasura-locally.sh` 17 | 18 | 19 | This will bring up docker container with Hasura engine with connection to existing Postgres API 20 | You can read more about Hasura [here](https://medium.com/open-graphql/effortless-real-time-graphql-api-with-serverless-business-logic-running-in-any-cloud-8585e4ed6fa3) 21 | 22 | Access Hasura console on localhost:8080/console 23 | 24 | If you want to play around with your local version of postgres check this docs [link](https://docs.hasura.io/1.0/graphql/manual/getting-started/docker-simple.html) 25 | 26 | - starwars api 27 | 28 | [GraphiQL](https://graphql-bootcamp-swapi.herokuapp.com) 29 | 30 | > Bonus you can add swapi custom server as remote schema in hasura console 31 | 32 | [Remote schemas docs](https://docs.hasura.io/1.0/graphql/manual/remote-schemas/index.html#step-2-merge-remote-schema) 33 | 34 | 35 | # Core principles 36 | 37 | 38 | # Syntax and query language 39 | 40 | 1. What's wrong with this syntax? 41 | ``` 42 | query { 43 | posts: { 44 | timestamp, 45 | users: { 46 | firstName 47 | } 48 | } 49 | } 50 | ``` 51 | 2. How to execute graphql request as curl 52 | 53 | 54 | # Queries 55 | 56 | 3. Get first 5 planets in Star Wars universe along with their name, diameter, rotation period, residents. For each resident display it's name, species, classification and spoken language. Also for each resident display vehicles that he used as well as in which movies they appeared 57 | 58 | 59 | 4. Get `subject` and `content` of `posts` ordered by `timestamp` ascending. Represent data as `ordered_posts` array 60 | 61 | 62 | # Mutations 63 | 64 | 5. Add new blog post 65 | 6. Add a new user using GraphQL Mutation 66 | 7. Create reusable insert mutation called addPost, which not only will insert a post, but create new user and profile 67 | 68 | > Hint: use variables 69 | 70 | 71 | # Subscriptions 72 | Return `n` most liked post where `n` can be provided from outside. 73 | -------------------------------------------------------------------------------- /Day2/LessonNotes.md: -------------------------------------------------------------------------------- 1 | # Consume GraphQL API from Vanilla JS 2 | 3 | [Consume GraphQL API](https://codesandbox.io/s/lx2q2nr6p9) 4 | 5 | 6 | # Apollo 7 | 8 | [Why apollo and docs](https://www.apollographql.com/docs/react/why-apollo.html) 9 | 10 | - Declarative data fetching 11 | - Zero config caching (normalized cache) 12 | 13 | [Apollo in Vanilla JS with Parcel](https://codesandbox.io/s/v07082jlwl) 14 | 15 | # React 16 | 17 | ## Getting started 18 | 19 | ### Apollo Boost 20 | 21 | `npm install apollo-boost react-apollo graphql --save` 22 | 23 | ### Setting client 24 | 25 | ``` 26 | import ApolloClient from "apollo-boost"; 27 | 28 | import { ApolloProvider } from "react-apollo"; 29 | 30 | 31 | const client = new ApolloClient({ 32 | uri: "my-graphql-endpoint" 33 | }); 34 | ``` 35 | ### Run logic on every request 36 | 37 | ``` 38 | request: async (operation) => { 39 | //called on each requests 40 | const token = localStorage.getItem("token") 41 | operation.setContext({ 42 | headers: { 43 | authorization: token 44 | } 45 | }) 46 | }, 47 | 48 | ``` 49 | ### Error Handling 50 | ``` 51 | onError: ({ graphQLErrors, networkError }) => { 52 | if (graphQLErrors) { 53 | sendToLoggingService(graphQLErrors); 54 | } 55 | if (networkError) { 56 | logoutUser(); 57 | } 58 | }, 59 | 60 | clientState: // for local state management 61 | headers: // headers 62 | cache: // ApolloCache (apollo-cache-inmemory) or apollo-cache-persist 63 | }); 64 | ``` 65 | 66 | #Query component 67 | 68 | ``` 69 | const getPosts = gql` 70 | query getPosts { 71 | posts(order_by: { timestamp: desc }) { 72 | id 73 | subject 74 | content 75 | user { 76 | firstName 77 | lastName 78 | } 79 | timestamp 80 | } 81 | } 82 | `; 83 | 84 | export const PostsList = () => ( 85 | 86 | {({ loading, error, data }) => { 87 | if (loading) { 88 | return
Loading...
; 89 | } 90 | if (error) { 91 | return
Error
; 92 | } 93 | return data.posts.map(Post); 94 | }} 95 |
96 | ); 97 | 98 | 99 | ``` 100 | 101 | #Mutation component 102 | 103 | ``` 104 | 105 | {(addPost, { data }) => ( 106 |
107 |
114 | )} 115 |
116 | 117 | ``` 118 | 119 | ## Migrate from Apollo Boost to Apollo client 120 | 121 | [migration](https://www.apollographql.com/docs/react/advanced/boost-migration.html) 122 | 123 | `npm install apollo-client apollo-cache-inmemory apollo-link-http apollo-link-error apollo-link --save` 124 | 125 | ``` 126 | import { ApolloClient } from 'apollo-client'; 127 | import { InMemoryCache } from 'apollo-cache-inmemory'; 128 | import { HttpLink } from 'apollo-link-http'; 129 | 130 | const link = new HttpLink({ uri: 'my-graphql-server' }); 131 | 132 | const client = new ApolloClient({ 133 | link, 134 | cache: new InMemoryCache() 135 | }); 136 | 137 | ``` 138 | 139 | you can also use [apollo-cache-persist](https://github.com/apollographql/apollo-cache-persist) 140 | 141 | ### Apollo Link is a Network Layer 142 | 143 | Check the [docs](https://www.apollographql.com/docs/react/advanced/network-layer.html#linkMiddleware) for more in depth overview 144 | 145 | ## Authentication 146 | 147 | ``` 148 | import { setContext } from 'apollo-link-context'; 149 | 150 | 151 | const httpLink = new HttpLink({ 152 | uri: "https://graphql-on-postgres-demo.herokuapp.com/v1alpha1/graphql" 153 | }); 154 | 155 | const authLink = setContext((_, { headers }) => { 156 | // return the headers to the context so httpLink can read them 157 | return { 158 | headers: { 159 | "X-Hasura-access-key": "my-secret-hash", 160 | } 161 | } 162 | }); 163 | 164 | const client = new ApolloClient({ 165 | link: authLink.concat(link), 166 | cache: new InMemoryCache() 167 | }) 168 | 169 | ``` 170 | 171 | ## Subscriptions 172 | 173 | `npm install apollo-link-ws subscriptions-transport-ws apollo-utilities` 174 | 175 | additional imports 176 | ``` 177 | import { getMainDefinition } from 'apollo-utilities'; 178 | import { split } from 'apollo-link'; 179 | import { WebSocketLink } from 'apollo-link-ws'; 180 | ``` 181 | 182 | setup websocket link 183 | ``` 184 | const wsLink = new WebSocketLink({ 185 | uri: "wss://graphql-bootcamp-sample-blog.herokuapp.com/v1alpha1/graphql", 186 | options: { 187 | reconnect: true 188 | } 189 | }); 190 | ``` 191 | 192 | Redirect to operation based on operation definition 193 | 194 | ``` 195 | const link = split( 196 | // split based on operation type 197 | ({ query }) => { 198 | const { kind, operation } = getMainDefinition(query); 199 | return kind === 'OperationDefinition' && operation === 'subscription'; 200 | }, 201 | wsLink, 202 | httpLink, 203 | ); 204 | ``` 205 | 206 | ## Bonus 207 | 208 | [ReactNativeWeb](https://codesandbox.io/s/xk7zw3n4) 209 | 210 | 211 | ## Hooks 212 | 213 | 214 | 215 | # Angular 216 | 217 | [Setup](https://www.apollographql.com/docs/angular/basics/setup.html) 218 | 219 | 220 | ``` 221 | npm install --save apollo-angular \ 222 | apollo-angular-link-http \ 223 | apollo-link \ 224 | apollo-client \ 225 | apollo-cache-inmemory \ 226 | graphql-tag \ 227 | graphql 228 | ``` 229 | 230 | 231 | The apollo-client package requires `AsyncIterable` so make sure your `tsconfig.json` includes `esnext.asynciterable`: 232 | 233 | ``` 234 | import { HttpClientModule } from '@angular/common/http'; 235 | import { ApolloModule, APOLLO_OPTIONS } from 'apollo-angular'; 236 | import { HttpLinkModule, HttpLink } from 'apollo-angular-link-http'; 237 | import { InMemoryCache } from 'apollo-cache-inmemory'; 238 | ``` 239 | 240 | Setup providers 241 | 242 | ``` 243 | @NgModule({ 244 | imports: [BrowserModule, HttpClientModule, ApolloModule, HttpLinkModule], 245 | providers: [{ 246 | provide: APOLLO_OPTIONS, 247 | useFactory(httpLink: HttpLink) { 248 | return { 249 | cache: new InMemoryCache(), 250 | link: httpLink.create({ 251 | uri: `https://graphql-bootcamp-sample-blog.herokuapp.com/v1alpha1/graphql` 252 | }) 253 | } 254 | }, 255 | deps: [HttpLink] 256 | }], 257 | ``` 258 | 259 | in component 260 | 261 | ``` 262 | rates: any[]; 263 | loading = true; 264 | error: any; 265 | ``` 266 | 267 | `constructor(private apollo: Apollo) {}` 268 | 269 | ``` 270 | ngOnInit() { 271 | this.apollo 272 | .watchQuery({ 273 | query: gql` 274 | { 275 | posts(order_by: { timestamp: desc }) { 276 | id 277 | subject 278 | content 279 | user { 280 | firstName 281 | lastName 282 | } 283 | timestamp 284 | } 285 | } 286 | `, 287 | }) 288 | .valueChanges.subscribe(result => { 289 | this.posts = result.data && result.data.posts; 290 | this.loading = result.loading; 291 | this.error = result.error; 292 | }); 293 | } 294 | ``` 295 | 296 | 297 | 298 | [Demo](https://stackblitz.com/edit/basic-apollo-angular-app-i6ejrc) 299 | 300 | [Docs](https://www.apollographql.com/docs/angular) 301 | 302 | # Vue 303 | 304 | [Demo](https://codesandbox.io/s/o1q71q63z) 305 | 306 | [Vue Apollo](https://vue-apollo.netlify.com) 307 | 308 | ``` 309 | import { ApolloClient } from 'apollo-client' 310 | import { HttpLink } from 'apollo-link-http' 311 | import { InMemoryCache } from 'apollo-cache-inmemory' 312 | // New Imports 313 | import { split } from 'apollo-link' 314 | import { WebSocketLink } from 'apollo-link-ws' 315 | import { getMainDefinition } from 'apollo-utilities' 316 | ``` 317 | 318 | Same as React exept: 319 | 320 | ``` 321 | // Install the vue plugin 322 | Vue.use(VueApollo) 323 | ``` 324 | 325 | Queries declaration 326 | 327 | ``` 328 | new Vue({ 329 | apollo: { 330 | // Apollo specific options 331 | }, 332 | }) 333 | ``` 334 | 335 | ``` 336 | 339 | 340 | 352 | ``` 353 | 354 | ### Mutations 355 | 356 | ``` 357 | methods: { 358 | async addTag() { 359 | // Call to the graphql mutation 360 | const result = await this.$apollo.mutate({ 361 | // Query 362 | mutation: gql`mutation ($label: String!) { 363 | addTag(label: $label) { 364 | id 365 | label 366 | } 367 | }`, 368 | // Parameters 369 | variables: { 370 | label: this.newTag, 371 | }, 372 | }) 373 | } 374 | } 375 | ``` 376 | 377 | # Bonus section - react-apollo-hooks 378 | -------------------------------------------------------------------------------- /Day2/bootcampProject.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vnovick/graphql-fullstack-bootcamp/f2076b60579619bf4e23bd7f52dd42380a26b3aa/Day2/bootcampProject.png -------------------------------------------------------------------------------- /Day2/excercises.md: -------------------------------------------------------------------------------- 1 | # Excercise for today is pretty simple and yet complicated 2 | 3 | This is what you need to create to some degree of complexity 4 | 5 | ![project](./bootcampProject.png) 6 | 7 | - Pick framework of your choice and create overall markup and page structure 8 | - Setup Apollo Client for a framework of your choice 9 | - show all blog posts filted by date 10 | - create add post form where you can pick existing users. When you click on submit, post will appear 11 | - implement add comment form 12 | 13 | # Bonus 14 | Implement edit and delete buttons that will trigger respective mutations -------------------------------------------------------------------------------- /Day3/LessonNotes.md: -------------------------------------------------------------------------------- 1 | # Directives 2 | 3 | `@include` 4 | include field if argument is true 5 | `@skip` 6 | skip field if argument is true 7 | 8 | 9 | ``` 10 | query getPosts($includeUser: Boolean!) { 11 | posts(order_by:{ timestamp: desc}) { 12 | id 13 | subject 14 | content 15 | user @include(if: $includeUser){ 16 | firstName 17 | lastName 18 | } 19 | timestamp 20 | } 21 | } 22 | 23 | ``` 24 | 25 | # Fragments 26 | 27 | ``` 28 | 29 | fragment userWithAvatar on users { 30 | firstName 31 | lastName 32 | profile { 33 | avatarUrl 34 | } 35 | } 36 | 37 | 38 | fragment userFragment on posts { 39 | user { 40 | ...userWithAvatar 41 | comments { 42 | message 43 | } 44 | } 45 | } 46 | 47 | fragment postsData on posts { 48 | id 49 | subject 50 | content 51 | } 52 | 53 | query getPosts($includeUser: Boolean!) { 54 | posts(order_by:{ timestamp: desc}) { 55 | ...postsData 56 | ...userFragment @include(if: $includeUser) 57 | timestamp 58 | } 59 | } 60 | 61 | subscription subPosts { 62 | posts { 63 | ...postsData 64 | ...userFragment 65 | } 66 | } 67 | ``` 68 | 69 | # Inline Fragments 70 | 71 | ``` 72 | query HeroForEpisode($ep: Episode!) { 73 | hero(episode: $ep) { 74 | name 75 | ... on Droid { 76 | primaryFunction 77 | } 78 | ... on Human { 79 | height 80 | } 81 | } 82 | } 83 | ``` 84 | 85 | 86 | # Type System 87 | 88 | ## GraphQLObjectType 89 | a type with some fields 90 | ## Build in scalar types: 91 | 92 | Int: A signed 32‐bit integer. 93 | Float: A signed double-precision floating-point value. 94 | String: A UTF‐8 character sequence. 95 | Boolean: true or false. 96 | ID: The ID scalar type represents a unique identifier, often used to refetch an object or as the key for a cache. The ID type is serialized in the same way as a String; however, defining it as an ID signifies that it is not intended to be human‐readable. 97 | 98 | > You can define your own scalar types 99 | 100 | ``` 101 | scalar Date 102 | ``` 103 | 104 | ## Enums 105 | 106 | ``` 107 | enum Episode { 108 | NEWHOPE 109 | EMPIRE 110 | JEDI 111 | } 112 | ``` 113 | 114 | ## Lists 115 | `[String]` 116 | 117 | ## Non-Null 118 | adding `!` in Schema definition tells us that type is not null 119 | 120 | 121 | # Introspection 122 | 123 | ``` 124 | query { 125 | __schema { 126 | types { 127 | name 128 | } 129 | } 130 | } 131 | ``` 132 | 133 | # Defining your schema 134 | 135 | ``` 136 | type Query { 137 | posts: [Post!]! 138 | } 139 | type Mutation { 140 | createDraft(title: String!, content: String, author: String!): Post 141 | } 142 | ``` 143 | 144 | Documenting 145 | 146 | ``` 147 | "Description for the type" 148 | type Post { 149 | """ 150 | Description for field 151 | """ 152 | ``` 153 | 154 | # Tooling 155 | [GraphiQL](https://github.com/graphql/graphiql) 156 | 157 | [GraphCMS](https://graphcms.com/) 158 | 159 | [GraphQL Playground](https://github.com/prisma/graphql-playground) 160 | 161 | [Hasura](hasura.io) 162 | 163 | [GraphQL Docs](https://graphql-docs.com) 164 | 165 | # Setting up basic server 166 | 167 | [graphql-yoga](https://github.com/prisma/graphql-yoga) 168 | [apollo-server](https://www.apollographql.com/docs/apollo-server/) 169 | [graphql-express](https://github.com/graphql/express-graphql) 170 | 171 | 172 | ## For subscriptions check 173 | [graphql-subscriptions](https://github.com/apollographql/graphql-subscriptions) 174 | 175 | # Authentication 176 | 177 | -------------------------------------------------------------------------------- /Day3/apollo-example/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "apollo-example", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@apollographql/apollo-tools": { 8 | "version": "0.3.3", 9 | "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.3.3.tgz", 10 | "integrity": "sha512-/vLzZjloWB4xzgw2MRs9TUDIdCzS+No1hEClkEKqcnH86c2EgE/W0Dv2nkCTH9WxDrfryziJWbNMurYYkm61Zw==", 11 | "requires": { 12 | "apollo-env": "0.3.3" 13 | } 14 | }, 15 | "@apollographql/graphql-playground-html": { 16 | "version": "1.6.6", 17 | "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.6.tgz", 18 | "integrity": "sha512-lqK94b+caNtmKFs5oUVXlSpN3sm5IXZ+KfhMxOtr0LR2SqErzkoJilitjDvJ1WbjHlxLI7WtCjRmOLdOGJqtMQ==" 19 | }, 20 | "@protobufjs/aspromise": { 21 | "version": "1.1.2", 22 | "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", 23 | "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" 24 | }, 25 | "@protobufjs/base64": { 26 | "version": "1.1.2", 27 | "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", 28 | "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" 29 | }, 30 | "@protobufjs/codegen": { 31 | "version": "2.0.4", 32 | "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", 33 | "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" 34 | }, 35 | "@protobufjs/eventemitter": { 36 | "version": "1.1.0", 37 | "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", 38 | "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" 39 | }, 40 | "@protobufjs/fetch": { 41 | "version": "1.1.0", 42 | "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", 43 | "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", 44 | "requires": { 45 | "@protobufjs/aspromise": "^1.1.1", 46 | "@protobufjs/inquire": "^1.1.0" 47 | } 48 | }, 49 | "@protobufjs/float": { 50 | "version": "1.0.2", 51 | "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", 52 | "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" 53 | }, 54 | "@protobufjs/inquire": { 55 | "version": "1.1.0", 56 | "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", 57 | "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" 58 | }, 59 | "@protobufjs/path": { 60 | "version": "1.1.2", 61 | "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", 62 | "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" 63 | }, 64 | "@protobufjs/pool": { 65 | "version": "1.1.0", 66 | "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", 67 | "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" 68 | }, 69 | "@protobufjs/utf8": { 70 | "version": "1.1.0", 71 | "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", 72 | "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" 73 | }, 74 | "@types/accepts": { 75 | "version": "1.3.5", 76 | "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", 77 | "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", 78 | "requires": { 79 | "@types/node": "*" 80 | } 81 | }, 82 | "@types/body-parser": { 83 | "version": "1.17.0", 84 | "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz", 85 | "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", 86 | "requires": { 87 | "@types/connect": "*", 88 | "@types/node": "*" 89 | } 90 | }, 91 | "@types/connect": { 92 | "version": "3.4.32", 93 | "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", 94 | "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", 95 | "requires": { 96 | "@types/node": "*" 97 | } 98 | }, 99 | "@types/cors": { 100 | "version": "2.8.4", 101 | "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.4.tgz", 102 | "integrity": "sha512-ipZjBVsm2tF/n8qFGOuGBkUij9X9ZswVi9G3bx/6dz7POpVa6gVHcj1wsX/LVEn9MMF41fxK/PnZPPoTD1UFPw==", 103 | "requires": { 104 | "@types/express": "*" 105 | } 106 | }, 107 | "@types/events": { 108 | "version": "3.0.0", 109 | "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", 110 | "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==" 111 | }, 112 | "@types/express": { 113 | "version": "4.16.1", 114 | "resolved": "https://registry.npmjs.org/@types/express/-/express-4.16.1.tgz", 115 | "integrity": "sha512-V0clmJow23WeyblmACoxbHBu2JKlE5TiIme6Lem14FnPW9gsttyHtk6wq7njcdIWH1njAaFgR8gW09lgY98gQg==", 116 | "requires": { 117 | "@types/body-parser": "*", 118 | "@types/express-serve-static-core": "*", 119 | "@types/serve-static": "*" 120 | } 121 | }, 122 | "@types/express-serve-static-core": { 123 | "version": "4.16.1", 124 | "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.1.tgz", 125 | "integrity": "sha512-QgbIMRU1EVRry5cIu1ORCQP4flSYqLM1lS5LYyGWfKnFT3E58f0gKto7BR13clBFVrVZ0G0rbLZ1hUpSkgQQOA==", 126 | "requires": { 127 | "@types/node": "*", 128 | "@types/range-parser": "*" 129 | } 130 | }, 131 | "@types/long": { 132 | "version": "4.0.0", 133 | "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz", 134 | "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==" 135 | }, 136 | "@types/mime": { 137 | "version": "2.0.1", 138 | "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz", 139 | "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==" 140 | }, 141 | "@types/node": { 142 | "version": "11.9.3", 143 | "resolved": "https://registry.npmjs.org/@types/node/-/node-11.9.3.tgz", 144 | "integrity": "sha512-DMiqG51GwES/c4ScBY0u5bDlH44+oY8AeYHjY1SGCWidD7h08o1dfHue/TGK7REmif2KiJzaUskO+Q0eaeZ2fQ==" 145 | }, 146 | "@types/range-parser": { 147 | "version": "1.2.3", 148 | "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", 149 | "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" 150 | }, 151 | "@types/serve-static": { 152 | "version": "1.13.2", 153 | "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz", 154 | "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", 155 | "requires": { 156 | "@types/express-serve-static-core": "*", 157 | "@types/mime": "*" 158 | } 159 | }, 160 | "@types/ws": { 161 | "version": "6.0.1", 162 | "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.1.tgz", 163 | "integrity": "sha512-EzH8k1gyZ4xih/MaZTXwT2xOkPiIMSrhQ9b8wrlX88L0T02eYsddatQlwVFlEPyEqV0ChpdpNnE51QPH6NVT4Q==", 164 | "requires": { 165 | "@types/events": "*", 166 | "@types/node": "*" 167 | } 168 | }, 169 | "accepts": { 170 | "version": "1.3.5", 171 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", 172 | "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", 173 | "requires": { 174 | "mime-types": "~2.1.18", 175 | "negotiator": "0.6.1" 176 | } 177 | }, 178 | "apollo-cache-control": { 179 | "version": "0.5.0", 180 | "resolved": "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.5.0.tgz", 181 | "integrity": "sha512-zu26CFj7CboxLB6cckZQEiSUGXIr8MViEGIC5Vesz2yd37sjtevMfRwQhxFuK0HinR0T/WC3dz2k5cj+33vQQQ==", 182 | "requires": { 183 | "apollo-server-env": "2.2.0", 184 | "graphql-extensions": "0.5.0" 185 | } 186 | }, 187 | "apollo-datasource": { 188 | "version": "0.3.0", 189 | "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-0.3.0.tgz", 190 | "integrity": "sha512-+jWs3ezhx4lcAAPIHtlj0Zoiv2tvwfzn7feHuhxub3xFwkJm39T8hPjb3aMQCsuS7TukBD+F5ndgVob5hL/5Nw==", 191 | "requires": { 192 | "apollo-server-caching": "0.3.0", 193 | "apollo-server-env": "2.2.0" 194 | } 195 | }, 196 | "apollo-engine-reporting": { 197 | "version": "1.0.0", 198 | "resolved": "https://registry.npmjs.org/apollo-engine-reporting/-/apollo-engine-reporting-1.0.0.tgz", 199 | "integrity": "sha512-9gZSME9ggZwL1nBBvfgSehwc+PtcvZC1/3NYrBOFgidJbrEFita2w5A0jM8Brjo+N2FMKNYWGj8WQ1ywO21JPg==", 200 | "requires": { 201 | "apollo-engine-reporting-protobuf": "0.2.0", 202 | "apollo-graphql": "0.1.0", 203 | "apollo-server-core": "2.4.0", 204 | "apollo-server-env": "2.2.0", 205 | "async-retry": "^1.2.1", 206 | "graphql-extensions": "0.5.0" 207 | } 208 | }, 209 | "apollo-engine-reporting-protobuf": { 210 | "version": "0.2.0", 211 | "resolved": "https://registry.npmjs.org/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.2.0.tgz", 212 | "integrity": "sha512-qI+GJKN78UMJ9Aq/ORdiM2qymZ5yswem+/VDdVFocq+/e1QqxjnpKjQWISkswci5+WtpJl9SpHBNxG98uHDKkA==", 213 | "requires": { 214 | "protobufjs": "^6.8.6" 215 | } 216 | }, 217 | "apollo-env": { 218 | "version": "0.3.3", 219 | "resolved": "https://registry.npmjs.org/apollo-env/-/apollo-env-0.3.3.tgz", 220 | "integrity": "sha512-VsUX14bfQCJpKmTyYNBTeLrdeFabjmpSPVQ2y4IKnwqaxVqZuRca3WFE8ercszO1tLwS6HMM7mFw+IIbtQXo/w==", 221 | "requires": { 222 | "core-js": "3.0.0-beta.13", 223 | "node-fetch": "^2.2.0" 224 | } 225 | }, 226 | "apollo-graphql": { 227 | "version": "0.1.0", 228 | "resolved": "https://registry.npmjs.org/apollo-graphql/-/apollo-graphql-0.1.0.tgz", 229 | "integrity": "sha512-Mi5GqZJz1A/0i8SEm9EVHWe/LkGbYzV5wzobUY+1Q0SI1NdFtRgqHZUdHU0hz1jDnL+dpRqK1huVmtOO/DGa/A==", 230 | "requires": { 231 | "lodash.sortby": "^4.7.0" 232 | } 233 | }, 234 | "apollo-link": { 235 | "version": "1.2.8", 236 | "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.8.tgz", 237 | "integrity": "sha512-lfzGRxhK9RmiH3HPFi7TIEBhhDY9M5a2ZDnllcfy5QDk7cCQHQ1WQArcw1FK0g1B+mV4Kl72DSrlvZHZJEolrA==", 238 | "requires": { 239 | "zen-observable-ts": "^0.8.15" 240 | } 241 | }, 242 | "apollo-server": { 243 | "version": "2.4.0", 244 | "resolved": "https://registry.npmjs.org/apollo-server/-/apollo-server-2.4.0.tgz", 245 | "integrity": "sha512-dEc2lGA1qkvffnArlNXDtJ74+gh4dNKbtTYsnoTveve3ML96DK8G2u5yNqwRqxZHUQmLrx3jiehFaPBqk+Cuhw==", 246 | "requires": { 247 | "apollo-server-core": "2.4.0", 248 | "apollo-server-express": "2.4.0", 249 | "express": "^4.0.0", 250 | "graphql-subscriptions": "^1.0.0", 251 | "graphql-tools": "^4.0.0" 252 | } 253 | }, 254 | "apollo-server-caching": { 255 | "version": "0.3.0", 256 | "resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.3.0.tgz", 257 | "integrity": "sha512-dHwWUsRZu7I1yUfzTwPJgOigMsftgp8w3X96Zdch1ICWN7cM6aNxks9tTnLd+liUSEzdYLlTmEy5VUturF2IAw==", 258 | "requires": { 259 | "lru-cache": "^5.0.0" 260 | } 261 | }, 262 | "apollo-server-core": { 263 | "version": "2.4.0", 264 | "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.4.0.tgz", 265 | "integrity": "sha512-rTFJa12NzTWC9IJrXDr8AZMs1Slbes9YxbyaI+cMC5fs8O9wkCkb34C/1Tp7xKX0fgauXrKZpXv7yPTSm+4YFg==", 266 | "requires": { 267 | "@apollographql/apollo-tools": "^0.3.0", 268 | "@apollographql/graphql-playground-html": "^1.6.6", 269 | "@types/ws": "^6.0.0", 270 | "apollo-cache-control": "0.5.0", 271 | "apollo-datasource": "0.3.0", 272 | "apollo-engine-reporting": "1.0.0", 273 | "apollo-server-caching": "0.3.0", 274 | "apollo-server-env": "2.2.0", 275 | "apollo-server-errors": "2.2.0", 276 | "apollo-server-plugin-base": "0.3.0", 277 | "apollo-tracing": "0.5.0", 278 | "fast-json-stable-stringify": "^2.0.0", 279 | "graphql-extensions": "0.5.0", 280 | "graphql-subscriptions": "^1.0.0", 281 | "graphql-tag": "^2.9.2", 282 | "graphql-tools": "^4.0.0", 283 | "graphql-upload": "^8.0.2", 284 | "lodash": "^4.17.10", 285 | "subscriptions-transport-ws": "^0.9.11", 286 | "ws": "^6.0.0" 287 | } 288 | }, 289 | "apollo-server-env": { 290 | "version": "2.2.0", 291 | "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-2.2.0.tgz", 292 | "integrity": "sha512-wjJiI5nQWPBpNmpiLP389Ezpstp71szS6DHAeTgYLb/ulCw3CTuuA+0/E1bsThVWiQaDeHZE0sE3yI8q2zrYiA==", 293 | "requires": { 294 | "node-fetch": "^2.1.2", 295 | "util.promisify": "^1.0.0" 296 | } 297 | }, 298 | "apollo-server-errors": { 299 | "version": "2.2.0", 300 | "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-2.2.0.tgz", 301 | "integrity": "sha512-gV9EZG2tovFtT1cLuCTavnJu2DaKxnXPRNGSTo+SDI6IAk6cdzyW0Gje5N2+3LybI0Wq5KAbW6VLei31S4MWmg==" 302 | }, 303 | "apollo-server-express": { 304 | "version": "2.4.0", 305 | "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.4.0.tgz", 306 | "integrity": "sha512-uDS7OZJ3EwFr4eZ9k1MiBtUTaqKgCXUUTCknPTdCbTzBel7TjNsa6PNKrSQk+jrLja2H8VwNjbra8uBF5z70Pw==", 307 | "requires": { 308 | "@apollographql/graphql-playground-html": "^1.6.6", 309 | "@types/accepts": "^1.3.5", 310 | "@types/body-parser": "1.17.0", 311 | "@types/cors": "^2.8.4", 312 | "@types/express": "4.16.1", 313 | "accepts": "^1.3.5", 314 | "apollo-server-core": "2.4.0", 315 | "body-parser": "^1.18.3", 316 | "cors": "^2.8.4", 317 | "graphql-subscriptions": "^1.0.0", 318 | "graphql-tools": "^4.0.0", 319 | "type-is": "^1.6.16" 320 | } 321 | }, 322 | "apollo-server-plugin-base": { 323 | "version": "0.3.0", 324 | "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.3.0.tgz", 325 | "integrity": "sha512-SOwp4cpZwyklvP1MkMcY6+12c1hrb5gwC4vK4a23kL5rr9FC0sENcXo3uVVM4XlDGOXIkY+sCM8ngKFuef2flw==" 326 | }, 327 | "apollo-tracing": { 328 | "version": "0.5.0", 329 | "resolved": "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.5.0.tgz", 330 | "integrity": "sha512-j0icEhLYf0xS6Q/iCXA2j9KfpYw0a/XvLSUio7fm5yUwtXP2Pp11x5BtK1dI8sLMiaOqUrREz2XjV4PKLzQPuA==", 331 | "requires": { 332 | "apollo-server-env": "2.2.0", 333 | "graphql-extensions": "0.5.0" 334 | } 335 | }, 336 | "apollo-utilities": { 337 | "version": "1.1.3", 338 | "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.1.3.tgz", 339 | "integrity": "sha512-pF9abhiClX5gfj/WFWZh8DiI33nOLGxRhXH9ZMquaM1V8bhq1WLFPt2QjShWH3kGQVeIGUK+FQefnhe+ZaaAYg==", 340 | "requires": { 341 | "fast-json-stable-stringify": "^2.0.0", 342 | "tslib": "^1.9.3" 343 | } 344 | }, 345 | "array-flatten": { 346 | "version": "1.1.1", 347 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 348 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 349 | }, 350 | "async-limiter": { 351 | "version": "1.0.0", 352 | "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", 353 | "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" 354 | }, 355 | "async-retry": { 356 | "version": "1.2.3", 357 | "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.2.3.tgz", 358 | "integrity": "sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q==", 359 | "requires": { 360 | "retry": "0.12.0" 361 | } 362 | }, 363 | "backo2": { 364 | "version": "1.0.2", 365 | "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", 366 | "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" 367 | }, 368 | "body-parser": { 369 | "version": "1.18.3", 370 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", 371 | "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", 372 | "requires": { 373 | "bytes": "3.0.0", 374 | "content-type": "~1.0.4", 375 | "debug": "2.6.9", 376 | "depd": "~1.1.2", 377 | "http-errors": "~1.6.3", 378 | "iconv-lite": "0.4.23", 379 | "on-finished": "~2.3.0", 380 | "qs": "6.5.2", 381 | "raw-body": "2.3.3", 382 | "type-is": "~1.6.16" 383 | }, 384 | "dependencies": { 385 | "http-errors": { 386 | "version": "1.6.3", 387 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", 388 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", 389 | "requires": { 390 | "depd": "~1.1.2", 391 | "inherits": "2.0.3", 392 | "setprototypeof": "1.1.0", 393 | "statuses": ">= 1.4.0 < 2" 394 | } 395 | } 396 | } 397 | }, 398 | "busboy": { 399 | "version": "0.3.0", 400 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.3.0.tgz", 401 | "integrity": "sha512-e+kzZRAbbvJPLjQz2z+zAyr78BSi9IFeBTyLwF76g78Q2zRt/RZ1NtS3MS17v2yLqYfLz69zHdC+1L4ja8PwqQ==", 402 | "requires": { 403 | "dicer": "0.3.0" 404 | } 405 | }, 406 | "bytes": { 407 | "version": "3.0.0", 408 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 409 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" 410 | }, 411 | "content-disposition": { 412 | "version": "0.5.2", 413 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", 414 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" 415 | }, 416 | "content-type": { 417 | "version": "1.0.4", 418 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 419 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 420 | }, 421 | "cookie": { 422 | "version": "0.3.1", 423 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 424 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" 425 | }, 426 | "cookie-signature": { 427 | "version": "1.0.6", 428 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 429 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 430 | }, 431 | "core-js": { 432 | "version": "3.0.0-beta.13", 433 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.0-beta.13.tgz", 434 | "integrity": "sha512-16Q43c/3LT9NyePUJKL8nRIQgYWjcBhjJSMWg96PVSxoS0PeE0NHitPI3opBrs9MGGHjte1KoEVr9W63YKlTXQ==" 435 | }, 436 | "cors": { 437 | "version": "2.8.5", 438 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", 439 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", 440 | "requires": { 441 | "object-assign": "^4", 442 | "vary": "^1" 443 | } 444 | }, 445 | "debug": { 446 | "version": "2.6.9", 447 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 448 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 449 | "requires": { 450 | "ms": "2.0.0" 451 | } 452 | }, 453 | "define-properties": { 454 | "version": "1.1.3", 455 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 456 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 457 | "requires": { 458 | "object-keys": "^1.0.12" 459 | } 460 | }, 461 | "depd": { 462 | "version": "1.1.2", 463 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 464 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 465 | }, 466 | "deprecated-decorator": { 467 | "version": "0.1.6", 468 | "resolved": "https://registry.npmjs.org/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz", 469 | "integrity": "sha1-AJZjF7ehL+kvPMgx91g68ym4bDc=" 470 | }, 471 | "destroy": { 472 | "version": "1.0.4", 473 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 474 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 475 | }, 476 | "dicer": { 477 | "version": "0.3.0", 478 | "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz", 479 | "integrity": "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==", 480 | "requires": { 481 | "streamsearch": "0.1.2" 482 | } 483 | }, 484 | "ee-first": { 485 | "version": "1.1.1", 486 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 487 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 488 | }, 489 | "encodeurl": { 490 | "version": "1.0.2", 491 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 492 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 493 | }, 494 | "es-abstract": { 495 | "version": "1.13.0", 496 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", 497 | "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", 498 | "requires": { 499 | "es-to-primitive": "^1.2.0", 500 | "function-bind": "^1.1.1", 501 | "has": "^1.0.3", 502 | "is-callable": "^1.1.4", 503 | "is-regex": "^1.0.4", 504 | "object-keys": "^1.0.12" 505 | } 506 | }, 507 | "es-to-primitive": { 508 | "version": "1.2.0", 509 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", 510 | "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", 511 | "requires": { 512 | "is-callable": "^1.1.4", 513 | "is-date-object": "^1.0.1", 514 | "is-symbol": "^1.0.2" 515 | } 516 | }, 517 | "escape-html": { 518 | "version": "1.0.3", 519 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 520 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 521 | }, 522 | "etag": { 523 | "version": "1.8.1", 524 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 525 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 526 | }, 527 | "eventemitter3": { 528 | "version": "3.1.0", 529 | "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", 530 | "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==" 531 | }, 532 | "express": { 533 | "version": "4.16.4", 534 | "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", 535 | "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", 536 | "requires": { 537 | "accepts": "~1.3.5", 538 | "array-flatten": "1.1.1", 539 | "body-parser": "1.18.3", 540 | "content-disposition": "0.5.2", 541 | "content-type": "~1.0.4", 542 | "cookie": "0.3.1", 543 | "cookie-signature": "1.0.6", 544 | "debug": "2.6.9", 545 | "depd": "~1.1.2", 546 | "encodeurl": "~1.0.2", 547 | "escape-html": "~1.0.3", 548 | "etag": "~1.8.1", 549 | "finalhandler": "1.1.1", 550 | "fresh": "0.5.2", 551 | "merge-descriptors": "1.0.1", 552 | "methods": "~1.1.2", 553 | "on-finished": "~2.3.0", 554 | "parseurl": "~1.3.2", 555 | "path-to-regexp": "0.1.7", 556 | "proxy-addr": "~2.0.4", 557 | "qs": "6.5.2", 558 | "range-parser": "~1.2.0", 559 | "safe-buffer": "5.1.2", 560 | "send": "0.16.2", 561 | "serve-static": "1.13.2", 562 | "setprototypeof": "1.1.0", 563 | "statuses": "~1.4.0", 564 | "type-is": "~1.6.16", 565 | "utils-merge": "1.0.1", 566 | "vary": "~1.1.2" 567 | }, 568 | "dependencies": { 569 | "statuses": { 570 | "version": "1.4.0", 571 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 572 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 573 | } 574 | } 575 | }, 576 | "fast-json-stable-stringify": { 577 | "version": "2.0.0", 578 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 579 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" 580 | }, 581 | "finalhandler": { 582 | "version": "1.1.1", 583 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", 584 | "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", 585 | "requires": { 586 | "debug": "2.6.9", 587 | "encodeurl": "~1.0.2", 588 | "escape-html": "~1.0.3", 589 | "on-finished": "~2.3.0", 590 | "parseurl": "~1.3.2", 591 | "statuses": "~1.4.0", 592 | "unpipe": "~1.0.0" 593 | }, 594 | "dependencies": { 595 | "statuses": { 596 | "version": "1.4.0", 597 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 598 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 599 | } 600 | } 601 | }, 602 | "forwarded": { 603 | "version": "0.1.2", 604 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 605 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 606 | }, 607 | "fresh": { 608 | "version": "0.5.2", 609 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 610 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 611 | }, 612 | "fs-capacitor": { 613 | "version": "2.0.0", 614 | "resolved": "https://registry.npmjs.org/fs-capacitor/-/fs-capacitor-2.0.0.tgz", 615 | "integrity": "sha512-CIJZpxbVWhO+qyODeCR55Q+6vj0p2oL8DAWd/DZi3Ev+25PimUoScw07K0fPgluaH3lFoqNvwW13BDYfHWFQJw==" 616 | }, 617 | "function-bind": { 618 | "version": "1.1.1", 619 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 620 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 621 | }, 622 | "graphql": { 623 | "version": "14.1.1", 624 | "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.1.1.tgz", 625 | "integrity": "sha512-C5zDzLqvfPAgTtP8AUPIt9keDabrdRAqSWjj2OPRKrKxI9Fb65I36s1uCs1UUBFnSWTdO7hyHi7z1ZbwKMKF6Q==", 626 | "requires": { 627 | "iterall": "^1.2.2" 628 | } 629 | }, 630 | "graphql-extensions": { 631 | "version": "0.5.0", 632 | "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.5.0.tgz", 633 | "integrity": "sha512-2i0rpe4/D8jZj6XmxXGLFDAsGLhkFrSdpS5WfvTAzoXOc52hUAxNdsbgRQGeKMFhmanqA6FDXxO/s+BtPHChVA==", 634 | "requires": { 635 | "@apollographql/apollo-tools": "^0.3.0" 636 | } 637 | }, 638 | "graphql-subscriptions": { 639 | "version": "1.0.0", 640 | "resolved": "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-1.0.0.tgz", 641 | "integrity": "sha512-+ytmryoHF1LVf58NKEaNPRUzYyXplm120ntxfPcgOBC7TnK7Tv/4VRHeh4FAR9iL+O1bqhZs4nkibxQ+OA5cDQ==", 642 | "requires": { 643 | "iterall": "^1.2.1" 644 | } 645 | }, 646 | "graphql-tag": { 647 | "version": "2.10.1", 648 | "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.10.1.tgz", 649 | "integrity": "sha512-jApXqWBzNXQ8jYa/HLkZJaVw9jgwNqZkywa2zfFn16Iv1Zb7ELNHkJaXHR7Quvd5SIGsy6Ny7SUKATgnu05uEg==" 650 | }, 651 | "graphql-tools": { 652 | "version": "4.0.4", 653 | "resolved": "https://registry.npmjs.org/graphql-tools/-/graphql-tools-4.0.4.tgz", 654 | "integrity": "sha512-chF12etTIGVVGy3fCTJ1ivJX2KB7OSG4c6UOJQuqOHCmBQwTyNgCDuejZKvpYxNZiEx7bwIjrodDgDe9RIkjlw==", 655 | "requires": { 656 | "apollo-link": "^1.2.3", 657 | "apollo-utilities": "^1.0.1", 658 | "deprecated-decorator": "^0.1.6", 659 | "iterall": "^1.1.3", 660 | "uuid": "^3.1.0" 661 | } 662 | }, 663 | "graphql-upload": { 664 | "version": "8.0.4", 665 | "resolved": "https://registry.npmjs.org/graphql-upload/-/graphql-upload-8.0.4.tgz", 666 | "integrity": "sha512-jsTfVYXJ5mU6BXiiJ20CUCAcf41ICCQJ2ltwQFUuaFKiY4JhlG99uZZp5S3hbpQ/oA1kS7hz4pRtsnxPCa7Yfg==", 667 | "requires": { 668 | "busboy": "^0.3.0", 669 | "fs-capacitor": "^2.0.0", 670 | "http-errors": "^1.7.1", 671 | "object-path": "^0.11.4" 672 | } 673 | }, 674 | "has": { 675 | "version": "1.0.3", 676 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 677 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 678 | "requires": { 679 | "function-bind": "^1.1.1" 680 | } 681 | }, 682 | "has-symbols": { 683 | "version": "1.0.0", 684 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", 685 | "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" 686 | }, 687 | "http-errors": { 688 | "version": "1.7.1", 689 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.1.tgz", 690 | "integrity": "sha512-jWEUgtZWGSMba9I1N3gc1HmvpBUaNC9vDdA46yScAdp+C5rdEuKWUBLWTQpW9FwSWSbYYs++b6SDCxf9UEJzfw==", 691 | "requires": { 692 | "depd": "~1.1.2", 693 | "inherits": "2.0.3", 694 | "setprototypeof": "1.1.0", 695 | "statuses": ">= 1.5.0 < 2", 696 | "toidentifier": "1.0.0" 697 | } 698 | }, 699 | "iconv-lite": { 700 | "version": "0.4.23", 701 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", 702 | "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", 703 | "requires": { 704 | "safer-buffer": ">= 2.1.2 < 3" 705 | } 706 | }, 707 | "inherits": { 708 | "version": "2.0.3", 709 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 710 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 711 | }, 712 | "ipaddr.js": { 713 | "version": "1.8.0", 714 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", 715 | "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" 716 | }, 717 | "is-callable": { 718 | "version": "1.1.4", 719 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", 720 | "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" 721 | }, 722 | "is-date-object": { 723 | "version": "1.0.1", 724 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", 725 | "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" 726 | }, 727 | "is-regex": { 728 | "version": "1.0.4", 729 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", 730 | "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", 731 | "requires": { 732 | "has": "^1.0.1" 733 | } 734 | }, 735 | "is-symbol": { 736 | "version": "1.0.2", 737 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", 738 | "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", 739 | "requires": { 740 | "has-symbols": "^1.0.0" 741 | } 742 | }, 743 | "iterall": { 744 | "version": "1.2.2", 745 | "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.2.2.tgz", 746 | "integrity": "sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA==" 747 | }, 748 | "lodash": { 749 | "version": "4.17.11", 750 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", 751 | "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" 752 | }, 753 | "lodash.sortby": { 754 | "version": "4.7.0", 755 | "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", 756 | "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" 757 | }, 758 | "long": { 759 | "version": "4.0.0", 760 | "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", 761 | "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" 762 | }, 763 | "lru-cache": { 764 | "version": "5.1.1", 765 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", 766 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 767 | "requires": { 768 | "yallist": "^3.0.2" 769 | } 770 | }, 771 | "media-typer": { 772 | "version": "0.3.0", 773 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 774 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 775 | }, 776 | "merge-descriptors": { 777 | "version": "1.0.1", 778 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 779 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 780 | }, 781 | "methods": { 782 | "version": "1.1.2", 783 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 784 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 785 | }, 786 | "mime": { 787 | "version": "1.4.1", 788 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", 789 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" 790 | }, 791 | "mime-db": { 792 | "version": "1.37.0", 793 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", 794 | "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" 795 | }, 796 | "mime-types": { 797 | "version": "2.1.21", 798 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", 799 | "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", 800 | "requires": { 801 | "mime-db": "~1.37.0" 802 | } 803 | }, 804 | "ms": { 805 | "version": "2.0.0", 806 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 807 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 808 | }, 809 | "negotiator": { 810 | "version": "0.6.1", 811 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", 812 | "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" 813 | }, 814 | "node-fetch": { 815 | "version": "2.3.0", 816 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz", 817 | "integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==" 818 | }, 819 | "object-assign": { 820 | "version": "4.1.1", 821 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 822 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 823 | }, 824 | "object-keys": { 825 | "version": "1.1.0", 826 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", 827 | "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==" 828 | }, 829 | "object-path": { 830 | "version": "0.11.4", 831 | "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", 832 | "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=" 833 | }, 834 | "object.getownpropertydescriptors": { 835 | "version": "2.0.3", 836 | "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", 837 | "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", 838 | "requires": { 839 | "define-properties": "^1.1.2", 840 | "es-abstract": "^1.5.1" 841 | } 842 | }, 843 | "on-finished": { 844 | "version": "2.3.0", 845 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 846 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 847 | "requires": { 848 | "ee-first": "1.1.1" 849 | } 850 | }, 851 | "parseurl": { 852 | "version": "1.3.2", 853 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", 854 | "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" 855 | }, 856 | "path-to-regexp": { 857 | "version": "0.1.7", 858 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 859 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 860 | }, 861 | "protobufjs": { 862 | "version": "6.8.8", 863 | "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", 864 | "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", 865 | "requires": { 866 | "@protobufjs/aspromise": "^1.1.2", 867 | "@protobufjs/base64": "^1.1.2", 868 | "@protobufjs/codegen": "^2.0.4", 869 | "@protobufjs/eventemitter": "^1.1.0", 870 | "@protobufjs/fetch": "^1.1.0", 871 | "@protobufjs/float": "^1.0.2", 872 | "@protobufjs/inquire": "^1.1.0", 873 | "@protobufjs/path": "^1.1.2", 874 | "@protobufjs/pool": "^1.1.0", 875 | "@protobufjs/utf8": "^1.1.0", 876 | "@types/long": "^4.0.0", 877 | "@types/node": "^10.1.0", 878 | "long": "^4.0.0" 879 | }, 880 | "dependencies": { 881 | "@types/node": { 882 | "version": "10.12.26", 883 | "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.26.tgz", 884 | "integrity": "sha512-nMRqS+mL1TOnIJrL6LKJcNZPB8V3eTfRo9FQA2b5gDvrHurC8XbSA86KNe0dShlEL7ReWJv/OU9NL7Z0dnqWTg==" 885 | } 886 | } 887 | }, 888 | "proxy-addr": { 889 | "version": "2.0.4", 890 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", 891 | "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", 892 | "requires": { 893 | "forwarded": "~0.1.2", 894 | "ipaddr.js": "1.8.0" 895 | } 896 | }, 897 | "qs": { 898 | "version": "6.5.2", 899 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 900 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 901 | }, 902 | "range-parser": { 903 | "version": "1.2.0", 904 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", 905 | "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" 906 | }, 907 | "raw-body": { 908 | "version": "2.3.3", 909 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", 910 | "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", 911 | "requires": { 912 | "bytes": "3.0.0", 913 | "http-errors": "1.6.3", 914 | "iconv-lite": "0.4.23", 915 | "unpipe": "1.0.0" 916 | }, 917 | "dependencies": { 918 | "http-errors": { 919 | "version": "1.6.3", 920 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", 921 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", 922 | "requires": { 923 | "depd": "~1.1.2", 924 | "inherits": "2.0.3", 925 | "setprototypeof": "1.1.0", 926 | "statuses": ">= 1.4.0 < 2" 927 | } 928 | } 929 | } 930 | }, 931 | "retry": { 932 | "version": "0.12.0", 933 | "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", 934 | "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" 935 | }, 936 | "safe-buffer": { 937 | "version": "5.1.2", 938 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 939 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 940 | }, 941 | "safer-buffer": { 942 | "version": "2.1.2", 943 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 944 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 945 | }, 946 | "send": { 947 | "version": "0.16.2", 948 | "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", 949 | "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", 950 | "requires": { 951 | "debug": "2.6.9", 952 | "depd": "~1.1.2", 953 | "destroy": "~1.0.4", 954 | "encodeurl": "~1.0.2", 955 | "escape-html": "~1.0.3", 956 | "etag": "~1.8.1", 957 | "fresh": "0.5.2", 958 | "http-errors": "~1.6.2", 959 | "mime": "1.4.1", 960 | "ms": "2.0.0", 961 | "on-finished": "~2.3.0", 962 | "range-parser": "~1.2.0", 963 | "statuses": "~1.4.0" 964 | }, 965 | "dependencies": { 966 | "http-errors": { 967 | "version": "1.6.3", 968 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", 969 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", 970 | "requires": { 971 | "depd": "~1.1.2", 972 | "inherits": "2.0.3", 973 | "setprototypeof": "1.1.0", 974 | "statuses": ">= 1.4.0 < 2" 975 | } 976 | }, 977 | "statuses": { 978 | "version": "1.4.0", 979 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 980 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 981 | } 982 | } 983 | }, 984 | "serve-static": { 985 | "version": "1.13.2", 986 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", 987 | "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", 988 | "requires": { 989 | "encodeurl": "~1.0.2", 990 | "escape-html": "~1.0.3", 991 | "parseurl": "~1.3.2", 992 | "send": "0.16.2" 993 | } 994 | }, 995 | "setprototypeof": { 996 | "version": "1.1.0", 997 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", 998 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" 999 | }, 1000 | "statuses": { 1001 | "version": "1.5.0", 1002 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 1003 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 1004 | }, 1005 | "streamsearch": { 1006 | "version": "0.1.2", 1007 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", 1008 | "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" 1009 | }, 1010 | "subscriptions-transport-ws": { 1011 | "version": "0.9.15", 1012 | "resolved": "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.15.tgz", 1013 | "integrity": "sha512-f9eBfWdHsePQV67QIX+VRhf++dn1adyC/PZHP6XI5AfKnZ4n0FW+v5omxwdHVpd4xq2ZijaHEcmlQrhBY79ZWQ==", 1014 | "requires": { 1015 | "backo2": "^1.0.2", 1016 | "eventemitter3": "^3.1.0", 1017 | "iterall": "^1.2.1", 1018 | "symbol-observable": "^1.0.4", 1019 | "ws": "^5.2.0" 1020 | }, 1021 | "dependencies": { 1022 | "ws": { 1023 | "version": "5.2.2", 1024 | "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", 1025 | "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", 1026 | "requires": { 1027 | "async-limiter": "~1.0.0" 1028 | } 1029 | } 1030 | } 1031 | }, 1032 | "symbol-observable": { 1033 | "version": "1.2.0", 1034 | "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", 1035 | "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" 1036 | }, 1037 | "toidentifier": { 1038 | "version": "1.0.0", 1039 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 1040 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" 1041 | }, 1042 | "tslib": { 1043 | "version": "1.9.3", 1044 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", 1045 | "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" 1046 | }, 1047 | "type-is": { 1048 | "version": "1.6.16", 1049 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", 1050 | "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", 1051 | "requires": { 1052 | "media-typer": "0.3.0", 1053 | "mime-types": "~2.1.18" 1054 | } 1055 | }, 1056 | "unpipe": { 1057 | "version": "1.0.0", 1058 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1059 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 1060 | }, 1061 | "util.promisify": { 1062 | "version": "1.0.0", 1063 | "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", 1064 | "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", 1065 | "requires": { 1066 | "define-properties": "^1.1.2", 1067 | "object.getownpropertydescriptors": "^2.0.3" 1068 | } 1069 | }, 1070 | "utils-merge": { 1071 | "version": "1.0.1", 1072 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 1073 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 1074 | }, 1075 | "uuid": { 1076 | "version": "3.3.2", 1077 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", 1078 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" 1079 | }, 1080 | "vary": { 1081 | "version": "1.1.2", 1082 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 1083 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 1084 | }, 1085 | "ws": { 1086 | "version": "6.1.3", 1087 | "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.3.tgz", 1088 | "integrity": "sha512-tbSxiT+qJI223AP4iLfQbkbxkwdFcneYinM2+x46Gx2wgvbaOMO36czfdfVUBRTHvzAMRhDd98sA5d/BuWbQdg==", 1089 | "requires": { 1090 | "async-limiter": "~1.0.0" 1091 | } 1092 | }, 1093 | "yallist": { 1094 | "version": "3.0.3", 1095 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", 1096 | "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" 1097 | }, 1098 | "zen-observable": { 1099 | "version": "0.8.13", 1100 | "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.13.tgz", 1101 | "integrity": "sha512-fa+6aDUVvavYsefZw0zaZ/v3ckEtMgCFi30sn91SEZea4y/6jQp05E3omjkX91zV6RVdn15fqnFZ6RKjRGbp2g==" 1102 | }, 1103 | "zen-observable-ts": { 1104 | "version": "0.8.15", 1105 | "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.15.tgz", 1106 | "integrity": "sha512-sXKPWiw6JszNEkRv5dQ+lQCttyjHM2Iks74QU5NP8mMPS/NrzTlHDr780gf/wOBqmHkPO6NCLMlsa+fAQ8VE8w==", 1107 | "requires": { 1108 | "zen-observable": "^0.8.0" 1109 | } 1110 | } 1111 | } 1112 | } 1113 | -------------------------------------------------------------------------------- /Day3/apollo-example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "apollo-example", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "apollo-server": "^2.4.0", 13 | "graphql": "^14.1.1" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Day3/apollo-example/src/index.js: -------------------------------------------------------------------------------- 1 | const { ApolloServer, gql } = require('apollo-server'); 2 | 3 | let idCount = 0 4 | let posts = [] 5 | 6 | const resolvers = { 7 | Query: { 8 | posts: () => posts, 9 | post: (parent, args) => posts.find(post => post.id === args.id), 10 | }, 11 | Mutation: { 12 | createDraft: (parent, args) => { 13 | const post = { 14 | id: `post_${idCount++}`, 15 | title: args.title, 16 | content: args.content, 17 | comments: [], 18 | author: { 19 | id: `author_${new Date().getMilliseconds()}`, 20 | name: args.author 21 | }, 22 | published: false, 23 | } 24 | posts.push(post) 25 | return post 26 | }, 27 | addComment: (parent, args) => { 28 | posts.forEach(post => { 29 | if (post.id === args.id) { 30 | const comment = { 31 | id: `comment_${new Date().getMilliseconds()}`, 32 | content: args.content 33 | } 34 | post.comments.push(comment) 35 | } 36 | }) 37 | 38 | return args.id 39 | }, 40 | deletePost: (parent, args) => { 41 | const postIndex = posts.findIndex(post => post.id === args.id) 42 | if (postIndex > -1) { 43 | const deleted = posts.splice(postIndex, 1) 44 | return deleted[0] 45 | } 46 | return null 47 | }, 48 | publish: (parent, args) => { 49 | const postIndex = posts.findIndex(post => post.id === args.id) 50 | posts[postIndex].published = true 51 | return posts[postIndex] 52 | }, 53 | }, 54 | } 55 | 56 | const schema = gql` 57 | type Query { 58 | posts: [Post!]! 59 | post(id: ID!): Post 60 | description: String! 61 | } 62 | 63 | type Mutation { 64 | createDraft(title: String!, content: String, author: String!): Post 65 | addComment(id: ID!, content: String!): ID 66 | deletePost(id: ID!): Post 67 | publish(id: ID!): Post 68 | } 69 | 70 | type Post { 71 | id: ID! 72 | title: String! 73 | content: String! 74 | published: Boolean! 75 | author: Author! 76 | comments: [Comment] 77 | } 78 | 79 | 80 | type Author { 81 | id: ID! 82 | name: String! 83 | } 84 | 85 | type Comment { 86 | id: ID! 87 | content: String! 88 | } 89 | ` 90 | 91 | 92 | 93 | const server = new ApolloServer({ 94 | typeDefs: schema, 95 | resolvers 96 | }) 97 | 98 | server.listen().then(({ url }) => { 99 | console.log(`🚀 Server ready at ${url}`); 100 | }); -------------------------------------------------------------------------------- /Day3/excercises.md: -------------------------------------------------------------------------------- 1 | # Excercises will be announced at the end of Day3 -------------------------------------------------------------------------------- /Day3/express-graphql/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "express-graphql", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "express": "^4.16.4", 13 | "express-graphql": "^0.7.1", 14 | "graphql": "^14.1.1" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Day3/express-graphql/src/index.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const graphqlHTTP = require('express-graphql'); 3 | const { buildSchema } = require('graphql'); 4 | 5 | const app = express(); 6 | 7 | const MyGraphQLSchema = buildSchema(` 8 | 9 | type Query { 10 | posts: [Post!]! 11 | post(id: ID!): Post 12 | description: String! 13 | } 14 | 15 | type Mutation { 16 | createDraft(title: String!, content: String, author: String!): Post 17 | addComment(id: ID!, content: String!): ID 18 | deletePost(id: ID!): Post 19 | publish(id: ID!): Post 20 | } 21 | 22 | type Post { 23 | id: ID! 24 | title: String! 25 | content: String! 26 | published: Boolean! 27 | author: Author! 28 | comments: [Comment] 29 | } 30 | 31 | 32 | type Author { 33 | id: ID! 34 | name: String! 35 | } 36 | 37 | type Comment { 38 | id: ID! 39 | content: String! 40 | } 41 | `) 42 | 43 | app.use('/graphql', graphqlHTTP({ 44 | schema: MyGraphQLSchema, 45 | graphiql: true 46 | })); 47 | 48 | app.listen(4000); -------------------------------------------------------------------------------- /Day3/express-graphql/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | accepts@^1.3.5, accepts@~1.3.5: 6 | version "1.3.5" 7 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" 8 | dependencies: 9 | mime-types "~2.1.18" 10 | negotiator "0.6.1" 11 | 12 | array-flatten@1.1.1: 13 | version "1.1.1" 14 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 15 | 16 | body-parser@1.18.3: 17 | version "1.18.3" 18 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" 19 | dependencies: 20 | bytes "3.0.0" 21 | content-type "~1.0.4" 22 | debug "2.6.9" 23 | depd "~1.1.2" 24 | http-errors "~1.6.3" 25 | iconv-lite "0.4.23" 26 | on-finished "~2.3.0" 27 | qs "6.5.2" 28 | raw-body "2.3.3" 29 | type-is "~1.6.16" 30 | 31 | bytes@3.0.0: 32 | version "3.0.0" 33 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" 34 | 35 | content-disposition@0.5.2: 36 | version "0.5.2" 37 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" 38 | 39 | content-type@^1.0.4, content-type@~1.0.4: 40 | version "1.0.4" 41 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 42 | 43 | cookie-signature@1.0.6: 44 | version "1.0.6" 45 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 46 | 47 | cookie@0.3.1: 48 | version "0.3.1" 49 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" 50 | 51 | debug@2.6.9: 52 | version "2.6.9" 53 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 54 | dependencies: 55 | ms "2.0.0" 56 | 57 | depd@~1.1.2: 58 | version "1.1.2" 59 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 60 | 61 | destroy@~1.0.4: 62 | version "1.0.4" 63 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 64 | 65 | ee-first@1.1.1: 66 | version "1.1.1" 67 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 68 | 69 | encodeurl@~1.0.2: 70 | version "1.0.2" 71 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 72 | 73 | escape-html@~1.0.3: 74 | version "1.0.3" 75 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 76 | 77 | etag@~1.8.1: 78 | version "1.8.1" 79 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 80 | 81 | express-graphql@^0.7.1: 82 | version "0.7.1" 83 | resolved "https://registry.yarnpkg.com/express-graphql/-/express-graphql-0.7.1.tgz#6c7712ee966c3aba1930e064ea4c8181e56fd3ef" 84 | dependencies: 85 | accepts "^1.3.5" 86 | content-type "^1.0.4" 87 | http-errors "^1.7.1" 88 | raw-body "^2.3.3" 89 | 90 | express@^4.16.4: 91 | version "4.16.4" 92 | resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e" 93 | dependencies: 94 | accepts "~1.3.5" 95 | array-flatten "1.1.1" 96 | body-parser "1.18.3" 97 | content-disposition "0.5.2" 98 | content-type "~1.0.4" 99 | cookie "0.3.1" 100 | cookie-signature "1.0.6" 101 | debug "2.6.9" 102 | depd "~1.1.2" 103 | encodeurl "~1.0.2" 104 | escape-html "~1.0.3" 105 | etag "~1.8.1" 106 | finalhandler "1.1.1" 107 | fresh "0.5.2" 108 | merge-descriptors "1.0.1" 109 | methods "~1.1.2" 110 | on-finished "~2.3.0" 111 | parseurl "~1.3.2" 112 | path-to-regexp "0.1.7" 113 | proxy-addr "~2.0.4" 114 | qs "6.5.2" 115 | range-parser "~1.2.0" 116 | safe-buffer "5.1.2" 117 | send "0.16.2" 118 | serve-static "1.13.2" 119 | setprototypeof "1.1.0" 120 | statuses "~1.4.0" 121 | type-is "~1.6.16" 122 | utils-merge "1.0.1" 123 | vary "~1.1.2" 124 | 125 | finalhandler@1.1.1: 126 | version "1.1.1" 127 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" 128 | dependencies: 129 | debug "2.6.9" 130 | encodeurl "~1.0.2" 131 | escape-html "~1.0.3" 132 | on-finished "~2.3.0" 133 | parseurl "~1.3.2" 134 | statuses "~1.4.0" 135 | unpipe "~1.0.0" 136 | 137 | forwarded@~0.1.2: 138 | version "0.1.2" 139 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" 140 | 141 | fresh@0.5.2: 142 | version "0.5.2" 143 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 144 | 145 | graphql@^14.1.1: 146 | version "14.1.1" 147 | resolved "https://registry.yarnpkg.com/graphql/-/graphql-14.1.1.tgz#d5d77df4b19ef41538d7215d1e7a28834619fac0" 148 | dependencies: 149 | iterall "^1.2.2" 150 | 151 | http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: 152 | version "1.6.3" 153 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" 154 | dependencies: 155 | depd "~1.1.2" 156 | inherits "2.0.3" 157 | setprototypeof "1.1.0" 158 | statuses ">= 1.4.0 < 2" 159 | 160 | http-errors@^1.7.1: 161 | version "1.7.1" 162 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.1.tgz#6a4ffe5d35188e1c39f872534690585852e1f027" 163 | dependencies: 164 | depd "~1.1.2" 165 | inherits "2.0.3" 166 | setprototypeof "1.1.0" 167 | statuses ">= 1.5.0 < 2" 168 | toidentifier "1.0.0" 169 | 170 | iconv-lite@0.4.23: 171 | version "0.4.23" 172 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" 173 | dependencies: 174 | safer-buffer ">= 2.1.2 < 3" 175 | 176 | inherits@2.0.3: 177 | version "2.0.3" 178 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 179 | 180 | ipaddr.js@1.8.0: 181 | version "1.8.0" 182 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" 183 | 184 | iterall@^1.2.2: 185 | version "1.2.2" 186 | resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7" 187 | 188 | media-typer@0.3.0: 189 | version "0.3.0" 190 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 191 | 192 | merge-descriptors@1.0.1: 193 | version "1.0.1" 194 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 195 | 196 | methods@~1.1.2: 197 | version "1.1.2" 198 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 199 | 200 | mime-db@~1.37.0: 201 | version "1.37.0" 202 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8" 203 | 204 | mime-types@~2.1.18: 205 | version "2.1.21" 206 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96" 207 | dependencies: 208 | mime-db "~1.37.0" 209 | 210 | mime@1.4.1: 211 | version "1.4.1" 212 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" 213 | 214 | ms@2.0.0: 215 | version "2.0.0" 216 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 217 | 218 | negotiator@0.6.1: 219 | version "0.6.1" 220 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" 221 | 222 | on-finished@~2.3.0: 223 | version "2.3.0" 224 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 225 | dependencies: 226 | ee-first "1.1.1" 227 | 228 | parseurl@~1.3.2: 229 | version "1.3.2" 230 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" 231 | 232 | path-to-regexp@0.1.7: 233 | version "0.1.7" 234 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 235 | 236 | proxy-addr@~2.0.4: 237 | version "2.0.4" 238 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" 239 | dependencies: 240 | forwarded "~0.1.2" 241 | ipaddr.js "1.8.0" 242 | 243 | qs@6.5.2: 244 | version "6.5.2" 245 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" 246 | 247 | range-parser@~1.2.0: 248 | version "1.2.0" 249 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" 250 | 251 | raw-body@2.3.3, raw-body@^2.3.3: 252 | version "2.3.3" 253 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" 254 | dependencies: 255 | bytes "3.0.0" 256 | http-errors "1.6.3" 257 | iconv-lite "0.4.23" 258 | unpipe "1.0.0" 259 | 260 | safe-buffer@5.1.2: 261 | version "5.1.2" 262 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 263 | 264 | "safer-buffer@>= 2.1.2 < 3": 265 | version "2.1.2" 266 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 267 | 268 | send@0.16.2: 269 | version "0.16.2" 270 | resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" 271 | dependencies: 272 | debug "2.6.9" 273 | depd "~1.1.2" 274 | destroy "~1.0.4" 275 | encodeurl "~1.0.2" 276 | escape-html "~1.0.3" 277 | etag "~1.8.1" 278 | fresh "0.5.2" 279 | http-errors "~1.6.2" 280 | mime "1.4.1" 281 | ms "2.0.0" 282 | on-finished "~2.3.0" 283 | range-parser "~1.2.0" 284 | statuses "~1.4.0" 285 | 286 | serve-static@1.13.2: 287 | version "1.13.2" 288 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" 289 | dependencies: 290 | encodeurl "~1.0.2" 291 | escape-html "~1.0.3" 292 | parseurl "~1.3.2" 293 | send "0.16.2" 294 | 295 | setprototypeof@1.1.0: 296 | version "1.1.0" 297 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" 298 | 299 | "statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2": 300 | version "1.5.0" 301 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 302 | 303 | statuses@~1.4.0: 304 | version "1.4.0" 305 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" 306 | 307 | toidentifier@1.0.0: 308 | version "1.0.0" 309 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" 310 | 311 | type-is@~1.6.16: 312 | version "1.6.16" 313 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" 314 | dependencies: 315 | media-typer "0.3.0" 316 | mime-types "~2.1.18" 317 | 318 | unpipe@1.0.0, unpipe@~1.0.0: 319 | version "1.0.0" 320 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 321 | 322 | utils-merge@1.0.1: 323 | version "1.0.1" 324 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 325 | 326 | vary@~1.1.2: 327 | version "1.1.2" 328 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 329 | -------------------------------------------------------------------------------- /Day3/graphql-yoga-example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "graphql-yoga-example", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "src/index.js", 6 | "scripts": { 7 | "start": "nodemon ./src/index.js", 8 | "test": "echo \"Error: no test specified\" && exit 1" 9 | }, 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "graphql-yoga": "^1.17.4", 14 | "nodemon": "^1.18.10" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Day3/graphql-yoga-example/src/index.js: -------------------------------------------------------------------------------- 1 | const { GraphQLServer, PubSub } = require('graphql-yoga') 2 | const { GraphQLScalarType } = require('graphql'); 3 | const { Kind } = require('graphql/language'); 4 | 5 | let idCount = 0 6 | let posts = [] 7 | const channel = Math.random().toString(36).substring(2, 15) 8 | 9 | function oddValue(value){ 10 | return value % 2 === 1 ? value : null 11 | } 12 | 13 | const resolvers = { 14 | Query: { 15 | posts: () => posts, 16 | post: (parent, args) => posts.find(post => post.id === args.id), 17 | }, 18 | Odd: new GraphQLScalarType({ 19 | name: 'Odd', 20 | description: 'Odd custom scalar', 21 | parseValue: oddValue, 22 | serialize: oddValue, 23 | parseLiteral(ast) { 24 | if (ast.kind === Kind.INT) { 25 | return oddValue(parseInt(ast.value, 10)) 26 | } 27 | return null 28 | } 29 | }), 30 | Date: new GraphQLScalarType({ 31 | name: 'Date', 32 | description: 'Date custom scalar type', 33 | parseValue(value) { 34 | return new Date(value); // value from the client 35 | }, 36 | serialize(value) { 37 | return value.getTime(); // value sent to the client 38 | }, 39 | parseLiteral(ast) { 40 | if (ast.kind === Kind.INT) { 41 | return new Date(ast.value) // ast value is always in string format 42 | } 43 | return null; 44 | }, 45 | }), 46 | Mutation: { 47 | createDraft: (parent, { object }) => { 48 | const post = { 49 | id: `post_${idCount++}`, 50 | title: object.title, 51 | content: object.content, 52 | date: object.date, 53 | oddNumber: object.oddNumber, 54 | comments: [], 55 | author: { 56 | id: `author_${new Date().getMilliseconds()}`, 57 | name: object.author 58 | }, 59 | published: false, 60 | } 61 | posts.push(post) 62 | pubsub.publish(channel, { posts}) 63 | return post 64 | }, 65 | addComment: (parent, args) => { 66 | posts.forEach(post => { 67 | if (post.id === args.id) { 68 | const comment = { 69 | id: `comment_${new Date().getMilliseconds()}`, 70 | content: args.content 71 | } 72 | post.comments.push(comment) 73 | pubsub.publish(channel, { posts}) 74 | } 75 | }) 76 | 77 | return args.id 78 | }, 79 | deletePost: (parent, args) => { 80 | const postIndex = posts.findIndex(post => post.id === args.id) 81 | if (postIndex > -1) { 82 | const deleted = posts.splice(postIndex, 1) 83 | pubsub.publish(channel, { posts}) 84 | return deleted[0] 85 | } 86 | return null 87 | }, 88 | publish: (parent, args) => { 89 | const postIndex = posts.findIndex(post => post.id === args.id) 90 | posts[postIndex].published = true 91 | pubsub.publish(channel, { posts}) 92 | return posts[postIndex] 93 | }, 94 | }, 95 | Subscription: { 96 | posts: { 97 | subscribe: (parent, args, { pubsub }) => { 98 | setImmediate(() => pubsub.publish(channel, { posts})) 99 | return pubsub.asyncIterator(channel) 100 | }, 101 | } 102 | }, 103 | } 104 | 105 | const pubsub = new PubSub() 106 | 107 | 108 | const server = new GraphQLServer({ 109 | typeDefs: './src/schema.graphql', 110 | resolvers, 111 | context: { pubsub } 112 | }) 113 | 114 | server.start({ 115 | port: 5577, 116 | endpoint: '/graphql', 117 | playground: '/playground', 118 | },() => { 119 | console.log(`The graphql server is running on http://localhost:5577/graphql`) 120 | console.log(`Playground available here: http://localhost:5577/playground`) 121 | }) 122 | -------------------------------------------------------------------------------- /Day3/graphql-yoga-example/src/schema.graphql: -------------------------------------------------------------------------------- 1 | type Query { 2 | posts: [Post!]! 3 | post(id: ID!): Post 4 | description: String! 5 | } 6 | 7 | type Mutation { 8 | createDraft(object: Draft): Post 9 | addComment(id: ID!, content: String!): ID 10 | deletePost(id: ID!): Post 11 | publish(id: ID!): Post 12 | } 13 | 14 | scalar Date 15 | 16 | input Draft { 17 | title: String! 18 | oddNumber: Odd, 19 | content: String! 20 | author: String! 21 | date: Date 22 | } 23 | 24 | interface HasContent { 25 | content: String! 26 | } 27 | 28 | type Subscription { 29 | posts: [Post!]! 30 | } 31 | 32 | 33 | "Description for the type" 34 | type Post implements HasContent { 35 | """ 36 | ## Description for field 37 | """ 38 | id: ID! 39 | oddNumber: Odd, 40 | date: Date 41 | title: String! 42 | content: String! 43 | published: Boolean! 44 | author: Author! 45 | comments: [Comment] 46 | } 47 | 48 | scalar Odd 49 | 50 | type Author { 51 | id: ID! 52 | name: String! 53 | } 54 | 55 | type Comment implements HasContent{ 56 | id: ID! 57 | content: String! 58 | } -------------------------------------------------------------------------------- /Day3/graphql-yoga-example/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/body-parser@*": 6 | version "1.17.0" 7 | resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.17.0.tgz#9f5c9d9bd04bb54be32d5eb9fc0d8c974e6cf58c" 8 | dependencies: 9 | "@types/connect" "*" 10 | "@types/node" "*" 11 | 12 | "@types/connect@*": 13 | version "3.4.32" 14 | resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.32.tgz#aa0e9616b9435ccad02bc52b5b454ffc2c70ba28" 15 | dependencies: 16 | "@types/node" "*" 17 | 18 | "@types/cors@^2.8.4": 19 | version "2.8.4" 20 | resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.4.tgz#50991a759a29c0b89492751008c6af7a7c8267b0" 21 | dependencies: 22 | "@types/express" "*" 23 | 24 | "@types/express-serve-static-core@*": 25 | version "4.16.1" 26 | resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.16.1.tgz#35df7b302299a4ab138a643617bd44078e74d44e" 27 | dependencies: 28 | "@types/node" "*" 29 | "@types/range-parser" "*" 30 | 31 | "@types/express@*", "@types/express@^4.11.1": 32 | version "4.16.1" 33 | resolved "https://registry.yarnpkg.com/@types/express/-/express-4.16.1.tgz#d756bd1a85c34d87eaf44c888bad27ba8a4b7cf0" 34 | dependencies: 35 | "@types/body-parser" "*" 36 | "@types/express-serve-static-core" "*" 37 | "@types/serve-static" "*" 38 | 39 | "@types/graphql-deduplicator@^2.0.0": 40 | version "2.0.0" 41 | resolved "https://registry.yarnpkg.com/@types/graphql-deduplicator/-/graphql-deduplicator-2.0.0.tgz#9e577b8f3feb3d067b0ca756f4a1fb356d533922" 42 | 43 | "@types/graphql@^14.0.0": 44 | version "14.0.7" 45 | resolved "https://registry.yarnpkg.com/@types/graphql/-/graphql-14.0.7.tgz#daa09397220a68ce1cbb3f76a315ff3cd92312f6" 46 | 47 | "@types/mime@*": 48 | version "2.0.1" 49 | resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.1.tgz#dc488842312a7f075149312905b5e3c0b054c79d" 50 | 51 | "@types/node@*": 52 | version "11.9.3" 53 | resolved "https://registry.yarnpkg.com/@types/node/-/node-11.9.3.tgz#14adbb5ab8cd563f549fbae8dbe92e0b7d6e76cc" 54 | 55 | "@types/range-parser@*": 56 | version "1.2.3" 57 | resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" 58 | 59 | "@types/serve-static@*": 60 | version "1.13.2" 61 | resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.2.tgz#f5ac4d7a6420a99a6a45af4719f4dcd8cd907a48" 62 | dependencies: 63 | "@types/express-serve-static-core" "*" 64 | "@types/mime" "*" 65 | 66 | "@types/zen-observable@^0.5.3": 67 | version "0.5.4" 68 | resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.5.4.tgz#b863a4191e525206819e008097ebf0fb2e3a1cdc" 69 | 70 | abbrev@1: 71 | version "1.1.1" 72 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 73 | 74 | accepts@~1.3.5: 75 | version "1.3.5" 76 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" 77 | dependencies: 78 | mime-types "~2.1.18" 79 | negotiator "0.6.1" 80 | 81 | ansi-align@^2.0.0: 82 | version "2.0.0" 83 | resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" 84 | dependencies: 85 | string-width "^2.0.0" 86 | 87 | ansi-regex@^2.0.0: 88 | version "2.1.1" 89 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 90 | 91 | ansi-regex@^3.0.0: 92 | version "3.0.0" 93 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 94 | 95 | ansi-styles@^3.2.1: 96 | version "3.2.1" 97 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 98 | dependencies: 99 | color-convert "^1.9.0" 100 | 101 | anymatch@^2.0.0: 102 | version "2.0.0" 103 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" 104 | dependencies: 105 | micromatch "^3.1.4" 106 | normalize-path "^2.1.1" 107 | 108 | apollo-cache-control@^0.1.0: 109 | version "0.1.1" 110 | resolved "https://registry.yarnpkg.com/apollo-cache-control/-/apollo-cache-control-0.1.1.tgz#173d14ceb3eb9e7cb53de7eb8b61bee6159d4171" 111 | dependencies: 112 | graphql-extensions "^0.0.x" 113 | 114 | apollo-link@^1.2.3: 115 | version "1.2.8" 116 | resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.8.tgz#0f252adefd5047ac1a9f35ba9439d216587dcd84" 117 | dependencies: 118 | zen-observable-ts "^0.8.15" 119 | 120 | apollo-server-core@^1.3.6, apollo-server-core@^1.4.0: 121 | version "1.4.0" 122 | resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-1.4.0.tgz#4faff7f110bfdd6c3f47008302ae24140f94c592" 123 | dependencies: 124 | apollo-cache-control "^0.1.0" 125 | apollo-tracing "^0.1.0" 126 | graphql-extensions "^0.0.x" 127 | 128 | apollo-server-express@^1.3.6: 129 | version "1.4.0" 130 | resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-1.4.0.tgz#7d7c58d6d6f9892b83fe575669093bb66738b125" 131 | dependencies: 132 | apollo-server-core "^1.4.0" 133 | apollo-server-module-graphiql "^1.4.0" 134 | 135 | apollo-server-lambda@1.3.6: 136 | version "1.3.6" 137 | resolved "https://registry.yarnpkg.com/apollo-server-lambda/-/apollo-server-lambda-1.3.6.tgz#bdaac37f143c6798e40b8ae75580ba673cea260e" 138 | dependencies: 139 | apollo-server-core "^1.3.6" 140 | apollo-server-module-graphiql "^1.3.4" 141 | 142 | apollo-server-module-graphiql@^1.3.4, apollo-server-module-graphiql@^1.4.0: 143 | version "1.4.0" 144 | resolved "https://registry.yarnpkg.com/apollo-server-module-graphiql/-/apollo-server-module-graphiql-1.4.0.tgz#c559efa285578820709f1769bb85d3b3eed3d8ec" 145 | 146 | apollo-tracing@^0.1.0: 147 | version "0.1.4" 148 | resolved "https://registry.yarnpkg.com/apollo-tracing/-/apollo-tracing-0.1.4.tgz#5b8ae1b01526b160ee6e552a7f131923a9aedcc7" 149 | dependencies: 150 | graphql-extensions "~0.0.9" 151 | 152 | apollo-upload-server@^7.0.0: 153 | version "7.1.0" 154 | resolved "https://registry.yarnpkg.com/apollo-upload-server/-/apollo-upload-server-7.1.0.tgz#21e07b52252b3749b913468599813e13cfca805f" 155 | dependencies: 156 | busboy "^0.2.14" 157 | fs-capacitor "^1.0.0" 158 | http-errors "^1.7.0" 159 | object-path "^0.11.4" 160 | 161 | apollo-utilities@^1.0.1: 162 | version "1.1.3" 163 | resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.1.3.tgz#a8883c0392f6b46eac0d366204ebf34be9307c87" 164 | dependencies: 165 | fast-json-stable-stringify "^2.0.0" 166 | tslib "^1.9.3" 167 | 168 | aproba@^1.0.3: 169 | version "1.2.0" 170 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" 171 | 172 | are-we-there-yet@~1.1.2: 173 | version "1.1.5" 174 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" 175 | dependencies: 176 | delegates "^1.0.0" 177 | readable-stream "^2.0.6" 178 | 179 | arr-diff@^4.0.0: 180 | version "4.0.0" 181 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" 182 | 183 | arr-flatten@^1.1.0: 184 | version "1.1.0" 185 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" 186 | 187 | arr-union@^3.1.0: 188 | version "3.1.0" 189 | resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" 190 | 191 | array-flatten@1.1.1: 192 | version "1.1.1" 193 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 194 | 195 | array-unique@^0.3.2: 196 | version "0.3.2" 197 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" 198 | 199 | assign-symbols@^1.0.0: 200 | version "1.0.0" 201 | resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" 202 | 203 | async-each@^1.0.1: 204 | version "1.0.1" 205 | resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" 206 | 207 | async-limiter@~1.0.0: 208 | version "1.0.0" 209 | resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" 210 | 211 | atob@^2.1.1: 212 | version "2.1.2" 213 | resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" 214 | 215 | aws-lambda@^0.1.2: 216 | version "0.1.2" 217 | resolved "https://registry.yarnpkg.com/aws-lambda/-/aws-lambda-0.1.2.tgz#19b1585075df31679597b976a5f1def61f12ccee" 218 | dependencies: 219 | aws-sdk "^*" 220 | commander "^2.5.0" 221 | dotenv "^0.4.0" 222 | 223 | aws-sdk@^*: 224 | version "2.402.0" 225 | resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.402.0.tgz#d4bfe8f16f476e26a7da4edba79b878a1cabb0fb" 226 | dependencies: 227 | buffer "4.9.1" 228 | events "1.1.1" 229 | ieee754 "1.1.8" 230 | jmespath "0.15.0" 231 | querystring "0.2.0" 232 | sax "1.2.1" 233 | url "0.10.3" 234 | uuid "3.3.2" 235 | xml2js "0.4.19" 236 | 237 | backo2@^1.0.2: 238 | version "1.0.2" 239 | resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" 240 | 241 | balanced-match@^1.0.0: 242 | version "1.0.0" 243 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 244 | 245 | base64-js@^1.0.2: 246 | version "1.3.0" 247 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" 248 | 249 | base@^0.11.1: 250 | version "0.11.2" 251 | resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" 252 | dependencies: 253 | cache-base "^1.0.1" 254 | class-utils "^0.3.5" 255 | component-emitter "^1.2.1" 256 | define-property "^1.0.0" 257 | isobject "^3.0.1" 258 | mixin-deep "^1.2.0" 259 | pascalcase "^0.1.1" 260 | 261 | binary-extensions@^1.0.0: 262 | version "1.13.0" 263 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.0.tgz#9523e001306a32444b907423f1de2164222f6ab1" 264 | 265 | body-parser-graphql@1.1.0: 266 | version "1.1.0" 267 | resolved "https://registry.yarnpkg.com/body-parser-graphql/-/body-parser-graphql-1.1.0.tgz#80a80353c7cb623562fd375750dfe018d75f0f7c" 268 | dependencies: 269 | body-parser "^1.18.2" 270 | 271 | body-parser@1.18.3, body-parser@^1.18.2: 272 | version "1.18.3" 273 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" 274 | dependencies: 275 | bytes "3.0.0" 276 | content-type "~1.0.4" 277 | debug "2.6.9" 278 | depd "~1.1.2" 279 | http-errors "~1.6.3" 280 | iconv-lite "0.4.23" 281 | on-finished "~2.3.0" 282 | qs "6.5.2" 283 | raw-body "2.3.3" 284 | type-is "~1.6.16" 285 | 286 | boxen@^1.2.1: 287 | version "1.3.0" 288 | resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" 289 | dependencies: 290 | ansi-align "^2.0.0" 291 | camelcase "^4.0.0" 292 | chalk "^2.0.1" 293 | cli-boxes "^1.0.0" 294 | string-width "^2.0.0" 295 | term-size "^1.2.0" 296 | widest-line "^2.0.0" 297 | 298 | brace-expansion@^1.1.7: 299 | version "1.1.11" 300 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 301 | dependencies: 302 | balanced-match "^1.0.0" 303 | concat-map "0.0.1" 304 | 305 | braces@^2.3.1, braces@^2.3.2: 306 | version "2.3.2" 307 | resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" 308 | dependencies: 309 | arr-flatten "^1.1.0" 310 | array-unique "^0.3.2" 311 | extend-shallow "^2.0.1" 312 | fill-range "^4.0.0" 313 | isobject "^3.0.1" 314 | repeat-element "^1.1.2" 315 | snapdragon "^0.8.1" 316 | snapdragon-node "^2.0.1" 317 | split-string "^3.0.2" 318 | to-regex "^3.0.1" 319 | 320 | buffer-from@^1.0.0: 321 | version "1.1.1" 322 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 323 | 324 | buffer@4.9.1: 325 | version "4.9.1" 326 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" 327 | dependencies: 328 | base64-js "^1.0.2" 329 | ieee754 "^1.1.4" 330 | isarray "^1.0.0" 331 | 332 | busboy@^0.2.14: 333 | version "0.2.14" 334 | resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453" 335 | dependencies: 336 | dicer "0.2.5" 337 | readable-stream "1.1.x" 338 | 339 | bytes@3.0.0: 340 | version "3.0.0" 341 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" 342 | 343 | cache-base@^1.0.1: 344 | version "1.0.1" 345 | resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" 346 | dependencies: 347 | collection-visit "^1.0.0" 348 | component-emitter "^1.2.1" 349 | get-value "^2.0.6" 350 | has-value "^1.0.0" 351 | isobject "^3.0.1" 352 | set-value "^2.0.0" 353 | to-object-path "^0.3.0" 354 | union-value "^1.0.0" 355 | unset-value "^1.0.0" 356 | 357 | camelcase@^4.0.0: 358 | version "4.1.0" 359 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" 360 | 361 | capture-stack-trace@^1.0.0: 362 | version "1.0.1" 363 | resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" 364 | 365 | chalk@^2.0.1: 366 | version "2.4.2" 367 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 368 | dependencies: 369 | ansi-styles "^3.2.1" 370 | escape-string-regexp "^1.0.5" 371 | supports-color "^5.3.0" 372 | 373 | chokidar@^2.1.0: 374 | version "2.1.1" 375 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.1.tgz#adc39ad55a2adf26548bd2afa048f611091f9184" 376 | dependencies: 377 | anymatch "^2.0.0" 378 | async-each "^1.0.1" 379 | braces "^2.3.2" 380 | glob-parent "^3.1.0" 381 | inherits "^2.0.3" 382 | is-binary-path "^1.0.0" 383 | is-glob "^4.0.0" 384 | normalize-path "^3.0.0" 385 | path-is-absolute "^1.0.0" 386 | readdirp "^2.2.1" 387 | upath "^1.1.0" 388 | optionalDependencies: 389 | fsevents "^1.2.7" 390 | 391 | chownr@^1.1.1: 392 | version "1.1.1" 393 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" 394 | 395 | ci-info@^1.5.0: 396 | version "1.6.0" 397 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" 398 | 399 | class-utils@^0.3.5: 400 | version "0.3.6" 401 | resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" 402 | dependencies: 403 | arr-union "^3.1.0" 404 | define-property "^0.2.5" 405 | isobject "^3.0.0" 406 | static-extend "^0.1.1" 407 | 408 | cli-boxes@^1.0.0: 409 | version "1.0.0" 410 | resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" 411 | 412 | code-point-at@^1.0.0: 413 | version "1.1.0" 414 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 415 | 416 | collection-visit@^1.0.0: 417 | version "1.0.0" 418 | resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" 419 | dependencies: 420 | map-visit "^1.0.0" 421 | object-visit "^1.0.0" 422 | 423 | color-convert@^1.9.0: 424 | version "1.9.3" 425 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 426 | dependencies: 427 | color-name "1.1.3" 428 | 429 | color-name@1.1.3: 430 | version "1.1.3" 431 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 432 | 433 | commander@^2.5.0: 434 | version "2.19.0" 435 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" 436 | 437 | component-emitter@^1.2.1: 438 | version "1.2.1" 439 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" 440 | 441 | concat-map@0.0.1: 442 | version "0.0.1" 443 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 444 | 445 | configstore@^3.0.0: 446 | version "3.1.2" 447 | resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" 448 | dependencies: 449 | dot-prop "^4.1.0" 450 | graceful-fs "^4.1.2" 451 | make-dir "^1.0.0" 452 | unique-string "^1.0.0" 453 | write-file-atomic "^2.0.0" 454 | xdg-basedir "^3.0.0" 455 | 456 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 457 | version "1.1.0" 458 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 459 | 460 | content-disposition@0.5.2: 461 | version "0.5.2" 462 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" 463 | 464 | content-type@~1.0.4: 465 | version "1.0.4" 466 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 467 | 468 | cookie-signature@1.0.6: 469 | version "1.0.6" 470 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 471 | 472 | cookie@0.3.1: 473 | version "0.3.1" 474 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" 475 | 476 | copy-descriptor@^0.1.0: 477 | version "0.1.1" 478 | resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" 479 | 480 | core-js@^2.5.3: 481 | version "2.6.4" 482 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.4.tgz#b8897c062c4d769dd30a0ac5c73976c47f92ea0d" 483 | 484 | core-util-is@~1.0.0: 485 | version "1.0.2" 486 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 487 | 488 | cors@^2.8.4: 489 | version "2.8.5" 490 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" 491 | dependencies: 492 | object-assign "^4" 493 | vary "^1" 494 | 495 | create-error-class@^3.0.0: 496 | version "3.0.2" 497 | resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" 498 | dependencies: 499 | capture-stack-trace "^1.0.0" 500 | 501 | cross-spawn@^5.0.1: 502 | version "5.1.0" 503 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" 504 | dependencies: 505 | lru-cache "^4.0.1" 506 | shebang-command "^1.2.0" 507 | which "^1.2.9" 508 | 509 | crypto-random-string@^1.0.0: 510 | version "1.0.0" 511 | resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" 512 | 513 | debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3: 514 | version "2.6.9" 515 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 516 | dependencies: 517 | ms "2.0.0" 518 | 519 | debug@^3.1.0: 520 | version "3.2.6" 521 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" 522 | dependencies: 523 | ms "^2.1.1" 524 | 525 | decode-uri-component@^0.2.0: 526 | version "0.2.0" 527 | resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" 528 | 529 | deep-extend@^0.6.0: 530 | version "0.6.0" 531 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 532 | 533 | define-property@^0.2.5: 534 | version "0.2.5" 535 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" 536 | dependencies: 537 | is-descriptor "^0.1.0" 538 | 539 | define-property@^1.0.0: 540 | version "1.0.0" 541 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" 542 | dependencies: 543 | is-descriptor "^1.0.0" 544 | 545 | define-property@^2.0.2: 546 | version "2.0.2" 547 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" 548 | dependencies: 549 | is-descriptor "^1.0.2" 550 | isobject "^3.0.1" 551 | 552 | delegates@^1.0.0: 553 | version "1.0.0" 554 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 555 | 556 | depd@~1.1.2: 557 | version "1.1.2" 558 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 559 | 560 | deprecated-decorator@^0.1.6: 561 | version "0.1.6" 562 | resolved "https://registry.yarnpkg.com/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz#00966317b7a12fe92f3cc831f7583af329b86c37" 563 | 564 | destroy@~1.0.4: 565 | version "1.0.4" 566 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 567 | 568 | detect-libc@^1.0.2: 569 | version "1.0.3" 570 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" 571 | 572 | dicer@0.2.5: 573 | version "0.2.5" 574 | resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.2.5.tgz#5996c086bb33218c812c090bddc09cd12facb70f" 575 | dependencies: 576 | readable-stream "1.1.x" 577 | streamsearch "0.1.2" 578 | 579 | dot-prop@^4.1.0: 580 | version "4.2.0" 581 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" 582 | dependencies: 583 | is-obj "^1.0.0" 584 | 585 | dotenv@^0.4.0: 586 | version "0.4.0" 587 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-0.4.0.tgz#f6fb351363c2d92207245c737802c9ab5ae1495a" 588 | 589 | duplexer3@^0.1.4: 590 | version "0.1.4" 591 | resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" 592 | 593 | ee-first@1.1.1: 594 | version "1.1.1" 595 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 596 | 597 | encodeurl@~1.0.2: 598 | version "1.0.2" 599 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 600 | 601 | escape-html@~1.0.3: 602 | version "1.0.3" 603 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 604 | 605 | escape-string-regexp@^1.0.5: 606 | version "1.0.5" 607 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 608 | 609 | etag@~1.8.1: 610 | version "1.8.1" 611 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 612 | 613 | eventemitter3@^3.1.0: 614 | version "3.1.0" 615 | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" 616 | 617 | events@1.1.1: 618 | version "1.1.1" 619 | resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" 620 | 621 | execa@^0.7.0: 622 | version "0.7.0" 623 | resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" 624 | dependencies: 625 | cross-spawn "^5.0.1" 626 | get-stream "^3.0.0" 627 | is-stream "^1.1.0" 628 | npm-run-path "^2.0.0" 629 | p-finally "^1.0.0" 630 | signal-exit "^3.0.0" 631 | strip-eof "^1.0.0" 632 | 633 | expand-brackets@^2.1.4: 634 | version "2.1.4" 635 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" 636 | dependencies: 637 | debug "^2.3.3" 638 | define-property "^0.2.5" 639 | extend-shallow "^2.0.1" 640 | posix-character-classes "^0.1.0" 641 | regex-not "^1.0.0" 642 | snapdragon "^0.8.1" 643 | to-regex "^3.0.1" 644 | 645 | express@^4.16.3: 646 | version "4.16.4" 647 | resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e" 648 | dependencies: 649 | accepts "~1.3.5" 650 | array-flatten "1.1.1" 651 | body-parser "1.18.3" 652 | content-disposition "0.5.2" 653 | content-type "~1.0.4" 654 | cookie "0.3.1" 655 | cookie-signature "1.0.6" 656 | debug "2.6.9" 657 | depd "~1.1.2" 658 | encodeurl "~1.0.2" 659 | escape-html "~1.0.3" 660 | etag "~1.8.1" 661 | finalhandler "1.1.1" 662 | fresh "0.5.2" 663 | merge-descriptors "1.0.1" 664 | methods "~1.1.2" 665 | on-finished "~2.3.0" 666 | parseurl "~1.3.2" 667 | path-to-regexp "0.1.7" 668 | proxy-addr "~2.0.4" 669 | qs "6.5.2" 670 | range-parser "~1.2.0" 671 | safe-buffer "5.1.2" 672 | send "0.16.2" 673 | serve-static "1.13.2" 674 | setprototypeof "1.1.0" 675 | statuses "~1.4.0" 676 | type-is "~1.6.16" 677 | utils-merge "1.0.1" 678 | vary "~1.1.2" 679 | 680 | extend-shallow@^2.0.1: 681 | version "2.0.1" 682 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" 683 | dependencies: 684 | is-extendable "^0.1.0" 685 | 686 | extend-shallow@^3.0.0, extend-shallow@^3.0.2: 687 | version "3.0.2" 688 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" 689 | dependencies: 690 | assign-symbols "^1.0.0" 691 | is-extendable "^1.0.1" 692 | 693 | extglob@^2.0.4: 694 | version "2.0.4" 695 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" 696 | dependencies: 697 | array-unique "^0.3.2" 698 | define-property "^1.0.0" 699 | expand-brackets "^2.1.4" 700 | extend-shallow "^2.0.1" 701 | fragment-cache "^0.2.1" 702 | regex-not "^1.0.0" 703 | snapdragon "^0.8.1" 704 | to-regex "^3.0.1" 705 | 706 | fast-json-stable-stringify@^2.0.0: 707 | version "2.0.0" 708 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 709 | 710 | fill-range@^4.0.0: 711 | version "4.0.0" 712 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" 713 | dependencies: 714 | extend-shallow "^2.0.1" 715 | is-number "^3.0.0" 716 | repeat-string "^1.6.1" 717 | to-regex-range "^2.1.0" 718 | 719 | finalhandler@1.1.1: 720 | version "1.1.1" 721 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" 722 | dependencies: 723 | debug "2.6.9" 724 | encodeurl "~1.0.2" 725 | escape-html "~1.0.3" 726 | on-finished "~2.3.0" 727 | parseurl "~1.3.2" 728 | statuses "~1.4.0" 729 | unpipe "~1.0.0" 730 | 731 | for-in@^1.0.2: 732 | version "1.0.2" 733 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 734 | 735 | forwarded@~0.1.2: 736 | version "0.1.2" 737 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" 738 | 739 | fragment-cache@^0.2.1: 740 | version "0.2.1" 741 | resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" 742 | dependencies: 743 | map-cache "^0.2.2" 744 | 745 | fresh@0.5.2: 746 | version "0.5.2" 747 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 748 | 749 | fs-capacitor@^1.0.0: 750 | version "1.0.1" 751 | resolved "https://registry.yarnpkg.com/fs-capacitor/-/fs-capacitor-1.0.1.tgz#ff9dbfa14dfaf4472537720f19c3088ed9278df0" 752 | 753 | fs-minipass@^1.2.5: 754 | version "1.2.5" 755 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" 756 | dependencies: 757 | minipass "^2.2.1" 758 | 759 | fs.realpath@^1.0.0: 760 | version "1.0.0" 761 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 762 | 763 | fsevents@^1.2.7: 764 | version "1.2.7" 765 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.7.tgz#4851b664a3783e52003b3c66eb0eee1074933aa4" 766 | dependencies: 767 | nan "^2.9.2" 768 | node-pre-gyp "^0.10.0" 769 | 770 | gauge@~2.7.3: 771 | version "2.7.4" 772 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 773 | dependencies: 774 | aproba "^1.0.3" 775 | console-control-strings "^1.0.0" 776 | has-unicode "^2.0.0" 777 | object-assign "^4.1.0" 778 | signal-exit "^3.0.0" 779 | string-width "^1.0.1" 780 | strip-ansi "^3.0.1" 781 | wide-align "^1.1.0" 782 | 783 | get-stream@^3.0.0: 784 | version "3.0.0" 785 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" 786 | 787 | get-value@^2.0.3, get-value@^2.0.6: 788 | version "2.0.6" 789 | resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" 790 | 791 | glob-parent@^3.1.0: 792 | version "3.1.0" 793 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" 794 | dependencies: 795 | is-glob "^3.1.0" 796 | path-dirname "^1.0.0" 797 | 798 | glob@^7.1.3: 799 | version "7.1.3" 800 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" 801 | dependencies: 802 | fs.realpath "^1.0.0" 803 | inflight "^1.0.4" 804 | inherits "2" 805 | minimatch "^3.0.4" 806 | once "^1.3.0" 807 | path-is-absolute "^1.0.0" 808 | 809 | global-dirs@^0.1.0: 810 | version "0.1.1" 811 | resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" 812 | dependencies: 813 | ini "^1.3.4" 814 | 815 | got@^6.7.1: 816 | version "6.7.1" 817 | resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" 818 | dependencies: 819 | create-error-class "^3.0.0" 820 | duplexer3 "^0.1.4" 821 | get-stream "^3.0.0" 822 | is-redirect "^1.0.0" 823 | is-retry-allowed "^1.0.0" 824 | is-stream "^1.0.0" 825 | lowercase-keys "^1.0.0" 826 | safe-buffer "^5.0.1" 827 | timed-out "^4.0.0" 828 | unzip-response "^2.0.1" 829 | url-parse-lax "^1.0.0" 830 | 831 | graceful-fs@^4.1.11, graceful-fs@^4.1.2: 832 | version "4.1.15" 833 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" 834 | 835 | graphql-deduplicator@^2.0.1: 836 | version "2.0.2" 837 | resolved "https://registry.yarnpkg.com/graphql-deduplicator/-/graphql-deduplicator-2.0.2.tgz#d8608161cf6be97725e178df0c41f6a1f9f778f3" 838 | 839 | graphql-extensions@^0.0.x, graphql-extensions@~0.0.9: 840 | version "0.0.10" 841 | resolved "https://registry.yarnpkg.com/graphql-extensions/-/graphql-extensions-0.0.10.tgz#34bdb2546d43f6a5bc89ab23c295ec0466c6843d" 842 | dependencies: 843 | core-js "^2.5.3" 844 | source-map-support "^0.5.1" 845 | 846 | graphql-import@^0.7.0: 847 | version "0.7.1" 848 | resolved "https://registry.yarnpkg.com/graphql-import/-/graphql-import-0.7.1.tgz#4add8d91a5f752d764b0a4a7a461fcd93136f223" 849 | dependencies: 850 | lodash "^4.17.4" 851 | resolve-from "^4.0.0" 852 | 853 | graphql-middleware@3.0.2: 854 | version "3.0.2" 855 | resolved "https://registry.yarnpkg.com/graphql-middleware/-/graphql-middleware-3.0.2.tgz#c8cdb67615eec02aec237b455e679f5fc973ddc4" 856 | dependencies: 857 | graphql-tools "^4.0.4" 858 | 859 | graphql-playground-html@1.6.12: 860 | version "1.6.12" 861 | resolved "https://registry.yarnpkg.com/graphql-playground-html/-/graphql-playground-html-1.6.12.tgz#8b3b34ab6013e2c877f0ceaae478fafc8ca91b85" 862 | 863 | graphql-playground-middleware-express@1.7.11: 864 | version "1.7.11" 865 | resolved "https://registry.yarnpkg.com/graphql-playground-middleware-express/-/graphql-playground-middleware-express-1.7.11.tgz#bbffd784a37133bfa7165bdd8f429081dbf4bcf6" 866 | dependencies: 867 | graphql-playground-html "1.6.12" 868 | 869 | graphql-playground-middleware-lambda@1.7.12: 870 | version "1.7.12" 871 | resolved "https://registry.yarnpkg.com/graphql-playground-middleware-lambda/-/graphql-playground-middleware-lambda-1.7.12.tgz#1b06440a288dbcd53f935b43e5b9ca2738a06305" 872 | dependencies: 873 | graphql-playground-html "1.6.12" 874 | 875 | graphql-subscriptions@^0.5.8: 876 | version "0.5.8" 877 | resolved "https://registry.yarnpkg.com/graphql-subscriptions/-/graphql-subscriptions-0.5.8.tgz#13a6143c546bce390404657dc73ca501def30aa7" 878 | dependencies: 879 | iterall "^1.2.1" 880 | 881 | graphql-tools@^4.0.0, graphql-tools@^4.0.4: 882 | version "4.0.4" 883 | resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-4.0.4.tgz#ca08a63454221fdde825fe45fbd315eb2a6d566b" 884 | dependencies: 885 | apollo-link "^1.2.3" 886 | apollo-utilities "^1.0.1" 887 | deprecated-decorator "^0.1.6" 888 | iterall "^1.1.3" 889 | uuid "^3.1.0" 890 | 891 | graphql-yoga@^1.17.4: 892 | version "1.17.4" 893 | resolved "https://registry.yarnpkg.com/graphql-yoga/-/graphql-yoga-1.17.4.tgz#6d325a6270399edf0776fb5f60a2e9e19512e63c" 894 | dependencies: 895 | "@types/cors" "^2.8.4" 896 | "@types/express" "^4.11.1" 897 | "@types/graphql" "^14.0.0" 898 | "@types/graphql-deduplicator" "^2.0.0" 899 | "@types/zen-observable" "^0.5.3" 900 | apollo-server-express "^1.3.6" 901 | apollo-server-lambda "1.3.6" 902 | apollo-upload-server "^7.0.0" 903 | aws-lambda "^0.1.2" 904 | body-parser-graphql "1.1.0" 905 | cors "^2.8.4" 906 | express "^4.16.3" 907 | graphql "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0" 908 | graphql-deduplicator "^2.0.1" 909 | graphql-import "^0.7.0" 910 | graphql-middleware "3.0.2" 911 | graphql-playground-middleware-express "1.7.11" 912 | graphql-playground-middleware-lambda "1.7.12" 913 | graphql-subscriptions "^0.5.8" 914 | graphql-tools "^4.0.0" 915 | subscriptions-transport-ws "^0.9.8" 916 | 917 | "graphql@^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0": 918 | version "14.1.1" 919 | resolved "https://registry.yarnpkg.com/graphql/-/graphql-14.1.1.tgz#d5d77df4b19ef41538d7215d1e7a28834619fac0" 920 | dependencies: 921 | iterall "^1.2.2" 922 | 923 | has-flag@^3.0.0: 924 | version "3.0.0" 925 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 926 | 927 | has-unicode@^2.0.0: 928 | version "2.0.1" 929 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 930 | 931 | has-value@^0.3.1: 932 | version "0.3.1" 933 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" 934 | dependencies: 935 | get-value "^2.0.3" 936 | has-values "^0.1.4" 937 | isobject "^2.0.0" 938 | 939 | has-value@^1.0.0: 940 | version "1.0.0" 941 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" 942 | dependencies: 943 | get-value "^2.0.6" 944 | has-values "^1.0.0" 945 | isobject "^3.0.0" 946 | 947 | has-values@^0.1.4: 948 | version "0.1.4" 949 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" 950 | 951 | has-values@^1.0.0: 952 | version "1.0.0" 953 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" 954 | dependencies: 955 | is-number "^3.0.0" 956 | kind-of "^4.0.0" 957 | 958 | http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: 959 | version "1.6.3" 960 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" 961 | dependencies: 962 | depd "~1.1.2" 963 | inherits "2.0.3" 964 | setprototypeof "1.1.0" 965 | statuses ">= 1.4.0 < 2" 966 | 967 | http-errors@^1.7.0: 968 | version "1.7.1" 969 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.1.tgz#6a4ffe5d35188e1c39f872534690585852e1f027" 970 | dependencies: 971 | depd "~1.1.2" 972 | inherits "2.0.3" 973 | setprototypeof "1.1.0" 974 | statuses ">= 1.5.0 < 2" 975 | toidentifier "1.0.0" 976 | 977 | iconv-lite@0.4.23: 978 | version "0.4.23" 979 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" 980 | dependencies: 981 | safer-buffer ">= 2.1.2 < 3" 982 | 983 | iconv-lite@^0.4.4: 984 | version "0.4.24" 985 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 986 | dependencies: 987 | safer-buffer ">= 2.1.2 < 3" 988 | 989 | ieee754@1.1.8: 990 | version "1.1.8" 991 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" 992 | 993 | ieee754@^1.1.4: 994 | version "1.1.12" 995 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" 996 | 997 | ignore-by-default@^1.0.1: 998 | version "1.0.1" 999 | resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" 1000 | 1001 | ignore-walk@^3.0.1: 1002 | version "3.0.1" 1003 | resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" 1004 | dependencies: 1005 | minimatch "^3.0.4" 1006 | 1007 | import-lazy@^2.1.0: 1008 | version "2.1.0" 1009 | resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" 1010 | 1011 | imurmurhash@^0.1.4: 1012 | version "0.1.4" 1013 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1014 | 1015 | inflight@^1.0.4: 1016 | version "1.0.6" 1017 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1018 | dependencies: 1019 | once "^1.3.0" 1020 | wrappy "1" 1021 | 1022 | inherits@2, inherits@2.0.3, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: 1023 | version "2.0.3" 1024 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1025 | 1026 | ini@^1.3.4, ini@~1.3.0: 1027 | version "1.3.5" 1028 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" 1029 | 1030 | ipaddr.js@1.8.0: 1031 | version "1.8.0" 1032 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" 1033 | 1034 | is-accessor-descriptor@^0.1.6: 1035 | version "0.1.6" 1036 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" 1037 | dependencies: 1038 | kind-of "^3.0.2" 1039 | 1040 | is-accessor-descriptor@^1.0.0: 1041 | version "1.0.0" 1042 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" 1043 | dependencies: 1044 | kind-of "^6.0.0" 1045 | 1046 | is-binary-path@^1.0.0: 1047 | version "1.0.1" 1048 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" 1049 | dependencies: 1050 | binary-extensions "^1.0.0" 1051 | 1052 | is-buffer@^1.1.5: 1053 | version "1.1.6" 1054 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 1055 | 1056 | is-ci@^1.0.10: 1057 | version "1.2.1" 1058 | resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" 1059 | dependencies: 1060 | ci-info "^1.5.0" 1061 | 1062 | is-data-descriptor@^0.1.4: 1063 | version "0.1.4" 1064 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" 1065 | dependencies: 1066 | kind-of "^3.0.2" 1067 | 1068 | is-data-descriptor@^1.0.0: 1069 | version "1.0.0" 1070 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" 1071 | dependencies: 1072 | kind-of "^6.0.0" 1073 | 1074 | is-descriptor@^0.1.0: 1075 | version "0.1.6" 1076 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" 1077 | dependencies: 1078 | is-accessor-descriptor "^0.1.6" 1079 | is-data-descriptor "^0.1.4" 1080 | kind-of "^5.0.0" 1081 | 1082 | is-descriptor@^1.0.0, is-descriptor@^1.0.2: 1083 | version "1.0.2" 1084 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" 1085 | dependencies: 1086 | is-accessor-descriptor "^1.0.0" 1087 | is-data-descriptor "^1.0.0" 1088 | kind-of "^6.0.2" 1089 | 1090 | is-extendable@^0.1.0, is-extendable@^0.1.1: 1091 | version "0.1.1" 1092 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 1093 | 1094 | is-extendable@^1.0.1: 1095 | version "1.0.1" 1096 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" 1097 | dependencies: 1098 | is-plain-object "^2.0.4" 1099 | 1100 | is-extglob@^2.1.0, is-extglob@^2.1.1: 1101 | version "2.1.1" 1102 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1103 | 1104 | is-fullwidth-code-point@^1.0.0: 1105 | version "1.0.0" 1106 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 1107 | dependencies: 1108 | number-is-nan "^1.0.0" 1109 | 1110 | is-fullwidth-code-point@^2.0.0: 1111 | version "2.0.0" 1112 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1113 | 1114 | is-glob@^3.1.0: 1115 | version "3.1.0" 1116 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" 1117 | dependencies: 1118 | is-extglob "^2.1.0" 1119 | 1120 | is-glob@^4.0.0: 1121 | version "4.0.0" 1122 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" 1123 | dependencies: 1124 | is-extglob "^2.1.1" 1125 | 1126 | is-installed-globally@^0.1.0: 1127 | version "0.1.0" 1128 | resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" 1129 | dependencies: 1130 | global-dirs "^0.1.0" 1131 | is-path-inside "^1.0.0" 1132 | 1133 | is-npm@^1.0.0: 1134 | version "1.0.0" 1135 | resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" 1136 | 1137 | is-number@^3.0.0: 1138 | version "3.0.0" 1139 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" 1140 | dependencies: 1141 | kind-of "^3.0.2" 1142 | 1143 | is-obj@^1.0.0: 1144 | version "1.0.1" 1145 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" 1146 | 1147 | is-path-inside@^1.0.0: 1148 | version "1.0.1" 1149 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" 1150 | dependencies: 1151 | path-is-inside "^1.0.1" 1152 | 1153 | is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: 1154 | version "2.0.4" 1155 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" 1156 | dependencies: 1157 | isobject "^3.0.1" 1158 | 1159 | is-redirect@^1.0.0: 1160 | version "1.0.0" 1161 | resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" 1162 | 1163 | is-retry-allowed@^1.0.0: 1164 | version "1.1.0" 1165 | resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" 1166 | 1167 | is-stream@^1.0.0, is-stream@^1.1.0: 1168 | version "1.1.0" 1169 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 1170 | 1171 | is-windows@^1.0.2: 1172 | version "1.0.2" 1173 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" 1174 | 1175 | isarray@0.0.1: 1176 | version "0.0.1" 1177 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 1178 | 1179 | isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: 1180 | version "1.0.0" 1181 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1182 | 1183 | isexe@^2.0.0: 1184 | version "2.0.0" 1185 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1186 | 1187 | isobject@^2.0.0: 1188 | version "2.1.0" 1189 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 1190 | dependencies: 1191 | isarray "1.0.0" 1192 | 1193 | isobject@^3.0.0, isobject@^3.0.1: 1194 | version "3.0.1" 1195 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" 1196 | 1197 | iterall@^1.1.3, iterall@^1.2.1, iterall@^1.2.2: 1198 | version "1.2.2" 1199 | resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7" 1200 | 1201 | jmespath@0.15.0: 1202 | version "0.15.0" 1203 | resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" 1204 | 1205 | kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: 1206 | version "3.2.2" 1207 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" 1208 | dependencies: 1209 | is-buffer "^1.1.5" 1210 | 1211 | kind-of@^4.0.0: 1212 | version "4.0.0" 1213 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" 1214 | dependencies: 1215 | is-buffer "^1.1.5" 1216 | 1217 | kind-of@^5.0.0: 1218 | version "5.1.0" 1219 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" 1220 | 1221 | kind-of@^6.0.0, kind-of@^6.0.2: 1222 | version "6.0.2" 1223 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" 1224 | 1225 | latest-version@^3.0.0: 1226 | version "3.1.0" 1227 | resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" 1228 | dependencies: 1229 | package-json "^4.0.0" 1230 | 1231 | lodash@^4.17.4: 1232 | version "4.17.11" 1233 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" 1234 | 1235 | lowercase-keys@^1.0.0: 1236 | version "1.0.1" 1237 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" 1238 | 1239 | lru-cache@^4.0.1: 1240 | version "4.1.5" 1241 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" 1242 | dependencies: 1243 | pseudomap "^1.0.2" 1244 | yallist "^2.1.2" 1245 | 1246 | make-dir@^1.0.0: 1247 | version "1.3.0" 1248 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" 1249 | dependencies: 1250 | pify "^3.0.0" 1251 | 1252 | map-cache@^0.2.2: 1253 | version "0.2.2" 1254 | resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" 1255 | 1256 | map-visit@^1.0.0: 1257 | version "1.0.0" 1258 | resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" 1259 | dependencies: 1260 | object-visit "^1.0.0" 1261 | 1262 | media-typer@0.3.0: 1263 | version "0.3.0" 1264 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 1265 | 1266 | merge-descriptors@1.0.1: 1267 | version "1.0.1" 1268 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 1269 | 1270 | methods@~1.1.2: 1271 | version "1.1.2" 1272 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 1273 | 1274 | micromatch@^3.1.10, micromatch@^3.1.4: 1275 | version "3.1.10" 1276 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" 1277 | dependencies: 1278 | arr-diff "^4.0.0" 1279 | array-unique "^0.3.2" 1280 | braces "^2.3.1" 1281 | define-property "^2.0.2" 1282 | extend-shallow "^3.0.2" 1283 | extglob "^2.0.4" 1284 | fragment-cache "^0.2.1" 1285 | kind-of "^6.0.2" 1286 | nanomatch "^1.2.9" 1287 | object.pick "^1.3.0" 1288 | regex-not "^1.0.0" 1289 | snapdragon "^0.8.1" 1290 | to-regex "^3.0.2" 1291 | 1292 | mime-db@~1.37.0: 1293 | version "1.37.0" 1294 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8" 1295 | 1296 | mime-types@~2.1.18: 1297 | version "2.1.21" 1298 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96" 1299 | dependencies: 1300 | mime-db "~1.37.0" 1301 | 1302 | mime@1.4.1: 1303 | version "1.4.1" 1304 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" 1305 | 1306 | minimatch@^3.0.4: 1307 | version "3.0.4" 1308 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1309 | dependencies: 1310 | brace-expansion "^1.1.7" 1311 | 1312 | minimist@0.0.8: 1313 | version "0.0.8" 1314 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1315 | 1316 | minimist@^1.2.0: 1317 | version "1.2.0" 1318 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 1319 | 1320 | minipass@^2.2.1, minipass@^2.3.4: 1321 | version "2.3.5" 1322 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" 1323 | dependencies: 1324 | safe-buffer "^5.1.2" 1325 | yallist "^3.0.0" 1326 | 1327 | minizlib@^1.1.1: 1328 | version "1.2.1" 1329 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" 1330 | dependencies: 1331 | minipass "^2.2.1" 1332 | 1333 | mixin-deep@^1.2.0: 1334 | version "1.3.1" 1335 | resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" 1336 | dependencies: 1337 | for-in "^1.0.2" 1338 | is-extendable "^1.0.1" 1339 | 1340 | mkdirp@^0.5.0, mkdirp@^0.5.1: 1341 | version "0.5.1" 1342 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1343 | dependencies: 1344 | minimist "0.0.8" 1345 | 1346 | ms@2.0.0: 1347 | version "2.0.0" 1348 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1349 | 1350 | ms@^2.1.1: 1351 | version "2.1.1" 1352 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 1353 | 1354 | nan@^2.9.2: 1355 | version "2.12.1" 1356 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.12.1.tgz#7b1aa193e9aa86057e3c7bbd0ac448e770925552" 1357 | 1358 | nanomatch@^1.2.9: 1359 | version "1.2.13" 1360 | resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" 1361 | dependencies: 1362 | arr-diff "^4.0.0" 1363 | array-unique "^0.3.2" 1364 | define-property "^2.0.2" 1365 | extend-shallow "^3.0.2" 1366 | fragment-cache "^0.2.1" 1367 | is-windows "^1.0.2" 1368 | kind-of "^6.0.2" 1369 | object.pick "^1.3.0" 1370 | regex-not "^1.0.0" 1371 | snapdragon "^0.8.1" 1372 | to-regex "^3.0.1" 1373 | 1374 | needle@^2.2.1: 1375 | version "2.2.4" 1376 | resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" 1377 | dependencies: 1378 | debug "^2.1.2" 1379 | iconv-lite "^0.4.4" 1380 | sax "^1.2.4" 1381 | 1382 | negotiator@0.6.1: 1383 | version "0.6.1" 1384 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" 1385 | 1386 | node-pre-gyp@^0.10.0: 1387 | version "0.10.3" 1388 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" 1389 | dependencies: 1390 | detect-libc "^1.0.2" 1391 | mkdirp "^0.5.1" 1392 | needle "^2.2.1" 1393 | nopt "^4.0.1" 1394 | npm-packlist "^1.1.6" 1395 | npmlog "^4.0.2" 1396 | rc "^1.2.7" 1397 | rimraf "^2.6.1" 1398 | semver "^5.3.0" 1399 | tar "^4" 1400 | 1401 | nodemon@^1.18.10: 1402 | version "1.18.10" 1403 | resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.18.10.tgz#3ba63f64eb4c283cf3e4f75f30817e9d4f393afe" 1404 | dependencies: 1405 | chokidar "^2.1.0" 1406 | debug "^3.1.0" 1407 | ignore-by-default "^1.0.1" 1408 | minimatch "^3.0.4" 1409 | pstree.remy "^1.1.6" 1410 | semver "^5.5.0" 1411 | supports-color "^5.2.0" 1412 | touch "^3.1.0" 1413 | undefsafe "^2.0.2" 1414 | update-notifier "^2.5.0" 1415 | 1416 | nopt@^4.0.1: 1417 | version "4.0.1" 1418 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" 1419 | dependencies: 1420 | abbrev "1" 1421 | osenv "^0.1.4" 1422 | 1423 | nopt@~1.0.10: 1424 | version "1.0.10" 1425 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" 1426 | dependencies: 1427 | abbrev "1" 1428 | 1429 | normalize-path@^2.1.1: 1430 | version "2.1.1" 1431 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" 1432 | dependencies: 1433 | remove-trailing-separator "^1.0.1" 1434 | 1435 | normalize-path@^3.0.0: 1436 | version "3.0.0" 1437 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1438 | 1439 | npm-bundled@^1.0.1: 1440 | version "1.0.6" 1441 | resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" 1442 | 1443 | npm-packlist@^1.1.6: 1444 | version "1.3.0" 1445 | resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.3.0.tgz#7f01e8e44408341379ca98cfd756e7b29bd2626c" 1446 | dependencies: 1447 | ignore-walk "^3.0.1" 1448 | npm-bundled "^1.0.1" 1449 | 1450 | npm-run-path@^2.0.0: 1451 | version "2.0.2" 1452 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 1453 | dependencies: 1454 | path-key "^2.0.0" 1455 | 1456 | npmlog@^4.0.2: 1457 | version "4.1.2" 1458 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" 1459 | dependencies: 1460 | are-we-there-yet "~1.1.2" 1461 | console-control-strings "~1.1.0" 1462 | gauge "~2.7.3" 1463 | set-blocking "~2.0.0" 1464 | 1465 | number-is-nan@^1.0.0: 1466 | version "1.0.1" 1467 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1468 | 1469 | object-assign@^4, object-assign@^4.1.0: 1470 | version "4.1.1" 1471 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1472 | 1473 | object-copy@^0.1.0: 1474 | version "0.1.0" 1475 | resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" 1476 | dependencies: 1477 | copy-descriptor "^0.1.0" 1478 | define-property "^0.2.5" 1479 | kind-of "^3.0.3" 1480 | 1481 | object-path@^0.11.4: 1482 | version "0.11.4" 1483 | resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.4.tgz#370ae752fbf37de3ea70a861c23bba8915691949" 1484 | 1485 | object-visit@^1.0.0: 1486 | version "1.0.1" 1487 | resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" 1488 | dependencies: 1489 | isobject "^3.0.0" 1490 | 1491 | object.pick@^1.3.0: 1492 | version "1.3.0" 1493 | resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" 1494 | dependencies: 1495 | isobject "^3.0.1" 1496 | 1497 | on-finished@~2.3.0: 1498 | version "2.3.0" 1499 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 1500 | dependencies: 1501 | ee-first "1.1.1" 1502 | 1503 | once@^1.3.0: 1504 | version "1.4.0" 1505 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1506 | dependencies: 1507 | wrappy "1" 1508 | 1509 | os-homedir@^1.0.0: 1510 | version "1.0.2" 1511 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 1512 | 1513 | os-tmpdir@^1.0.0: 1514 | version "1.0.2" 1515 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1516 | 1517 | osenv@^0.1.4: 1518 | version "0.1.5" 1519 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" 1520 | dependencies: 1521 | os-homedir "^1.0.0" 1522 | os-tmpdir "^1.0.0" 1523 | 1524 | p-finally@^1.0.0: 1525 | version "1.0.0" 1526 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 1527 | 1528 | package-json@^4.0.0: 1529 | version "4.0.1" 1530 | resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" 1531 | dependencies: 1532 | got "^6.7.1" 1533 | registry-auth-token "^3.0.1" 1534 | registry-url "^3.0.3" 1535 | semver "^5.1.0" 1536 | 1537 | parseurl@~1.3.2: 1538 | version "1.3.2" 1539 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" 1540 | 1541 | pascalcase@^0.1.1: 1542 | version "0.1.1" 1543 | resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" 1544 | 1545 | path-dirname@^1.0.0: 1546 | version "1.0.2" 1547 | resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" 1548 | 1549 | path-is-absolute@^1.0.0: 1550 | version "1.0.1" 1551 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1552 | 1553 | path-is-inside@^1.0.1: 1554 | version "1.0.2" 1555 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" 1556 | 1557 | path-key@^2.0.0: 1558 | version "2.0.1" 1559 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 1560 | 1561 | path-to-regexp@0.1.7: 1562 | version "0.1.7" 1563 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 1564 | 1565 | pify@^3.0.0: 1566 | version "3.0.0" 1567 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" 1568 | 1569 | posix-character-classes@^0.1.0: 1570 | version "0.1.1" 1571 | resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" 1572 | 1573 | prepend-http@^1.0.1: 1574 | version "1.0.4" 1575 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" 1576 | 1577 | process-nextick-args@~2.0.0: 1578 | version "2.0.0" 1579 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" 1580 | 1581 | proxy-addr@~2.0.4: 1582 | version "2.0.4" 1583 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" 1584 | dependencies: 1585 | forwarded "~0.1.2" 1586 | ipaddr.js "1.8.0" 1587 | 1588 | pseudomap@^1.0.2: 1589 | version "1.0.2" 1590 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 1591 | 1592 | pstree.remy@^1.1.6: 1593 | version "1.1.6" 1594 | resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.6.tgz#73a55aad9e2d95814927131fbf4dc1b62d259f47" 1595 | 1596 | punycode@1.3.2: 1597 | version "1.3.2" 1598 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" 1599 | 1600 | qs@6.5.2: 1601 | version "6.5.2" 1602 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" 1603 | 1604 | querystring@0.2.0: 1605 | version "0.2.0" 1606 | resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" 1607 | 1608 | range-parser@~1.2.0: 1609 | version "1.2.0" 1610 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" 1611 | 1612 | raw-body@2.3.3: 1613 | version "2.3.3" 1614 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" 1615 | dependencies: 1616 | bytes "3.0.0" 1617 | http-errors "1.6.3" 1618 | iconv-lite "0.4.23" 1619 | unpipe "1.0.0" 1620 | 1621 | rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: 1622 | version "1.2.8" 1623 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" 1624 | dependencies: 1625 | deep-extend "^0.6.0" 1626 | ini "~1.3.0" 1627 | minimist "^1.2.0" 1628 | strip-json-comments "~2.0.1" 1629 | 1630 | readable-stream@1.1.x: 1631 | version "1.1.14" 1632 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" 1633 | dependencies: 1634 | core-util-is "~1.0.0" 1635 | inherits "~2.0.1" 1636 | isarray "0.0.1" 1637 | string_decoder "~0.10.x" 1638 | 1639 | readable-stream@^2.0.2, readable-stream@^2.0.6: 1640 | version "2.3.6" 1641 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 1642 | dependencies: 1643 | core-util-is "~1.0.0" 1644 | inherits "~2.0.3" 1645 | isarray "~1.0.0" 1646 | process-nextick-args "~2.0.0" 1647 | safe-buffer "~5.1.1" 1648 | string_decoder "~1.1.1" 1649 | util-deprecate "~1.0.1" 1650 | 1651 | readdirp@^2.2.1: 1652 | version "2.2.1" 1653 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" 1654 | dependencies: 1655 | graceful-fs "^4.1.11" 1656 | micromatch "^3.1.10" 1657 | readable-stream "^2.0.2" 1658 | 1659 | regex-not@^1.0.0, regex-not@^1.0.2: 1660 | version "1.0.2" 1661 | resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" 1662 | dependencies: 1663 | extend-shallow "^3.0.2" 1664 | safe-regex "^1.1.0" 1665 | 1666 | registry-auth-token@^3.0.1: 1667 | version "3.3.2" 1668 | resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" 1669 | dependencies: 1670 | rc "^1.1.6" 1671 | safe-buffer "^5.0.1" 1672 | 1673 | registry-url@^3.0.3: 1674 | version "3.1.0" 1675 | resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" 1676 | dependencies: 1677 | rc "^1.0.1" 1678 | 1679 | remove-trailing-separator@^1.0.1: 1680 | version "1.1.0" 1681 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" 1682 | 1683 | repeat-element@^1.1.2: 1684 | version "1.1.3" 1685 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" 1686 | 1687 | repeat-string@^1.6.1: 1688 | version "1.6.1" 1689 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 1690 | 1691 | resolve-from@^4.0.0: 1692 | version "4.0.0" 1693 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1694 | 1695 | resolve-url@^0.2.1: 1696 | version "0.2.1" 1697 | resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" 1698 | 1699 | ret@~0.1.10: 1700 | version "0.1.15" 1701 | resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" 1702 | 1703 | rimraf@^2.6.1: 1704 | version "2.6.3" 1705 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" 1706 | dependencies: 1707 | glob "^7.1.3" 1708 | 1709 | safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 1710 | version "5.1.2" 1711 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1712 | 1713 | safe-regex@^1.1.0: 1714 | version "1.1.0" 1715 | resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" 1716 | dependencies: 1717 | ret "~0.1.10" 1718 | 1719 | "safer-buffer@>= 2.1.2 < 3": 1720 | version "2.1.2" 1721 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1722 | 1723 | sax@1.2.1: 1724 | version "1.2.1" 1725 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" 1726 | 1727 | sax@>=0.6.0, sax@^1.2.4: 1728 | version "1.2.4" 1729 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" 1730 | 1731 | semver-diff@^2.0.0: 1732 | version "2.1.0" 1733 | resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" 1734 | dependencies: 1735 | semver "^5.0.3" 1736 | 1737 | semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.5.0: 1738 | version "5.6.0" 1739 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" 1740 | 1741 | send@0.16.2: 1742 | version "0.16.2" 1743 | resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" 1744 | dependencies: 1745 | debug "2.6.9" 1746 | depd "~1.1.2" 1747 | destroy "~1.0.4" 1748 | encodeurl "~1.0.2" 1749 | escape-html "~1.0.3" 1750 | etag "~1.8.1" 1751 | fresh "0.5.2" 1752 | http-errors "~1.6.2" 1753 | mime "1.4.1" 1754 | ms "2.0.0" 1755 | on-finished "~2.3.0" 1756 | range-parser "~1.2.0" 1757 | statuses "~1.4.0" 1758 | 1759 | serve-static@1.13.2: 1760 | version "1.13.2" 1761 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" 1762 | dependencies: 1763 | encodeurl "~1.0.2" 1764 | escape-html "~1.0.3" 1765 | parseurl "~1.3.2" 1766 | send "0.16.2" 1767 | 1768 | set-blocking@~2.0.0: 1769 | version "2.0.0" 1770 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1771 | 1772 | set-value@^0.4.3: 1773 | version "0.4.3" 1774 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" 1775 | dependencies: 1776 | extend-shallow "^2.0.1" 1777 | is-extendable "^0.1.1" 1778 | is-plain-object "^2.0.1" 1779 | to-object-path "^0.3.0" 1780 | 1781 | set-value@^2.0.0: 1782 | version "2.0.0" 1783 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" 1784 | dependencies: 1785 | extend-shallow "^2.0.1" 1786 | is-extendable "^0.1.1" 1787 | is-plain-object "^2.0.3" 1788 | split-string "^3.0.1" 1789 | 1790 | setprototypeof@1.1.0: 1791 | version "1.1.0" 1792 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" 1793 | 1794 | shebang-command@^1.2.0: 1795 | version "1.2.0" 1796 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 1797 | dependencies: 1798 | shebang-regex "^1.0.0" 1799 | 1800 | shebang-regex@^1.0.0: 1801 | version "1.0.0" 1802 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 1803 | 1804 | signal-exit@^3.0.0, signal-exit@^3.0.2: 1805 | version "3.0.2" 1806 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 1807 | 1808 | snapdragon-node@^2.0.1: 1809 | version "2.1.1" 1810 | resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" 1811 | dependencies: 1812 | define-property "^1.0.0" 1813 | isobject "^3.0.0" 1814 | snapdragon-util "^3.0.1" 1815 | 1816 | snapdragon-util@^3.0.1: 1817 | version "3.0.1" 1818 | resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" 1819 | dependencies: 1820 | kind-of "^3.2.0" 1821 | 1822 | snapdragon@^0.8.1: 1823 | version "0.8.2" 1824 | resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" 1825 | dependencies: 1826 | base "^0.11.1" 1827 | debug "^2.2.0" 1828 | define-property "^0.2.5" 1829 | extend-shallow "^2.0.1" 1830 | map-cache "^0.2.2" 1831 | source-map "^0.5.6" 1832 | source-map-resolve "^0.5.0" 1833 | use "^3.1.0" 1834 | 1835 | source-map-resolve@^0.5.0: 1836 | version "0.5.2" 1837 | resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" 1838 | dependencies: 1839 | atob "^2.1.1" 1840 | decode-uri-component "^0.2.0" 1841 | resolve-url "^0.2.1" 1842 | source-map-url "^0.4.0" 1843 | urix "^0.1.0" 1844 | 1845 | source-map-support@^0.5.1: 1846 | version "0.5.10" 1847 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.10.tgz#2214080bc9d51832511ee2bab96e3c2f9353120c" 1848 | dependencies: 1849 | buffer-from "^1.0.0" 1850 | source-map "^0.6.0" 1851 | 1852 | source-map-url@^0.4.0: 1853 | version "0.4.0" 1854 | resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" 1855 | 1856 | source-map@^0.5.6: 1857 | version "0.5.7" 1858 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 1859 | 1860 | source-map@^0.6.0: 1861 | version "0.6.1" 1862 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1863 | 1864 | split-string@^3.0.1, split-string@^3.0.2: 1865 | version "3.1.0" 1866 | resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" 1867 | dependencies: 1868 | extend-shallow "^3.0.0" 1869 | 1870 | static-extend@^0.1.1: 1871 | version "0.1.2" 1872 | resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" 1873 | dependencies: 1874 | define-property "^0.2.5" 1875 | object-copy "^0.1.0" 1876 | 1877 | "statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2": 1878 | version "1.5.0" 1879 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 1880 | 1881 | statuses@~1.4.0: 1882 | version "1.4.0" 1883 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" 1884 | 1885 | streamsearch@0.1.2: 1886 | version "0.1.2" 1887 | resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" 1888 | 1889 | string-width@^1.0.1: 1890 | version "1.0.2" 1891 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 1892 | dependencies: 1893 | code-point-at "^1.0.0" 1894 | is-fullwidth-code-point "^1.0.0" 1895 | strip-ansi "^3.0.0" 1896 | 1897 | "string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: 1898 | version "2.1.1" 1899 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 1900 | dependencies: 1901 | is-fullwidth-code-point "^2.0.0" 1902 | strip-ansi "^4.0.0" 1903 | 1904 | string_decoder@~0.10.x: 1905 | version "0.10.31" 1906 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 1907 | 1908 | string_decoder@~1.1.1: 1909 | version "1.1.1" 1910 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 1911 | dependencies: 1912 | safe-buffer "~5.1.0" 1913 | 1914 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 1915 | version "3.0.1" 1916 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1917 | dependencies: 1918 | ansi-regex "^2.0.0" 1919 | 1920 | strip-ansi@^4.0.0: 1921 | version "4.0.0" 1922 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 1923 | dependencies: 1924 | ansi-regex "^3.0.0" 1925 | 1926 | strip-eof@^1.0.0: 1927 | version "1.0.0" 1928 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 1929 | 1930 | strip-json-comments@~2.0.1: 1931 | version "2.0.1" 1932 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1933 | 1934 | subscriptions-transport-ws@^0.9.8: 1935 | version "0.9.15" 1936 | resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.15.tgz#68a8b7ba0037d8c489fb2f5a102d1494db297d0d" 1937 | dependencies: 1938 | backo2 "^1.0.2" 1939 | eventemitter3 "^3.1.0" 1940 | iterall "^1.2.1" 1941 | symbol-observable "^1.0.4" 1942 | ws "^5.2.0" 1943 | 1944 | supports-color@^5.2.0, supports-color@^5.3.0: 1945 | version "5.5.0" 1946 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1947 | dependencies: 1948 | has-flag "^3.0.0" 1949 | 1950 | symbol-observable@^1.0.4: 1951 | version "1.2.0" 1952 | resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" 1953 | 1954 | tar@^4: 1955 | version "4.4.8" 1956 | resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" 1957 | dependencies: 1958 | chownr "^1.1.1" 1959 | fs-minipass "^1.2.5" 1960 | minipass "^2.3.4" 1961 | minizlib "^1.1.1" 1962 | mkdirp "^0.5.0" 1963 | safe-buffer "^5.1.2" 1964 | yallist "^3.0.2" 1965 | 1966 | term-size@^1.2.0: 1967 | version "1.2.0" 1968 | resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" 1969 | dependencies: 1970 | execa "^0.7.0" 1971 | 1972 | timed-out@^4.0.0: 1973 | version "4.0.1" 1974 | resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" 1975 | 1976 | to-object-path@^0.3.0: 1977 | version "0.3.0" 1978 | resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" 1979 | dependencies: 1980 | kind-of "^3.0.2" 1981 | 1982 | to-regex-range@^2.1.0: 1983 | version "2.1.1" 1984 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" 1985 | dependencies: 1986 | is-number "^3.0.0" 1987 | repeat-string "^1.6.1" 1988 | 1989 | to-regex@^3.0.1, to-regex@^3.0.2: 1990 | version "3.0.2" 1991 | resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" 1992 | dependencies: 1993 | define-property "^2.0.2" 1994 | extend-shallow "^3.0.2" 1995 | regex-not "^1.0.2" 1996 | safe-regex "^1.1.0" 1997 | 1998 | toidentifier@1.0.0: 1999 | version "1.0.0" 2000 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" 2001 | 2002 | touch@^3.1.0: 2003 | version "3.1.0" 2004 | resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" 2005 | dependencies: 2006 | nopt "~1.0.10" 2007 | 2008 | tslib@^1.9.3: 2009 | version "1.9.3" 2010 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" 2011 | 2012 | type-is@~1.6.16: 2013 | version "1.6.16" 2014 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" 2015 | dependencies: 2016 | media-typer "0.3.0" 2017 | mime-types "~2.1.18" 2018 | 2019 | undefsafe@^2.0.2: 2020 | version "2.0.2" 2021 | resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.2.tgz#225f6b9e0337663e0d8e7cfd686fc2836ccace76" 2022 | dependencies: 2023 | debug "^2.2.0" 2024 | 2025 | union-value@^1.0.0: 2026 | version "1.0.0" 2027 | resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" 2028 | dependencies: 2029 | arr-union "^3.1.0" 2030 | get-value "^2.0.6" 2031 | is-extendable "^0.1.1" 2032 | set-value "^0.4.3" 2033 | 2034 | unique-string@^1.0.0: 2035 | version "1.0.0" 2036 | resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" 2037 | dependencies: 2038 | crypto-random-string "^1.0.0" 2039 | 2040 | unpipe@1.0.0, unpipe@~1.0.0: 2041 | version "1.0.0" 2042 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 2043 | 2044 | unset-value@^1.0.0: 2045 | version "1.0.0" 2046 | resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" 2047 | dependencies: 2048 | has-value "^0.3.1" 2049 | isobject "^3.0.0" 2050 | 2051 | unzip-response@^2.0.1: 2052 | version "2.0.1" 2053 | resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" 2054 | 2055 | upath@^1.1.0: 2056 | version "1.1.0" 2057 | resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" 2058 | 2059 | update-notifier@^2.5.0: 2060 | version "2.5.0" 2061 | resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" 2062 | dependencies: 2063 | boxen "^1.2.1" 2064 | chalk "^2.0.1" 2065 | configstore "^3.0.0" 2066 | import-lazy "^2.1.0" 2067 | is-ci "^1.0.10" 2068 | is-installed-globally "^0.1.0" 2069 | is-npm "^1.0.0" 2070 | latest-version "^3.0.0" 2071 | semver-diff "^2.0.0" 2072 | xdg-basedir "^3.0.0" 2073 | 2074 | urix@^0.1.0: 2075 | version "0.1.0" 2076 | resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" 2077 | 2078 | url-parse-lax@^1.0.0: 2079 | version "1.0.0" 2080 | resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" 2081 | dependencies: 2082 | prepend-http "^1.0.1" 2083 | 2084 | url@0.10.3: 2085 | version "0.10.3" 2086 | resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" 2087 | dependencies: 2088 | punycode "1.3.2" 2089 | querystring "0.2.0" 2090 | 2091 | use@^3.1.0: 2092 | version "3.1.1" 2093 | resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" 2094 | 2095 | util-deprecate@~1.0.1: 2096 | version "1.0.2" 2097 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 2098 | 2099 | utils-merge@1.0.1: 2100 | version "1.0.1" 2101 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 2102 | 2103 | uuid@3.3.2, uuid@^3.1.0: 2104 | version "3.3.2" 2105 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" 2106 | 2107 | vary@^1, vary@~1.1.2: 2108 | version "1.1.2" 2109 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 2110 | 2111 | which@^1.2.9: 2112 | version "1.3.1" 2113 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 2114 | dependencies: 2115 | isexe "^2.0.0" 2116 | 2117 | wide-align@^1.1.0: 2118 | version "1.1.3" 2119 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 2120 | dependencies: 2121 | string-width "^1.0.2 || 2" 2122 | 2123 | widest-line@^2.0.0: 2124 | version "2.0.1" 2125 | resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" 2126 | dependencies: 2127 | string-width "^2.1.1" 2128 | 2129 | wrappy@1: 2130 | version "1.0.2" 2131 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2132 | 2133 | write-file-atomic@^2.0.0: 2134 | version "2.4.2" 2135 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.2.tgz#a7181706dfba17855d221140a9c06e15fcdd87b9" 2136 | dependencies: 2137 | graceful-fs "^4.1.11" 2138 | imurmurhash "^0.1.4" 2139 | signal-exit "^3.0.2" 2140 | 2141 | ws@^5.2.0: 2142 | version "5.2.2" 2143 | resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" 2144 | dependencies: 2145 | async-limiter "~1.0.0" 2146 | 2147 | xdg-basedir@^3.0.0: 2148 | version "3.0.0" 2149 | resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" 2150 | 2151 | xml2js@0.4.19: 2152 | version "0.4.19" 2153 | resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" 2154 | dependencies: 2155 | sax ">=0.6.0" 2156 | xmlbuilder "~9.0.1" 2157 | 2158 | xmlbuilder@~9.0.1: 2159 | version "9.0.7" 2160 | resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" 2161 | 2162 | yallist@^2.1.2: 2163 | version "2.1.2" 2164 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" 2165 | 2166 | yallist@^3.0.0, yallist@^3.0.2: 2167 | version "3.0.3" 2168 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" 2169 | 2170 | zen-observable-ts@^0.8.15: 2171 | version "0.8.15" 2172 | resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.8.15.tgz#6cf7df6aa619076e4af2f707ccf8a6290d26699b" 2173 | dependencies: 2174 | zen-observable "^0.8.0" 2175 | 2176 | zen-observable@^0.8.0: 2177 | version "0.8.13" 2178 | resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.13.tgz#a9f1b9dbdfd2d60a08761ceac6a861427d44ae2e" 2179 | -------------------------------------------------------------------------------- /Day4/LessonNotes.md: -------------------------------------------------------------------------------- 1 | # Input Values 2 | 3 | ``` 4 | input Draft { 5 | title: String! 6 | content: String! 7 | author: String! 8 | } 9 | 10 | 11 | type Mutation { 12 | createDraft(object: Draft): Post 13 | } 14 | ``` 15 | > Input types can't have fields that are other objects, only basic scalar types, list types, and other input types. 16 | 17 | # Custom scalars 18 | 19 | ``` 20 | const { GraphQLScalarType } = require('graphql'); 21 | const { makeExecutableSchema } = require('graphql-tools'); 22 | 23 | const myCustomScalarType = new GraphQLScalarType({ 24 | name: 'MyCustomScalar', 25 | description: 'Description of my custom scalar type', 26 | serialize(value) { 27 | let result; 28 | // Implement your own behavior here by setting the 'result' variable 29 | // value SENT to the client 30 | return result; 31 | }, 32 | parseValue(value) { 33 | let result; 34 | // Implement your own behavior here by setting the 'result' variable 35 | // value FROM the client 36 | return result; 37 | }, 38 | parseLiteral(ast) { 39 | switch (ast.kind) { 40 | // Implement your own behavior here by returning what suits your needs 41 | // depending on ast.kind 42 | 43 | // return result based on client 44 | } 45 | } 46 | }); 47 | ``` 48 | ### Date scalar 49 | 50 | ``` 51 | import { GraphQLScalarType } from 'graphql'; 52 | import { Kind } from 'graphql/language'; 53 | 54 | const resolverMap = { 55 | Date: new GraphQLScalarType({ 56 | name: 'Date', 57 | description: 'Date custom scalar type', 58 | parseValue(value) { 59 | return new Date(value); // value from the client 60 | }, 61 | serialize(value) { 62 | return value.getTime(); // value sent to the client 63 | }, 64 | parseLiteral(ast) { 65 | if (ast.kind === Kind.INT) { 66 | return new Date(ast.value) // ast value is always in string format 67 | } 68 | return null; 69 | }, 70 | }), 71 | }; 72 | ``` 73 | 74 | # Scalar validation 75 | 76 | ``` 77 | Odd: new GraphQLScalarType({ 78 | name: 'Odd', 79 | description: 'Odd custom scalar type', 80 | parseValue: oddValue, 81 | serialize: oddValue, 82 | parseLiteral(ast) { 83 | if (ast.kind === Kind.INT) { 84 | return oddValue(parseInt(ast.value, 10)); 85 | } 86 | return null; 87 | }, 88 | }), 89 | ``` 90 | 91 | # Interfaces 92 | An Interface is an abstract type that includes a certain set of fields that a type must include to implement the interface. 93 | 94 | ``` 95 | 96 | ``` 97 | 98 | # Union Types 99 | 100 | 101 | [Interfaces and Unions](https://github.com/prisma/graphql-yoga/blob/master/examples/interface-union) 102 | -------------------------------------------------------------------------------- /Day4/excercises.md: -------------------------------------------------------------------------------- 1 | # Create Login/Logout page for your app 2 | # Finalize your project and connect it to real data in DB: 3 | 4 | postgres://pisfgfotrkeyev:afc3b63598baf280d09e449c0eb47e975ffde1582c0796b7a8b11459a3b8dbb9@ec2-107-20-167-11.compute-1.amazonaws.com:5432/d90nq4c245lrg4 5 | 6 | # Add custom directives, interfaces and Date scalar to your schema 7 | # Try to recreate functionality from queries that you use running on Hasura -------------------------------------------------------------------------------- /Day4/graphql-yoga-example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "graphql-yoga-example", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "src/index.js", 6 | "scripts": { 7 | "start": "node src/index.js", 8 | "test": "echo \"Error: no test specified\" && exit 1" 9 | }, 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "graphql-yoga": "^1.17.4" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Day4/graphql-yoga-example/src/index.js: -------------------------------------------------------------------------------- 1 | const { GraphQLServer, PubSub } = require('graphql-yoga') 2 | const { GraphQLScalarType } = require('graphql'); 3 | const { Kind } = require('graphql/language'); 4 | 5 | 6 | let idCount = 0 7 | let posts = [] 8 | const channel = Math.random().toString(36).substring(2, 15) 9 | 10 | function oddValue(value) { 11 | return value % 2 === 1 ? value : null; 12 | } 13 | 14 | const resolvers = { 15 | Query: { 16 | posts: () => posts, 17 | post: (parent, args) => posts.find(post => post.id === args.id), 18 | }, 19 | Mutation: { 20 | createDraft: (parent, { object: args }) => { 21 | const post = { 22 | id: `post_${idCount++}`, 23 | title: args.title, 24 | content: args.content, 25 | date: args.date, 26 | comments: [], 27 | author: { 28 | id: `author_${new Date().getMilliseconds()}`, 29 | name: args.author 30 | }, 31 | published: false, 32 | } 33 | posts.push(post) 34 | pubsub.publish(channel, { posts}) 35 | return post 36 | }, 37 | addComment: (parent, args) => { 38 | posts.forEach(post => { 39 | if (post.id === args.id) { 40 | const comment = { 41 | id: `comment_${new Date().getMilliseconds()}`, 42 | content: args.content 43 | } 44 | post.comments.push(comment) 45 | pubsub.publish(channel, { posts}) 46 | } 47 | }) 48 | 49 | return args.id 50 | }, 51 | deletePost: (parent, args) => { 52 | const postIndex = posts.findIndex(post => post.id === args.id) 53 | if (postIndex > -1) { 54 | const deleted = posts.splice(postIndex, 1) 55 | pubsub.publish(channel, { posts}) 56 | return deleted[0] 57 | } 58 | return null 59 | }, 60 | publish: (parent, args) => { 61 | const postIndex = posts.findIndex(post => post.id === args.id) 62 | posts[postIndex].published = true 63 | pubsub.publish(channel, { posts}) 64 | return posts[postIndex] 65 | }, 66 | }, 67 | 68 | Date: new GraphQLScalarType({ 69 | name: 'Date', 70 | description: 'Date custom scalar type', 71 | parseValue(value) { 72 | return new Date(value); // value from the client 73 | }, 74 | serialize(value) { 75 | return value.getTime(); // value sent to the client 76 | }, 77 | parseLiteral(ast) { 78 | if (ast.kind === Kind.INT) { 79 | return new Date(ast.value) // ast value is always in string format 80 | } 81 | return null; 82 | }, 83 | }), 84 | Subscription: { 85 | posts: { 86 | subscribe: (parent, args, { pubsub }) => { 87 | setImmediate(() => pubsub.publish(channel, { posts})) 88 | return pubsub.asyncIterator(channel) 89 | }, 90 | } 91 | }, 92 | HasContent: { 93 | __resolveType(obj){ 94 | if (obj.title){ 95 | return 'Post' 96 | } else { 97 | return 'Comment' 98 | } 99 | } 100 | } 101 | } 102 | 103 | const pubsub = new PubSub() 104 | 105 | 106 | const server = new GraphQLServer({ 107 | typeDefs: './src/schema.graphql', 108 | resolvers, 109 | context: { pubsub } 110 | }) 111 | 112 | server.start({ 113 | port: 5577, 114 | endpoint: '/graphql', 115 | playground: '/playground', 116 | },() => { 117 | console.log(`The graphql server is running on http://localhost:5577/graphql`) 118 | console.log(`Playground available here: http://localhost:5577/playground`) 119 | }) 120 | -------------------------------------------------------------------------------- /Day4/graphql-yoga-example/src/schema.graphql: -------------------------------------------------------------------------------- 1 | type Query { 2 | posts: [Post!]! 3 | post(id: ID!): Post 4 | description: String! 5 | } 6 | 7 | input Draft { 8 | title: String! 9 | content: String! 10 | author: String! 11 | date: Date 12 | } 13 | 14 | interface HasContent { 15 | content: String! 16 | } 17 | 18 | 19 | type Mutation { 20 | createDraft(object: Draft): Post 21 | addComment(id: ID!, content: String!): ID 22 | deletePost(id: ID!): Post 23 | publish(id: ID!): Post 24 | } 25 | 26 | type Subscription { 27 | posts: [Post!]! 28 | } 29 | 30 | "Description for the type" 31 | type Post implements HasContent{ 32 | """ 33 | ## Description for field 34 | """ 35 | id: ID! 36 | title: String! 37 | content: String! 38 | published: Boolean! 39 | date: Date 40 | author: Author! 41 | comments: [Comment] 42 | } 43 | 44 | 45 | type Author { 46 | id: ID! 47 | name: String! 48 | } 49 | 50 | type Comment implements HasContent{ 51 | id: ID! 52 | content: String! 53 | } 54 | 55 | scalar Date -------------------------------------------------------------------------------- /Day4/graphql-yoga-example/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/body-parser@*": 6 | version "1.17.0" 7 | resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.17.0.tgz#9f5c9d9bd04bb54be32d5eb9fc0d8c974e6cf58c" 8 | dependencies: 9 | "@types/connect" "*" 10 | "@types/node" "*" 11 | 12 | "@types/connect@*": 13 | version "3.4.32" 14 | resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.32.tgz#aa0e9616b9435ccad02bc52b5b454ffc2c70ba28" 15 | dependencies: 16 | "@types/node" "*" 17 | 18 | "@types/cors@^2.8.4": 19 | version "2.8.4" 20 | resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.4.tgz#50991a759a29c0b89492751008c6af7a7c8267b0" 21 | dependencies: 22 | "@types/express" "*" 23 | 24 | "@types/express-serve-static-core@*": 25 | version "4.16.1" 26 | resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.16.1.tgz#35df7b302299a4ab138a643617bd44078e74d44e" 27 | dependencies: 28 | "@types/node" "*" 29 | "@types/range-parser" "*" 30 | 31 | "@types/express@*", "@types/express@^4.11.1": 32 | version "4.16.1" 33 | resolved "https://registry.yarnpkg.com/@types/express/-/express-4.16.1.tgz#d756bd1a85c34d87eaf44c888bad27ba8a4b7cf0" 34 | dependencies: 35 | "@types/body-parser" "*" 36 | "@types/express-serve-static-core" "*" 37 | "@types/serve-static" "*" 38 | 39 | "@types/graphql-deduplicator@^2.0.0": 40 | version "2.0.0" 41 | resolved "https://registry.yarnpkg.com/@types/graphql-deduplicator/-/graphql-deduplicator-2.0.0.tgz#9e577b8f3feb3d067b0ca756f4a1fb356d533922" 42 | 43 | "@types/graphql@^14.0.0": 44 | version "14.0.7" 45 | resolved "https://registry.yarnpkg.com/@types/graphql/-/graphql-14.0.7.tgz#daa09397220a68ce1cbb3f76a315ff3cd92312f6" 46 | 47 | "@types/mime@*": 48 | version "2.0.1" 49 | resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.1.tgz#dc488842312a7f075149312905b5e3c0b054c79d" 50 | 51 | "@types/node@*": 52 | version "11.9.3" 53 | resolved "https://registry.yarnpkg.com/@types/node/-/node-11.9.3.tgz#14adbb5ab8cd563f549fbae8dbe92e0b7d6e76cc" 54 | 55 | "@types/range-parser@*": 56 | version "1.2.3" 57 | resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" 58 | 59 | "@types/serve-static@*": 60 | version "1.13.2" 61 | resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.2.tgz#f5ac4d7a6420a99a6a45af4719f4dcd8cd907a48" 62 | dependencies: 63 | "@types/express-serve-static-core" "*" 64 | "@types/mime" "*" 65 | 66 | "@types/zen-observable@^0.5.3": 67 | version "0.5.4" 68 | resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.5.4.tgz#b863a4191e525206819e008097ebf0fb2e3a1cdc" 69 | 70 | accepts@~1.3.5: 71 | version "1.3.5" 72 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" 73 | dependencies: 74 | mime-types "~2.1.18" 75 | negotiator "0.6.1" 76 | 77 | apollo-cache-control@^0.1.0: 78 | version "0.1.1" 79 | resolved "https://registry.yarnpkg.com/apollo-cache-control/-/apollo-cache-control-0.1.1.tgz#173d14ceb3eb9e7cb53de7eb8b61bee6159d4171" 80 | dependencies: 81 | graphql-extensions "^0.0.x" 82 | 83 | apollo-link@^1.2.3: 84 | version "1.2.8" 85 | resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.8.tgz#0f252adefd5047ac1a9f35ba9439d216587dcd84" 86 | dependencies: 87 | zen-observable-ts "^0.8.15" 88 | 89 | apollo-server-core@^1.3.6, apollo-server-core@^1.4.0: 90 | version "1.4.0" 91 | resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-1.4.0.tgz#4faff7f110bfdd6c3f47008302ae24140f94c592" 92 | dependencies: 93 | apollo-cache-control "^0.1.0" 94 | apollo-tracing "^0.1.0" 95 | graphql-extensions "^0.0.x" 96 | 97 | apollo-server-express@^1.3.6: 98 | version "1.4.0" 99 | resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-1.4.0.tgz#7d7c58d6d6f9892b83fe575669093bb66738b125" 100 | dependencies: 101 | apollo-server-core "^1.4.0" 102 | apollo-server-module-graphiql "^1.4.0" 103 | 104 | apollo-server-lambda@1.3.6: 105 | version "1.3.6" 106 | resolved "https://registry.yarnpkg.com/apollo-server-lambda/-/apollo-server-lambda-1.3.6.tgz#bdaac37f143c6798e40b8ae75580ba673cea260e" 107 | dependencies: 108 | apollo-server-core "^1.3.6" 109 | apollo-server-module-graphiql "^1.3.4" 110 | 111 | apollo-server-module-graphiql@^1.3.4, apollo-server-module-graphiql@^1.4.0: 112 | version "1.4.0" 113 | resolved "https://registry.yarnpkg.com/apollo-server-module-graphiql/-/apollo-server-module-graphiql-1.4.0.tgz#c559efa285578820709f1769bb85d3b3eed3d8ec" 114 | 115 | apollo-tracing@^0.1.0: 116 | version "0.1.4" 117 | resolved "https://registry.yarnpkg.com/apollo-tracing/-/apollo-tracing-0.1.4.tgz#5b8ae1b01526b160ee6e552a7f131923a9aedcc7" 118 | dependencies: 119 | graphql-extensions "~0.0.9" 120 | 121 | apollo-upload-server@^7.0.0: 122 | version "7.1.0" 123 | resolved "https://registry.yarnpkg.com/apollo-upload-server/-/apollo-upload-server-7.1.0.tgz#21e07b52252b3749b913468599813e13cfca805f" 124 | dependencies: 125 | busboy "^0.2.14" 126 | fs-capacitor "^1.0.0" 127 | http-errors "^1.7.0" 128 | object-path "^0.11.4" 129 | 130 | apollo-utilities@^1.0.1: 131 | version "1.1.3" 132 | resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.1.3.tgz#a8883c0392f6b46eac0d366204ebf34be9307c87" 133 | dependencies: 134 | fast-json-stable-stringify "^2.0.0" 135 | tslib "^1.9.3" 136 | 137 | array-flatten@1.1.1: 138 | version "1.1.1" 139 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 140 | 141 | async-limiter@~1.0.0: 142 | version "1.0.0" 143 | resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" 144 | 145 | aws-lambda@^0.1.2: 146 | version "0.1.2" 147 | resolved "https://registry.yarnpkg.com/aws-lambda/-/aws-lambda-0.1.2.tgz#19b1585075df31679597b976a5f1def61f12ccee" 148 | dependencies: 149 | aws-sdk "^*" 150 | commander "^2.5.0" 151 | dotenv "^0.4.0" 152 | 153 | aws-sdk@^*: 154 | version "2.402.0" 155 | resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.402.0.tgz#d4bfe8f16f476e26a7da4edba79b878a1cabb0fb" 156 | dependencies: 157 | buffer "4.9.1" 158 | events "1.1.1" 159 | ieee754 "1.1.8" 160 | jmespath "0.15.0" 161 | querystring "0.2.0" 162 | sax "1.2.1" 163 | url "0.10.3" 164 | uuid "3.3.2" 165 | xml2js "0.4.19" 166 | 167 | backo2@^1.0.2: 168 | version "1.0.2" 169 | resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" 170 | 171 | base64-js@^1.0.2: 172 | version "1.3.0" 173 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" 174 | 175 | body-parser-graphql@1.1.0: 176 | version "1.1.0" 177 | resolved "https://registry.yarnpkg.com/body-parser-graphql/-/body-parser-graphql-1.1.0.tgz#80a80353c7cb623562fd375750dfe018d75f0f7c" 178 | dependencies: 179 | body-parser "^1.18.2" 180 | 181 | body-parser@1.18.3, body-parser@^1.18.2: 182 | version "1.18.3" 183 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" 184 | dependencies: 185 | bytes "3.0.0" 186 | content-type "~1.0.4" 187 | debug "2.6.9" 188 | depd "~1.1.2" 189 | http-errors "~1.6.3" 190 | iconv-lite "0.4.23" 191 | on-finished "~2.3.0" 192 | qs "6.5.2" 193 | raw-body "2.3.3" 194 | type-is "~1.6.16" 195 | 196 | buffer-from@^1.0.0: 197 | version "1.1.1" 198 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 199 | 200 | buffer@4.9.1: 201 | version "4.9.1" 202 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" 203 | dependencies: 204 | base64-js "^1.0.2" 205 | ieee754 "^1.1.4" 206 | isarray "^1.0.0" 207 | 208 | busboy@^0.2.14: 209 | version "0.2.14" 210 | resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453" 211 | dependencies: 212 | dicer "0.2.5" 213 | readable-stream "1.1.x" 214 | 215 | bytes@3.0.0: 216 | version "3.0.0" 217 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" 218 | 219 | commander@^2.5.0: 220 | version "2.19.0" 221 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" 222 | 223 | content-disposition@0.5.2: 224 | version "0.5.2" 225 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" 226 | 227 | content-type@~1.0.4: 228 | version "1.0.4" 229 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 230 | 231 | cookie-signature@1.0.6: 232 | version "1.0.6" 233 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 234 | 235 | cookie@0.3.1: 236 | version "0.3.1" 237 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" 238 | 239 | core-js@^2.5.3: 240 | version "2.6.4" 241 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.4.tgz#b8897c062c4d769dd30a0ac5c73976c47f92ea0d" 242 | 243 | core-util-is@~1.0.0: 244 | version "1.0.2" 245 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 246 | 247 | cors@^2.8.4: 248 | version "2.8.5" 249 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" 250 | dependencies: 251 | object-assign "^4" 252 | vary "^1" 253 | 254 | debug@2.6.9: 255 | version "2.6.9" 256 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 257 | dependencies: 258 | ms "2.0.0" 259 | 260 | depd@~1.1.2: 261 | version "1.1.2" 262 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 263 | 264 | deprecated-decorator@^0.1.6: 265 | version "0.1.6" 266 | resolved "https://registry.yarnpkg.com/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz#00966317b7a12fe92f3cc831f7583af329b86c37" 267 | 268 | destroy@~1.0.4: 269 | version "1.0.4" 270 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 271 | 272 | dicer@0.2.5: 273 | version "0.2.5" 274 | resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.2.5.tgz#5996c086bb33218c812c090bddc09cd12facb70f" 275 | dependencies: 276 | readable-stream "1.1.x" 277 | streamsearch "0.1.2" 278 | 279 | dotenv@^0.4.0: 280 | version "0.4.0" 281 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-0.4.0.tgz#f6fb351363c2d92207245c737802c9ab5ae1495a" 282 | 283 | ee-first@1.1.1: 284 | version "1.1.1" 285 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 286 | 287 | encodeurl@~1.0.2: 288 | version "1.0.2" 289 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 290 | 291 | escape-html@~1.0.3: 292 | version "1.0.3" 293 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 294 | 295 | etag@~1.8.1: 296 | version "1.8.1" 297 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 298 | 299 | eventemitter3@^3.1.0: 300 | version "3.1.0" 301 | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" 302 | 303 | events@1.1.1: 304 | version "1.1.1" 305 | resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" 306 | 307 | express@^4.16.3: 308 | version "4.16.4" 309 | resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e" 310 | dependencies: 311 | accepts "~1.3.5" 312 | array-flatten "1.1.1" 313 | body-parser "1.18.3" 314 | content-disposition "0.5.2" 315 | content-type "~1.0.4" 316 | cookie "0.3.1" 317 | cookie-signature "1.0.6" 318 | debug "2.6.9" 319 | depd "~1.1.2" 320 | encodeurl "~1.0.2" 321 | escape-html "~1.0.3" 322 | etag "~1.8.1" 323 | finalhandler "1.1.1" 324 | fresh "0.5.2" 325 | merge-descriptors "1.0.1" 326 | methods "~1.1.2" 327 | on-finished "~2.3.0" 328 | parseurl "~1.3.2" 329 | path-to-regexp "0.1.7" 330 | proxy-addr "~2.0.4" 331 | qs "6.5.2" 332 | range-parser "~1.2.0" 333 | safe-buffer "5.1.2" 334 | send "0.16.2" 335 | serve-static "1.13.2" 336 | setprototypeof "1.1.0" 337 | statuses "~1.4.0" 338 | type-is "~1.6.16" 339 | utils-merge "1.0.1" 340 | vary "~1.1.2" 341 | 342 | fast-json-stable-stringify@^2.0.0: 343 | version "2.0.0" 344 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 345 | 346 | finalhandler@1.1.1: 347 | version "1.1.1" 348 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" 349 | dependencies: 350 | debug "2.6.9" 351 | encodeurl "~1.0.2" 352 | escape-html "~1.0.3" 353 | on-finished "~2.3.0" 354 | parseurl "~1.3.2" 355 | statuses "~1.4.0" 356 | unpipe "~1.0.0" 357 | 358 | forwarded@~0.1.2: 359 | version "0.1.2" 360 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" 361 | 362 | fresh@0.5.2: 363 | version "0.5.2" 364 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 365 | 366 | fs-capacitor@^1.0.0: 367 | version "1.0.1" 368 | resolved "https://registry.yarnpkg.com/fs-capacitor/-/fs-capacitor-1.0.1.tgz#ff9dbfa14dfaf4472537720f19c3088ed9278df0" 369 | 370 | graphql-deduplicator@^2.0.1: 371 | version "2.0.2" 372 | resolved "https://registry.yarnpkg.com/graphql-deduplicator/-/graphql-deduplicator-2.0.2.tgz#d8608161cf6be97725e178df0c41f6a1f9f778f3" 373 | 374 | graphql-extensions@^0.0.x, graphql-extensions@~0.0.9: 375 | version "0.0.10" 376 | resolved "https://registry.yarnpkg.com/graphql-extensions/-/graphql-extensions-0.0.10.tgz#34bdb2546d43f6a5bc89ab23c295ec0466c6843d" 377 | dependencies: 378 | core-js "^2.5.3" 379 | source-map-support "^0.5.1" 380 | 381 | graphql-import@^0.7.0: 382 | version "0.7.1" 383 | resolved "https://registry.yarnpkg.com/graphql-import/-/graphql-import-0.7.1.tgz#4add8d91a5f752d764b0a4a7a461fcd93136f223" 384 | dependencies: 385 | lodash "^4.17.4" 386 | resolve-from "^4.0.0" 387 | 388 | graphql-middleware@3.0.2: 389 | version "3.0.2" 390 | resolved "https://registry.yarnpkg.com/graphql-middleware/-/graphql-middleware-3.0.2.tgz#c8cdb67615eec02aec237b455e679f5fc973ddc4" 391 | dependencies: 392 | graphql-tools "^4.0.4" 393 | 394 | graphql-playground-html@1.6.12: 395 | version "1.6.12" 396 | resolved "https://registry.yarnpkg.com/graphql-playground-html/-/graphql-playground-html-1.6.12.tgz#8b3b34ab6013e2c877f0ceaae478fafc8ca91b85" 397 | 398 | graphql-playground-middleware-express@1.7.11: 399 | version "1.7.11" 400 | resolved "https://registry.yarnpkg.com/graphql-playground-middleware-express/-/graphql-playground-middleware-express-1.7.11.tgz#bbffd784a37133bfa7165bdd8f429081dbf4bcf6" 401 | dependencies: 402 | graphql-playground-html "1.6.12" 403 | 404 | graphql-playground-middleware-lambda@1.7.12: 405 | version "1.7.12" 406 | resolved "https://registry.yarnpkg.com/graphql-playground-middleware-lambda/-/graphql-playground-middleware-lambda-1.7.12.tgz#1b06440a288dbcd53f935b43e5b9ca2738a06305" 407 | dependencies: 408 | graphql-playground-html "1.6.12" 409 | 410 | graphql-subscriptions@^0.5.8: 411 | version "0.5.8" 412 | resolved "https://registry.yarnpkg.com/graphql-subscriptions/-/graphql-subscriptions-0.5.8.tgz#13a6143c546bce390404657dc73ca501def30aa7" 413 | dependencies: 414 | iterall "^1.2.1" 415 | 416 | graphql-tools@^4.0.0, graphql-tools@^4.0.4: 417 | version "4.0.4" 418 | resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-4.0.4.tgz#ca08a63454221fdde825fe45fbd315eb2a6d566b" 419 | dependencies: 420 | apollo-link "^1.2.3" 421 | apollo-utilities "^1.0.1" 422 | deprecated-decorator "^0.1.6" 423 | iterall "^1.1.3" 424 | uuid "^3.1.0" 425 | 426 | graphql-yoga@^1.17.4: 427 | version "1.17.4" 428 | resolved "https://registry.yarnpkg.com/graphql-yoga/-/graphql-yoga-1.17.4.tgz#6d325a6270399edf0776fb5f60a2e9e19512e63c" 429 | dependencies: 430 | "@types/cors" "^2.8.4" 431 | "@types/express" "^4.11.1" 432 | "@types/graphql" "^14.0.0" 433 | "@types/graphql-deduplicator" "^2.0.0" 434 | "@types/zen-observable" "^0.5.3" 435 | apollo-server-express "^1.3.6" 436 | apollo-server-lambda "1.3.6" 437 | apollo-upload-server "^7.0.0" 438 | aws-lambda "^0.1.2" 439 | body-parser-graphql "1.1.0" 440 | cors "^2.8.4" 441 | express "^4.16.3" 442 | graphql "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0" 443 | graphql-deduplicator "^2.0.1" 444 | graphql-import "^0.7.0" 445 | graphql-middleware "3.0.2" 446 | graphql-playground-middleware-express "1.7.11" 447 | graphql-playground-middleware-lambda "1.7.12" 448 | graphql-subscriptions "^0.5.8" 449 | graphql-tools "^4.0.0" 450 | subscriptions-transport-ws "^0.9.8" 451 | 452 | "graphql@^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0": 453 | version "14.1.1" 454 | resolved "https://registry.yarnpkg.com/graphql/-/graphql-14.1.1.tgz#d5d77df4b19ef41538d7215d1e7a28834619fac0" 455 | dependencies: 456 | iterall "^1.2.2" 457 | 458 | http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: 459 | version "1.6.3" 460 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" 461 | dependencies: 462 | depd "~1.1.2" 463 | inherits "2.0.3" 464 | setprototypeof "1.1.0" 465 | statuses ">= 1.4.0 < 2" 466 | 467 | http-errors@^1.7.0: 468 | version "1.7.1" 469 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.1.tgz#6a4ffe5d35188e1c39f872534690585852e1f027" 470 | dependencies: 471 | depd "~1.1.2" 472 | inherits "2.0.3" 473 | setprototypeof "1.1.0" 474 | statuses ">= 1.5.0 < 2" 475 | toidentifier "1.0.0" 476 | 477 | iconv-lite@0.4.23: 478 | version "0.4.23" 479 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" 480 | dependencies: 481 | safer-buffer ">= 2.1.2 < 3" 482 | 483 | ieee754@1.1.8: 484 | version "1.1.8" 485 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" 486 | 487 | ieee754@^1.1.4: 488 | version "1.1.12" 489 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" 490 | 491 | inherits@2.0.3, inherits@~2.0.1: 492 | version "2.0.3" 493 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 494 | 495 | ipaddr.js@1.8.0: 496 | version "1.8.0" 497 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" 498 | 499 | isarray@0.0.1: 500 | version "0.0.1" 501 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 502 | 503 | isarray@^1.0.0: 504 | version "1.0.0" 505 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 506 | 507 | iterall@^1.1.3, iterall@^1.2.1, iterall@^1.2.2: 508 | version "1.2.2" 509 | resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7" 510 | 511 | jmespath@0.15.0: 512 | version "0.15.0" 513 | resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" 514 | 515 | lodash@^4.17.4: 516 | version "4.17.11" 517 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" 518 | 519 | media-typer@0.3.0: 520 | version "0.3.0" 521 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 522 | 523 | merge-descriptors@1.0.1: 524 | version "1.0.1" 525 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 526 | 527 | methods@~1.1.2: 528 | version "1.1.2" 529 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 530 | 531 | mime-db@~1.37.0: 532 | version "1.37.0" 533 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8" 534 | 535 | mime-types@~2.1.18: 536 | version "2.1.21" 537 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96" 538 | dependencies: 539 | mime-db "~1.37.0" 540 | 541 | mime@1.4.1: 542 | version "1.4.1" 543 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" 544 | 545 | ms@2.0.0: 546 | version "2.0.0" 547 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 548 | 549 | negotiator@0.6.1: 550 | version "0.6.1" 551 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" 552 | 553 | object-assign@^4: 554 | version "4.1.1" 555 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 556 | 557 | object-path@^0.11.4: 558 | version "0.11.4" 559 | resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.4.tgz#370ae752fbf37de3ea70a861c23bba8915691949" 560 | 561 | on-finished@~2.3.0: 562 | version "2.3.0" 563 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 564 | dependencies: 565 | ee-first "1.1.1" 566 | 567 | parseurl@~1.3.2: 568 | version "1.3.2" 569 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" 570 | 571 | path-to-regexp@0.1.7: 572 | version "0.1.7" 573 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 574 | 575 | proxy-addr@~2.0.4: 576 | version "2.0.4" 577 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" 578 | dependencies: 579 | forwarded "~0.1.2" 580 | ipaddr.js "1.8.0" 581 | 582 | punycode@1.3.2: 583 | version "1.3.2" 584 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" 585 | 586 | qs@6.5.2: 587 | version "6.5.2" 588 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" 589 | 590 | querystring@0.2.0: 591 | version "0.2.0" 592 | resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" 593 | 594 | range-parser@~1.2.0: 595 | version "1.2.0" 596 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" 597 | 598 | raw-body@2.3.3: 599 | version "2.3.3" 600 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" 601 | dependencies: 602 | bytes "3.0.0" 603 | http-errors "1.6.3" 604 | iconv-lite "0.4.23" 605 | unpipe "1.0.0" 606 | 607 | readable-stream@1.1.x: 608 | version "1.1.14" 609 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" 610 | dependencies: 611 | core-util-is "~1.0.0" 612 | inherits "~2.0.1" 613 | isarray "0.0.1" 614 | string_decoder "~0.10.x" 615 | 616 | resolve-from@^4.0.0: 617 | version "4.0.0" 618 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 619 | 620 | safe-buffer@5.1.2: 621 | version "5.1.2" 622 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 623 | 624 | "safer-buffer@>= 2.1.2 < 3": 625 | version "2.1.2" 626 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 627 | 628 | sax@1.2.1: 629 | version "1.2.1" 630 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" 631 | 632 | sax@>=0.6.0: 633 | version "1.2.4" 634 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" 635 | 636 | send@0.16.2: 637 | version "0.16.2" 638 | resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" 639 | dependencies: 640 | debug "2.6.9" 641 | depd "~1.1.2" 642 | destroy "~1.0.4" 643 | encodeurl "~1.0.2" 644 | escape-html "~1.0.3" 645 | etag "~1.8.1" 646 | fresh "0.5.2" 647 | http-errors "~1.6.2" 648 | mime "1.4.1" 649 | ms "2.0.0" 650 | on-finished "~2.3.0" 651 | range-parser "~1.2.0" 652 | statuses "~1.4.0" 653 | 654 | serve-static@1.13.2: 655 | version "1.13.2" 656 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" 657 | dependencies: 658 | encodeurl "~1.0.2" 659 | escape-html "~1.0.3" 660 | parseurl "~1.3.2" 661 | send "0.16.2" 662 | 663 | setprototypeof@1.1.0: 664 | version "1.1.0" 665 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" 666 | 667 | source-map-support@^0.5.1: 668 | version "0.5.10" 669 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.10.tgz#2214080bc9d51832511ee2bab96e3c2f9353120c" 670 | dependencies: 671 | buffer-from "^1.0.0" 672 | source-map "^0.6.0" 673 | 674 | source-map@^0.6.0: 675 | version "0.6.1" 676 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 677 | 678 | "statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2": 679 | version "1.5.0" 680 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 681 | 682 | statuses@~1.4.0: 683 | version "1.4.0" 684 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" 685 | 686 | streamsearch@0.1.2: 687 | version "0.1.2" 688 | resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" 689 | 690 | string_decoder@~0.10.x: 691 | version "0.10.31" 692 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 693 | 694 | subscriptions-transport-ws@^0.9.8: 695 | version "0.9.15" 696 | resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.15.tgz#68a8b7ba0037d8c489fb2f5a102d1494db297d0d" 697 | dependencies: 698 | backo2 "^1.0.2" 699 | eventemitter3 "^3.1.0" 700 | iterall "^1.2.1" 701 | symbol-observable "^1.0.4" 702 | ws "^5.2.0" 703 | 704 | symbol-observable@^1.0.4: 705 | version "1.2.0" 706 | resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" 707 | 708 | toidentifier@1.0.0: 709 | version "1.0.0" 710 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" 711 | 712 | tslib@^1.9.3: 713 | version "1.9.3" 714 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" 715 | 716 | type-is@~1.6.16: 717 | version "1.6.16" 718 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" 719 | dependencies: 720 | media-typer "0.3.0" 721 | mime-types "~2.1.18" 722 | 723 | unpipe@1.0.0, unpipe@~1.0.0: 724 | version "1.0.0" 725 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 726 | 727 | url@0.10.3: 728 | version "0.10.3" 729 | resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" 730 | dependencies: 731 | punycode "1.3.2" 732 | querystring "0.2.0" 733 | 734 | utils-merge@1.0.1: 735 | version "1.0.1" 736 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 737 | 738 | uuid@3.3.2, uuid@^3.1.0: 739 | version "3.3.2" 740 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" 741 | 742 | vary@^1, vary@~1.1.2: 743 | version "1.1.2" 744 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 745 | 746 | ws@^5.2.0: 747 | version "5.2.2" 748 | resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" 749 | dependencies: 750 | async-limiter "~1.0.0" 751 | 752 | xml2js@0.4.19: 753 | version "0.4.19" 754 | resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" 755 | dependencies: 756 | sax ">=0.6.0" 757 | xmlbuilder "~9.0.1" 758 | 759 | xmlbuilder@~9.0.1: 760 | version "9.0.7" 761 | resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" 762 | 763 | zen-observable-ts@^0.8.15: 764 | version "0.8.15" 765 | resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.8.15.tgz#6cf7df6aa619076e4af2f707ccf8a6290d26699b" 766 | dependencies: 767 | zen-observable "^0.8.0" 768 | 769 | zen-observable@^0.8.0: 770 | version "0.8.13" 771 | resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.13.tgz#a9f1b9dbdfd2d60a08761ceac6a861427d44ae2e" 772 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # graphql-fullstack-bootcamp 2 | Complimentary repo to https://tylermcginnis.com/free-graphql-bootcamp/ bootcamp by Vladimir Novick 3 | 4 | Slides are available [here](https://slides.com/vladimirnovick/graphql-fullstack-bootcamp): 5 | 6 | Videos are available [here](https://www.youtube.com/watch?v=Jl7oYk7Ye9E&list=PL28aKhmSneX86qqmzVNjwYJ1OZORPFxAr) 7 | 8 | # Prerequisites 9 | 10 | ## Day1 11 | 12 | No specific requirements 13 | 14 | ## Day2 15 | 16 | You can either install things locally or create app using CodeSandbox 17 | 18 | [Node.js](https://nodejs.org/en/download/) - **10.x** version 19 | 20 | Editor of your choice (I will use VsCode ) 21 | 22 | For this day you will need to pick what JavaScript framework you will use for the client and according to it set your machine. I advise to try all 3 of them 23 | 24 | ### React 25 | 26 | If you are not familiar with React follow [this guide](https://reactjs.org/docs/getting-started.html) prior to get started 27 | 28 | - create new React app 29 | 30 | ``` 31 | npx create-react-app my-app 32 | cd my-app 33 | npm start 34 | ``` 35 | 36 | ### Angular 37 | 38 | If you are not familiar with Angular follow [this guide](https://angular.io/guide/quickstart) prior to get aquianted with it 39 | 40 | - Create new Angular app 41 | 42 | ``` 43 | ng new my-app 44 | cd my-app 45 | ng serve --open 46 | ``` 47 | 48 | ### VueJS 49 | 50 | If you are not familiar with VueJS follow [this guide](https://vuejs.org/v2/guide/) to get aquianted with it 51 | 52 | - [Install](https://cli.vuejs.org/guide/installation.html) Vue CLI 53 | 54 | ``` 55 | npm install -g @vue/cli 56 | # OR 57 | yarn global add @vue/cli 58 | ``` 59 | 60 | - Create new VueJS app 61 | 62 | ``` 63 | vue create my-app 64 | cd my-app 65 | yarn serve 66 | ``` 67 | 68 | 69 | 70 | ## Day 3, 4 71 | 72 | Install 73 | 74 | - [Docker](https://docs.docker.com/install/) 75 | - [Docker Compose](https://docs.docker.com/compose/install/) 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /run-hasura-locally.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | docker run -d -p 8080:8080 \ 4 | -e HASURA_GRAPHQL_DATABASE_URL=postgres://pisfgfotrkeyev:afc3b63598baf280d09e449c0eb47e975ffde1582c0796b7a8b11459a3b8dbb9@ec2-107-20-167-11.compute-1.amazonaws.com:5432/d90nq4c245lrg4 \ 5 | -e HASURA_GRAPHQL_ENABLE_CONSOLE=true \ 6 | hasura/graphql-engine:latest | pbcopy --------------------------------------------------------------------------------