NodeOM
NodeOM is a persistence library written in Typescript for Node. It supports high level abstractions to manipulate data from different persistence engines in a typesafe manner. Inspired by rom-rb ❤️
Active development. Not ready for usage at this moment. ⚠️
Concepts
NodeOM defines multiple abstractions that are independent from the the data storage. This abstractions allow the interoperation between different persistence engines. For example, you can have a relation backed by Postgres database and another relation powered by Redis and operate between them.
Schema
A schema defines how data is structured. Schemas are powered by Generics to allow type safety operations between them.
Relations
A relation is a set of tuples that provide database specific APIs for reading and writing. A sql adapter will expose the common operations that are allowed in sql like select
, where
or join
while a redis adapter will expose operations like hget
, set
or lpop
Gateway
A gateway is database specific object that manages the connection with the database. Gateways are also aware of the relations that belong to him.
Example
This is a very simple example of what is possible at the moment with NodeOM.
await gateway.connect await migrateSQLSchemagateway userSchema.attribute"id", "INTEGER", userSchema.attribute"email", "STRING"userSchema.attribute"name", "STRING"userSchema.attribute"age", "INTEGER" gateway.registerSchemas // Select only the attribute you need.gateway.relation"users".select"id", "email".toArray // Find by primaryKeygateway.relation"users".byPk44 // Find the first tuplegateway.relation"users".first // All tuplesgateway.relation"users".toArray // Filter by some condition (only equals is supported)gateway.relation"users".where.toArray // Limit the returned tuplesgateway.relation"users".limit10.toArray