Skip to content
forked from bbi-lab/docorm

Document-oriented relational data persistence manager

License

Notifications You must be signed in to change notification settings

jstone-dev/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

  • More ORM-like interface for interacting with relationships between documents
  • Ability to map JSON properties to relational database columns

About

Document-oriented relational data persistence manager

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • TypeScript 100.0%