Customize

Custom Naming Strategy​

App's can configure litdb to use a custom naming strategy for tables and columns by configuring the dialect's strategy.

import { SnakeCaseStrategy } from "litdb"
import { connect } from "@litdb/postgres"

export const connection = connect({hostname, database, user, password})
export const { $, async: db, native:sql } = connection
connection.dialect.strategy = new SnakeCaseStrategy()

Where SnakeCaseStrategy is defined as returning table and column names in snake_case:

class SnakeCaseStrategy {
    tableName(table:string) : string { return snakeCase(table) }
    columnName(column:string) : string { return snakeCase(column) }
}

Type Converters​

litdb uses type converters to convert between JavaScript Objects and RDBMS data types. App's can configure litdb to use custom type converters by registering them with the driver's schema.

A Type Converter is an object with toDb and fromDb methods that convert between JavaScript and RDBMS data types.

interface TypeConverter {
    toDb(value: any): any;
    fromDb(value: any): any;
}

For example, this DateTimeConverter is used to convert Date objects to and from MySQL's DATETIME data type:

class DateTimeConverter implements TypeConverter
{
    toDb(value: any) {
        const d = toDate(value)
        return d ? dateISOString(d).replace('T',' ') : null
    }
    fromDb(value: any) {
        if (!value) return null
        return toDate(value)
    }
}

Custom Type Converters can be registered with the driver's schema for the data type it should apply to:

export const connection = connect({ host, database, user, password })
export const { $, async:db, native } = connection

connection.schema.converters['DATETIME'] = new DateTimeConverter()

Register Converter for Mutliple Data Types​

The converterFor utility function can be used to register a converter for multiple data types:

import { converterFor } from "litdb"

Object.assign(connection.schema.converters, 
    converterFor(new DateConverter(), "DATE", "DATETIME", "TIMESTAMP", "TIMESTAMPZ"))