0.2.2 • Published 11 months ago

@yadah/subsystem-knex v0.2.2

Weekly downloads
-
License
ISC
Repository
github
Last release
11 months ago

Yadah Knex subsystem

A Yadah subsystem and Domain class mixin that provides a way to access a knex instance.

Basic usage

import createKnex, { KnexMixin } from "@yadah/subsystem-knex";
import DataManager, { Domain } from "@yadah/data-manager";
import { pipe } from "@yadah/mixin";

class MyDomain extends pipe(Domain, KnexMixin) {
  async foo() {
    return await this.knex.select("*").table("tableName");
  }
}

const knex = createKnex({ ...knexConfigOptions });

const dataManager = new DataManager({ knex });
const domains = dataManager.boot({ MyDomain });

console.log(await domains.MyDomain.foo());
// [...records] from "tableName"

createKnex(config)

Creates a knex instance using the provided configuration.

createKnex() will setup pg.types so that dates will use the "plain date" convention (time component is set to zero at zulu), and numbers will be output as javascript number types (ints, bigints, and floats).

KnexMixin

The KnexMixin function will add a .knex property to domain classes which provides access to the knex instance.

An error will be thrown if no knex subsystem is provided during the boot lifecycle.

TransactionMixin

The TransactionMixin function will add properties to domain classes to run database transactions.

transaction(callback)

Starts a knex transaction and calls the provided callback. The knex transaction is added to the context and is available via the transactionOrKnex property or via the callback's first argument.

The knex transaction will be completed when the callback's returned promise resolves. If the callback throws an error, or returns a rejected promise the transaction will be aborted.

The transaction property is also a setter to allow changing the context's transaction value (for example, to create a child context that performs queries outside the transaction).