A decorator based object mapper, schema handler, mutation tracker to use with dgraph.
This library handles objects and their relation and generates mutation/deletion strings based on changes. These strings can be used with any dgraph client to mutate the data.
yarn add @xanthous/dgraph-orm
Here is an example to create a new graph using some of the public APIs exposed by the ORM.
import {
Uid,
Node,
Property,
Predicate,
IPredicate,
QueryBuilder,
SchemaBuilder,
TransactionBuilder
} from '@xanthous/dgraph-orm';
/**
* A Node definition of person
*/
@Node()
class Person {
@Uid()
id: string;
@Property()
name: string;
@Predicate({ type: () => Person })
friends: IPredicate<Person>;
}
// Schema generated based on the node definitions.
const schema = SchemaBuilder.build();
console.log(schema);
// type Person {
// Person.name: string
// Person.friends: [Person]
// }
// Person.name: string .
// Person.friends: [uid] @count .
// Query builder can be used to easily create query fragments based on the definitions.
const { handle, fragment } = QueryBuilder.buildFragment(Person);
console.log(handle);
// ...personDataFragment
console.log(fragment);
// fragment personDataFragment {
// Person.name
// Person.friends
// id
// }
// Create a transaction
const transaction = TransactionBuilder.build();
// Create some people
const john = transaction.nodeFor(Person);
const jane = transaction.nodeFor(Person);
const kamil = transaction.nodeFor(Person);
// A temporary uid is assigned during object creation.
console.log(john.id);
// b830c1f5ca09d466 ## random
// Change their names
john.name = 'John';
jane.name = 'Jane';
kamil.name = 'Kamil';
// Create connections between them
kamil.friends.add(jane);
kamil.friends.add(john);
// Create a mutation string to use with dgraph js client.
const mutation = transaction.getSetNQuadsString();
console.log(mutation);
// _:b830c1f5c787c210 <dgraph.type> "Person" .
// _:b830c1f5c787c210 <Person.name> "John"^^<xs:string> .
// _:b830c1f5c78a5947 <dgraph.type> "Person" .
// _:b830c1f5c78a5947 <Person.name> "Jane"^^<xs:string> .
// _:b830c1f5c78afce1 <dgraph.type> "Person" .
// _:b830c1f5c78afce1 <Person.name> "Kamil"^^<xs:string> .
// _:b830c1f5c78afce1 <Person.friends> _:b830c1f5c78a5947 .
// _:b830c1f5c78afce1 <Person.friends> _:b830c1f5c787c210 .