Data persistence manager for document-oriented data
npm install docorm@git+ssh://github.com/bbi-lab/docorm
The package will soon be available through npmjs.com.
import cls from 'cls-hooked'
import {db, initDocOrm, registerEntityTypes, registerSchemaDirectory} from 'docorm'
import path, {dirname} from 'path'
import {fileURLToPath} from 'url'
import {v4 as uuidv4} from 'uuid'
import config from '../config.js'
import logger from './logger.js'
const __filename = fileURLToPath(import.meta.url)
const __dirname = dirname(__filename)
export async function initDataPersistence() {
initDocOrm({
logger // Optional Winston logger
clsNamespaceName: 'arbitrary-namespace-name',
operationIdKey: 'operation-id',
postgresql: {
host: 'localhost',
port: 5432,
username: 'postgres',
password: 'postgres',
database: 'my_database',
allowUnknownSslCertificate: true,
ssl: true
}
})
await registerSchemaDirectory(path.join(__dirname, 'models-directory'), 'model')
await registerEntityTypes(path.join(__dirname, 'schemas-directory'))
}- Data models based on JSON Schema
- A JSON-based query language suitable for exposure in APIs
- Relationship fetching
- Two query execution modes: immediate execution and streaming query execution using database cursors
Currently, only PostgreSQL 13 and higher are supported.
Data model schemas adhere to JSON Schema, with some limitations and some extensions.
Supported:
allOf
Unsupported:
oneOfandanyOfif,then,else, andnotproperties,patternProperties, andadditionalPropertiesdependentSchemaspropertyNamesprefixItemscontains
Any validation keywords may be used, but currently only the following keywords are used in DocORM's built-in validation. Your own code may add support for other validation keywords.
typeenum
JSONPath, JSON pointers, and simple (dot-separated or array) paths
Use of JSONPath-Plus
- More ORM-like interface for interacting with relationships between documents
- Ability to map JSON properties to relational database columns