JSPM

@slimio/sqlite-transaction

0.2.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 2
  • Score
    100M100P100Q26747F
  • License MIT

SQLite transaction manager for SlimIO events addon

Package Exports

  • @slimio/sqlite-transaction

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@slimio/sqlite-transaction) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

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