Skip to content
/ docorm Public

Document-oriented relational data persistence manager

License

Notifications You must be signed in to change notification settings

bbi-lab/docorm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

61 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DocORM

Data persistence manager for document-oriented data

Prerequisites

DocORM is compatible with Node 16 and higher.

Installation

Install the latest version from npmjs.com:

npm install docorm

If you need to use the latest version on GitHub instead, install it this way:

npm install docorm@git+ssh://github.com/bbi-lab/docorm

Setup

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'))
}

Configuration

Features

  • 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

Database support

Currently, only PostgreSQL 13 and higher are supported.

Schemas

Data model schemas adhere to JSON Schema, with some limitations and some extensions.

Supported and unsupported JSON Schema keywords

Applicator keywords

Supported:

  • allOf

Unsupported:

  • oneOf and anyOf
  • if, then, else, and not
  • properties, patternProperties, and additionalProperties
  • dependentSchemas
  • propertyNames
  • prefixItems
  • contains

Validation keywords

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.

  • type
  • enum

Metadata keywords

All metadata keywords are allowed, but these do not entail any behavior in DocORM.

Data models

Queries

Data storage

Connection management

Running queries

Use of JSON paths

JSONPath, JSON pointers, and simple (dot-separated or array) paths

Use of JSONPath-Plus

Current & future directions