graphql-models

0.5.4 • Public • Published

graphql-models

Util for generate GraphQL-types from abstract models.

Build Status npm version Coverage Status experimental

Install

npm install graphql-models --save

Example

import {graphql} from "graphql";
import {AttributeTypes, Collection, ResolveTypes, Schema} from "graphql-models";

const animalModel = {
    id: "animal",
    attributes: [{
        name: "id",
        type: AttributeTypes.Integer,
        primaryKey: true,
    }, {
        type: AttributeTypes.String,
        name: "name",
    }, {
        type: AttributeTypes.Integer,
        name: "age",
    }, {
        type: AttributeTypes.Float,
        name: "Weight",
    }, {
        type: AttributeTypes.Date,
        name: "birthday",
    }, {
        type: AttributeTypes.Boolean,
        name: "isCat",
    }],
};
const models = new Collection([animalModel]);

const resolveFn = (opts) => {
    if (opts.type === ResolveTypes.Viewer) {
        return {};
    }
    if (opts.type === ResolveTypes.QueryOne && opts.model === "animal") {
        return { id: 15, name: "Rex", age: 2, Weight: 6.5, birthday: new Date(), isCat: false };
    }
};
const schema = new Schema(models, resolveFn);
const graphQLSchema = schema.getGraphQLSchema();
graphql(graphQLSchema, `query Q1{
    viewer{
        animal(id:15){
            id
            name
            age
            Weight
            birthday
            isCat
        }
    }
}`).then((response) => {
        console.log(response.data);
        /*{ viewer:
            { animal:
                { id: 15,
                    name: 'Rex',
                    age: 2,
                    Weight: 6.5,
                    birthday: 'Fri Nov 25 2016 06:04:16 GMT+0700 (ICT)',
                    isCat: false } } }*/
    });

For more examples, look https://github.com/arvitaly/graphql-models/blob/master/spec/Functional-spec.ts

API

ModelConfig

id: string;
name?: string | undefined;
attributes: Array<AttributeConfig>;

AttributeConfig

name: string;
type: AttributeType;
model?: string | undefined;
required?: boolean | undefined;
primaryKey?: boolean | undefined;

Suported attribute type

type AttributeType = "id" | "string" | "integer" | "float" | "json" | "boolean" | "date" | "model" | "collection";

id -> GraphQLID

string -> GraphQLString

integer -> GraphQLInt

float -> GraphQLFloat

json -> GraphQLJSON - own scalar type, https://github.com/arvitaly/graphql-models/blob/master/scalars/JSON.ts

boolean -> GraphQLBool

date -> GraphQLDate - own scalar type, https://github.com/arvitaly/graphql-models/blob/master/scalars/Date.ts

model -> new GraphQLObjectType(...)

collection -> new GraphQLList(new GraphQLObjectType(...)) or Relay-connection

Schema

new(models: Collection, resolveFn: ResolveFn)

getSchema(): GraphQLSchema

Collect queries, mutations and subscriptions, add viewer and return GraphQL-schema.

getQueries(): Queries

Return array of Query.

getMutations(): Mutations

Return array of Mutation.

Mutation = { name: string; field: GraphQLFieldConfig; }

Model

Documentation

Useful arguments for find

All types

name: type, example where:{ age: 15 }

For nullable-attributes

nameIsNull, example where:{ titleIsNull: true }

nameIsNotNull

String

nameIn

nameNotIn

nameContains

nameNotContains

nameStartsWith

nameNotStartsWith

nameEndsWith

nameNotEndsWith

nameLike

nameNotLike

Integer

nameIn

nameNotIn

nameGreaterThan

nameLessThan

nameGreaterThanOrEqual

nameLessThanOrEqual

Float

nameIn

nameNotIn

nameGreaterThan

nameLessThan

nameGreaterThanOrEqual

nameLessThanOrEqual

Date

nameIn

nameNotIn

nameGreaterThan

nameLessThan

nameGreaterThanOrEqual

nameLessThanOrEqual

Boolean

name: type nameisNull nameisNotNull

Model, Collection

All for primary-key type

Tests

npm install
npm test

Readme

Keywords

none

Package Sidebar

Install

npm i graphql-models

Weekly Downloads

2

Version

0.5.4

License

ISC

Last publish

Collaborators

  • arvitaly