Introducing Socket Firewall: Free, Proactive Protection for Your Software Supply Chain.Learn More
Socket
Book a DemoInstallSign in
Socket

@trap_stevo/liveql

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@trap_stevo/liveql

Supercharge your database workflow with a visually clean, ultra-intuitive SQL layer. Chain elegant queries, trigger instant real-time events, and manage schemas effortlessly — all without ORM overhead while blending raw SQL power with modern developer erg

latest
npmnpm
Version
0.0.1
Version published
Weekly downloads
7
-22.22%
Maintainers
1
Weekly downloads
 
Created
Source

⚡ @trap_stevo/liveql

Supercharge your database workflow with a visually clean, ultra-intuitive SQL layer.
Chain elegant queries, trigger instant real-time events, and manage schemas effortlessly — all without ORM overhead, blending raw SQL power with modern developer ergonomics to make database interactions fast, fluid, and future-proof.

🚀 Features

  • 🖋 Elegant Query Chaining – Build clean, composable SQL queries with zero boilerplate
  • 🔄 Full DML + DDL Support – Insert, update, delete, and alter schemas in one unified API
  • 📡 Real-Time Database Events – Subscribe to changes with instant notifications
  • 🛠 Schema Builder – Create, drop, and alter tables with expressive syntax
  • 🔍 Advanced Filtering – Chain AND, OR, IN, LIKE, and more without syntax clutter
  • 🌐 Multi-Dialect Ready – Works with PostgreSQL, MySQL, SQLite
  • 📜 Migration Support – Run SQL files from a folder, track applied migrations
  • No ORM Bloat – Keep full control of raw SQL with modern ergonomic tooling

⚙️ System Requirements

RequirementVersion
Node.js≥ 19.x
npm≥ 9.x (recommended)
OSWindows, macOS, Linux
DatabasePostgreSQL, MySQL, SQLite

API Specifications

⚡ LiveQL API

The root class for all LiveQL operations. Instantiated with an existing database client (PostgreSQL, MySQL, or SQLite).

const LiveQL = require("@trap_stevo/liveql");
const db = new LiveQL(client);
MethodSignatureAsyncDescription
tabletable(name: string)Returns a QueryBuilder instance for building and running queries on a specific table.
schemaschema(name: string)Returns a SchemaBuilder instance for DDL operations on a table.
inspectorinspectorExposes the SchemaInspector API for table/column/index metadata.
migratormigratorExposes the MigrationManager API for running/updating migrations.
realtimerealtimeExposes the RealtimeManager API for LISTEN/NOTIFY and polling-based change events.
enableRealtimeenableRealtime(table: string, events?: ("insert" | "update" | "delete")[], options?: {...})Enables real-time listeners for a table.
disableRealtimedisableRealtime(table: string, events?: string[])Disables listeners for a table.
enableDDLEventsenableDDLEvents()(Postgres) Enables DDL trigger and LISTEN for schema changes.
disableDDLEventsdisableDDLEvents()Removes DDL trigger and listener.
setupRealtimesetupRealtime({ tables?: string[], events?: string[], ddl?: boolean, pollOptions?: {...} })Convenience method to enable multiple tables/events at once.

Constructor Options

new LiveQL(client);

Example

const { Client } = require("pg");
const LiveQL = require("@trap_stevo/liveql");

const client = new Client({ /* ... */ });
await client.connect();

const db = new LiveQL(client);

// Create a table
await db.schema("users").create([
    { name: "id", type: "SERIAL", primaryKey: true },
    { name: "name", type: "TEXT", notNull: true }
]);

// Insert + select
await db.table("users").insert({ name: "Alice" }).run();
const rows = await db.table("users").select("*").run();
console.log(rows);

🖋 Live Query

db.table(name)

MethodSignatureAsyncDescription
selectselect(...fields: string[])Set columns ("*" if omitted).
wherewhere(field: string, value: any) or where(field: string, op: string, value: any)Add a WHERE clause. Supports =, >, <, >=, <=, <>, etc.
andand(field: string, valueOrOp: any, valueIfOp?: any)Chain an AND condition (alias to where with AND).
oror(field: string, valueOrOp: any, valueIfOp?: any)Chain an OR condition.
likelike(field: string, pattern: string)LIKE clause (dialect-appropriate params).
inin(field: string, values: any[])IN (...) clause with bound params.
orderByorderBy(field: string, dir?: "ASC" | "DESC")Sorting.
limitlimit(n: number)Limit rows.
insertinsert(data: object | object[])Prepare an INSERT (single or bulk).
updateupdate(data: object)Prepare an UPDATE (use with where).
deletedelete()Prepare a DELETE (use with where).
runrun()Execute the built SQL with bound params. Returns driver result (rows on PG).

Notes

  • Placeholders are dialect-aware: $1, $2, ... (PostgreSQL) vs ? (MySQL/SQLite).
  • Parameter numbering resets on each .run().

Examples

// Select with AND/OR/IN/LIMIT
await db.table("users")
  .select("id", "name")
  .where("active", true)
  .and("age", ">", 18)
  .or("email", "LIKE", "%@example.com")
  .in("role", ["admin", "editor"])
  .orderBy("name", "ASC")
  .limit(20)
  .run();

// Update
await db.table("users")
  .update({ name: "Alice" })
  .where("id", 1)
  .run();

// Delete
await db.table("users")
  .delete()
  .where("id", 5)
  .run();

🛠 Schema Builder

db.schema(name)

MethodSignatureAsyncDescription
createcreate(columns: Array<{ name, type, primaryKey?, autoIncrement?, notNull?, unique?, default? }>, options?: { ifNotExists?: boolean })Create table with provided columns.
dropdrop(options?: { ifExists?: boolean })Drop the table.
renamerename(newName: string)Rename table.
addColumnaddColumn(column: string, type: string, options?: {...})Add a column.
dropColumndropColumn(column: string)Drop a column.
alterColumnalterColumn(column: string, type?: string, options?: { notNull?: boolean, default?: any })Change type / nullability / default.
addPrimaryKeyaddPrimaryKey(columns: string | string[])Add primary key constraint.
addForeignKeyaddForeignKey(column: string, refTable: string, refColumn: string, options?: { onDelete?, onUpdate? })Add foreign key.
addIndexaddIndex(indexName: string, columns: string | string[], options?: { unique?: boolean, ifNotExists?: boolean })Create (unique) index.
dropIndexdropIndex(indexName: string)Drop index (adds CASCADE on PG).

Column Type Hints

  • Auto-increment: PG GENERATED ALWAYS AS IDENTITY, MySQL AUTO_INCREMENT
  • default accepts raw SQL strings like "CURRENT_TIMESTAMP".

Example

await db.schema("products").create([
  { name: "id", type: "SERIAL", primaryKey: true },
  { name: "name", type: "TEXT", notNull: true },
  { name: "price", type: "NUMERIC", default: 0 }
], { ifNotExists: true });

await db.schema("products").addColumn("stock", "INT", { default: 0 });

🔍 Schema Inspector

db.inspector

MethodSignatureAsyncDescription
listTableslistTables()List table names.
getColumnsgetColumns(table: string)Column metadata.
getPrimaryKeysgetPrimaryKeys(table: string)Primary key columns.
getIndexesgetIndexes(table: string)Index metadata.
getForeignKeysgetForeignKeys(table: string)FK metadata.

Supports PostgreSQL / MySQL / SQLite (using information_schema or PRAGMA).

📂 Live Migration

db.migrator

MethodSignatureAsyncDescription
runrun({ up?: string[], down?: string[] })Run SQL strings directly (in order).
runFromFolderrunFromFolder(dir: string, direction?: "up" | "down")Load *.up.sql/*.down.sql from a folder, track in migrations, run/rollback in order.

Example

await db.migrator.runFromFolder("./migrations", "up");
// ...
await db.migrator.runFromFolder("./migrations", "down");

📡 Live Time

db.realtime

MethodSignatureAsyncDescription
onEventonEvent(table: string, eventType: "insert" | "update" | "delete", handler: (payload) => void)Listen to table events; internally uses event name ${table}__${eventType}.
listenlisten(channel: string)(PG) LISTEN channel.
unlistenunlisten(channel: string)(PG) UNLISTEN channel.
startPollingstartPolling(table, eventType, interval, fetchFn, { idColumn?, updatedAtColumn? })Start polling fallback for non-PG.
stopPollingstopPolling(table, eventType)Stop polling.

Example

db.realtime.onEvent("users", "insert", (row) => console.log("New user:", row));
db.enableRealtime("users", ["insert"]);

📦 Installation

npm install @trap_stevo/liveql

⚡ Quick Start (PostgreSQL)

const { Client } = require("pg");
const LiveQL = require("@trap_stevo/liveql");

(async () => {
  const client = new Client({
    host: "localhost",
    user: "postgres",
    password: "pass123",
    database: "testdb",
    port: 5432
  });

  await client.connect();

  const db = new LiveQL(client);

  // Fresh table
  await db.schema("users").drop({ ifExists: true });
  await db.schema("users").create([
    { name: "id", type: "SERIAL", primaryKey: true },
    { name: "name", type: "TEXT", notNull: true },
    { name: "email", type: "TEXT", unique: true },
    { name: "created_at", type: "TIMESTAMP", default: "CURRENT_TIMESTAMP" }
  ], { ifNotExists: true });

  // Realtime listeners
  db.realtime.onEvent("users", "insert", (row) => console.log("INSERT:", row));
  db.realtime.onEvent("users", "update", (row) => console.log("UPDATE:", row));
  db.realtime.onEvent("users", "delete", (row) => console.log("DELETE:", row));
  db.enableRealtime("users", ["insert", "update", "delete"]);

  // Insert
  await db.table("users").insert({ name: "John", email: "john@example.com" }).run();
  await db.table("users").insert({ name: "Jane", email: "jane@example.com" }).run();

  // Update
  await db.table("users").update({ name: "Johnathan" }).where("id", 1).run();

  // Delete
  await db.table("users").delete().where("id", 2).run();

  // Select
  const result = await db.table("users").select("id", "name", "email", "created_at").run();
  console.log("Users:", result.rows);
})();

📜 License

See License in LICENSE.md

⚡ SQL Power. Live Updates. Zero Bloat.

LiveQL gives you the raw speed of SQL with the flexibility of a modern query API — and real-time events baked right in. Build, evolve, and react to your database like never before.

Keywords

Legendary

FAQs

Package last updated on 10 Sep 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts