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

@blitznocode/blitz-orm

v0.11.25

Published

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.

Downloads

1,468

Readme

Blitz-orm

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).

Compatibility

TypeDB

  • Schema (working with issues)
  • Queries (stable)
  • Mutations (some issues)

SurrealDB

  • Schema (to-do)
  • Queries (stable)
  • Mutations (some issues)

MultiDB

  • Basic queries work and are correctly routed to different databases
  • Nested queries with references to different dbs are not supported yet

Next-auth

  • Fully compatible with next-auth (Auth.js) but we need to publish the adapter

How to Use

  1. Install the package using your package manager, for example: yarn add @blitznocode/blitz-orm
  2. Create a Borm schema. You can find an example in the test folder.
  3. The borm.define() function is currently not working, so you will need to manually translate your BQL schema into a TypeQL schema (an example can be found in the test folder).
  4. Create a configuration file with the database name that you have created in TypeDB.
  5. Initialize Blitz-orm in a file like this:
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;
  1. You can then run queries and mutations like this:
const res = await bormClient.mutate({$entity: 'User', name: 'Ann'}, { noMetadata: true });

Gotchas

  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;

Documentation & example queries

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.

How to Run TypeDB Locally

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.

Collaboration & Contact

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 [email protected].

Warning

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.

What is Currently Working

To see what is currently working and find examples, please check the test folder, where you will find a variety of queries and mutations.

TypeGen

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.

The future of this package

  • Achieve 100% compatibility with typeDB and surrealDB
  • Automatic schemas: Transform BQL schemas into any schema
  • GraphQL compatibility
  • Enhance functionality with new features such as ordered attributes, Vectors (ordered relations)...
  • Expand compatibility to other graph databases and traditional databases such as PostgreSQL or MongoDB
  • Expand multidb compatibility, as now it is possible only for basic queries (querying data from two different DBs in a single BQL query)

Development

  • We use pnpm as a package manager
  • You will need to add "-w", for instance pnpm add -D husky -w