@js-entity-repos/knex

A concrete implementation of js-entity-repos for knex.

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
@js-entity-repos/knex
2463.2.155 years ago6 years agoMinified + gzip package size for @js-entity-repos/knex in KB

Readme

knex
A concrete implementation of js-entity-repos for knex.

Usage

  1. Install it with npm i @js-entity-repos/knex.
  2. For each entity you will need to do the following.
1. [Create an Entity interface](#entity-interface).
1. [Construct the facade](#construct-the-facade).
1. [Use the facade](https://github.com/js-entity-repos/core/blob/master/docs/facade.md).

Entity Interface

import Entity from '@js-entity-repos/core/dist/types/Entity';

export interface TodoEntity extends Entity {
  readonly description: string;
  readonly completed: boolean;
}

Construct the Facade

import factory from '@js-entity-repos/knex/dist/factory';
import connectToDb from '@js-entity-repos/knex/dist/utils/connectToDb';

const todosFacade = factory<TodoEntity>({
  // Optional property to convert an entity to a DB document. Defaults to the function below.
  constructDocument: (patch) => {
    return patch;
  },
  // Optional property to convert a DB document to an entity. Defaults to the function below.
  constructEntity: (document) => {
    return document;
  },
  // Optional property to convert an entity filter to a DB filter. Defaults to the function below.
  constructFilter: (filter) => {
    return filter;
  },
  // Optional property to construct an initial database query. Defaults to the function below.
  constructQuery: (db) => {
    return db.table('todos');
  },
  // Optional property to convert an entity sort to a DB sort. Defaults to the function below.
  constructSort: (sort) => {
    return sort;
  },
  db: connectToDb({
    client: 'mysql',
    connection: {
      database: 'todoapp',
      host: '127.0.0.1',
      password: 'pword',
      user: 'todouser',
    },
  }),
  // Optional property. Defaults to 10.
  defaultPaginationLimit: 10,
  entityName: 'todo',
  // Optional property. Defaults to the entityName.
  tableName: 'todos',
});