/graphql-query-builder

a simple but powerful graphQL query builder

Primary LanguageJavaScriptMIT LicenseMIT

graphql-query-builder

a simple but powerful graphQL query builder

info:

npm version License pull requests welcome GitHub stars

tests:

build Coverage Status

quality:

Code Climate bitHound Overall Score Issue Count Known Vulnerabilities

If this was helpful, ★ it on github

tested on NodeJS and Webpack

Install

npm install graphql-query-builder

Api

const Query = require('graphql-query-builder');

constructor

query/mutator you wish to use, and an alias or filter arguments.

Argument (one to two) Description
String the name of the query function
* String / Object (optional) This can be an alias or filter values
let profilePicture = new Query("profilePicture",{size : 50});

setAlias

set an alias for this result.

Argument Description
String The alias for this result
profilePicture.setAlias("MyPic");

filter

the parameters to run the query against.

Argument Description
Object An object mapping attribute to values
profilePicture.filter({ height : 200, width : 200});

find

outlines the properties you wish to be returned from the query.

Argument (one to many) Description
String or Object representing each attribute you want Returned
... same as above
    profilePicture.find( { link : "uri"}, "width", "height");

toString

return to the formatted query string

  // A (ES6)
  `${profilePicture}`;
  // B
  profilePicture+'';
  // C
  profilePicture.toString();

run samples

node example/simple.js

Example

var Query = require('graphql-query-builder');

// example of nesting Querys
let profilePicture = new Query("profilePicture",{size : 50});
    profilePicture.find( "uri", "width", "height");
    
let user = new Query("user",{id : 123});
    user.find(["id", {"nickname":"name"}, "isViewerFriend",  {"image":profilePicture}])
    
    console.log(user)
    /*
     user( id:123 ) {
    id,
    nickname : name,
    isViewerFriend,
    
    image : profilePicture( size:50 ) {
        uri,
        width,
        height
    }
  }
    */
    
// And another example

let MessageRequest = { type:"chat", message:"yoyo",
                   user:{
                            name:"bob",
                            screen:{
                                    height:1080,
                                    width:1920
                                    }
                    },
                    friends:[
                             {id:1,name:"ann"},
                             {id:2,name:"tom"}
                             ]
                    };
                    
let MessageQuery = new Query("Message","myPost");
    MessageQuery.filter(MessageRequest);
    MessageQuery.find({ messageId : "id"}, {postedTime : "createTime" });
    
    console.log(MessageQuery);
    
    /*
    myPost:Message( type:"chat",
                    message:"yoyo",
                    user:{name:"bob",screen:{height:1080,width:1920}},
                    friends:[{id:1,name:"ann"},{id:2,name:"tom"}])
        {
            messageId : id,
            postedTime : createTime
        }
    */

    // Simple nesting
    
    let user = new Query("user");
        user.find([{"profilePicture":["uri", "width", "height"]}])
    
    /* 
    user {
      profilePicture {
        uri,
        width,
        height
       }
     }
    */ 
    
    // Simple nesting with rename
    
    let user = new Query("user");
        user.find([{"image":{"profilePicture":["uri", "width", "height"]}}])
    
    /* 
    user {
      image : profilePicture {
        uri,
        width,
        height
       }
     }
    */