graphql-sailboat
TypeScript icon, indicating that this package has built-in type declarations

1.0.21 • Public • Published

GraphQL Sailboat ⛵

GraphQL Sailboat is a simple and efficient Node.js GraphQL HTTP Server, built with TypeScript and Express. Our goal is to increase productivity in the development of amazing GraphQL APIs. Just take your sailboat and sail!

Installation

yarn add graphql-sailboat

Basic Usage

const { server } = require('graphql-sailboat')

const schema = `[Your Schema]`
const resolvers = { 
    // Your Resolvers
 }

 server(schema, resolvers, {
     path: '/sample', // optional, '/graphql' by default
     graphiql: false, // optional, true by default
     port: 8080 // optional, 7000 by default
 })

Sample with values

const { server } = require('graphql-sailboat')

const data = [{
  id: 1,
  tile: "The Shawshank Redemption",
  year: 1994,
  duration: 142,
  genre: "Drama",
  imdbRate: 9.3,
  director: "Frank Darabont"
}, {
  id: 2,
  title: "The Godfather",
  year: 1972,
  duration: 175,
  genre: "Drama, Crime",
  imdbRate: 9.2,
  director: "Francis Ford Coppola"
}, {
  id: 3,
  title: "The Dark Knight",
  year: 2008,
  duration: 152,
  genre: "Action, Crime, Drama",
  imdbRate: 9.0
}];

const schema = `
    type Movie { 
        id: ID!, 
        title: String!, 
        year: Int!, 
        duration: Int!, 
        genre: String!, 
        imdbRate: Float!, 
        director: String 
    } 

    type Query { 
        getMovies: [Movie], 
        bestMovie: Movie, 
        searchMovie(_id: ID): Movie 
    }
`;

const resolvers = {
  getMovies: () => data,
  bestMovie: () => {
    let theBest;
    let rate;
    data.map(e => {
      if (!rate) {
        rate = e.imdbRate;
        theBest = e;
      } else if (e.imdbRate > rate) {
        rate = e.imdbRate;
        theBest = e;
      }
    });
    return theBest;
  },
  searchMovie: args => {
    const id = args;
    const movie = data.filter(e => e.id === id);
    return movie[0];
  }
};

server(schema, resolvers, {
  port: 8000
});

Express middlewares

You can acess express object and create custom middlewares importing app, like this:

const { server, app } = require('graphql-sailboat')
// example of basic auth middleware
app.use((req, res, next) => {

    const auth = { login: 'user', password: 'pass' };
    const b64auth = (req.headers.authorization || '').split(' ')[1] || '';
    const [login, password] = Buffer.from(b64auth, 'base64').toString().split(':');

    if (login && password && login === auth.login && password === auth.password) {
      return next();
    }

    res.set('WWW-Authenticate', 'Basic realm="401"');
    return res.status(401).send('Authentication required.');
})
// ...
// ...
// ...
server(schema, resolvers, {
  port: 8000
});

Package Sidebar

Install

npm i graphql-sailboat

Weekly Downloads

2

Version

1.0.21

License

MIT

Unpacked Size

10.1 kB

Total Files

11

Last publish

Collaborators

  • matthsena