@slimio/sqlite-transaction
TypeScript icon, indicating that this package has built-in type declarations

0.2.0 • Public • Published

sqlite-transaction

Version Maintenance MIT dep size Known Vulnerabilities Build Status

SQLite transaction manager for SlimIO events addon. Designed to work with the sqlite npm package.

Requirements

Getting Started

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

Usage example

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" });

API

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

Roadmap

  • Ability to lock/unlock requests (db handle priority).
  • Reduce/Agregate same requests (alarm with row occurence for example).

Dependencies

Name Refactoring Security Risk Usage
@slimio/timer Minor Low Driftless Timer

License

MIT

Package Sidebar

Install

npm i @slimio/sqlite-transaction

Weekly Downloads

1

Version

0.2.0

License

MIT

Unpacked Size

16.9 kB

Total Files

5

Last publish

Collaborators

  • fraxken
  • alexandre.malaj