Nymph
The Nymph core provides the base level classes and utilities to query the database, save data to it, and define different data types.
Installation
npm install --save @nymphjs/nymph
Drivers
To use Nymph, you need a database driver. Nymph.js provides a MySQL driver, PostgreSQL driver, and a SQLite3 driver. They all provide the exact same functionality.
Usage
Here's an overview:
// main.ts
import { Nymph } from '@nymphjs/nymph';
import MySQLDriver from '@nymphjs/driver-mysql';
import TodoClass from './Todo';
const mysqlConfig = {
host: 'your_db_host',
database: 'your_database',
user: 'your_user',
password: 'your_password',
};
// Create a new instance of Nymph.
const nymph = new Nymph({}, new MySQLDriver(mysqlConfig));
// addEntityClass returns the class you should use for this instance of Nymph.
const Todo = nymph.addEntityClass(TodoClass);
// You are set up. Now you can use entity classes like `Todo` to store data,
// and Nymph's query methods like `getEntities` to retrieve them.
async function run() {
const myEntity = await Todo.factory();
myEntity.text = 'Get it done!';
await myEntity.$save();
const otherPendingTodos = await nymph.getEntities(
{ class: Todo },
{ type: '&', '!guid': myEntity.guid, equal: ['done', false] },
);
const total = otherPendingTodos.length;
const single = total === 1;
console.log(
`Besides the one I just created, there ${
single ? 'is' : 'are'
} ${total} pending todo${single ? '' : 's'} in the database.`,
);
}
// Todo.ts
import { Entity } from '@nymphjs/nymph';
export type TodoData = {
text: string;
done: boolean;
};
export default class Todo extends Entity<TodoData> {
static ETYPE = 'todo'; // This is used for the table name(s) in the DB.
static class = 'Todo'; // This is used to map references to their class.
constructor() {
super();
// Within the methods of an entity, you will use `this.$data` to access
// its data. Outside, you don't need the $data part.
this.$data.text = '';
this.$data.done = false;
}
async $getOtherTodos() {
// this.$nymph (or this.nymph in a static function) is the instance of Nymph
// this entity was loaded with. Creating transactions will create a new
// instance of Nymph, so it could be a transactional instance.
const otherTodos = await this.$nymph.getEntities(
{ class: Todo },
{ type: '!&', guid: this.guid },
);
return otherTodos;
}
}
Options
See the config declaration file.