SQLite transaction manager for SlimIO events addon. Designed to work with the sqlite npm package.
- Node.js v12 or higher
This package is available in the Node Package Repository and can be easily installed with npm or yarn.
$ npm i @slimio/sqlite-transaction
# or
$ yarn add @slimio/sqlite-transaction
Take the following example with an SQLite DB (with a table users
).
const tM = new TransactionManager(db, {
interval: 500,
verbose: true
});
tM.registerSubject("user", {
insert: "INSERT INTO users (username, password) VALUES (?, ?)"
});
tM.once("user.insert", (openAt, data, aData) => {
console.log(`User insertion requested at: ${new Date(openAt)}, now successfully inserted!`);
});
const tId = tM.open("insert", "user", ["fraxken", "admin"]);
const ret = tM.attachData(tId, { foo: "bar" });
constructor< S >(db: sqlite.Database, options?: TransactionManager.ConstructorOptions)
Create a new SQLite transaction manager. The first argument must be an SQLite db (from the npm package sqlite). Available options are described by the following interface:
interface ConstructorOptions {
interval?: number;
verbose?: boolean;
}
Default values are interval 5000
(milliseconds) and verbose false
.
const sqlite = require("sqlite");
const transactionManager = require("@slimio/sqlite-transaction");
const db = await sqlite.open("./db.sqlite");
const tM = new transactionManager(db, { interval: 1000 });
registerSubject(name: TransactionManager.Subject, actions: TransactionManager.Actions): this
Register a new Subject on the Transaction Manager object. The subject name must be typeof string or symbol. The actions argument must be described by a JavaScript Object as follow:
interface Actions {
insert?: string;
delete?: string;
update?: string;
}
tM.registerSubject("test", {
update: "...",
delete: "..."
});
loadSubjectsFromFile(fileLocation: string): Promise< void >
Load subjects from a given .json file. The file must be indented as follow:
{
"subjectName": {
"insert": "INSERT INTO table (field) VALUES ('val')",
"update": "..."
}
}
Example
await tM.loadSubjectsFromFile("./subjects.json");
open(action: TransactionManager.Action, subject: keyof S, data: any[]): string
Open a new request that will be queue and handled in a SQLite transaction. action and subject arguments are not mandatory and must be valid. Action must be either insert, update or delete.
The action must exist on the given subject.
attachData(transactId: string, data: any): boolean
close(transactId: string): boolean
exit(): void
- Ability to lock/unlock requests (db handle priority).
- Reduce/Agregate same requests (alarm with row occurence for example).
Name | Refactoring | Security Risk | Usage |
---|---|---|---|
@slimio/timer | Minor | Low | Driftless Timer |
MIT