npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@sammarks/objection-graphql

v0.3.5

Published

Helpers for combining Objection models with GraphQL.

Downloads

18

Readme

CircleCI NPM version NPM downloads License Issues

@sammarks/objection-graphql is a set of helper methods for quickly crafting resolvers with GraphQL and Objection.JS.

Get Started

npm install @sammarks/objection-graphql
yarn add @sammarks/objection-graphql

On each of your models, decorate them with withGraphQLSupport

import { withGraphQLSupport } from '@sammarks/objection-graphql'

@withGraphQLSupport()
export default class User extends Model {
  static tableName = 'users'
  static get relationMappings () {
    return {
      posts: {
        modelClass: Post,
        relation: Model.HasManyRelation,
        join: {
          from: 'users.id',
          to: 'posts.user_id'
        }
      }
    }
  }
}

Now, in your GraphQL resolvers:

import { getResolver, nodeResolver } from '@sammarks/objection-graphql'
import User from './models/User'

const resolvers = {
  Node: nodeResolver,
  User: getResolver(User)
}

And then the following GraphQL schema will automatically be supported.

enum OrderDirection {
  ASC
  DESC
}

type User {

  # Standard user fields...
  id: ID!
  firstName: String!
  lastName: String!
  
  # Relationships!
  posts(
    first: Int = 10,
    after: String,
    orderBy: String = "id",
    orderDirection: OrderDirection = ASC
  ): PostsConnection!
  
}

See objection-graphql-relay for some more information.

Function Reference

getResolver(ObjectionModel model)

Automatically generates a resolver for the passed Objection.JS model. Currently does not support extra customization.

Will automatically generate resolvers for single and multiple relationships. See the source code for orderedPagedRelationQuery() for more information.

nodeResolver

This is just a pretty standard GraphQL Node resolver. See the code sample above for how to use this. It just takes the constructor name of the Model and uses that to determine the GraphQL type (so make sure those are the same!)

withGraphQLSupport()

Decorator for adding helper methods required for the automatic connection creator inside getResolver(). Returns a function that accepts the model to decorate. There are currently no configuration options.

Features

  • Automatically generates GraphQL resolvers based on Objection.JS models.
  • Includes support for many-to-many relationships and one-to-many relationships with GraphQL Relay support out of the box.
  • Relationship connections automatically support ordering by specific fields.
  • Includes a basic GraphQL Node resolver for convenience.