graphql-models
Util for generate GraphQL-types from abstract models.




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
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
$3
$3
Collect queries, mutations and subscriptions, add viewer and return GraphQL-schema.
$3
Return array of Query.
$3
Return array of Mutation.
#### Mutation = { name: string; field: GraphQLFieldConfig; }
Model
Documentation
Useful arguments for find
$3
name: type, example where:{ age: 15 }
For nullable-attributes
_name_IsNull, example where:{ titleIsNull: true }
_name_IsNotNull
$3
_name_In
_name_NotIn
_name_Contains
_name_NotContains
_name_StartsWith
_name_NotStartsWith
_name_EndsWith
_name_NotEndsWith
_name_Like
_name_NotLike
$3
_name_In
_name_NotIn
_name_GreaterThan
_name_LessThan
_name_GreaterThanOrEqual
_name_LessThanOrEqual
$3
_name_In
_name_NotIn
_name_GreaterThan
_name_LessThan
_name_GreaterThanOrEqual
_name_LessThanOrEqual
$3
_name_In
_name_NotIn
_name_GreaterThan
_name_LessThan
_name_GreaterThanOrEqual
_name_LessThanOrEqual
$3
_name_: type
_name_isNull
_name_isNotNull
$3
All for primary-key type
Tests
npm install
npm test