GraphQL adapter for Waterline
Pelorus can help find what you're looking for using GraphQL and Waterline queries.
Forked from waterline-graphql adapter
Installation
Install the latest stable release with the npm command-line tool:
$ npm install pelorus
Configuration
{
collections: orm.collections // Required attributes
exposeQueryLanguage: true|false // Allows you to pass in waterline queries
}
Note: If you are using standalone Waterline models, your models need to be patched with an associations array. See the issue here.
module.exports = {
associations: [], // <-- required if using standalone Waterline models
identity: 'user',
attributes: {
firstName: {
type: 'string'
}
}
};
Usage
From Waterline collections to GraphQL schemas
// Import the adapter
const Pelorus = require('pelorus');
// Convert Waterline collections to GraphQL schemas
const schemas = Pelorus.getGraphQlSchema({
collections: orm.collections,
exposeQueryLanguage: true
});
Execute GraphQL queries
const graphql = require('graphql').graphql();
// Build your query
const query = '{ users {firstName lastName articles { title comments { text }}}}';
// Execute the query
graphql(schemas, query)
.then(result => console.log(result))
.catch(error => console.log(error));
Complex queries
You can execute more complex queries like this.
This example will return 10 user's records sorted alphabetically by firstName
:
const query = '{ users (limit: 10, sort: "firstName ASC") { firstName lastName articles { title comments { text }}}}';
Using both skip
and limit
can be used to build a pagination system.
const query = '{ users (limit: 10, sort: "firstName ASC", skip: 10) { firstName lastName articles { title comments { text }}}}';
You can also utilise Waterline's query language by adding criteria modifiers.
Return all users where their first name starts with Sam
e.g Samantha, Samuel, Sam...
const query = '{ users (firstName: {startsWith: "Sam"}) { firstName lastName } }';
Return the first 5
users in firstName
descending order whose name is not Sam
or John
and their age
is over 21
const query = '{ users (where: {firstName: {"!": ["Sam", "John"]}, age: {">": 21}}, limit: 5, sort: "firstName DESC") { firstName lastName age } }';