0.0.0 • Published 5 years ago

@grif/now-builder v0.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
5 years ago

Usage

Make a new directory with the following files:

/now.json
/grif.config.js
/schema.graphql

now.json

{
  "name": "my-project",
  "builds": [
    { "src": "grif.config.js", "use": "grif" }
  ],
  "routes": [
    { "src": "/api", "dest": "grif.config.js" }
  ]
}

grif.config.js

// example config
module.exports = { target: 'serverless', context: ({ req }) => ({ req }) }

schema.graphql

type User {
  id: ID
  username: String
  posts: [Post]
}

type Post {
  id: ID
  title: String
  text: String
  author: User
}

type Query {
  getUserById(id: ID!): User
  getAllUsers(): [User]
  getAllPosts(): [Post]
}

type Mutation {
  signUp(username: String!, password: String!): User
  createPost(title: String, text: String): Post
}

Result

This schema would expect the following directory structure (which would also be the API structure, minus the extension "ext")

Each file exports a serverless function that would resolve the above schema definition.

*This file/api structure is supposed to mimic the resolver map

*ext could be js|ts|rs|py|go

*λ represents a separate serverless function

λ /Query/getUserById.ext
λ /Query/getAllUsers.ext
λ /Query/getAllPosts.ext

λ /Mutation/signUp.ext
λ /Mutation/createPost.ext

λ /User/username.ext
λ /User/posts.ext
λ /User/index.ext // this would handle the rest of the unspecified fields on type User
or
λ /User.ext // if you want everything handled all in one serverless function

λ /Post/author.ext
λ /Post/index.ext
or
λ /Post.ext

development

now dev

the graphql endpoint (gateway): http://localhost:3000/api

the graphiql ui: http://localhost:3000/api/graphiql

FAQ: grif is named after "Young Griff" from the books. It also almost sounds like graphql. ¯\(ツ)