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

docorm

v0.1.0-b20

Published

Persistence layer with ORM features for JSON documents

Downloads

119

Readme

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