Socket
Socket
Sign inDemoInstall

graphql-knex-resolver

Package Overview
Dependencies
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

graphql-knex-resolver

GraphQL Resolver built with Knex


Version published
Maintainers
1
Created
Source

graphql-knex-resolver

NPM version Build status Dependency Status Code Climate

GraphQL Resolver built with Knex. Can be used to parse GraphQL ASTs into SQL, and as a resolver method standin in a GraphQL schema. Supports whichever databases are supported by Knex.

Install

$ npm install --save graphql-knex-resolver

Usage

Do the stuff you'd normally do, but use the provided resolver method in your GraphQL schema.

1. Initialize the Resolver

const Resolver = require('graphql-knex-resolver')

// setup knex
const gql = require('graphql')
const knex = require('knex')({
  client: 'pg',
  connection: {
    // ...
  }
})
const resolver = Resolver.getResolver(knex)

2. Define the Schema

// create the GraphQL schema using the resolver
const userObject = new gql.GraphQLObjectType({
  name: 'User',
  fields: () => ({
    username: {
      type: gql.GraphQLString
    }
  })
})
const userQuery = new gql.GraphQLObjectType({
  name: 'UserQuery',
  fields: () => ({
    user: {
      type: userObject,
      resolve: resolver // <-------- use the resolver method
    }
  })
})
const userSchema = new gql.GraphQLSchema({
  query: userQuery
})

3. Execute a Query

const findUserByUsername = `{
  user (username: $username) {
    id
    username
  }
}`
return gql.graphql(userSchema, findUserByUsername, {
    username: "tjwebb"
  })
  .then(results => {
    console.log(results)
    // results = {
    //   data: {
    //     user: {
    //       username: 'tjwebb'
    //     }
    //   }
    // }
  })

API

getResolver(engine)

Prepare a new GraphQL Query Resolver

.toSQL(query, dialect, args)

Translates a GraphQL query into SQL, irrespective of schema. Uses the root field name as the table.

dialect is one of (docs):

  • pg
  • mysql
  • sqlite3
  • oracle
  • mariasql
Example

Using the findUserByUsername query above:

Simple Select Statement
const sql = resolver.toSQL(findUserByUsername, 'pg', {
  username: 'tjwebb'
})
// sql = select "username", from "user" where "name" = 'tjwebb'
Select Where In List Statement
const sql = resolver.toSQL(queries.parameterizedWithListType, 'pg', {
  username: [ 'tjwebb', 'admin' ]
})
// sql = select "username" from "user" where "name" = ANY ('{"tjwebb","admin"}')

Table name is inferred to be user since the root field is user. The following query would use the table name "foo":

const findUserByUsername = `{
  foo (username: $username) {
    id
    username
  }
}`

Keywords

FAQs

Package last updated on 28 Feb 2016

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc