victorvoid / dinoql
- воскресенье, 12 мая 2019 г. в 00:18:44
JavaScript
A customizable GraphQL style query language for interacting with JavaScript objects.
A customizable GraphQL style query language for interacting with JavaScript objects. Use dinoQL to traverse JavaScript objects the same way you query APIs with GraphQL.
Table of Contents
dinoql is available from npm.
$ npm install dinoql -S
The main objective is to use the same idea of GraphQL, however instead of being for API, it will be for javascript objects.
All examples are using it data:
const data = {
requests: {
products: [],
users: [{
name: 'Victor Igor',
id: "100",
age: 40
}, {
name: 'Kant Jonas',
id: "200",
age: 35
}],
friends: [{
name: 'Kátia',
id: "300",
age: 10
}]
}
}import dinoql from 'dinoql'
const users = dinoql(data)`
requests {
users {
name
}
}
`
console.log(users) //{ users: [{ name: 'Victor Igor' }, { name: 'Kant Jonas' }] }import dinoql from 'dinoql'
const users = dinoql(data)`
requests {
users(id: "200") {
name
}
}
`
console.log(users) //{ users: [{ name: 'Kant Jonas' }] }import dinoql from 'dinoql'
const users = dinoql(data)`
requests {
changeUsers: users(id: "200") {
name
}
}
`
console.log(users) //{ changeUsers: [{ name: 'Kant Jonas' }] }Resolvers provide the instructions for turning a dinoQL operation into data.
import dinoql from 'dinoql'
const users = dinoql(data)`
requests {
users(orderBy: age) {
name,
age
}
}
`
console.log(users)
//{ users: [{ name: 'Kant Jonas', age: 35 }, { name: 'Victor Igor', age: 40 }] }import dinoql from 'dinoql'
const users = dinoql(data)`
requests {
notfound(defaultValue: "Hello")
}
`
console.log(users)
// {notfound: "Hello"}import dinoql from 'dinoql'
const users = dinoql(data)`
requests {
users {
id(toNumber: 1)
}
}
`
console.log(users) //{ users: [{ id: 100 }, { id: 200 }] }import dinoql from 'dinoql'
const users = dinoql(data)`
requests {
users(first: true) {
name
}
}
`
console.log(users) //{ users: { name: 'Victor Igor' } }import dinoql from 'dinoql'
const users = dinoql(data)`
requests {
users(last: true) {
name
}
}
`
console.log(users) //{ users: { name: 'Kant Jonas' } }import dinoql from 'dinoql'
const users = dinoql(data, { keep: true })`
requests {
users(id: "200") {
name
}
}
`
console.log(users)
/*
{
requests: {
users: [{ name: 'Kant Jonas' }]
}
}
*/You can improve performance parsing in build time your queries.
Create files .graphql or .gql and add your queries.
Import your queries from .graphql|.gql
# your queries
query MyQuery {
requests {
users
}
}//your js
import dinoql from 'dinoql'
import { MyQuery } from './MyQueries';
const users = dinoql(data)(MyQuery)You can share piece of query logic.
fragment queryOne on Query {
users {
name
}
}
fragment queryTwo on Query {
products
}
query Form {
requests {
...queryOne,
...queryTwo,
friends
}
}
The code is available under the MIT License.