# @yadah/subsystem-knex

> Yadah subsystem to provide access to a shared Knex instance

Latest version **0.2.2** (published 2023-06-03) · ISC license · 0 weekly downloads

## Install

```sh
npm install @yadah/subsystem-knex
pnpm add @yadah/subsystem-knex
yarn add @yadah/subsystem-knex
bun add @yadah/subsystem-knex
```

## Health

**Score 20/100 (F)** — status: abandoned.

Positive: esm support; no vulnerabilities.

Warnings: low downloads; no types; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.2.2 |
| Published | 2023-06-03 |
| First published | 2022-07-12 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | ESM |
| Node | >=18.3.0 |
| Dependencies | 4 |
| Unpacked size | 5.7 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 1 |
| Author | ttoohey |
| Maintainers | ttoohey |
| Keywords | yadah, knex |

## Links

- npm: https://www.npmjs.com/package/@yadah/subsystem-knex
- Repository: https://github.com/ttoohey/yadah
- Homepage: https://github.com/ttoohey/yadah/tree/master/packages/subsystem-knex#readme
- Issues: https://github.com/ttoohey/yadah/issues
- npm.io page: https://npm.io/package/@yadah/subsystem-knex

## Dependencies (4)

- [pg](https://npm.io/package/pg.md) ^8.7.3
- [knex](https://npm.io/package/knex.md) ^2.1.0
- [@yadah/mixin](https://npm.io/package/@yadah/mixin.md) 0.2.0
- [@yadah/subsystem-context](https://npm.io/package/@yadah/subsystem-context.md) 0.2.2

## Recent versions

- 0.2.2 (latest) — 2023-06-03
- 0.2.0 — 2023-04-08
- 0.1.1 — 2022-07-12

## README

# Yadah Knex subsystem

A [Yadah](https://www.npmjs.com/package/@yadah/yadah) subsystem and Domain class
mixin that provides a way to access a [knex](https://knexjs.org/) instance.

## Basic usage

```js
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).

---
_Source: https://npm.io/package/@yadah/subsystem-knex · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
