gql-query-creator
v0.0.2
Published
Programmatically create your GraphQL Query for NodeJS.
Downloads
1
Readme
This project is a Work in Progress and currently in development. The API is subject to change without warning.
Install
npm install gql-query-creator
Usage
Main API
gqlQueryCreator(queryName, queryVariables, queryTree);
The Query Tree
This package allows you to programmatically construct an object that is formatted into a query string and variables. We call this the Query Tree. It follows the format shown below*:
const queryTree = {
singleProperty: '', /* OUTPUT - singleProperty */
propertyWithOptionsAndVariables: [{
optionA: 'variableA',
}], /* OUTPUT - propertyWithOptionsAndVariables(optionsA: $variableA) */
propertyWithOptionsAndValues: [{
propOverride: true,
optionA: 150,
}], /* OUTPUT - propertyWithOptionsAndValues(optionsA: 150) */
propertyWithAlias: [{}, 'alias'], /* OUTPUT - alias: propertyWithAlias */
propertyWithProperties: {
args: [{
optionA: 'variableA',
}], // Note: this functions the same as the arrays above
items: {
singleProperty: '',
singlePropertyTwo: '',
},
}, /* OUTPUT -
propertyWithProperties(optionA: $variableA) {
singleProperty
singlePropertyTwo
}
*/
};
* If this seems confusing to you, check out the example it might make more sense.
Example
// using CommonJS
const { gqlQueryCreator } = require('gql-query-creator');
// using ESM
import { gqlQueryCreator } from 'gql-query-creator';
function myQueryString() {
/* --- RandomProject's Useful Items --- */
const postProperties = {
title: '',
date: '',
body: '',
};
const userProperties = {
username: '',
firstName: '',
url: [{ propOverride: true, dotty: true }, 'dottyUrl'],
posts: {
args: [{
propOverride: true,
latest: true,
count: 10,
}],
items: {
...postProperties,
},
},
};
/* --- Query Creation --- */
const queryName = 'UserInfo';
const queryTree = {
userByUsername: {
args: [{ username: 'username' }],
items: {
...userProperties,
},
},
};
const username = 'RayhanADev';
const queryVariables = {
username: ['String!', username],
};
// Modify the tree if a criteria is met
if(username === 'RayhanADev') {
queryTree.userByUsername.items.roles = '';
};
// Pass Everything Through the Creator
const myQuery = gqlQueryCreator(queryName, queryVariables, queryTree);
return myQuery;
}
const myQuery = myQueryString();
console.log(myQuery.query);
console.log('-----');
console.log(myQuery.variables);
Output:
query UserInfo($username: String!) {
userByUsername(username: $username) {
username
firstName
dottyUrl: url(dotty: true)
posts(latest: true, count: 10) {
title
date
body
}
roles
}
}
-----
{"username":"RayhanADev"}