From 60849c37f5773ddc4a7a9186a7f33647594cb219 Mon Sep 17 00:00:00 2001 From: vnovick Date: Tue, 12 Feb 2019 04:55:41 +0200 Subject: [PATCH 01/11] pushing first day --- Day1/LessonNotes.md | 124 +++++++++++++++++++++++++++++++++++++++++- Day1/excercises.md | 60 ++++++++++++++++++++ run-hasura-locally.sh | 6 ++ 3 files changed, 189 insertions(+), 1 deletion(-) create mode 100755 run-hasura-locally.sh diff --git a/Day1/LessonNotes.md b/Day1/LessonNotes.md index b9b66ee..1050f7b 100644 --- a/Day1/LessonNotes.md +++ b/Day1/LessonNotes.md @@ -1 +1,123 @@ -# Lesson Notes will be published at the end of Day1 \ No newline at end of file +## Core principles and Syntax + +Executing Post request + +``` +curl \ + -X POST \ + -H "Content-Type: application/json" \ + --data '{ "query": "{ posts { subject } }" }' \ + http://localhost:8080/v1alpha1/graphql +``` + + + +## Queries + +GraphQL is asking for a specific fields on objects +``` +{ + allFilms { + films { + title + } + } +} +``` + +### Arguments + +``` +{ + allFilms(first:1) { + films { + title + } + } +} +``` + +### Aliases + +``` +query getPosts { + first_post: posts(order_by: [{ timestamp:asc}], limit: 1) { + subject + } + last_post: posts(order_by: [{ timestamp:asc}], limit: 1) { + subject + } +} + +``` + +### Operation name + +``` +query getPosts +``` + +### variables + +``` + +mutation deletePost($postId: uuid!) { + delete_posts(where:{id: {_eq: $postId}}) { + affected_rows + returning { + id + } + } +} + +``` + +default variables + +use `=` for setting default values + + +## Mutations + +``` +mutation { + insert_posts(objects: [{ + subject: "First blog post" + content: "Hello there" + user: { + data: { + firstName:"John" + lastName:"Smith" + profile: { + data:{ avatarUrl:"some url" bio:"Lorem ipsum"} + } + } + } + }]) { + returning { + id + subject + content + user { + firstName + lastName + } + + } + } +} +``` + +## Subscriptions + +``` +subscription subscribeToMostLikedPosts { + posts(order_by:{ likes:asc} limit: 3) { + subject + content + } +} +``` + + + diff --git a/Day1/excercises.md b/Day1/excercises.md index e69de29..e5a36ae 100644 --- a/Day1/excercises.md +++ b/Day1/excercises.md @@ -0,0 +1,60 @@ +# Exercises Day1 +Install Hasura Console on local environment + +### Prerequisites +For running GraphQL Api locally [Install Docker](https://docs.docker.com/install/) + +then run `./run-hasura-locally.sh` + +This will bring up docker container with Hasura engine with connection to existing Postgres API +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) + +Access Hasura console on localhost:8080/console + +- starwars api + +[GraphiQL](https://graphql-bootcamp-swapi.herokuapp.com) + +> Bonus you can add swapi custom server as remote schema in hasura console + +[Remote schemas docs](https://docs.hasura.io/1.0/graphql/manual/remote-schemas/index.html#step-2-merge-remote-schema) + + +# Core principles + + +# Syntax and query language + +1. What's wrong with this syntax? +``` +query { + posts: { + timestamp, + users: { + firstName + } + } +} +``` +2. How to execute graphql request as curl + + +# Queries + +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 + + +4. Get `subject` and `content` of `posts` ordered by `timestamp` ascending. Represent data as `ordered_posts` array + + +# Mutations + +5. Add new blog post +6. Add a new user using GraphQL Mutation +7. Create reusable insert mutation called addPost, which not only will insert a post, but create new user and profile + + > Hint: use variables + + +# Subscriptions +Return `n` most liked post where `n` can be provided from outside. diff --git a/run-hasura-locally.sh b/run-hasura-locally.sh new file mode 100755 index 0000000..60b2580 --- /dev/null +++ b/run-hasura-locally.sh @@ -0,0 +1,6 @@ +#! /bin/bash + +docker run -d -p 8080:8080 \ + -e HASURA_GRAPHQL_DATABASE_URL=postgres://pisfgfotrkeyev:afc3b63598baf280d09e449c0eb47e975ffde1582c0796b7a8b11459a3b8dbb9@ec2-107-20-167-11.compute-1.amazonaws.com:5432/d90nq4c245lrg4 \ + -e HASURA_GRAPHQL_ENABLE_CONSOLE=true \ + hasura/graphql-engine:latest | pbcopy \ No newline at end of file From fc082fbdb18848585aebc74bc7c27d54e48b23fa Mon Sep 17 00:00:00 2001 From: Luca Borrione Date: Tue, 12 Feb 2019 21:02:11 +0000 Subject: [PATCH 02/11] docs: adding a link to the excercises as mentioned in the course --- Day1/excercises.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Day1/excercises.md b/Day1/excercises.md index e5a36ae..13caa5f 100644 --- a/Day1/excercises.md +++ b/Day1/excercises.md @@ -11,6 +11,8 @@ You can read more about Hasura [here](https://medium.com/open-graphql/effortless Access Hasura console on localhost:8080/console +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) + - starwars api [GraphiQL](https://graphql-bootcamp-swapi.herokuapp.com) @@ -39,20 +41,20 @@ query { 2. How to execute graphql request as curl -# Queries +# Queries 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 4. Get `subject` and `content` of `posts` ordered by `timestamp` ascending. Represent data as `ordered_posts` array - + # Mutations 5. Add new blog post 6. Add a new user using GraphQL Mutation -7. Create reusable insert mutation called addPost, which not only will insert a post, but create new user and profile - +7. Create reusable insert mutation called addPost, which not only will insert a post, but create new user and profile + > Hint: use variables From d1d9104c1878b65d35e0f219717a932b58325585 Mon Sep 17 00:00:00 2001 From: Luca Borrione Date: Tue, 12 Feb 2019 21:02:37 +0000 Subject: [PATCH 03/11] chore: add .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa05008 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.history/ + From 3657a8a189a37b72ac0f81d964f770c9da554d9c Mon Sep 17 00:00:00 2001 From: Luca Borrione Date: Tue, 12 Feb 2019 21:15:29 +0000 Subject: [PATCH 04/11] restoring the spaces automatically removed when saving --- Day1/excercises.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Day1/excercises.md b/Day1/excercises.md index 13caa5f..51de143 100644 --- a/Day1/excercises.md +++ b/Day1/excercises.md @@ -41,20 +41,20 @@ query { 2. How to execute graphql request as curl -# Queries +# Queries 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 4. Get `subject` and `content` of `posts` ordered by `timestamp` ascending. Represent data as `ordered_posts` array - + # Mutations 5. Add new blog post 6. Add a new user using GraphQL Mutation -7. Create reusable insert mutation called addPost, which not only will insert a post, but create new user and profile - +7. Create reusable insert mutation called addPost, which not only will insert a post, but create new user and profile + > Hint: use variables From 081496c3d485d26a31b037bc6169bd897468c1ab Mon Sep 17 00:00:00 2001 From: Luca Borrione Date: Tue, 12 Feb 2019 21:15:49 +0000 Subject: [PATCH 05/11] adding .idea to .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index aa05008..14ad595 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .history/ +.idea/ From e0961108be69f4bd21ff6b9c64a9719c818945ba Mon Sep 17 00:00:00 2001 From: vnovick Date: Wed, 13 Feb 2019 05:43:33 +0200 Subject: [PATCH 06/11] Day2 --- Day2/LessonNotes.md | 378 ++++++++++++++++++++++++++++++++++++++- Day2/bootcampProject.png | Bin 0 -> 167469 bytes Day2/excercises.md | 15 +- 3 files changed, 391 insertions(+), 2 deletions(-) create mode 100644 Day2/bootcampProject.png diff --git a/Day2/LessonNotes.md b/Day2/LessonNotes.md index ae6ff83..1ddb9ee 100644 --- a/Day2/LessonNotes.md +++ b/Day2/LessonNotes.md @@ -1 +1,377 @@ -# Lesson Notes will be published at the end of Day2 \ No newline at end of file +# Consume GraphQL API from Vanilla JS + +[Consume GraphQL API](https://codesandbox.io/s/p9828pn87) + + +# Apollo + +[Why apollo and docs](https://www.apollographql.com/docs/react/why-apollo.html) + +- Declarative data fetching +- Zero config caching (normalized cache) + +[Apollo in Vanilla JS with Parcel](https://codesandbox.io/s/v07082jlwl) + +# React + +## Getting started + +### Apollo Boost + +`npm install apollo-boost react-apollo graphql --save` + +### Setting client + +``` +import ApolloClient from "apollo-boost"; + +import { ApolloProvider } from "react-apollo"; + + +const client = new ApolloClient({ + uri: "my-graphql-endpoint" +}); +``` +### Run logic on every request + +``` +request: async (operation) => { + //called on each requests + const token = localStorage.getItem("token") + operation.setContext({ + headers: { + authorization: token + } + }) + }, + +``` +### Error Handling +``` + onError: ({ graphQLErrors, networkError }) => { + if (graphQLErrors) { + sendToLoggingService(graphQLErrors); + } + if (networkError) { + logoutUser(); + } + }, + + clientState: // for local state management + headers: // headers + cache: // ApolloCache (apollo-cache-inmemory) or apollo-cache-persist +}); +``` + +#Query component + +``` +const getPosts = gql` + query getPosts { + posts(order_by: { timestamp: desc }) { + id + subject + content + user { + firstName + lastName + } + timestamp + } + } +`; + +export const PostsList = () => ( + + {({ loading, error, data }) => { + if (loading) { + return
Loading...
; + } + if (error) { + return
Error
; + } + return data.posts.map(Post); + }} +
+); + + +``` + +#Mutation component + +``` + + {(addPost, { data }) => ( +
+
+ )} +
+ +``` + +## Migrate from Apollo Boost to Apollo client + +[migration](https://www.apollographql.com/docs/react/advanced/boost-migration.html) + +`npm install apollo-client apollo-cache-inmemory apollo-link-http apollo-link-error apollo-link --save` + +``` +import { ApolloClient } from 'apollo-client'; +import { InMemoryCache } from 'apollo-cache-inmemory'; +import { HttpLink } from 'apollo-link-http'; + +const link = new HttpLink({ uri: 'my-graphql-server' }); + +const client = new ApolloClient({ + link, + cache: new InMemoryCache() +}); + +``` + +you can also use [apollo-cache-persist](https://github.com/apollographql/apollo-cache-persist) + +### Apollo Link is a Network Layer + +Check the [docs](https://www.apollographql.com/docs/react/advanced/network-layer.html#linkMiddleware) for more in depth overview + +## Authentication + +``` +import { setContext } from 'apollo-link-context'; + + +const httpLink = new HttpLink({ + uri: "https://graphql-on-postgres-demo.herokuapp.com/v1alpha1/graphql" +}); + +const authLink = setContext((_, { headers }) => { + // return the headers to the context so httpLink can read them + return { + headers: { + "X-Hasura-access-key": "my-secret-hash", + } + } +}); + +const client = new ApolloClient({ + link: authLink.concat(link), + cache: new InMemoryCache() +}) + +``` + +## Subscriptions + +`npm install apollo-link-ws subscriptions-transport-ws apollo-utilities` + +additional imports +``` +import { getMainDefinition } from 'apollo-utilities'; +import { split } from 'apollo-link'; +import { WebSocketLink } from 'apollo-link-ws'; +``` + +setup websocket link +``` +const wsLink = new WebSocketLink({ + uri: "wss://graphql-bootcamp-sample-blog.herokuapp.com/v1alpha1/graphql", + options: { + reconnect: true + } +}); +``` + +Redirect to operation based on operation definition + +``` +const link = split( + // split based on operation type + ({ query }) => { + const { kind, operation } = getMainDefinition(query); + return kind === 'OperationDefinition' && operation === 'subscription'; + }, + wsLink, + httpLink, +); +``` + +## Bonus + +[ReactNativeWeb](https://codesandbox.io/s/xk7zw3n4) + + +## Hooks + + + +# Angular + +[Setup](https://www.apollographql.com/docs/angular/basics/setup.html) + + +``` +npm install --save apollo-angular \ + apollo-angular-link-http \ + apollo-link \ + apollo-client \ + apollo-cache-inmemory \ + graphql-tag \ + graphql +``` + + +The apollo-client package requires `AsyncIterable` so make sure your `tsconfig.json` includes `esnext.asynciterable`: + +``` +import { HttpClientModule } from '@angular/common/http'; +import { ApolloModule, APOLLO_OPTIONS } from 'apollo-angular'; +import { HttpLinkModule, HttpLink } from 'apollo-angular-link-http'; +import { InMemoryCache } from 'apollo-cache-inmemory'; +``` + +Setup providers + +``` +@NgModule({ + imports: [BrowserModule, HttpClientModule, ApolloModule, HttpLinkModule], + providers: [{ + provide: APOLLO_OPTIONS, + useFactory(httpLink: HttpLink) { + return { + cache: new InMemoryCache(), + link: httpLink.create({ + uri: `https://graphql-bootcamp-sample-blog.herokuapp.com/v1alpha1/graphql` + }) + } + }, + deps: [HttpLink] + }], +``` + +in component + +``` + rates: any[]; + loading = true; + error: any; +``` + +`constructor(private apollo: Apollo) {}` + +``` + ngOnInit() { + this.apollo + .watchQuery({ + query: gql` + { + posts(order_by: { timestamp: desc }) { + id + subject + content + user { + firstName + lastName + } + timestamp + } + } + `, + }) + .valueChanges.subscribe(result => { + this.posts = result.data && result.data.posts; + this.loading = result.loading; + this.error = result.error; + }); +} +``` + + + +[Demo](https://stackblitz.com/edit/basic-apollo-angular-app-i6ejrc) + +[Docs](https://www.apollographql.com/docs/angular) + +# Vue + +[Demo](https://codesandbox.io/s/o1q71q63z) + +[Vue Apollo](https://vue-apollo.netlify.com) + +``` +import { ApolloClient } from 'apollo-client' +import { HttpLink } from 'apollo-link-http' +import { InMemoryCache } from 'apollo-cache-inmemory' +// New Imports +import { split } from 'apollo-link' +import { WebSocketLink } from 'apollo-link-ws' +import { getMainDefinition } from 'apollo-utilities' +``` + +Same as React exept: + +``` +// Install the vue plugin +Vue.use(VueApollo) +``` + +Queries declaration + +``` +new Vue({ + apollo: { + // Apollo specific options + }, +}) +``` + +``` + + + +``` + +### Mutations + +``` +methods: { + async addTag() { + // Call to the graphql mutation + const result = await this.$apollo.mutate({ + // Query + mutation: gql`mutation ($label: String!) { + addTag(label: $label) { + id + label + } + }`, + // Parameters + variables: { + label: this.newTag, + }, + }) + } +} +``` + +# Bonus section - react-apollo-hooks diff --git a/Day2/bootcampProject.png b/Day2/bootcampProject.png new file mode 100644 index 0000000000000000000000000000000000000000..45e2fd2b994e815528375c1eb44758fd10d6a536 GIT binary patch literal 167469 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 literal 0 HcmV?d00001 diff --git a/Day2/excercises.md b/Day2/excercises.md index feb54e3..899abb3 100644 --- a/Day2/excercises.md +++ b/Day2/excercises.md @@ -1 +1,14 @@ -# Excercises will be announced at the end of Day2 \ No newline at end of file +# Excercise for today is pretty simple and yet complicated + +This is what you need to create to some degree of complexity + +![project](./bootcampProject.png) + +- Pick framework of your choice and create overall markup and page structure +- Setup Apollo Client for a framework of your choice +- show all blog posts filted by date +- create add post form where you can pick existing users. When you click on submit, post will appear +- implement add comment form + +# Bonus +Implement edit and delete buttons that will trigger respective mutations \ No newline at end of file From f6824a4267a4306f25b46c0ed432e67e34eddb56 Mon Sep 17 00:00:00 2001 From: vnovick Date: Thu, 14 Feb 2019 05:01:25 +0200 Subject: [PATCH 07/11] Day3 --- .gitignore | 3 + Day3/LessonNotes.md | 177 ++- Day3/apollo-example/package-lock.json | 1112 ++++++++++++++++++ Day3/apollo-example/package.json | 15 + Day3/apollo-example/src/index.js | 100 ++ Day3/express-graphql/package.json | 16 + Day3/express-graphql/src/index.js | 48 + Day3/express-graphql/yarn.lock | 328 ++++++ Day3/graphql-yoga-example/package.json | 15 + Day3/graphql-yoga-example/src/index.js | 85 ++ Day3/graphql-yoga-example/src/schema.graphql | 40 + Day3/graphql-yoga-example/yarn.lock | 771 ++++++++++++ 12 files changed, 2709 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 Day3/apollo-example/package-lock.json create mode 100644 Day3/apollo-example/package.json create mode 100644 Day3/apollo-example/src/index.js create mode 100644 Day3/express-graphql/package.json create mode 100644 Day3/express-graphql/src/index.js create mode 100644 Day3/express-graphql/yarn.lock create mode 100644 Day3/graphql-yoga-example/package.json create mode 100644 Day3/graphql-yoga-example/src/index.js create mode 100644 Day3/graphql-yoga-example/src/schema.graphql create mode 100644 Day3/graphql-yoga-example/yarn.lock diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fb66bde --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*/**/node_modules +.idea +livecoding \ No newline at end of file diff --git a/Day3/LessonNotes.md b/Day3/LessonNotes.md index 7ea0859..c15b41a 100644 --- a/Day3/LessonNotes.md +++ b/Day3/LessonNotes.md @@ -1 +1,176 @@ -# Lesson Notes will be published at the end of Day3 \ No newline at end of file +# Directives + +`@include` +include field if argument is true +`@skip` +skip field if argument is true + + +``` +query getPosts($includeUser: Boolean!) { + posts(order_by:{ timestamp: desc}) { + id + subject + content + user @include(if: $includeUser){ + firstName + lastName + } + timestamp + } +} + +``` + +# Fragments + +``` + +fragment userWithAvatar on users { + firstName + lastName + profile { + avatarUrl + } +} + + +fragment userFragment on posts { + user { + ...userWithAvatar + comments { + message + } + } + } + +fragment postsData on posts { + id + subject + content +} + +query getPosts($includeUser: Boolean!) { + posts(order_by:{ timestamp: desc}) { + ...postsData + ...userFragment @include(if: $includeUser) + timestamp + } +} + +subscription subPosts { + posts { + ...postsData + ...userFragment + } +} +``` + +# Inline Fragments + +``` +query HeroForEpisode($ep: Episode!) { + hero(episode: $ep) { + name + ... on Droid { + primaryFunction + } + ... on Human { + height + } + } +} +``` + + +# Type System + +## GraphQLObjectType +a type with some fields +## Build in scalar types: + +Int: A signed 32‐bit integer. +Float: A signed double-precision floating-point value. +String: A UTF‐8 character sequence. +Boolean: true or false. +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. + +> You can define your own scalar types + +``` +scalar Date +``` + +## Enums + +``` +enum Episode { + NEWHOPE + EMPIRE + JEDI +} +``` + +## Lists +`[String]` + +## Non-Null +adding `!` in Schema definition tells us that type is not null + + +# Introspection + +``` +query { + __schema { + types { + name + } + } +} +``` + +# Defining your schema + +``` +type Query { + posts: [Post!]! +} +type Mutation { + createDraft(title: String!, content: String, author: String!): Post +} +``` + +Documenting + +``` +"Description for the type" +type Post { + """ + Description for field + """ +``` + +# Tooling +[GraphiQL](https://github.com/graphql/graphiql) + +[GraphCMS](https://graphcms.com/) + +[GraphQL Playground](https://github.com/prisma/graphql-playground) + +[Hasura](hasura.io) + +[GraphQL Docs](https://graphql-docs.com) + +# Setting up basic server + +[graphql-yoga](https://github.com/prisma/graphql-yoga) +[apollo-server](https://www.apollographql.com/docs/apollo-server/) +[graphql-express](https://github.com/graphql/express-graphql) + + +## For subscriptions check +[graphql-subscriptions](https://github.com/apollographql/graphql-subscriptions) + +# Authentication + diff --git a/Day3/apollo-example/package-lock.json b/Day3/apollo-example/package-lock.json new file mode 100644 index 0000000..83f491b --- /dev/null +++ b/Day3/apollo-example/package-lock.json @@ -0,0 +1,1112 @@ +{ + "name": "apollo-example", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@apollographql/apollo-tools": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.3.3.tgz", + "integrity": "sha512-/vLzZjloWB4xzgw2MRs9TUDIdCzS+No1hEClkEKqcnH86c2EgE/W0Dv2nkCTH9WxDrfryziJWbNMurYYkm61Zw==", + "requires": { + "apollo-env": "0.3.3" + } + }, + "@apollographql/graphql-playground-html": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.6.tgz", + "integrity": "sha512-lqK94b+caNtmKFs5oUVXlSpN3sm5IXZ+KfhMxOtr0LR2SqErzkoJilitjDvJ1WbjHlxLI7WtCjRmOLdOGJqtMQ==" + }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" + }, + "@types/accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", + "requires": { + "@types/node": "*" + } + }, + "@types/body-parser": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz", + "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.32", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", + "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", + "requires": { + "@types/node": "*" + } + }, + "@types/cors": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.4.tgz", + "integrity": "sha512-ipZjBVsm2tF/n8qFGOuGBkUij9X9ZswVi9G3bx/6dz7POpVa6gVHcj1wsX/LVEn9MMF41fxK/PnZPPoTD1UFPw==", + "requires": { + "@types/express": "*" + } + }, + "@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==" + }, + "@types/express": { + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.16.1.tgz", + "integrity": "sha512-V0clmJow23WeyblmACoxbHBu2JKlE5TiIme6Lem14FnPW9gsttyHtk6wq7njcdIWH1njAaFgR8gW09lgY98gQg==", + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.1.tgz", + "integrity": "sha512-QgbIMRU1EVRry5cIu1ORCQP4flSYqLM1lS5LYyGWfKnFT3E58f0gKto7BR13clBFVrVZ0G0rbLZ1hUpSkgQQOA==", + "requires": { + "@types/node": "*", + "@types/range-parser": "*" + } + }, + "@types/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz", + "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==" + }, + "@types/mime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz", + "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==" + }, + "@types/node": { + "version": "11.9.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.9.3.tgz", + "integrity": "sha512-DMiqG51GwES/c4ScBY0u5bDlH44+oY8AeYHjY1SGCWidD7h08o1dfHue/TGK7REmif2KiJzaUskO+Q0eaeZ2fQ==" + }, + "@types/range-parser": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", + "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" + }, + "@types/serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", + "requires": { + "@types/express-serve-static-core": "*", + "@types/mime": "*" + } + }, + "@types/ws": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.1.tgz", + "integrity": "sha512-EzH8k1gyZ4xih/MaZTXwT2xOkPiIMSrhQ9b8wrlX88L0T02eYsddatQlwVFlEPyEqV0ChpdpNnE51QPH6NVT4Q==", + "requires": { + "@types/events": "*", + "@types/node": "*" + } + }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "requires": { + "mime-types": "~2.1.18", + "negotiator": "0.6.1" + } + }, + "apollo-cache-control": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.5.0.tgz", + "integrity": "sha512-zu26CFj7CboxLB6cckZQEiSUGXIr8MViEGIC5Vesz2yd37sjtevMfRwQhxFuK0HinR0T/WC3dz2k5cj+33vQQQ==", + "requires": { + "apollo-server-env": "2.2.0", + "graphql-extensions": "0.5.0" + } + }, + "apollo-datasource": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-0.3.0.tgz", + "integrity": "sha512-+jWs3ezhx4lcAAPIHtlj0Zoiv2tvwfzn7feHuhxub3xFwkJm39T8hPjb3aMQCsuS7TukBD+F5ndgVob5hL/5Nw==", + "requires": { + "apollo-server-caching": "0.3.0", + "apollo-server-env": "2.2.0" + } + }, + "apollo-engine-reporting": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/apollo-engine-reporting/-/apollo-engine-reporting-1.0.0.tgz", + "integrity": "sha512-9gZSME9ggZwL1nBBvfgSehwc+PtcvZC1/3NYrBOFgidJbrEFita2w5A0jM8Brjo+N2FMKNYWGj8WQ1ywO21JPg==", + "requires": { + "apollo-engine-reporting-protobuf": "0.2.0", + "apollo-graphql": "0.1.0", + "apollo-server-core": "2.4.0", + "apollo-server-env": "2.2.0", + "async-retry": "^1.2.1", + "graphql-extensions": "0.5.0" + } + }, + "apollo-engine-reporting-protobuf": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.2.0.tgz", + "integrity": "sha512-qI+GJKN78UMJ9Aq/ORdiM2qymZ5yswem+/VDdVFocq+/e1QqxjnpKjQWISkswci5+WtpJl9SpHBNxG98uHDKkA==", + "requires": { + "protobufjs": "^6.8.6" + } + }, + "apollo-env": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/apollo-env/-/apollo-env-0.3.3.tgz", + "integrity": "sha512-VsUX14bfQCJpKmTyYNBTeLrdeFabjmpSPVQ2y4IKnwqaxVqZuRca3WFE8ercszO1tLwS6HMM7mFw+IIbtQXo/w==", + "requires": { + "core-js": "3.0.0-beta.13", + "node-fetch": "^2.2.0" + } + }, + "apollo-graphql": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/apollo-graphql/-/apollo-graphql-0.1.0.tgz", + "integrity": "sha512-Mi5GqZJz1A/0i8SEm9EVHWe/LkGbYzV5wzobUY+1Q0SI1NdFtRgqHZUdHU0hz1jDnL+dpRqK1huVmtOO/DGa/A==", + "requires": { + "lodash.sortby": "^4.7.0" + } + }, + "apollo-link": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.8.tgz", + "integrity": "sha512-lfzGRxhK9RmiH3HPFi7TIEBhhDY9M5a2ZDnllcfy5QDk7cCQHQ1WQArcw1FK0g1B+mV4Kl72DSrlvZHZJEolrA==", + "requires": { + "zen-observable-ts": "^0.8.15" + } + }, + "apollo-server": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/apollo-server/-/apollo-server-2.4.0.tgz", + "integrity": "sha512-dEc2lGA1qkvffnArlNXDtJ74+gh4dNKbtTYsnoTveve3ML96DK8G2u5yNqwRqxZHUQmLrx3jiehFaPBqk+Cuhw==", + "requires": { + "apollo-server-core": "2.4.0", + "apollo-server-express": "2.4.0", + "express": "^4.0.0", + "graphql-subscriptions": "^1.0.0", + "graphql-tools": "^4.0.0" + } + }, + "apollo-server-caching": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.3.0.tgz", + "integrity": "sha512-dHwWUsRZu7I1yUfzTwPJgOigMsftgp8w3X96Zdch1ICWN7cM6aNxks9tTnLd+liUSEzdYLlTmEy5VUturF2IAw==", + "requires": { + "lru-cache": "^5.0.0" + } + }, + "apollo-server-core": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.4.0.tgz", + "integrity": "sha512-rTFJa12NzTWC9IJrXDr8AZMs1Slbes9YxbyaI+cMC5fs8O9wkCkb34C/1Tp7xKX0fgauXrKZpXv7yPTSm+4YFg==", + "requires": { + "@apollographql/apollo-tools": "^0.3.0", + "@apollographql/graphql-playground-html": "^1.6.6", + "@types/ws": "^6.0.0", + "apollo-cache-control": "0.5.0", + "apollo-datasource": "0.3.0", + "apollo-engine-reporting": "1.0.0", + "apollo-server-caching": "0.3.0", + "apollo-server-env": "2.2.0", + "apollo-server-errors": "2.2.0", + "apollo-server-plugin-base": "0.3.0", + "apollo-tracing": "0.5.0", + "fast-json-stable-stringify": "^2.0.0", + "graphql-extensions": "0.5.0", + "graphql-subscriptions": "^1.0.0", + "graphql-tag": "^2.9.2", + "graphql-tools": "^4.0.0", + "graphql-upload": "^8.0.2", + "lodash": "^4.17.10", + "subscriptions-transport-ws": "^0.9.11", + "ws": "^6.0.0" + } + }, + "apollo-server-env": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-2.2.0.tgz", + "integrity": "sha512-wjJiI5nQWPBpNmpiLP389Ezpstp71szS6DHAeTgYLb/ulCw3CTuuA+0/E1bsThVWiQaDeHZE0sE3yI8q2zrYiA==", + "requires": { + "node-fetch": "^2.1.2", + "util.promisify": "^1.0.0" + } + }, + "apollo-server-errors": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-2.2.0.tgz", + "integrity": "sha512-gV9EZG2tovFtT1cLuCTavnJu2DaKxnXPRNGSTo+SDI6IAk6cdzyW0Gje5N2+3LybI0Wq5KAbW6VLei31S4MWmg==" + }, + "apollo-server-express": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.4.0.tgz", + "integrity": "sha512-uDS7OZJ3EwFr4eZ9k1MiBtUTaqKgCXUUTCknPTdCbTzBel7TjNsa6PNKrSQk+jrLja2H8VwNjbra8uBF5z70Pw==", + "requires": { + "@apollographql/graphql-playground-html": "^1.6.6", + "@types/accepts": "^1.3.5", + "@types/body-parser": "1.17.0", + "@types/cors": "^2.8.4", + "@types/express": "4.16.1", + "accepts": "^1.3.5", + "apollo-server-core": "2.4.0", + "body-parser": "^1.18.3", + "cors": "^2.8.4", + "graphql-subscriptions": "^1.0.0", + "graphql-tools": "^4.0.0", + "type-is": "^1.6.16" + } + }, + "apollo-server-plugin-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.3.0.tgz", + "integrity": "sha512-SOwp4cpZwyklvP1MkMcY6+12c1hrb5gwC4vK4a23kL5rr9FC0sENcXo3uVVM4XlDGOXIkY+sCM8ngKFuef2flw==" + }, + "apollo-tracing": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.5.0.tgz", + "integrity": "sha512-j0icEhLYf0xS6Q/iCXA2j9KfpYw0a/XvLSUio7fm5yUwtXP2Pp11x5BtK1dI8sLMiaOqUrREz2XjV4PKLzQPuA==", + "requires": { + "apollo-server-env": "2.2.0", + "graphql-extensions": "0.5.0" + } + }, + "apollo-utilities": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.1.3.tgz", + "integrity": "sha512-pF9abhiClX5gfj/WFWZh8DiI33nOLGxRhXH9ZMquaM1V8bhq1WLFPt2QjShWH3kGQVeIGUK+FQefnhe+ZaaAYg==", + "requires": { + "fast-json-stable-stringify": "^2.0.0", + "tslib": "^1.9.3" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + }, + "async-retry": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.2.3.tgz", + "integrity": "sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q==", + "requires": { + "retry": "0.12.0" + } + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "body-parser": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "~1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "~2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "~1.6.16" + }, + "dependencies": { + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + } + } + }, + "busboy": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.3.0.tgz", + "integrity": "sha512-e+kzZRAbbvJPLjQz2z+zAyr78BSi9IFeBTyLwF76g78Q2zRt/RZ1NtS3MS17v2yLqYfLz69zHdC+1L4ja8PwqQ==", + "requires": { + "dicer": "0.3.0" + } + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "core-js": { + "version": "3.0.0-beta.13", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.0-beta.13.tgz", + "integrity": "sha512-16Q43c/3LT9NyePUJKL8nRIQgYWjcBhjJSMWg96PVSxoS0PeE0NHitPI3opBrs9MGGHjte1KoEVr9W63YKlTXQ==" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "deprecated-decorator": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz", + "integrity": "sha1-AJZjF7ehL+kvPMgx91g68ym4bDc=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "dicer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz", + "integrity": "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==", + "requires": { + "streamsearch": "0.1.2" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "eventemitter3": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", + "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==" + }, + "express": { + "version": "4.16.4", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", + "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "requires": { + "accepts": "~1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.3", + "content-disposition": "0.5.2", + "content-type": "~1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.4", + "qs": "6.5.2", + "range-parser": "~1.2.0", + "safe-buffer": "5.1.2", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "~1.4.0", + "type-is": "~1.6.16", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + } + } + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + } + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs-capacitor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fs-capacitor/-/fs-capacitor-2.0.0.tgz", + "integrity": "sha512-CIJZpxbVWhO+qyODeCR55Q+6vj0p2oL8DAWd/DZi3Ev+25PimUoScw07K0fPgluaH3lFoqNvwW13BDYfHWFQJw==" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "graphql": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.1.1.tgz", + "integrity": "sha512-C5zDzLqvfPAgTtP8AUPIt9keDabrdRAqSWjj2OPRKrKxI9Fb65I36s1uCs1UUBFnSWTdO7hyHi7z1ZbwKMKF6Q==", + "requires": { + "iterall": "^1.2.2" + } + }, + "graphql-extensions": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.5.0.tgz", + "integrity": "sha512-2i0rpe4/D8jZj6XmxXGLFDAsGLhkFrSdpS5WfvTAzoXOc52hUAxNdsbgRQGeKMFhmanqA6FDXxO/s+BtPHChVA==", + "requires": { + "@apollographql/apollo-tools": "^0.3.0" + } + }, + "graphql-subscriptions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-1.0.0.tgz", + "integrity": "sha512-+ytmryoHF1LVf58NKEaNPRUzYyXplm120ntxfPcgOBC7TnK7Tv/4VRHeh4FAR9iL+O1bqhZs4nkibxQ+OA5cDQ==", + "requires": { + "iterall": "^1.2.1" + } + }, + "graphql-tag": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.10.1.tgz", + "integrity": "sha512-jApXqWBzNXQ8jYa/HLkZJaVw9jgwNqZkywa2zfFn16Iv1Zb7ELNHkJaXHR7Quvd5SIGsy6Ny7SUKATgnu05uEg==" + }, + "graphql-tools": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/graphql-tools/-/graphql-tools-4.0.4.tgz", + "integrity": "sha512-chF12etTIGVVGy3fCTJ1ivJX2KB7OSG4c6UOJQuqOHCmBQwTyNgCDuejZKvpYxNZiEx7bwIjrodDgDe9RIkjlw==", + "requires": { + "apollo-link": "^1.2.3", + "apollo-utilities": "^1.0.1", + "deprecated-decorator": "^0.1.6", + "iterall": "^1.1.3", + "uuid": "^3.1.0" + } + }, + "graphql-upload": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/graphql-upload/-/graphql-upload-8.0.4.tgz", + "integrity": "sha512-jsTfVYXJ5mU6BXiiJ20CUCAcf41ICCQJ2ltwQFUuaFKiY4JhlG99uZZp5S3hbpQ/oA1kS7hz4pRtsnxPCa7Yfg==", + "requires": { + "busboy": "^0.3.0", + "fs-capacitor": "^2.0.0", + "http-errors": "^1.7.1", + "object-path": "^0.11.4" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" + }, + "http-errors": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.1.tgz", + "integrity": "sha512-jWEUgtZWGSMba9I1N3gc1HmvpBUaNC9vDdA46yScAdp+C5rdEuKWUBLWTQpW9FwSWSbYYs++b6SDCxf9UEJzfw==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ipaddr.js": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "requires": { + "has": "^1.0.1" + } + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "requires": { + "has-symbols": "^1.0.0" + } + }, + "iterall": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.2.2.tgz", + "integrity": "sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA==" + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + }, + "mime-db": { + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", + "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" + }, + "mime-types": { + "version": "2.1.21", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", + "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", + "requires": { + "mime-db": "~1.37.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "node-fetch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz", + "integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", + "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==" + }, + "object-path": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", + "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=" + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "protobufjs": { + "version": "6.8.8", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", + "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.0", + "@types/node": "^10.1.0", + "long": "^4.0.0" + }, + "dependencies": { + "@types/node": { + "version": "10.12.26", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.26.tgz", + "integrity": "sha512-nMRqS+mL1TOnIJrL6LKJcNZPB8V3eTfRo9FQA2b5gDvrHurC8XbSA86KNe0dShlEL7ReWJv/OU9NL7Z0dnqWTg==" + } + } + }, + "proxy-addr": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", + "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.8.0" + } + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "raw-body": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" + }, + "dependencies": { + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + } + } + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "dependencies": { + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + } + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + } + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" + }, + "subscriptions-transport-ws": { + "version": "0.9.15", + "resolved": "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.15.tgz", + "integrity": "sha512-f9eBfWdHsePQV67QIX+VRhf++dn1adyC/PZHP6XI5AfKnZ4n0FW+v5omxwdHVpd4xq2ZijaHEcmlQrhBY79ZWQ==", + "requires": { + "backo2": "^1.0.2", + "eventemitter3": "^3.1.0", + "iterall": "^1.2.1", + "symbol-observable": "^1.0.4", + "ws": "^5.2.0" + }, + "dependencies": { + "ws": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", + "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.18" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "ws": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.3.tgz", + "integrity": "sha512-tbSxiT+qJI223AP4iLfQbkbxkwdFcneYinM2+x46Gx2wgvbaOMO36czfdfVUBRTHvzAMRhDd98sA5d/BuWbQdg==", + "requires": { + "async-limiter": "~1.0.0" + } + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + }, + "zen-observable": { + "version": "0.8.13", + "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.13.tgz", + "integrity": "sha512-fa+6aDUVvavYsefZw0zaZ/v3ckEtMgCFi30sn91SEZea4y/6jQp05E3omjkX91zV6RVdn15fqnFZ6RKjRGbp2g==" + }, + "zen-observable-ts": { + "version": "0.8.15", + "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.15.tgz", + "integrity": "sha512-sXKPWiw6JszNEkRv5dQ+lQCttyjHM2Iks74QU5NP8mMPS/NrzTlHDr780gf/wOBqmHkPO6NCLMlsa+fAQ8VE8w==", + "requires": { + "zen-observable": "^0.8.0" + } + } + } +} diff --git a/Day3/apollo-example/package.json b/Day3/apollo-example/package.json new file mode 100644 index 0000000..cdfcb6d --- /dev/null +++ b/Day3/apollo-example/package.json @@ -0,0 +1,15 @@ +{ + "name": "apollo-example", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "apollo-server": "^2.4.0", + "graphql": "^14.1.1" + } +} diff --git a/Day3/apollo-example/src/index.js b/Day3/apollo-example/src/index.js new file mode 100644 index 0000000..056bfa7 --- /dev/null +++ b/Day3/apollo-example/src/index.js @@ -0,0 +1,100 @@ +const { ApolloServer, gql } = require('apollo-server'); + +let idCount = 0 +let posts = [] + +const resolvers = { + Query: { + posts: () => posts, + post: (parent, args) => posts.find(post => post.id === args.id), + }, + Mutation: { + createDraft: (parent, args) => { + const post = { + id: `post_${idCount++}`, + title: args.title, + content: args.content, + comments: [], + author: { + id: `author_${new Date().getMilliseconds()}`, + name: args.author + }, + published: false, + } + posts.push(post) + return post + }, + addComment: (parent, args) => { + posts.forEach(post => { + if (post.id === args.id) { + const comment = { + id: `comment_${new Date().getMilliseconds()}`, + content: args.content + } + post.comments.push(comment) + } + }) + + return args.id + }, + deletePost: (parent, args) => { + const postIndex = posts.findIndex(post => post.id === args.id) + if (postIndex > -1) { + const deleted = posts.splice(postIndex, 1) + return deleted[0] + } + return null + }, + publish: (parent, args) => { + const postIndex = posts.findIndex(post => post.id === args.id) + posts[postIndex].published = true + return posts[postIndex] + }, + }, +} + +const schema = gql` +type Query { + posts: [Post!]! + post(id: ID!): Post + description: String! +} + +type Mutation { + createDraft(title: String!, content: String, author: String!): Post + addComment(id: ID!, content: String!): ID + deletePost(id: ID!): Post + publish(id: ID!): Post +} + +type Post { + id: ID! + title: String! + content: String! + published: Boolean! + author: Author! + comments: [Comment] +} + + +type Author { + id: ID! + name: String! +} + +type Comment { + id: ID! + content: String! +} +` + + + +const server = new ApolloServer({ + typeDefs: schema, + resolvers +}) + +server.listen().then(({ url }) => { + console.log(`🚀 Server ready at ${url}`); +}); \ No newline at end of file diff --git a/Day3/express-graphql/package.json b/Day3/express-graphql/package.json new file mode 100644 index 0000000..4d152f3 --- /dev/null +++ b/Day3/express-graphql/package.json @@ -0,0 +1,16 @@ +{ + "name": "express-graphql", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "express": "^4.16.4", + "express-graphql": "^0.7.1", + "graphql": "^14.1.1" + } +} diff --git a/Day3/express-graphql/src/index.js b/Day3/express-graphql/src/index.js new file mode 100644 index 0000000..abe63a4 --- /dev/null +++ b/Day3/express-graphql/src/index.js @@ -0,0 +1,48 @@ +const express = require('express'); +const graphqlHTTP = require('express-graphql'); +const { buildSchema } = require('graphql'); + +const app = express(); + +const MyGraphQLSchema = buildSchema(` + +type Query { + posts: [Post!]! + post(id: ID!): Post + description: String! +} + +type Mutation { + createDraft(title: String!, content: String, author: String!): Post + addComment(id: ID!, content: String!): ID + deletePost(id: ID!): Post + publish(id: ID!): Post +} + +type Post { + id: ID! + title: String! + content: String! + published: Boolean! + author: Author! + comments: [Comment] +} + + +type Author { + id: ID! + name: String! +} + +type Comment { + id: ID! + content: String! +} +`) + +app.use('/graphql', graphqlHTTP({ + schema: MyGraphQLSchema, + graphiql: true +})); + +app.listen(4000); \ No newline at end of file diff --git a/Day3/express-graphql/yarn.lock b/Day3/express-graphql/yarn.lock new file mode 100644 index 0000000..3f1b9a6 --- /dev/null +++ b/Day3/express-graphql/yarn.lock @@ -0,0 +1,328 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +accepts@^1.3.5, accepts@~1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" + dependencies: + mime-types "~2.1.18" + negotiator "0.6.1" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + +body-parser@1.18.3: + version "1.18.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" + dependencies: + bytes "3.0.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "~1.6.3" + iconv-lite "0.4.23" + on-finished "~2.3.0" + qs "6.5.2" + raw-body "2.3.3" + type-is "~1.6.16" + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + +content-type@^1.0.4, content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + +express-graphql@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/express-graphql/-/express-graphql-0.7.1.tgz#6c7712ee966c3aba1930e064ea4c8181e56fd3ef" + dependencies: + accepts "^1.3.5" + content-type "^1.0.4" + http-errors "^1.7.1" + raw-body "^2.3.3" + +express@^4.16.4: + version "4.16.4" + resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e" + dependencies: + accepts "~1.3.5" + array-flatten "1.1.1" + body-parser "1.18.3" + content-disposition "0.5.2" + content-type "~1.0.4" + cookie "0.3.1" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.1.1" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.2" + path-to-regexp "0.1.7" + proxy-addr "~2.0.4" + qs "6.5.2" + range-parser "~1.2.0" + safe-buffer "5.1.2" + send "0.16.2" + serve-static "1.13.2" + setprototypeof "1.1.0" + statuses "~1.4.0" + type-is "~1.6.16" + utils-merge "1.0.1" + vary "~1.1.2" + +finalhandler@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.2" + statuses "~1.4.0" + unpipe "~1.0.0" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + +graphql@^14.1.1: + version "14.1.1" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-14.1.1.tgz#d5d77df4b19ef41538d7215d1e7a28834619fac0" + dependencies: + iterall "^1.2.2" + +http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@^1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.1.tgz#6a4ffe5d35188e1c39f872534690585852e1f027" + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +iconv-lite@0.4.23: + version "0.4.23" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" + dependencies: + safer-buffer ">= 2.1.2 < 3" + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +ipaddr.js@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" + +iterall@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + +mime-db@~1.37.0: + version "1.37.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8" + +mime-types@~2.1.18: + version "2.1.21" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96" + dependencies: + mime-db "~1.37.0" + +mime@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +parseurl@~1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + +proxy-addr@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.8.0" + +qs@6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + +range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + +raw-body@2.3.3, raw-body@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" + dependencies: + bytes "3.0.0" + http-errors "1.6.3" + iconv-lite "0.4.23" + unpipe "1.0.0" + +safe-buffer@5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + +send@0.16.2: + version "0.16.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.6.2" + mime "1.4.1" + ms "2.0.0" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.4.0" + +serve-static@1.13.2: + version "1.13.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.2" + send "0.16.2" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + +statuses@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + +type-is@~1.6.16: + version "1.6.16" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.18" + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" diff --git a/Day3/graphql-yoga-example/package.json b/Day3/graphql-yoga-example/package.json new file mode 100644 index 0000000..b8dae0e --- /dev/null +++ b/Day3/graphql-yoga-example/package.json @@ -0,0 +1,15 @@ +{ + "name": "graphql-yoga-example", + "version": "1.0.0", + "description": "", + "main": "src/index.js", + "scripts": { + "start": "node src/index.js", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "graphql-yoga": "^1.17.4" + } +} diff --git a/Day3/graphql-yoga-example/src/index.js b/Day3/graphql-yoga-example/src/index.js new file mode 100644 index 0000000..535783a --- /dev/null +++ b/Day3/graphql-yoga-example/src/index.js @@ -0,0 +1,85 @@ +const { GraphQLServer, PubSub } = require('graphql-yoga') + +let idCount = 0 +let posts = [] +const channel = Math.random().toString(36).substring(2, 15) + +const resolvers = { + Query: { + posts: () => posts, + post: (parent, args) => posts.find(post => post.id === args.id), + }, + Mutation: { + createDraft: (parent, args) => { + const post = { + id: `post_${idCount++}`, + title: args.title, + content: args.content, + comments: [], + author: { + id: `author_${new Date().getMilliseconds()}`, + name: args.author + }, + published: false, + } + posts.push(post) + pubsub.publish(channel, { posts}) + return post + }, + addComment: (parent, args) => { + posts.forEach(post => { + if (post.id === args.id) { + const comment = { + id: `comment_${new Date().getMilliseconds()}`, + content: args.content + } + post.comments.push(comment) + pubsub.publish(channel, { posts}) + } + }) + + return args.id + }, + deletePost: (parent, args) => { + const postIndex = posts.findIndex(post => post.id === args.id) + if (postIndex > -1) { + const deleted = posts.splice(postIndex, 1) + pubsub.publish(channel, { posts}) + return deleted[0] + } + return null + }, + publish: (parent, args) => { + const postIndex = posts.findIndex(post => post.id === args.id) + posts[postIndex].published = true + pubsub.publish(channel, { posts}) + return posts[postIndex] + }, + }, + Subscription: { + posts: { + subscribe: (parent, args, { pubsub }) => { + setImmediate(() => pubsub.publish(channel, { posts})) + return pubsub.asyncIterator(channel) + }, + } + }, +} + +const pubsub = new PubSub() + + +const server = new GraphQLServer({ + typeDefs: './src/schema.graphql', + resolvers, + context: { pubsub } +}) + +server.start({ + port: 5577, + endpoint: '/graphql', + playground: '/playground', +},() => { + console.log(`The graphql server is running on http://localhost:5577/graphql`) + console.log(`Playground available here: http://localhost:5577/playground`) +}) diff --git a/Day3/graphql-yoga-example/src/schema.graphql b/Day3/graphql-yoga-example/src/schema.graphql new file mode 100644 index 0000000..301edb3 --- /dev/null +++ b/Day3/graphql-yoga-example/src/schema.graphql @@ -0,0 +1,40 @@ +type Query { + posts: [Post!]! + post(id: ID!): Post + description: String! +} + +type Mutation { + createDraft(title: String!, content: String, author: String!): Post + addComment(id: ID!, content: String!): ID + deletePost(id: ID!): Post + publish(id: ID!): Post +} + +type Subscription { + posts: [Post!]! +} + +"Description for the type" +type Post { + """ + ## Description for field + """ + id: ID! + title: String! + content: String! + published: Boolean! + author: Author! + comments: [Comment] +} + + +type Author { + id: ID! + name: String! +} + +type Comment { + id: ID! + content: String! +} \ No newline at end of file diff --git a/Day3/graphql-yoga-example/yarn.lock b/Day3/graphql-yoga-example/yarn.lock new file mode 100644 index 0000000..70461b5 --- /dev/null +++ b/Day3/graphql-yoga-example/yarn.lock @@ -0,0 +1,771 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@types/body-parser@*": + version "1.17.0" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.17.0.tgz#9f5c9d9bd04bb54be32d5eb9fc0d8c974e6cf58c" + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.32" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.32.tgz#aa0e9616b9435ccad02bc52b5b454ffc2c70ba28" + dependencies: + "@types/node" "*" + +"@types/cors@^2.8.4": + version "2.8.4" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.4.tgz#50991a759a29c0b89492751008c6af7a7c8267b0" + dependencies: + "@types/express" "*" + +"@types/express-serve-static-core@*": + version "4.16.1" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.16.1.tgz#35df7b302299a4ab138a643617bd44078e74d44e" + dependencies: + "@types/node" "*" + "@types/range-parser" "*" + +"@types/express@*", "@types/express@^4.11.1": + version "4.16.1" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.16.1.tgz#d756bd1a85c34d87eaf44c888bad27ba8a4b7cf0" + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "*" + "@types/serve-static" "*" + +"@types/graphql-deduplicator@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/graphql-deduplicator/-/graphql-deduplicator-2.0.0.tgz#9e577b8f3feb3d067b0ca756f4a1fb356d533922" + +"@types/graphql@^14.0.0": + version "14.0.7" + resolved "https://registry.yarnpkg.com/@types/graphql/-/graphql-14.0.7.tgz#daa09397220a68ce1cbb3f76a315ff3cd92312f6" + +"@types/mime@*": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.1.tgz#dc488842312a7f075149312905b5e3c0b054c79d" + +"@types/node@*": + version "11.9.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.9.3.tgz#14adbb5ab8cd563f549fbae8dbe92e0b7d6e76cc" + +"@types/range-parser@*": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" + +"@types/serve-static@*": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.2.tgz#f5ac4d7a6420a99a6a45af4719f4dcd8cd907a48" + dependencies: + "@types/express-serve-static-core" "*" + "@types/mime" "*" + +"@types/zen-observable@^0.5.3": + version "0.5.4" + resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.5.4.tgz#b863a4191e525206819e008097ebf0fb2e3a1cdc" + +accepts@~1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" + dependencies: + mime-types "~2.1.18" + negotiator "0.6.1" + +apollo-cache-control@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/apollo-cache-control/-/apollo-cache-control-0.1.1.tgz#173d14ceb3eb9e7cb53de7eb8b61bee6159d4171" + dependencies: + graphql-extensions "^0.0.x" + +apollo-link@^1.2.3: + version "1.2.8" + resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.8.tgz#0f252adefd5047ac1a9f35ba9439d216587dcd84" + dependencies: + zen-observable-ts "^0.8.15" + +apollo-server-core@^1.3.6, apollo-server-core@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-1.4.0.tgz#4faff7f110bfdd6c3f47008302ae24140f94c592" + dependencies: + apollo-cache-control "^0.1.0" + apollo-tracing "^0.1.0" + graphql-extensions "^0.0.x" + +apollo-server-express@^1.3.6: + version "1.4.0" + resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-1.4.0.tgz#7d7c58d6d6f9892b83fe575669093bb66738b125" + dependencies: + apollo-server-core "^1.4.0" + apollo-server-module-graphiql "^1.4.0" + +apollo-server-lambda@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/apollo-server-lambda/-/apollo-server-lambda-1.3.6.tgz#bdaac37f143c6798e40b8ae75580ba673cea260e" + dependencies: + apollo-server-core "^1.3.6" + apollo-server-module-graphiql "^1.3.4" + +apollo-server-module-graphiql@^1.3.4, apollo-server-module-graphiql@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/apollo-server-module-graphiql/-/apollo-server-module-graphiql-1.4.0.tgz#c559efa285578820709f1769bb85d3b3eed3d8ec" + +apollo-tracing@^0.1.0: + version "0.1.4" + resolved "https://registry.yarnpkg.com/apollo-tracing/-/apollo-tracing-0.1.4.tgz#5b8ae1b01526b160ee6e552a7f131923a9aedcc7" + dependencies: + graphql-extensions "~0.0.9" + +apollo-upload-server@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/apollo-upload-server/-/apollo-upload-server-7.1.0.tgz#21e07b52252b3749b913468599813e13cfca805f" + dependencies: + busboy "^0.2.14" + fs-capacitor "^1.0.0" + http-errors "^1.7.0" + object-path "^0.11.4" + +apollo-utilities@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.1.3.tgz#a8883c0392f6b46eac0d366204ebf34be9307c87" + dependencies: + fast-json-stable-stringify "^2.0.0" + tslib "^1.9.3" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + +async-limiter@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + +aws-lambda@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/aws-lambda/-/aws-lambda-0.1.2.tgz#19b1585075df31679597b976a5f1def61f12ccee" + dependencies: + aws-sdk "^*" + commander "^2.5.0" + dotenv "^0.4.0" + +aws-sdk@^*: + version "2.402.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.402.0.tgz#d4bfe8f16f476e26a7da4edba79b878a1cabb0fb" + dependencies: + buffer "4.9.1" + events "1.1.1" + ieee754 "1.1.8" + jmespath "0.15.0" + querystring "0.2.0" + sax "1.2.1" + url "0.10.3" + uuid "3.3.2" + xml2js "0.4.19" + +backo2@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + +base64-js@^1.0.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" + +body-parser-graphql@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/body-parser-graphql/-/body-parser-graphql-1.1.0.tgz#80a80353c7cb623562fd375750dfe018d75f0f7c" + dependencies: + body-parser "^1.18.2" + +body-parser@1.18.3, body-parser@^1.18.2: + version "1.18.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" + dependencies: + bytes "3.0.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "~1.6.3" + iconv-lite "0.4.23" + on-finished "~2.3.0" + qs "6.5.2" + raw-body "2.3.3" + type-is "~1.6.16" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + +buffer@4.9.1: + version "4.9.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +busboy@^0.2.14: + version "0.2.14" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453" + dependencies: + dicer "0.2.5" + readable-stream "1.1.x" + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + +commander@^2.5.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" + +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + +core-js@^2.5.3: + version "2.6.4" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.4.tgz#b8897c062c4d769dd30a0ac5c73976c47f92ea0d" + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +cors@^2.8.4: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + dependencies: + object-assign "^4" + vary "^1" + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + +deprecated-decorator@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz#00966317b7a12fe92f3cc831f7583af329b86c37" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +dicer@0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.2.5.tgz#5996c086bb33218c812c090bddc09cd12facb70f" + dependencies: + readable-stream "1.1.x" + streamsearch "0.1.2" + +dotenv@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-0.4.0.tgz#f6fb351363c2d92207245c737802c9ab5ae1495a" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + +eventemitter3@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" + +events@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + +express@^4.16.3: + version "4.16.4" + resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e" + dependencies: + accepts "~1.3.5" + array-flatten "1.1.1" + body-parser "1.18.3" + content-disposition "0.5.2" + content-type "~1.0.4" + cookie "0.3.1" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.1.1" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.2" + path-to-regexp "0.1.7" + proxy-addr "~2.0.4" + qs "6.5.2" + range-parser "~1.2.0" + safe-buffer "5.1.2" + send "0.16.2" + serve-static "1.13.2" + setprototypeof "1.1.0" + statuses "~1.4.0" + type-is "~1.6.16" + utils-merge "1.0.1" + vary "~1.1.2" + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + +finalhandler@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.2" + statuses "~1.4.0" + unpipe "~1.0.0" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + +fs-capacitor@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fs-capacitor/-/fs-capacitor-1.0.1.tgz#ff9dbfa14dfaf4472537720f19c3088ed9278df0" + +graphql-deduplicator@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/graphql-deduplicator/-/graphql-deduplicator-2.0.2.tgz#d8608161cf6be97725e178df0c41f6a1f9f778f3" + +graphql-extensions@^0.0.x, graphql-extensions@~0.0.9: + version "0.0.10" + resolved "https://registry.yarnpkg.com/graphql-extensions/-/graphql-extensions-0.0.10.tgz#34bdb2546d43f6a5bc89ab23c295ec0466c6843d" + dependencies: + core-js "^2.5.3" + source-map-support "^0.5.1" + +graphql-import@^0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/graphql-import/-/graphql-import-0.7.1.tgz#4add8d91a5f752d764b0a4a7a461fcd93136f223" + dependencies: + lodash "^4.17.4" + resolve-from "^4.0.0" + +graphql-middleware@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/graphql-middleware/-/graphql-middleware-3.0.2.tgz#c8cdb67615eec02aec237b455e679f5fc973ddc4" + dependencies: + graphql-tools "^4.0.4" + +graphql-playground-html@1.6.12: + version "1.6.12" + resolved "https://registry.yarnpkg.com/graphql-playground-html/-/graphql-playground-html-1.6.12.tgz#8b3b34ab6013e2c877f0ceaae478fafc8ca91b85" + +graphql-playground-middleware-express@1.7.11: + version "1.7.11" + resolved "https://registry.yarnpkg.com/graphql-playground-middleware-express/-/graphql-playground-middleware-express-1.7.11.tgz#bbffd784a37133bfa7165bdd8f429081dbf4bcf6" + dependencies: + graphql-playground-html "1.6.12" + +graphql-playground-middleware-lambda@1.7.12: + version "1.7.12" + resolved "https://registry.yarnpkg.com/graphql-playground-middleware-lambda/-/graphql-playground-middleware-lambda-1.7.12.tgz#1b06440a288dbcd53f935b43e5b9ca2738a06305" + dependencies: + graphql-playground-html "1.6.12" + +graphql-subscriptions@^0.5.8: + version "0.5.8" + resolved "https://registry.yarnpkg.com/graphql-subscriptions/-/graphql-subscriptions-0.5.8.tgz#13a6143c546bce390404657dc73ca501def30aa7" + dependencies: + iterall "^1.2.1" + +graphql-tools@^4.0.0, graphql-tools@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-4.0.4.tgz#ca08a63454221fdde825fe45fbd315eb2a6d566b" + dependencies: + apollo-link "^1.2.3" + apollo-utilities "^1.0.1" + deprecated-decorator "^0.1.6" + iterall "^1.1.3" + uuid "^3.1.0" + +graphql-yoga@^1.17.4: + version "1.17.4" + resolved "https://registry.yarnpkg.com/graphql-yoga/-/graphql-yoga-1.17.4.tgz#6d325a6270399edf0776fb5f60a2e9e19512e63c" + dependencies: + "@types/cors" "^2.8.4" + "@types/express" "^4.11.1" + "@types/graphql" "^14.0.0" + "@types/graphql-deduplicator" "^2.0.0" + "@types/zen-observable" "^0.5.3" + apollo-server-express "^1.3.6" + apollo-server-lambda "1.3.6" + apollo-upload-server "^7.0.0" + aws-lambda "^0.1.2" + body-parser-graphql "1.1.0" + cors "^2.8.4" + express "^4.16.3" + graphql "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0" + graphql-deduplicator "^2.0.1" + graphql-import "^0.7.0" + graphql-middleware "3.0.2" + graphql-playground-middleware-express "1.7.11" + graphql-playground-middleware-lambda "1.7.12" + graphql-subscriptions "^0.5.8" + graphql-tools "^4.0.0" + subscriptions-transport-ws "^0.9.8" + +"graphql@^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0": + version "14.1.1" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-14.1.1.tgz#d5d77df4b19ef41538d7215d1e7a28834619fac0" + dependencies: + iterall "^1.2.2" + +http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@^1.7.0: + version "1.7.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.1.tgz#6a4ffe5d35188e1c39f872534690585852e1f027" + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +iconv-lite@0.4.23: + version "0.4.23" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" + +ieee754@^1.1.4: + version "1.1.12" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" + +inherits@2.0.3, inherits@~2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +ipaddr.js@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + +isarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +iterall@^1.1.3, iterall@^1.2.1, iterall@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7" + +jmespath@0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" + +lodash@^4.17.4: + version "4.17.11" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + +mime-db@~1.37.0: + version "1.37.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8" + +mime-types@~2.1.18: + version "2.1.21" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96" + dependencies: + mime-db "~1.37.0" + +mime@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +object-assign@^4: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object-path@^0.11.4: + version "0.11.4" + resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.4.tgz#370ae752fbf37de3ea70a861c23bba8915691949" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +parseurl@~1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + +proxy-addr@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.8.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + +qs@6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + +range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + +raw-body@2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" + dependencies: + bytes "3.0.0" + http-errors "1.6.3" + iconv-lite "0.4.23" + unpipe "1.0.0" + +readable-stream@1.1.x: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + +safe-buffer@5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + +sax@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" + +sax@>=0.6.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + +send@0.16.2: + version "0.16.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.6.2" + mime "1.4.1" + ms "2.0.0" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.4.0" + +serve-static@1.13.2: + version "1.13.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.2" + send "0.16.2" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + +source-map-support@^0.5.1: + version "0.5.10" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.10.tgz#2214080bc9d51832511ee2bab96e3c2f9353120c" + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + +statuses@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + +streamsearch@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + +subscriptions-transport-ws@^0.9.8: + version "0.9.15" + resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.15.tgz#68a8b7ba0037d8c489fb2f5a102d1494db297d0d" + dependencies: + backo2 "^1.0.2" + eventemitter3 "^3.1.0" + iterall "^1.2.1" + symbol-observable "^1.0.4" + ws "^5.2.0" + +symbol-observable@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + +tslib@^1.9.3: + version "1.9.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + +type-is@~1.6.16: + version "1.6.16" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.18" + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + +url@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + +uuid@3.3.2, uuid@^3.1.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + +ws@^5.2.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" + dependencies: + async-limiter "~1.0.0" + +xml2js@0.4.19: + version "0.4.19" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" + dependencies: + sax ">=0.6.0" + xmlbuilder "~9.0.1" + +xmlbuilder@~9.0.1: + version "9.0.7" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" + +zen-observable-ts@^0.8.15: + version "0.8.15" + resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.8.15.tgz#6cf7df6aa619076e4af2f707ccf8a6290d26699b" + dependencies: + zen-observable "^0.8.0" + +zen-observable@^0.8.0: + version "0.8.13" + resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.13.tgz#a9f1b9dbdfd2d60a08761ceac6a861427d44ae2e" From d67faac857a3813764e45709c42af5329c553b6f Mon Sep 17 00:00:00 2001 From: vnovick Date: Fri, 15 Feb 2019 05:30:02 +0200 Subject: [PATCH 08/11] Day4 --- Day3/graphql-yoga-example/package.json | 5 +- Day3/graphql-yoga-example/src/index.js | 44 +- Day3/graphql-yoga-example/src/schema.graphql | 24 +- Day3/graphql-yoga-example/yarn.lock | 1419 +++++++++++++++++- Day4/LessonNotes.md | 102 +- Day4/excercises.md | 8 +- Day4/graphql-yoga-example/package.json | 15 + Day4/graphql-yoga-example/src/index.js | 119 ++ Day4/graphql-yoga-example/src/schema.graphql | 55 + Day4/graphql-yoga-example/yarn.lock | 771 ++++++++++ 10 files changed, 2545 insertions(+), 17 deletions(-) create mode 100644 Day4/graphql-yoga-example/package.json create mode 100644 Day4/graphql-yoga-example/src/index.js create mode 100644 Day4/graphql-yoga-example/src/schema.graphql create mode 100644 Day4/graphql-yoga-example/yarn.lock diff --git a/Day3/graphql-yoga-example/package.json b/Day3/graphql-yoga-example/package.json index b8dae0e..d9dee1d 100644 --- a/Day3/graphql-yoga-example/package.json +++ b/Day3/graphql-yoga-example/package.json @@ -4,12 +4,13 @@ "description": "", "main": "src/index.js", "scripts": { - "start": "node src/index.js", + "start": "nodemon ./src/index.js", "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "dependencies": { - "graphql-yoga": "^1.17.4" + "graphql-yoga": "^1.17.4", + "nodemon": "^1.18.10" } } diff --git a/Day3/graphql-yoga-example/src/index.js b/Day3/graphql-yoga-example/src/index.js index 535783a..70d18ac 100644 --- a/Day3/graphql-yoga-example/src/index.js +++ b/Day3/graphql-yoga-example/src/index.js @@ -1,24 +1,60 @@ const { GraphQLServer, PubSub } = require('graphql-yoga') +const { GraphQLScalarType } = require('graphql'); +const { Kind } = require('graphql/language'); let idCount = 0 let posts = [] const channel = Math.random().toString(36).substring(2, 15) +function oddValue(value){ + return value % 2 === 1 ? value : null +} + const resolvers = { Query: { posts: () => posts, post: (parent, args) => posts.find(post => post.id === args.id), }, + Odd: new GraphQLScalarType({ + name: 'Odd', + description: 'Odd custom scalar', + parseValue: oddValue, + serialize: oddValue, + parseLiteral(ast) { + if (ast.kind === Kind.INT) { + return oddValue(parseInt(ast.value, 10)) + } + return null + } + }), + Date: new GraphQLScalarType({ + name: 'Date', + description: 'Date custom scalar type', + parseValue(value) { + return new Date(value); // value from the client + }, + serialize(value) { + return value.getTime(); // value sent to the client + }, + parseLiteral(ast) { + if (ast.kind === Kind.INT) { + return new Date(ast.value) // ast value is always in string format + } + return null; + }, + }), Mutation: { - createDraft: (parent, args) => { + createDraft: (parent, { object }) => { const post = { id: `post_${idCount++}`, - title: args.title, - content: args.content, + title: object.title, + content: object.content, + date: object.date, + oddNumber: object.oddNumber, comments: [], author: { id: `author_${new Date().getMilliseconds()}`, - name: args.author + name: object.author }, published: false, } diff --git a/Day3/graphql-yoga-example/src/schema.graphql b/Day3/graphql-yoga-example/src/schema.graphql index 301edb3..db6400f 100644 --- a/Day3/graphql-yoga-example/src/schema.graphql +++ b/Day3/graphql-yoga-example/src/schema.graphql @@ -5,22 +5,39 @@ type Query { } type Mutation { - createDraft(title: String!, content: String, author: String!): Post + createDraft(object: Draft): Post addComment(id: ID!, content: String!): ID deletePost(id: ID!): Post publish(id: ID!): Post } +scalar Date + +input Draft { + title: String! + oddNumber: Odd, + content: String! + author: String! + date: Date +} + +interface HasContent { + content: String! +} + type Subscription { posts: [Post!]! } + "Description for the type" -type Post { +type Post implements HasContent { """ ## Description for field """ id: ID! + oddNumber: Odd, + date: Date title: String! content: String! published: Boolean! @@ -28,13 +45,14 @@ type Post { comments: [Comment] } +scalar Odd type Author { id: ID! name: String! } -type Comment { +type Comment implements HasContent{ id: ID! content: String! } \ No newline at end of file diff --git a/Day3/graphql-yoga-example/yarn.lock b/Day3/graphql-yoga-example/yarn.lock index 70461b5..289bd6a 100644 --- a/Day3/graphql-yoga-example/yarn.lock +++ b/Day3/graphql-yoga-example/yarn.lock @@ -67,6 +67,10 @@ version "0.5.4" resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.5.4.tgz#b863a4191e525206819e008097ebf0fb2e3a1cdc" +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + accepts@~1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" @@ -74,6 +78,33 @@ accepts@~1.3.5: mime-types "~2.1.18" negotiator "0.6.1" +ansi-align@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" + dependencies: + string-width "^2.0.0" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + dependencies: + color-convert "^1.9.0" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + apollo-cache-control@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/apollo-cache-control/-/apollo-cache-control-0.1.1.tgz#173d14ceb3eb9e7cb53de7eb8b61bee6159d4171" @@ -134,14 +165,53 @@ apollo-utilities@^1.0.1: fast-json-stable-stringify "^2.0.0" tslib "^1.9.3" +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + +async-each@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + async-limiter@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" +atob@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + aws-lambda@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/aws-lambda/-/aws-lambda-0.1.2.tgz#19b1585075df31679597b976a5f1def61f12ccee" @@ -168,10 +238,30 @@ backo2@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + base64-js@^1.0.2: version "1.3.0" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +binary-extensions@^1.0.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.0.tgz#9523e001306a32444b907423f1de2164222f6ab1" + body-parser-graphql@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/body-parser-graphql/-/body-parser-graphql-1.1.0.tgz#80a80353c7cb623562fd375750dfe018d75f0f7c" @@ -193,6 +283,40 @@ body-parser@1.18.3, body-parser@^1.18.2: raw-body "2.3.3" type-is "~1.6.16" +boxen@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" + dependencies: + ansi-align "^2.0.0" + camelcase "^4.0.0" + chalk "^2.0.1" + cli-boxes "^1.0.0" + string-width "^2.0.0" + term-size "^1.2.0" + widest-line "^2.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -216,10 +340,123 @@ bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +camelcase@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + +capture-stack-trace@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" + +chalk@^2.0.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chokidar@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.1.tgz#adc39ad55a2adf26548bd2afa048f611091f9184" + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.0" + optionalDependencies: + fsevents "^1.2.7" + +chownr@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" + +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +cli-boxes@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + commander@^2.5.0: version "2.19.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" +component-emitter@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +configstore@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" + dependencies: + dot-prop "^4.1.0" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + unique-string "^1.0.0" + write-file-atomic "^2.0.0" + xdg-basedir "^3.0.0" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + content-disposition@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" @@ -236,6 +473,10 @@ cookie@0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + core-js@^2.5.3: version "2.6.4" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.4.tgz#b8897c062c4d769dd30a0ac5c73976c47f92ea0d" @@ -251,12 +492,67 @@ cors@^2.8.4: object-assign "^4" vary "^1" -debug@2.6.9: +create-error-class@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + dependencies: + capture-stack-trace "^1.0.0" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-random-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + +debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: ms "2.0.0" +debug@^3.1.0: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + dependencies: + ms "^2.1.1" + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" @@ -269,6 +565,10 @@ destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + dicer@0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.2.5.tgz#5996c086bb33218c812c090bddc09cd12facb70f" @@ -276,10 +576,20 @@ dicer@0.2.5: readable-stream "1.1.x" streamsearch "0.1.2" +dot-prop@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + dependencies: + is-obj "^1.0.0" + dotenv@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-0.4.0.tgz#f6fb351363c2d92207245c737802c9ab5ae1495a" +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -292,6 +602,10 @@ escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" @@ -304,6 +618,30 @@ events@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + express@^4.16.3: version "4.16.4" resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e" @@ -339,10 +677,45 @@ express@^4.16.3: utils-merge "1.0.1" vary "~1.1.2" +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + finalhandler@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" @@ -355,10 +728,20 @@ finalhandler@1.1.1: statuses "~1.4.0" unpipe "~1.0.0" +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + forwarded@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + dependencies: + map-cache "^0.2.2" + fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" @@ -367,6 +750,88 @@ fs-capacitor@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/fs-capacitor/-/fs-capacitor-1.0.1.tgz#ff9dbfa14dfaf4472537720f19c3088ed9278df0" +fs-minipass@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" + dependencies: + minipass "^2.2.1" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +fsevents@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.7.tgz#4851b664a3783e52003b3c66eb0eee1074933aa4" + dependencies: + nan "^2.9.2" + node-pre-gyp "^0.10.0" + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + dependencies: + ini "^1.3.4" + +got@^6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + dependencies: + create-error-class "^3.0.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + unzip-response "^2.0.1" + url-parse-lax "^1.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2: + version "4.1.15" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" + graphql-deduplicator@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/graphql-deduplicator/-/graphql-deduplicator-2.0.2.tgz#d8608161cf6be97725e178df0c41f6a1f9f778f3" @@ -455,6 +920,41 @@ graphql-yoga@^1.17.4: dependencies: iterall "^1.2.2" +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: version "1.6.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" @@ -480,6 +980,12 @@ iconv-lite@0.4.23: dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@^0.4.4: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + dependencies: + safer-buffer ">= 2.1.2 < 3" + ieee754@1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" @@ -488,22 +994,206 @@ ieee754@^1.1.4: version "1.1.12" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" -inherits@2.0.3, inherits@~2.0.1: +ignore-by-default@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + +ignore-walk@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + dependencies: + minimatch "^3.0.4" + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.3, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" +ini@^1.3.4, ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + ipaddr.js@1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + dependencies: + kind-of "^6.0.0" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + +is-ci@^1.0.10: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + dependencies: + ci-info "^1.5.0" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + dependencies: + kind-of "^6.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" + dependencies: + is-extglob "^2.1.1" + +is-installed-globally@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + dependencies: + global-dirs "^0.1.0" + is-path-inside "^1.0.0" + +is-npm@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + +is-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + dependencies: + path-is-inside "^1.0.1" + +is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + dependencies: + isobject "^3.0.1" + +is-redirect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + +is-retry-allowed@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" + +is-stream@^1.0.0, is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" -isarray@^1.0.0: +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + iterall@^1.1.3, iterall@^1.2.1, iterall@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7" @@ -512,10 +1202,63 @@ jmespath@0.15.0: version "0.15.0" resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + +latest-version@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" + dependencies: + package-json "^4.0.0" + lodash@^4.17.4: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" +lowercase-keys@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + dependencies: + pify "^3.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + dependencies: + object-visit "^1.0.0" + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -528,6 +1271,24 @@ methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + mime-db@~1.37.0: version "1.37.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8" @@ -542,36 +1303,281 @@ mime@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +minipass@^2.2.1, minipass@^2.3.4: + version "2.3.5" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" + dependencies: + minipass "^2.2.1" + +mixin-deep@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" +ms@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + +nan@^2.9.2: + version "2.12.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.12.1.tgz#7b1aa193e9aa86057e3c7bbd0ac448e770925552" + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +needle@^2.2.1: + version "2.2.4" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" + dependencies: + debug "^2.1.2" + iconv-lite "^0.4.4" + sax "^1.2.4" + negotiator@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" -object-assign@^4: +node-pre-gyp@^0.10.0: + version "0.10.3" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + +nodemon@^1.18.10: + version "1.18.10" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.18.10.tgz#3ba63f64eb4c283cf3e4f75f30817e9d4f393afe" + dependencies: + chokidar "^2.1.0" + debug "^3.1.0" + ignore-by-default "^1.0.1" + minimatch "^3.0.4" + pstree.remy "^1.1.6" + semver "^5.5.0" + supports-color "^5.2.0" + touch "^3.1.0" + undefsafe "^2.0.2" + update-notifier "^2.5.0" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + dependencies: + abbrev "1" + osenv "^0.1.4" + +nopt@~1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + dependencies: + abbrev "1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + +npm-bundled@^1.0.1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" + +npm-packlist@^1.1.6: + version "1.3.0" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.3.0.tgz#7f01e8e44408341379ca98cfd756e7b29bd2626c" + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + dependencies: + path-key "^2.0.0" + +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +object-assign@^4, object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + object-path@^0.11.4: version "0.11.4" resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.4.tgz#370ae752fbf37de3ea70a861c23bba8915691949" +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + dependencies: + isobject "^3.0.0" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + dependencies: + isobject "^3.0.1" + on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" dependencies: ee-first "1.1.1" +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-tmpdir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + +package-json@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" + dependencies: + got "^6.7.1" + registry-auth-token "^3.0.1" + registry-url "^3.0.3" + semver "^5.1.0" + parseurl@~1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + +path-key@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + +prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + +process-nextick-args@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + proxy-addr@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" @@ -579,6 +1585,14 @@ proxy-addr@~2.0.4: forwarded "~0.1.2" ipaddr.js "1.8.0" +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + +pstree.remy@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.6.tgz#73a55aad9e2d95814927131fbf4dc1b62d259f47" + punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" @@ -604,6 +1618,15 @@ raw-body@2.3.3: iconv-lite "0.4.23" unpipe "1.0.0" +rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + readable-stream@1.1.x: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" @@ -613,14 +1636,86 @@ readable-stream@1.1.x: isarray "0.0.1" string_decoder "~0.10.x" +readable-stream@^2.0.2, readable-stream@^2.0.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +registry-auth-token@^3.0.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" + dependencies: + rc "^1.1.6" + safe-buffer "^5.0.1" + +registry-url@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + dependencies: + rc "^1.0.1" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" -safe-buffer@5.1.2: +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + +rimraf@^2.6.1: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + dependencies: + glob "^7.1.3" + +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: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + dependencies: + ret "~0.1.10" + "safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -629,10 +1724,20 @@ sax@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" -sax@>=0.6.0: +sax@>=0.6.0, sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" +semver-diff@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + dependencies: + semver "^5.0.3" + +semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.5.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" + send@0.16.2: version "0.16.2" resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" @@ -660,10 +1765,83 @@ serve-static@1.13.2: parseurl "~1.3.2" send "0.16.2" +set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +set-value@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.1" + to-object-path "^0.3.0" + +set-value@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +source-map-resolve@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + dependencies: + atob "^2.1.1" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + source-map-support@^0.5.1: version "0.5.10" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.10.tgz#2214080bc9d51832511ee2bab96e3c2f9353120c" @@ -671,10 +1849,31 @@ source-map-support@^0.5.1: buffer-from "^1.0.0" source-map "^0.6.0" +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + +source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + source-map@^0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + dependencies: + extend-shallow "^3.0.0" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + "statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2": version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" @@ -687,10 +1886,51 @@ streamsearch@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + subscriptions-transport-ws@^0.9.8: version "0.9.15" resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.15.tgz#68a8b7ba0037d8c489fb2f5a102d1494db297d0d" @@ -701,14 +1941,70 @@ subscriptions-transport-ws@^0.9.8: symbol-observable "^1.0.4" ws "^5.2.0" +supports-color@^5.2.0, supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + dependencies: + has-flag "^3.0.0" + symbol-observable@^1.0.4: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" +tar@^4: + version "4.4.8" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.3.4" + minizlib "^1.1.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.2" + +term-size@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + dependencies: + execa "^0.7.0" + +timed-out@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" +touch@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" + dependencies: + nopt "~1.0.10" + tslib@^1.9.3: version "1.9.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" @@ -720,10 +2016,71 @@ type-is@~1.6.16: media-typer "0.3.0" mime-types "~2.1.18" +undefsafe@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.2.tgz#225f6b9e0337663e0d8e7cfd686fc2836ccace76" + dependencies: + debug "^2.2.0" + +union-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^0.4.3" + +unique-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + dependencies: + crypto-random-string "^1.0.0" + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +unzip-response@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + +upath@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" + +update-notifier@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" + dependencies: + boxen "^1.2.1" + chalk "^2.0.1" + configstore "^3.0.0" + import-lazy "^2.1.0" + is-ci "^1.0.10" + is-installed-globally "^0.1.0" + is-npm "^1.0.0" + latest-version "^3.0.0" + semver-diff "^2.0.0" + xdg-basedir "^3.0.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + dependencies: + prepend-http "^1.0.1" + url@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" @@ -731,6 +2088,14 @@ url@0.10.3: punycode "1.3.2" querystring "0.2.0" +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" @@ -743,12 +2108,46 @@ vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + dependencies: + string-width "^1.0.2 || 2" + +widest-line@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" + dependencies: + string-width "^2.1.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +write-file-atomic@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.2.tgz#a7181706dfba17855d221140a9c06e15fcdd87b9" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + ws@^5.2.0: version "5.2.2" resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" dependencies: async-limiter "~1.0.0" +xdg-basedir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" + xml2js@0.4.19: version "0.4.19" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" @@ -760,6 +2159,14 @@ xmlbuilder@~9.0.1: version "9.0.7" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + +yallist@^3.0.0, yallist@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" + zen-observable-ts@^0.8.15: version "0.8.15" resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.8.15.tgz#6cf7df6aa619076e4af2f707ccf8a6290d26699b" diff --git a/Day4/LessonNotes.md b/Day4/LessonNotes.md index 6942bad..ed7c585 100644 --- a/Day4/LessonNotes.md +++ b/Day4/LessonNotes.md @@ -1 +1,101 @@ -# Lesson Notes will be published at the end of Day4 \ No newline at end of file +# Input Values + +``` +input Draft { + title: String! + content: String! + author: String! +} + + +type Mutation { + createDraft(object: Draft): Post +} +``` +> Input types can't have fields that are other objects, only basic scalar types, list types, and other input types. + +# Custom scalars + +``` +const { GraphQLScalarType } = require('graphql'); +const { makeExecutableSchema } = require('graphql-tools'); + +const myCustomScalarType = new GraphQLScalarType({ + name: 'MyCustomScalar', + description: 'Description of my custom scalar type', + serialize(value) { + let result; + // Implement your own behavior here by setting the 'result' variable + // value SENT to the client + return result; + }, + parseValue(value) { + let result; + // Implement your own behavior here by setting the 'result' variable + // value FROM the client + return result; + }, + parseLiteral(ast) { + switch (ast.kind) { + // Implement your own behavior here by returning what suits your needs + // depending on ast.kind + + // return result based on client + } + } +}); +``` +### Date scalar + +``` +import { GraphQLScalarType } from 'graphql'; +import { Kind } from 'graphql/language'; + +const resolverMap = { + Date: new GraphQLScalarType({ + name: 'Date', + description: 'Date custom scalar type', + parseValue(value) { + return new Date(value); // value from the client + }, + serialize(value) { + return value.getTime(); // value sent to the client + }, + parseLiteral(ast) { + if (ast.kind === Kind.INT) { + return new Date(ast.value) // ast value is always in string format + } + return null; + }, + }), +}; +``` + +# Scalar validation + +``` +Odd: new GraphQLScalarType({ + name: 'Odd', + description: 'Odd custom scalar type', + parseValue: oddValue, + serialize: oddValue, + parseLiteral(ast) { + if (ast.kind === Kind.INT) { + return oddValue(parseInt(ast.value, 10)); + } + return null; + }, + }), +``` + +# Interfaces +An Interface is an abstract type that includes a certain set of fields that a type must include to implement the interface. + +``` + +``` + +# Union Types + + +[Interfaces and Unions](https://github.com/prisma/graphql-yoga/blob/master/examples/interface-union) diff --git a/Day4/excercises.md b/Day4/excercises.md index 73e78e4..f8b0258 100644 --- a/Day4/excercises.md +++ b/Day4/excercises.md @@ -1 +1,7 @@ -# Excercises will be announced at the end of Day4 \ No newline at end of file +# Create Login/Logout page for your app +# Finalize your project and connect it to real data in DB: + +postgres://pisfgfotrkeyev:afc3b63598baf280d09e449c0eb47e975ffde1582c0796b7a8b11459a3b8dbb9@ec2-107-20-167-11.compute-1.amazonaws.com:5432/d90nq4c245lrg4 + +# Add custom directives, interfaces and Date scalar to your schema +# Try to recreate functionality from queries that you use running on Hasura \ No newline at end of file diff --git a/Day4/graphql-yoga-example/package.json b/Day4/graphql-yoga-example/package.json new file mode 100644 index 0000000..b8dae0e --- /dev/null +++ b/Day4/graphql-yoga-example/package.json @@ -0,0 +1,15 @@ +{ + "name": "graphql-yoga-example", + "version": "1.0.0", + "description": "", + "main": "src/index.js", + "scripts": { + "start": "node src/index.js", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "graphql-yoga": "^1.17.4" + } +} diff --git a/Day4/graphql-yoga-example/src/index.js b/Day4/graphql-yoga-example/src/index.js new file mode 100644 index 0000000..1674145 --- /dev/null +++ b/Day4/graphql-yoga-example/src/index.js @@ -0,0 +1,119 @@ +const { GraphQLServer, PubSub } = require('graphql-yoga') +const { GraphQLScalarType } = require('graphql'); +const { Kind } = require('graphql/language'); + + +let idCount = 0 +let posts = [] +const channel = Math.random().toString(36).substring(2, 15) + +function oddValue(value) { + return value % 2 === 1 ? value : null; +} + +const resolvers = { + Query: { + posts: () => posts, + post: (parent, args) => posts.find(post => post.id === args.id), + }, + Mutation: { + createDraft: (parent, { object: args }) => { + const post = { + id: `post_${idCount++}`, + title: args.title, + content: args.content, + date: args.date, + comments: [], + author: { + id: `author_${new Date().getMilliseconds()}`, + name: args.author + }, + published: false, + } + posts.push(post) + pubsub.publish(channel, { posts}) + return post + }, + addComment: (parent, args) => { + posts.forEach(post => { + if (post.id === args.id) { + const comment = { + id: `comment_${new Date().getMilliseconds()}`, + content: args.content + } + post.comments.push(comment) + pubsub.publish(channel, { posts}) + } + }) + + return args.id + }, + deletePost: (parent, args) => { + const postIndex = posts.findIndex(post => post.id === args.id) + if (postIndex > -1) { + const deleted = posts.splice(postIndex, 1) + pubsub.publish(channel, { posts}) + return deleted[0] + } + return null + }, + publish: (parent, args) => { + const postIndex = posts.findIndex(post => post.id === args.id) + posts[postIndex].published = true + pubsub.publish(channel, { posts}) + return posts[postIndex] + }, + }, + + Date: new GraphQLScalarType({ + name: 'Date', + description: 'Date custom scalar type', + parseValue(value) { + return new Date(value); // value from the client + }, + serialize(value) { + return value.getTime(); // value sent to the client + }, + parseLiteral(ast) { + if (ast.kind === Kind.INT) { + return new Date(ast.value) // ast value is always in string format + } + return null; + }, + }), + Subscription: { + posts: { + subscribe: (parent, args, { pubsub }) => { + setImmediate(() => pubsub.publish(channel, { posts})) + return pubsub.asyncIterator(channel) + }, + } + }, + HasContent: { + __resolveType(obj){ + if (obj.title){ + return 'Post' + } else { + return 'Comment' + } + } + } +} + +const pubsub = new PubSub() + + +const server = new GraphQLServer({ + typeDefs: './src/schema.graphql', + resolvers, + context: { pubsub } +}) + +server.start({ + port: 5577, + endpoint: '/graphql', + playground: '/playground', +},() => { + console.log(`The graphql server is running on http://localhost:5577/graphql`) + console.log(`Playground available here: http://localhost:5577/playground`) +}) diff --git a/Day4/graphql-yoga-example/src/schema.graphql b/Day4/graphql-yoga-example/src/schema.graphql new file mode 100644 index 0000000..de7ff55 --- /dev/null +++ b/Day4/graphql-yoga-example/src/schema.graphql @@ -0,0 +1,55 @@ +type Query { + posts: [Post!]! + post(id: ID!): Post + description: String! +} + +input Draft { + title: String! + content: String! + author: String! + date: Date +} + +interface HasContent { + content: String! +} + + +type Mutation { + createDraft(object: Draft): Post + addComment(id: ID!, content: String!): ID + deletePost(id: ID!): Post + publish(id: ID!): Post +} + +type Subscription { + posts: [Post!]! +} + +"Description for the type" +type Post implements HasContent{ + """ + ## Description for field + """ + id: ID! + title: String! + content: String! + published: Boolean! + date: Date + author: Author! + comments: [Comment] +} + + +type Author { + id: ID! + name: String! +} + +type Comment implements HasContent{ + id: ID! + content: String! +} + +scalar Date \ No newline at end of file diff --git a/Day4/graphql-yoga-example/yarn.lock b/Day4/graphql-yoga-example/yarn.lock new file mode 100644 index 0000000..70461b5 --- /dev/null +++ b/Day4/graphql-yoga-example/yarn.lock @@ -0,0 +1,771 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@types/body-parser@*": + version "1.17.0" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.17.0.tgz#9f5c9d9bd04bb54be32d5eb9fc0d8c974e6cf58c" + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.32" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.32.tgz#aa0e9616b9435ccad02bc52b5b454ffc2c70ba28" + dependencies: + "@types/node" "*" + +"@types/cors@^2.8.4": + version "2.8.4" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.4.tgz#50991a759a29c0b89492751008c6af7a7c8267b0" + dependencies: + "@types/express" "*" + +"@types/express-serve-static-core@*": + version "4.16.1" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.16.1.tgz#35df7b302299a4ab138a643617bd44078e74d44e" + dependencies: + "@types/node" "*" + "@types/range-parser" "*" + +"@types/express@*", "@types/express@^4.11.1": + version "4.16.1" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.16.1.tgz#d756bd1a85c34d87eaf44c888bad27ba8a4b7cf0" + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "*" + "@types/serve-static" "*" + +"@types/graphql-deduplicator@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/graphql-deduplicator/-/graphql-deduplicator-2.0.0.tgz#9e577b8f3feb3d067b0ca756f4a1fb356d533922" + +"@types/graphql@^14.0.0": + version "14.0.7" + resolved "https://registry.yarnpkg.com/@types/graphql/-/graphql-14.0.7.tgz#daa09397220a68ce1cbb3f76a315ff3cd92312f6" + +"@types/mime@*": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.1.tgz#dc488842312a7f075149312905b5e3c0b054c79d" + +"@types/node@*": + version "11.9.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.9.3.tgz#14adbb5ab8cd563f549fbae8dbe92e0b7d6e76cc" + +"@types/range-parser@*": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" + +"@types/serve-static@*": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.2.tgz#f5ac4d7a6420a99a6a45af4719f4dcd8cd907a48" + dependencies: + "@types/express-serve-static-core" "*" + "@types/mime" "*" + +"@types/zen-observable@^0.5.3": + version "0.5.4" + resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.5.4.tgz#b863a4191e525206819e008097ebf0fb2e3a1cdc" + +accepts@~1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" + dependencies: + mime-types "~2.1.18" + negotiator "0.6.1" + +apollo-cache-control@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/apollo-cache-control/-/apollo-cache-control-0.1.1.tgz#173d14ceb3eb9e7cb53de7eb8b61bee6159d4171" + dependencies: + graphql-extensions "^0.0.x" + +apollo-link@^1.2.3: + version "1.2.8" + resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.8.tgz#0f252adefd5047ac1a9f35ba9439d216587dcd84" + dependencies: + zen-observable-ts "^0.8.15" + +apollo-server-core@^1.3.6, apollo-server-core@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-1.4.0.tgz#4faff7f110bfdd6c3f47008302ae24140f94c592" + dependencies: + apollo-cache-control "^0.1.0" + apollo-tracing "^0.1.0" + graphql-extensions "^0.0.x" + +apollo-server-express@^1.3.6: + version "1.4.0" + resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-1.4.0.tgz#7d7c58d6d6f9892b83fe575669093bb66738b125" + dependencies: + apollo-server-core "^1.4.0" + apollo-server-module-graphiql "^1.4.0" + +apollo-server-lambda@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/apollo-server-lambda/-/apollo-server-lambda-1.3.6.tgz#bdaac37f143c6798e40b8ae75580ba673cea260e" + dependencies: + apollo-server-core "^1.3.6" + apollo-server-module-graphiql "^1.3.4" + +apollo-server-module-graphiql@^1.3.4, apollo-server-module-graphiql@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/apollo-server-module-graphiql/-/apollo-server-module-graphiql-1.4.0.tgz#c559efa285578820709f1769bb85d3b3eed3d8ec" + +apollo-tracing@^0.1.0: + version "0.1.4" + resolved "https://registry.yarnpkg.com/apollo-tracing/-/apollo-tracing-0.1.4.tgz#5b8ae1b01526b160ee6e552a7f131923a9aedcc7" + dependencies: + graphql-extensions "~0.0.9" + +apollo-upload-server@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/apollo-upload-server/-/apollo-upload-server-7.1.0.tgz#21e07b52252b3749b913468599813e13cfca805f" + dependencies: + busboy "^0.2.14" + fs-capacitor "^1.0.0" + http-errors "^1.7.0" + object-path "^0.11.4" + +apollo-utilities@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.1.3.tgz#a8883c0392f6b46eac0d366204ebf34be9307c87" + dependencies: + fast-json-stable-stringify "^2.0.0" + tslib "^1.9.3" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + +async-limiter@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + +aws-lambda@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/aws-lambda/-/aws-lambda-0.1.2.tgz#19b1585075df31679597b976a5f1def61f12ccee" + dependencies: + aws-sdk "^*" + commander "^2.5.0" + dotenv "^0.4.0" + +aws-sdk@^*: + version "2.402.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.402.0.tgz#d4bfe8f16f476e26a7da4edba79b878a1cabb0fb" + dependencies: + buffer "4.9.1" + events "1.1.1" + ieee754 "1.1.8" + jmespath "0.15.0" + querystring "0.2.0" + sax "1.2.1" + url "0.10.3" + uuid "3.3.2" + xml2js "0.4.19" + +backo2@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + +base64-js@^1.0.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" + +body-parser-graphql@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/body-parser-graphql/-/body-parser-graphql-1.1.0.tgz#80a80353c7cb623562fd375750dfe018d75f0f7c" + dependencies: + body-parser "^1.18.2" + +body-parser@1.18.3, body-parser@^1.18.2: + version "1.18.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" + dependencies: + bytes "3.0.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "~1.6.3" + iconv-lite "0.4.23" + on-finished "~2.3.0" + qs "6.5.2" + raw-body "2.3.3" + type-is "~1.6.16" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + +buffer@4.9.1: + version "4.9.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +busboy@^0.2.14: + version "0.2.14" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453" + dependencies: + dicer "0.2.5" + readable-stream "1.1.x" + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + +commander@^2.5.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" + +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + +core-js@^2.5.3: + version "2.6.4" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.4.tgz#b8897c062c4d769dd30a0ac5c73976c47f92ea0d" + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +cors@^2.8.4: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + dependencies: + object-assign "^4" + vary "^1" + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + +deprecated-decorator@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz#00966317b7a12fe92f3cc831f7583af329b86c37" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +dicer@0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.2.5.tgz#5996c086bb33218c812c090bddc09cd12facb70f" + dependencies: + readable-stream "1.1.x" + streamsearch "0.1.2" + +dotenv@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-0.4.0.tgz#f6fb351363c2d92207245c737802c9ab5ae1495a" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + +eventemitter3@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" + +events@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + +express@^4.16.3: + version "4.16.4" + resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e" + dependencies: + accepts "~1.3.5" + array-flatten "1.1.1" + body-parser "1.18.3" + content-disposition "0.5.2" + content-type "~1.0.4" + cookie "0.3.1" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.1.1" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.2" + path-to-regexp "0.1.7" + proxy-addr "~2.0.4" + qs "6.5.2" + range-parser "~1.2.0" + safe-buffer "5.1.2" + send "0.16.2" + serve-static "1.13.2" + setprototypeof "1.1.0" + statuses "~1.4.0" + type-is "~1.6.16" + utils-merge "1.0.1" + vary "~1.1.2" + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + +finalhandler@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.2" + statuses "~1.4.0" + unpipe "~1.0.0" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + +fs-capacitor@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fs-capacitor/-/fs-capacitor-1.0.1.tgz#ff9dbfa14dfaf4472537720f19c3088ed9278df0" + +graphql-deduplicator@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/graphql-deduplicator/-/graphql-deduplicator-2.0.2.tgz#d8608161cf6be97725e178df0c41f6a1f9f778f3" + +graphql-extensions@^0.0.x, graphql-extensions@~0.0.9: + version "0.0.10" + resolved "https://registry.yarnpkg.com/graphql-extensions/-/graphql-extensions-0.0.10.tgz#34bdb2546d43f6a5bc89ab23c295ec0466c6843d" + dependencies: + core-js "^2.5.3" + source-map-support "^0.5.1" + +graphql-import@^0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/graphql-import/-/graphql-import-0.7.1.tgz#4add8d91a5f752d764b0a4a7a461fcd93136f223" + dependencies: + lodash "^4.17.4" + resolve-from "^4.0.0" + +graphql-middleware@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/graphql-middleware/-/graphql-middleware-3.0.2.tgz#c8cdb67615eec02aec237b455e679f5fc973ddc4" + dependencies: + graphql-tools "^4.0.4" + +graphql-playground-html@1.6.12: + version "1.6.12" + resolved "https://registry.yarnpkg.com/graphql-playground-html/-/graphql-playground-html-1.6.12.tgz#8b3b34ab6013e2c877f0ceaae478fafc8ca91b85" + +graphql-playground-middleware-express@1.7.11: + version "1.7.11" + resolved "https://registry.yarnpkg.com/graphql-playground-middleware-express/-/graphql-playground-middleware-express-1.7.11.tgz#bbffd784a37133bfa7165bdd8f429081dbf4bcf6" + dependencies: + graphql-playground-html "1.6.12" + +graphql-playground-middleware-lambda@1.7.12: + version "1.7.12" + resolved "https://registry.yarnpkg.com/graphql-playground-middleware-lambda/-/graphql-playground-middleware-lambda-1.7.12.tgz#1b06440a288dbcd53f935b43e5b9ca2738a06305" + dependencies: + graphql-playground-html "1.6.12" + +graphql-subscriptions@^0.5.8: + version "0.5.8" + resolved "https://registry.yarnpkg.com/graphql-subscriptions/-/graphql-subscriptions-0.5.8.tgz#13a6143c546bce390404657dc73ca501def30aa7" + dependencies: + iterall "^1.2.1" + +graphql-tools@^4.0.0, graphql-tools@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-4.0.4.tgz#ca08a63454221fdde825fe45fbd315eb2a6d566b" + dependencies: + apollo-link "^1.2.3" + apollo-utilities "^1.0.1" + deprecated-decorator "^0.1.6" + iterall "^1.1.3" + uuid "^3.1.0" + +graphql-yoga@^1.17.4: + version "1.17.4" + resolved "https://registry.yarnpkg.com/graphql-yoga/-/graphql-yoga-1.17.4.tgz#6d325a6270399edf0776fb5f60a2e9e19512e63c" + dependencies: + "@types/cors" "^2.8.4" + "@types/express" "^4.11.1" + "@types/graphql" "^14.0.0" + "@types/graphql-deduplicator" "^2.0.0" + "@types/zen-observable" "^0.5.3" + apollo-server-express "^1.3.6" + apollo-server-lambda "1.3.6" + apollo-upload-server "^7.0.0" + aws-lambda "^0.1.2" + body-parser-graphql "1.1.0" + cors "^2.8.4" + express "^4.16.3" + graphql "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0" + graphql-deduplicator "^2.0.1" + graphql-import "^0.7.0" + graphql-middleware "3.0.2" + graphql-playground-middleware-express "1.7.11" + graphql-playground-middleware-lambda "1.7.12" + graphql-subscriptions "^0.5.8" + graphql-tools "^4.0.0" + subscriptions-transport-ws "^0.9.8" + +"graphql@^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0": + version "14.1.1" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-14.1.1.tgz#d5d77df4b19ef41538d7215d1e7a28834619fac0" + dependencies: + iterall "^1.2.2" + +http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@^1.7.0: + version "1.7.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.1.tgz#6a4ffe5d35188e1c39f872534690585852e1f027" + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +iconv-lite@0.4.23: + version "0.4.23" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" + +ieee754@^1.1.4: + version "1.1.12" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" + +inherits@2.0.3, inherits@~2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +ipaddr.js@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + +isarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +iterall@^1.1.3, iterall@^1.2.1, iterall@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7" + +jmespath@0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" + +lodash@^4.17.4: + version "4.17.11" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + +mime-db@~1.37.0: + version "1.37.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8" + +mime-types@~2.1.18: + version "2.1.21" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96" + dependencies: + mime-db "~1.37.0" + +mime@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +object-assign@^4: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object-path@^0.11.4: + version "0.11.4" + resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.4.tgz#370ae752fbf37de3ea70a861c23bba8915691949" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +parseurl@~1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + +proxy-addr@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.8.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + +qs@6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + +range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + +raw-body@2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" + dependencies: + bytes "3.0.0" + http-errors "1.6.3" + iconv-lite "0.4.23" + unpipe "1.0.0" + +readable-stream@1.1.x: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + +safe-buffer@5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + +sax@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" + +sax@>=0.6.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + +send@0.16.2: + version "0.16.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.6.2" + mime "1.4.1" + ms "2.0.0" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.4.0" + +serve-static@1.13.2: + version "1.13.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.2" + send "0.16.2" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + +source-map-support@^0.5.1: + version "0.5.10" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.10.tgz#2214080bc9d51832511ee2bab96e3c2f9353120c" + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + +statuses@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + +streamsearch@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + +subscriptions-transport-ws@^0.9.8: + version "0.9.15" + resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.15.tgz#68a8b7ba0037d8c489fb2f5a102d1494db297d0d" + dependencies: + backo2 "^1.0.2" + eventemitter3 "^3.1.0" + iterall "^1.2.1" + symbol-observable "^1.0.4" + ws "^5.2.0" + +symbol-observable@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + +tslib@^1.9.3: + version "1.9.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + +type-is@~1.6.16: + version "1.6.16" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.18" + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + +url@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + +uuid@3.3.2, uuid@^3.1.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + +ws@^5.2.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" + dependencies: + async-limiter "~1.0.0" + +xml2js@0.4.19: + version "0.4.19" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" + dependencies: + sax ">=0.6.0" + xmlbuilder "~9.0.1" + +xmlbuilder@~9.0.1: + version "9.0.7" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" + +zen-observable-ts@^0.8.15: + version "0.8.15" + resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.8.15.tgz#6cf7df6aa619076e4af2f707ccf8a6290d26699b" + dependencies: + zen-observable "^0.8.0" + +zen-observable@^0.8.0: + version "0.8.13" + resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.13.tgz#a9f1b9dbdfd2d60a08761ceac6a861427d44ae2e" From 737dd0aaf08eeee3ad1c2e86172db3d1bb8b685e Mon Sep 17 00:00:00 2001 From: vnovick Date: Fri, 15 Feb 2019 05:48:59 +0200 Subject: [PATCH 09/11] changing first day --- Day1/excercises.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Day1/excercises.md b/Day1/excercises.md index 51de143..3a82e0b 100644 --- a/Day1/excercises.md +++ b/Day1/excercises.md @@ -1,11 +1,21 @@ # Exercises Day1 + +[Install Hasura on Heroku](https://docs.hasura.io/1.0/graphql/manual/getting-started/heroku-simple.html) + +Go to Heroku dashboard +Settings -> Reveal config vars. +Copy DATABASE_URL + Install Hasura Console on local environment ### Prerequisites For running GraphQL Api locally [Install Docker](https://docs.docker.com/install/) +Edit `./run-hasura-locally.sh` and substitute HASURA_GRAPHQL_DATABASE_URL to the one you've got from heroku + then run `./run-hasura-locally.sh` + This will bring up docker container with Hasura engine with connection to existing Postgres API 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) From 87d9cc3e2366dbf39d72a1d89b52a4751f38f5a5 Mon Sep 17 00:00:00 2001 From: Vladimir Novick Date: Tue, 19 Feb 2019 12:04:12 +0200 Subject: [PATCH 10/11] Update LessonNotes.md --- Day2/LessonNotes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Day2/LessonNotes.md b/Day2/LessonNotes.md index 1ddb9ee..7700ffa 100644 --- a/Day2/LessonNotes.md +++ b/Day2/LessonNotes.md @@ -1,6 +1,6 @@ # Consume GraphQL API from Vanilla JS -[Consume GraphQL API](https://codesandbox.io/s/p9828pn87) +[Consume GraphQL API](https://codesandbox.io/s/lx2q2nr6p9) # Apollo From f2076b60579619bf4e23bd7f52dd42380a26b3aa Mon Sep 17 00:00:00 2001 From: Vladimir Novick Date: Wed, 22 May 2019 07:31:27 +0200 Subject: [PATCH 11/11] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 3b0309c..50d9b04 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,8 @@ Complimentary repo to https://tylermcginnis.com/free-graphql-bootcamp/ bootcamp Slides are available [here](https://slides.com/vladimirnovick/graphql-fullstack-bootcamp): +Videos are available [here](https://www.youtube.com/watch?v=Jl7oYk7Ye9E&list=PL28aKhmSneX86qqmzVNjwYJ1OZORPFxAr) + # Prerequisites ## Day1