Blitz-orm is an Object Relational Mapper (ORM) for graph databases that uses a JSON query language called Blitz Query Language (BQL). BQL is similar to GraphQL but uses JSON instead of strings. This makes it easier to build dynamic queries.
Blitz-orm is similar to other ORM packages such as Prisma. You define a BQL schema and it gets translated to different databases (currently only compatible with TypeDB and SurrealDB).
TypeDB
SurrealDB
MultiDB
Next-auth
yarn add @blitznocode/blitz-orm
import BormClient from '@blitznocode/blitz-orm';
import { bormConfig } from './borm.config';
import { schema } from './schema';
const bormClient = new BormClient({
schema,
config: bormConfig,
});
export default bormClient;
const res = await bormClient.mutate({$entity: 'User', name: 'Ann'}, { noMetadata: true });
1) There is no borm.define() method yet. This means you will need to translate your borm schema into typeQL schema manually 2) Private (non shared) attributes are defined in typeDB as "nameOfTheThing·nameOfTheAttribute", where "·" is a mid-do. As an example:
#shared attribute (shared: true) :
title sub attribute, value string;
#as a private attribute (shared: false), default behaviour:
book·title sub attribute, value string;
You can find example mutations and queries in the tests There is no official documentation but you can check the draft RFC: https://www.notion.so/blitzapps/BlitzORM-RFC-eb4a5e1464754cd7857734eabdeaa73c
The RFC includes future features and is not updated so please keep an eye on the query and mutation tests as those are designed for the features already working.
To run TypeDB locally, follow the official instructions at https://docs.vaticle.com/docs/running-typedb/install-and-run. It is recommended to run TypeDB Studio, define the schema there, and test with pure TypeQL before using Blitz-orm.
You can contribute to the project by adding adapters for other databases, developing a BQL-to-GraphQL mapper, enhancing performance, or contributing to the public roadmap for this package (not yet published). To get in touch, please send an email to loic@blitznocode.com.
Blitz-orm is currently in alpha version and not ready for production use. Some key queries and mutations do work, but there is still much that needs to be done and performance improvements are needed. One of the biggest performance issues is with nested queries, as they currently require a call to TypeDB for each level of depth.
To see what is currently working and find examples, please check the test folder, where you will find a variety of queries and mutations.
This orm includes a basic typeGen that gets you types depending on the structure of the borm Schema. You can use it like this:
type UserType = GenerateType<typeof typesSchema.relations.User>;
Due to typescript limitations and also to be able to type fields from extended things, you will need to compile your bormSchema to a particular format. In order to make this work you can see the example that we have in the tests that you can run with pnpm test:buildSchema
.
You can also use it with your base schema without compiling but some fields might not be there and you might need to ignore some ts errors. Also you will need "as const" at the end of your schema.
pnpm add -D husky -w