@dbcube/query-builder 3.0.24 → 3.0.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bun.lockb +0 -0
- package/dist/index.cjs +65 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.js +65 -10
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/bun.lockb
CHANGED
|
Binary file
|
package/dist/index.cjs
CHANGED
|
@@ -493,7 +493,7 @@ var Table = class _Table {
|
|
|
493
493
|
* const count = await db.table('users').count().first();
|
|
494
494
|
* console.log(count); // { count: 2 }
|
|
495
495
|
*/
|
|
496
|
-
count(column = "*") {
|
|
496
|
+
async count(column = "*") {
|
|
497
497
|
this.dml.type = "select";
|
|
498
498
|
this.dml.aggregation = {
|
|
499
499
|
type: "COUNT",
|
|
@@ -501,7 +501,18 @@ var Table = class _Table {
|
|
|
501
501
|
alias: "count"
|
|
502
502
|
};
|
|
503
503
|
this.dml.columns = [`COUNT(${column}) AS count`];
|
|
504
|
-
|
|
504
|
+
this.dml.data = null;
|
|
505
|
+
this.dml.limit = 1;
|
|
506
|
+
try {
|
|
507
|
+
const result = await this.getResponse();
|
|
508
|
+
const res = result[0] || null;
|
|
509
|
+
if (res) {
|
|
510
|
+
return res.count;
|
|
511
|
+
}
|
|
512
|
+
return 0;
|
|
513
|
+
} catch (error) {
|
|
514
|
+
throw error;
|
|
515
|
+
}
|
|
505
516
|
}
|
|
506
517
|
/**
|
|
507
518
|
* Adds a SUM clause to the query.
|
|
@@ -513,7 +524,7 @@ var Table = class _Table {
|
|
|
513
524
|
* const totalAge = await db.table('users').sum('age').first();
|
|
514
525
|
* console.log(totalAge); // { sum: 55 }
|
|
515
526
|
*/
|
|
516
|
-
sum(column) {
|
|
527
|
+
async sum(column) {
|
|
517
528
|
this.dml.type = "select";
|
|
518
529
|
this.dml.aggregation = {
|
|
519
530
|
type: "SUM",
|
|
@@ -521,7 +532,18 @@ var Table = class _Table {
|
|
|
521
532
|
alias: "sum"
|
|
522
533
|
};
|
|
523
534
|
this.dml.columns = [`SUM(${column}) AS sum`];
|
|
524
|
-
|
|
535
|
+
this.dml.data = null;
|
|
536
|
+
this.dml.limit = 1;
|
|
537
|
+
try {
|
|
538
|
+
const result = await this.getResponse();
|
|
539
|
+
const res = result[0] || null;
|
|
540
|
+
if (res) {
|
|
541
|
+
return res.count;
|
|
542
|
+
}
|
|
543
|
+
return 0;
|
|
544
|
+
} catch (error) {
|
|
545
|
+
throw error;
|
|
546
|
+
}
|
|
525
547
|
}
|
|
526
548
|
/**
|
|
527
549
|
* Adds an AVG clause to the query.
|
|
@@ -533,7 +555,7 @@ var Table = class _Table {
|
|
|
533
555
|
* const avgAge = await db.table('users').avg('age').first();
|
|
534
556
|
* console.log(avgAge); // { avg: 27.5 }
|
|
535
557
|
*/
|
|
536
|
-
avg(column) {
|
|
558
|
+
async avg(column) {
|
|
537
559
|
this.dml.type = "select";
|
|
538
560
|
this.dml.aggregation = {
|
|
539
561
|
type: "AVG",
|
|
@@ -541,7 +563,18 @@ var Table = class _Table {
|
|
|
541
563
|
alias: "avg"
|
|
542
564
|
};
|
|
543
565
|
this.dml.columns = [`AVG(${column}) AS avg`];
|
|
544
|
-
|
|
566
|
+
this.dml.data = null;
|
|
567
|
+
this.dml.limit = 1;
|
|
568
|
+
try {
|
|
569
|
+
const result = await this.getResponse();
|
|
570
|
+
const res = result[0] || null;
|
|
571
|
+
if (res) {
|
|
572
|
+
return res.count;
|
|
573
|
+
}
|
|
574
|
+
return 0;
|
|
575
|
+
} catch (error) {
|
|
576
|
+
throw error;
|
|
577
|
+
}
|
|
545
578
|
}
|
|
546
579
|
/**
|
|
547
580
|
* Adds a MAX clause to the query.
|
|
@@ -553,7 +586,7 @@ var Table = class _Table {
|
|
|
553
586
|
* const maxAge = await db.table('users').max('age').first();
|
|
554
587
|
* console.log(maxAge); // { max: 30 }
|
|
555
588
|
*/
|
|
556
|
-
max(column) {
|
|
589
|
+
async max(column) {
|
|
557
590
|
this.dml.type = "select";
|
|
558
591
|
this.dml.aggregation = {
|
|
559
592
|
type: "MAX",
|
|
@@ -561,7 +594,18 @@ var Table = class _Table {
|
|
|
561
594
|
alias: "max"
|
|
562
595
|
};
|
|
563
596
|
this.dml.columns = [`MAX(${column}) AS max`];
|
|
564
|
-
|
|
597
|
+
this.dml.data = null;
|
|
598
|
+
this.dml.limit = 1;
|
|
599
|
+
try {
|
|
600
|
+
const result = await this.getResponse();
|
|
601
|
+
const res = result[0] || null;
|
|
602
|
+
if (res) {
|
|
603
|
+
return res.count;
|
|
604
|
+
}
|
|
605
|
+
return 0;
|
|
606
|
+
} catch (error) {
|
|
607
|
+
throw error;
|
|
608
|
+
}
|
|
565
609
|
}
|
|
566
610
|
/**
|
|
567
611
|
* Adds a MIN clause to the query.
|
|
@@ -573,7 +617,7 @@ var Table = class _Table {
|
|
|
573
617
|
* const minAge = await db.table('users').min('age').first();
|
|
574
618
|
* console.log(minAge); // { min: 25 }
|
|
575
619
|
*/
|
|
576
|
-
min(column) {
|
|
620
|
+
async min(column) {
|
|
577
621
|
this.dml.type = "select";
|
|
578
622
|
this.dml.aggregation = {
|
|
579
623
|
type: "MIN",
|
|
@@ -581,7 +625,18 @@ var Table = class _Table {
|
|
|
581
625
|
alias: "min"
|
|
582
626
|
};
|
|
583
627
|
this.dml.columns = [`MIN(${column}) AS min`];
|
|
584
|
-
|
|
628
|
+
this.dml.data = null;
|
|
629
|
+
this.dml.limit = 1;
|
|
630
|
+
try {
|
|
631
|
+
const result = await this.getResponse();
|
|
632
|
+
const res = result[0] || null;
|
|
633
|
+
if (res) {
|
|
634
|
+
return res.count;
|
|
635
|
+
}
|
|
636
|
+
return 0;
|
|
637
|
+
} catch (error) {
|
|
638
|
+
throw error;
|
|
639
|
+
}
|
|
585
640
|
}
|
|
586
641
|
/**
|
|
587
642
|
* Adds a LIMIT clause to the query.
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/lib/Database.ts","../src/lib/Trigger.ts"],"sourcesContent":["import { Table, Database } from './lib/Database';\r\nimport type { DatabaseRecord, WhereCallback } from './@types/Database';\r\n\r\nexport default Database;\r\nexport { \r\n Table, \r\n Database,\r\n type DatabaseRecord,\r\n type WhereCallback\r\n};","import fs from 'fs';\r\nimport { QueryEngine, ComputedFieldProcessor, TriggerProcessor } from \"@dbcube/core\";\r\nimport { DatabaseRecord, DML, WhereCallback, WhereCondition } from \"../@types/Database\";\r\nimport { Trigger } from './Trigger';\r\n\r\n/**\r\n * Main class to handle MySQL database connections and queries.\r\n * Implements the Singleton pattern to ensure a single instance of the connection pool.\r\n */\r\nexport class Database {\r\n private name: string;\r\n private engine: any;\r\n private computedFields: any[];\r\n private triggers: any[];\r\n\r\n constructor(name: string) {\r\n this.name = name;\r\n const engine = new QueryEngine(name);\r\n this.engine = engine;\r\n this.computedFields = [];\r\n this.triggers = [];\r\n }\r\n\r\n async useComputes(): Promise<Database> {\r\n const newDatabase = new Database(this.name); \r\n const arrayComputedFields = await ComputedFieldProcessor.getComputedFields(this.name);\r\n newDatabase.setComputedFields(arrayComputedFields);\r\n return newDatabase;\r\n }\r\n\r\n async useTriggers(): Promise<Database> {\r\n const newDatabase = new Database(this.name); \r\n const arrayTriggers = await TriggerProcessor.getTriggers(this.name);\r\n newDatabase.setTriggers(arrayTriggers);\r\n return newDatabase;\r\n }\r\n\r\n async connect(): Promise<void> {\r\n const response = await this.engine.run('query_engine', [\r\n '--action', 'connect',\r\n ]);\r\n if (response.status != 200) {\r\n returnFormattedError(response.status, response.message);\r\n }\r\n return response.data;\r\n }\r\n\r\n async disconnect(): Promise<void> {\r\n return this.engine.run('query_engine', [\r\n '--action', 'disconnect',\r\n ]);\r\n }\r\n\r\n /**\r\n * Creates and returns a new instance of `Table` for the specified table.\r\n * This method is used to start building queries for a specific table.\r\n * It provides a fluent interface for common database operations like select, insert, update, and delete.\r\n *\r\n * @param {string} tableName - The name of the table to query.\r\n * @returns {Table} - Returns a new instance of `Table` for the specified table.\r\n *\r\n * @example\r\n * // Select all records from a table\r\n * const users = await db.table('users').get();\r\n * \r\n * // Select records with conditions\r\n * const activeUsers = await db.table('users')\r\n * .where('status', '=', 'active')\r\n * .orderBy('created_at', 'DESC')\r\n * .limit(10)\r\n * .get();\r\n * \r\n * // Insert records\r\n * await db.table('users').insert([\r\n * { name: 'John', email: 'john@example.com', age: 30 }\r\n * ]);\r\n * \r\n * // Update records\r\n * await db.table('users')\r\n * .where('id', '=', 1)\r\n * .update({ status: 'inactive' });\r\n * \r\n * // Delete records\r\n * await db.table('users')\r\n * .where('status', '=', 'deleted')\r\n * .delete();\r\n * \r\n * // Access column management\r\n * const columns = await db.table('users').columns().get();\r\n */\r\n table(tableName: string): Table {\r\n return new Table(this, this.name, tableName, this.engine, this.computedFields, this.triggers);\r\n }\r\n\r\n private setComputedFields(computedFields: any[]){\r\n this.computedFields = computedFields;\r\n }\r\n\r\n private setTriggers(triggers: any[]){\r\n this.triggers = triggers;\r\n }\r\n}\r\n\r\n/**\r\n * Class to build and execute SQL queries for a specific table.\r\n * Supports operations like SELECT, INSERT, UPDATE, DELETE, and more.\r\n */\r\nexport class Table {\r\n private engine: any;\r\n private nextType: 'AND' | 'OR' = 'AND';\r\n private dml: DML;\r\n private computedFields: any[] = [];\r\n private trigger: any;\r\n private triggers: any;\r\n\r\n constructor(instance: any, databaseName: string, tableName: string, engine: any = null, computedFields: any[] = [], triggers: any[] = []) {\r\n this.engine = engine;\r\n this.computedFields = computedFields;\r\n this.triggers = triggers;\r\n this.trigger = new Trigger(instance, databaseName, triggers);\r\n this.nextType = 'AND';\r\n\r\n this.dml = {\r\n type: 'select',\r\n database: databaseName,\r\n table: tableName,\r\n columns: ['*'],\r\n distinct: false,\r\n joins: [],\r\n where: [],\r\n orderBy: [],\r\n groupBy: [],\r\n limit: null,\r\n offset: null,\r\n data: null,\r\n aggregation: null\r\n };\r\n }\r\n\r\n /**\r\n * Specifies the columns to select in a SELECT query.\r\n *\r\n * @param {string[]} fields - Array of column names to select. If empty, selects all columns.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').select(['id', 'name']).get();\r\n * console.log(users); // [{ id: 1, name: 'John' }, { id: 2, name: 'Jane' }]\r\n */\r\n select(fields: string[] = []): Table {\r\n this.dml.type = 'select';\r\n this.dml.columns = fields.length > 0 ? fields : ['*'];\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a WHERE condition to the query.\r\n *\r\n * @param {string} column - The column to filter by.\r\n * @param {string} operator - The comparison operator (e.g., '=', '>', '<', 'IS NULL', 'IS NOT NULL').\r\n * @param {any} value - The value to compare against (optional for IS NULL/IS NOT NULL).\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').where('age', '>', 25).get();\r\n * const nullUsers = await db.table('users').where('email', 'IS NULL').get();\r\n * console.log(users); // [{ id: 1, name: 'John', age: 30 }]\r\n */\r\n where(column: string, operator: 'IS NULL' | 'IS NOT NULL'): Table;\r\n where(column: string, operator: '=' | '!=' | '<>' | '>' | '<' | '>=' | '<=' | 'LIKE' | 'NOT LIKE' | 'IN' | 'NOT IN' | 'BETWEEN' | 'NOT BETWEEN', value: any): Table;\r\n where(column: string, operator: string, value?: any): Table {\r\n this.dml.where.push({\r\n column,\r\n operator,\r\n value,\r\n type: this.nextType,\r\n isGroup: false\r\n });\r\n this.nextType = 'AND';\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds an OR WHERE condition to the query.\r\n *\r\n * @param {string} column - The column to filter by.\r\n * @param {string} operator - The comparison operator (e.g., '=', '>', '<', 'IS NULL', 'IS NOT NULL').\r\n * @param {any} value - The value to compare against (optional for IS NULL/IS NOT NULL).\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').where('age', '>', 25).orWhere('name', '=', 'Jane').get();\r\n * const nullUsers = await db.table('users').where('active', '=', true).orWhere('email', 'IS NULL').get();\r\n * console.log(users); // [{ id: 1, name: 'John', age: 30 }, { id: 2, name: 'Jane', age: 25 }]\r\n */\r\n orWhere(column: string, operator: 'IS NULL' | 'IS NOT NULL'): Table;\r\n orWhere(column: string, operator: '=' | '!=' | '<>' | '>' | '<' | '>=' | '<=' | 'LIKE' | 'NOT LIKE' | 'IN' | 'NOT IN' | 'BETWEEN' | 'NOT BETWEEN', value: any): Table;\r\n orWhere(column: string, operator: string, value?: any): Table {\r\n this.dml.where.push({\r\n column,\r\n operator,\r\n value,\r\n type: 'OR',\r\n isGroup: false\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a grouped WHERE condition to the query.\r\n *\r\n * @param {WhereCallback} callback - A callback function that receives a new Table instance to build the grouped conditions.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').whereGroup(query => {\r\n * query.where('age', '>', 25).orWhere('name', '=', 'Jane');\r\n * }).get();\r\n * console.log(users); // [{ id: 1, name: 'John', age: 30 }, { id: 2, name: 'Jane', age: 25 }]\r\n */\r\n whereGroup(callback: WhereCallback): Table {\r\n const groupQuery = new Table(this.dml.database, this.dml.table, this.engine);\r\n callback(groupQuery);\r\n\r\n this.dml.where.push({\r\n type: this.nextType,\r\n isGroup: true,\r\n conditions: groupQuery.dml.where as WhereCondition[]\r\n });\r\n this.nextType = 'AND';\r\n return this;\r\n }\r\n\r\n or(): Table {\r\n this.nextType = 'OR';\r\n return this;\r\n }\r\n\r\n and(): Table {\r\n this.nextType = 'AND';\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a WHERE BETWEEN condition to the query.\r\n *\r\n * @param {string} column - The column to filter by.\r\n * @param {[any, any]} values - A tuple with two values representing the range.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').whereBetween('age', [20, 30]).get();\r\n * console.log(users); // [{ id: 1, name: 'John', age: 30 }, { id: 2, name: 'Jane', age: 25 }]\r\n */\r\n whereBetween(column: string, values: [any, any]): Table {\r\n const [value1, value2] = values;\r\n if (value1 !== undefined && value2 !== undefined) {\r\n this.dml.where.push({\r\n column,\r\n operator: 'BETWEEN',\r\n value: [value1, value2],\r\n type: this.nextType,\r\n isGroup: false\r\n });\r\n this.nextType = 'AND';\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a WHERE IN condition to the query.\r\n *\r\n * @param {string} column - The column to filter by.\r\n * @param {any[]} values - An array of values to match.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').whereIn('id', [1, 2]).get();\r\n * console.log(users); // [{ id: 1, name: 'John' }, { id: 2, name: 'Jane' }]\r\n */\r\n whereIn(column: string, values: any[]): Table {\r\n if (Array.isArray(values) && values.length > 0) {\r\n this.dml.where.push({\r\n column,\r\n operator: 'IN',\r\n value: values,\r\n type: this.nextType,\r\n isGroup: false\r\n });\r\n this.nextType = 'AND';\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a WHERE IS NULL condition to the query.\r\n *\r\n * @param {string} column - The column to filter by.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').whereNull('email').get();\r\n * console.log(users); // [{ id: 3, name: 'Alice', email: null }]\r\n */\r\n whereNull(column: string): Table {\r\n this.dml.where.push({\r\n column,\r\n operator: 'IS NULL',\r\n type: this.nextType,\r\n isGroup: false\r\n });\r\n this.nextType = 'AND';\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a WHERE IS NOT NULL condition to the query.\r\n *\r\n * @param {string} column - The column to filter by.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').whereNotNull('email').get();\r\n * console.log(users); // [{ id: 1, name: 'John', email: 'john@example.com' }]\r\n */\r\n whereNotNull(column: string): Table {\r\n this.dml.where.push({\r\n column,\r\n operator: 'IS NOT NULL',\r\n type: this.nextType,\r\n isGroup: false\r\n });\r\n this.nextType = 'AND';\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a JOIN clause to the query.\r\n *\r\n * @param {string} table - The table to join.\r\n * @param {string} column1 - The column from the current table.\r\n * @param {string} operator - The comparison operator (e.g., '=', '>', '<').\r\n * @param {string} column2 - The column from the joined table.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').join('orders', 'users.id', '=', 'orders.user_id').get();\r\n * console.log(users); // [{ id: 1, name: 'John', order_id: 101 }]\r\n */\r\n join(table: string, column1: string, operator: string, column2: string): Table {\r\n this.dml.joins.push({\r\n type: 'INNER',\r\n table,\r\n on: {\r\n column1,\r\n operator,\r\n column2\r\n }\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a LEFT JOIN clause to the query.\r\n *\r\n * @param {string} table - The table to join.\r\n * @param {string} column1 - The column from the current table.\r\n * @param {string} operator - The comparison operator (e.g., '=', '>', '<').\r\n * @param {string} column2 - The column from the joined table.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').leftJoin('orders', 'users.id', '=', 'orders.user_id').get();\r\n * console.log(users); // [{ id: 1, name: 'John', order_id: 101 }, { id: 2, name: 'Jane', order_id: null }]\r\n */\r\n leftJoin(table: string, column1: string, operator: string, column2: string): Table {\r\n this.dml.joins.push({\r\n type: 'LEFT',\r\n table,\r\n on: {\r\n column1,\r\n operator,\r\n column2\r\n }\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a RIGHT JOIN clause to the query.\r\n *\r\n * @param {string} table - The table to join.\r\n * @param {string} column1 - The column from the current table.\r\n * @param {string} operator - The comparison operator (e.g., '=', '>', '<').\r\n * @param {string} column2 - The column from the joined table.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').rightJoin('orders', 'users.id', '=', 'orders.user_id').get();\r\n * console.log(users); // [{ id: 1, name: 'John', order_id: 101 }, { id: null, name: null, order_id: 102 }]\r\n */\r\n rightJoin(table: string, column1: string, operator: string, column2: string): Table {\r\n this.dml.joins.push({\r\n type: 'RIGHT',\r\n table,\r\n on: {\r\n column1,\r\n operator,\r\n column2\r\n }\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds an ORDER BY clause to the query.\r\n *\r\n * @param {string} column - The column to order by.\r\n * @param {'ASC' | 'DESC'} direction - The sorting direction ('ASC' or 'DESC').\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').orderBy('name', 'ASC').get();\r\n * console.log(users); // [{ id: 2, name: 'Jane' }, { id: 1, name: 'John' }]\r\n */\r\n orderBy(column: string, direction: 'ASC' | 'DESC' = 'ASC'): Table {\r\n const validDirections: ('ASC' | 'DESC')[] = ['ASC', 'DESC'];\r\n if (validDirections.includes(direction.toUpperCase() as 'ASC' | 'DESC')) {\r\n this.dml.orderBy.push({\r\n column,\r\n direction: direction.toUpperCase() as 'ASC' | 'DESC'\r\n });\r\n } else {\r\n throw new Error(`Invalid direction: ${direction}. Use 'ASC' or 'DESC'.`);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a GROUP BY clause to the query.\r\n *\r\n * @param {string} column - The column to group by.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').groupBy('age').get();\r\n * console.log(users); // [{ age: 30, count: 1 }, { age: 25, count: 1 }]\r\n */\r\n groupBy(column: string): Table {\r\n this.dml.groupBy.push(column);\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a DISTINCT clause to the query.\r\n *\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').distinct().select(['name']).get();\r\n * console.log(users); // [{ name: 'John' }, { name: 'Jane' }]\r\n */\r\n distinct(): Table {\r\n this.dml.distinct = true;\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a COUNT clause to the query.\r\n *\r\n * @param {string} column - The column to count (default is '*').\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const count = await db.table('users').count().first();\r\n * console.log(count); // { count: 2 }\r\n */\r\n count(column: string = '*'): Table {\r\n this.dml.type = 'select';\r\n this.dml.aggregation = {\r\n type: 'COUNT',\r\n column,\r\n alias: 'count'\r\n };\r\n this.dml.columns = [`COUNT(${column}) AS count`];\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a SUM clause to the query.\r\n *\r\n * @param {string} column - The column to sum.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const totalAge = await db.table('users').sum('age').first();\r\n * console.log(totalAge); // { sum: 55 }\r\n */\r\n sum(column: string): Table {\r\n this.dml.type = 'select';\r\n this.dml.aggregation = {\r\n type: 'SUM',\r\n column,\r\n alias: 'sum'\r\n };\r\n this.dml.columns = [`SUM(${column}) AS sum`];\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds an AVG clause to the query.\r\n *\r\n * @param {string} column - The column to calculate the average.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const avgAge = await db.table('users').avg('age').first();\r\n * console.log(avgAge); // { avg: 27.5 }\r\n */\r\n avg(column: string): Table {\r\n this.dml.type = 'select';\r\n this.dml.aggregation = {\r\n type: 'AVG',\r\n column,\r\n alias: 'avg'\r\n };\r\n this.dml.columns = [`AVG(${column}) AS avg`];\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a MAX clause to the query.\r\n *\r\n * @param {string} column - The column to find the maximum value.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const maxAge = await db.table('users').max('age').first();\r\n * console.log(maxAge); // { max: 30 }\r\n */\r\n max(column: string): Table {\r\n this.dml.type = 'select';\r\n this.dml.aggregation = {\r\n type: 'MAX',\r\n column,\r\n alias: 'max'\r\n };\r\n this.dml.columns = [`MAX(${column}) AS max`];\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a MIN clause to the query.\r\n *\r\n * @param {string} column - The column to find the minimum value.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const minAge = await db.table('users').min('age').first();\r\n * console.log(minAge); // { min: 25 }\r\n */\r\n min(column: string): Table {\r\n this.dml.type = 'select';\r\n this.dml.aggregation = {\r\n type: 'MIN',\r\n column,\r\n alias: 'min'\r\n };\r\n this.dml.columns = [`MIN(${column}) AS min`];\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a LIMIT clause to the query.\r\n *\r\n * @param {number} number - The maximum number of rows to return.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').limit(1).get();\r\n * console.log(users); // [{ id: 1, name: 'John', age: 30 }]\r\n */\r\n limit(number: number): Table {\r\n this.dml.limit = number;\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds pagination to the query using LIMIT and OFFSET.\r\n *\r\n * @param {number} number - The page number (starting from 1).\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').limit(1).page(2).get();\r\n * console.log(users); // [{ id: 2, name: 'Jane', age: 25 }]\r\n */\r\n page(number: number): Table {\r\n if (this.dml.limit) {\r\n this.dml.offset = (number - 1) * this.dml.limit;\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Executes the query and returns all matching rows.\r\n *\r\n * @returns {Promise<DatabaseRecord[]>} - Returns an array of rows.\r\n *\r\n * @example\r\n * const users = await db.table('users').get();\r\n * console.log(users); // [{ id: 1, name: 'John' }, { id: 2, name: 'Jane' }]\r\n */\r\n async get(): Promise<DatabaseRecord[]> {\r\n try {\r\n this.dml.type = 'select';\r\n this.dml.data = null;\r\n const result = await this.getResponse();\r\n return result;\r\n }\r\n catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Executes the query and returns the first matching row.\r\n *\r\n * @returns {Promise<DatabaseRecord | null>} - Returns the first row or null if no rows match.\r\n *\r\n * @example\r\n * const user = await db.table('users').first();\r\n * console.log(user); // { id: 1, name: 'John' }\r\n */\r\n async first(): Promise<DatabaseRecord | null> {\r\n this.dml.type = 'select';\r\n this.dml.data = null;\r\n this.dml.limit = 1;\r\n try {\r\n const result = await this.getResponse();\r\n return result[0] || null;\r\n }\r\n catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Finds a row by a specific column value.\r\n *\r\n * @param {any} value - The value to search for.\r\n * @param {string} column - The column to search in (default is 'id').\r\n * @returns {Promise<DatabaseRecord | null>} - Returns the first matching row or null if no rows match.\r\n *\r\n * @example\r\n * const user = await db.table('users').find(1);\r\n * console.log(user); // { id: 1, name: 'John' }\r\n */\r\n async find(value: any, column: string = 'id'): Promise<DatabaseRecord | null> {\r\n this.dml.type = 'select';\r\n this.dml.data = null;\r\n this.where(column, '=', value);\r\n this.dml.limit = 1;\r\n try {\r\n const result = await this.getResponse();\r\n return result[0] || null;\r\n }\r\n catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Inserts one or more rows into the table.\r\n *\r\n * @param {DatabaseRecord[]} data - An array of objects representing the rows to insert.\r\n * @returns {Promise<DatabaseRecord[]>} - Returns an array of the inserted rows.\r\n *\r\n * @example\r\n * const newUsers = await db.table('users').insert([\r\n * { name: 'Alice', age: 28 },\r\n * { name: 'Bob', age: 32 }\r\n * ]);\r\n * console.log(newUsers); // [{ id: 3, name: 'Alice', age: 28 }, { id: 4, name: 'Bob', age: 32 }]\r\n */\r\n async insert(data: DatabaseRecord[]): Promise<DatabaseRecord[]> {\r\n if (!Array.isArray(data)) {\r\n throw new Error('The insert method requires an array of objects with key-value pairs.');\r\n }\r\n\r\n if (!data.every(item => typeof item === 'object' && item !== null)) {\r\n throw new Error('The array must contain only valid objects.');\r\n }\r\n\r\n this.dml.type = 'insert';\r\n this.dml.data = data;\r\n\r\n await this.getResponse(this.dml, 'Add');\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * Updates rows in the table based on the defined conditions.\r\n *\r\n * @param {DatabaseRecord} data - An object with key-value pairs representing the fields to update.\r\n * @returns {Promise<any>} - Returns the result of the update operation.\r\n *\r\n * @example\r\n * const result = await db.table('users')\r\n * .where('id', '=', 1)\r\n * .update({ name: 'John Updated', age: 31 });\r\n * console.log(result); // { affectedRows: 1 }\r\n */\r\n async update(data: DatabaseRecord): Promise<any> {\r\n if (typeof data !== 'object' || Array.isArray(data)) {\r\n throw new Error('The update method requires an object with key-value pairs.');\r\n }\r\n\r\n if (this.dml.where.length === 0) {\r\n throw new Error('You must specify at least one WHERE condition to perform an update.');\r\n }\r\n\r\n this.dml.type = 'update';\r\n this.dml.data = data;\r\n\r\n await this.getResponse(this.dml, 'Update');\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * Deletes rows from the table based on the defined conditions.\r\n *\r\n * @returns {Promise<any>} - Returns the result of the delete operation.\r\n *\r\n * @example\r\n * const result = await db.table('users').where('id', '=', 1).delete();\r\n * console.log(result); // { affectedRows: 1 }\r\n */\r\n async delete(): Promise<any> {\r\n if (this.dml.where.length === 0) {\r\n throw new Error('You must specify at least one WHERE condition to perform a delete.');\r\n }\r\n\r\n this.dml.type = 'delete';\r\n\r\n const deleteData = await this.getResponse(this.dml, 'Delete');\r\n return deleteData;\r\n }\r\n\r\n private async getResponse(dml: any = null, type: any = null): Promise<any> {\r\n const localDML = dml ? dml : this.dml;\r\n const computedFieldsNeeded: any[] = [];\r\n let dependeciesArrray: any[] = [];\r\n\r\n if (this.computedFields.length > 0) {\r\n let columns = localDML.columns;\r\n\r\n for (const field of localDML.columns) {\r\n const computedField = this.computedFields.find(cf => cf.column === field);\r\n\r\n if (computedField) {\r\n computedFieldsNeeded.push(computedField);\r\n // Add dependencies to real fields\r\n const dependencies = ComputedFieldProcessor.extractDependencies(computedField.instruction);\r\n dependeciesArrray = [...dependeciesArrray, ...dependencies];\r\n columns = Array.from(new Set([...columns, ...dependencies]));\r\n columns = columns.filter((col: string) => col != field);\r\n }\r\n }\r\n localDML.columns = columns;\r\n }\r\n\r\n let arrayResult = [];\r\n if (type) {\r\n const beffore = this.trigger.get('before' + type);\r\n const after = this.trigger.get('after' + type);\r\n if (this.triggers.length > 0 && (beffore || after)) {\r\n const dataset = localDML.data;\r\n for (let index = 0; index < dataset.length; index++) {\r\n const data = dataset[index];\r\n const newDML = { ...localDML, data: [data] };\r\n if (beffore) {\r\n const interceptor = await this.trigger.execute('before' + type, data);\r\n const response = await this.engine.run('query_engine', [\r\n '--action', 'execute',\r\n '--dml', JSON.stringify(newDML)\r\n ]);\r\n\r\n if (response.status != 200) {\r\n interceptor.discard();\r\n returnFormattedError(response.status, response.message);\r\n }\r\n await interceptor.commit();\r\n arrayResult = response.data;\r\n }\r\n if (after) {\r\n\r\n const response = await this.engine.run('query_engine', [\r\n '--action', 'execute',\r\n '--dml', JSON.stringify(newDML)\r\n ]);\r\n\r\n if (response.status != 200) {\r\n returnFormattedError(response.status, response.message);\r\n }\r\n const interceptor = await this.trigger.execute('after' + type, data);\r\n await interceptor.commit();\r\n }\r\n }\r\n } else {\r\n const response = await this.engine.run('query_engine', [\r\n '--action', 'execute',\r\n '--dml', JSON.stringify(localDML)\r\n ]);\r\n\r\n if (response.status != 200) {\r\n returnFormattedError(response.status, response.message);\r\n }\r\n\r\n arrayResult = response.data;\r\n }\r\n } else {\r\n const response = await this.engine.run('query_engine', [\r\n '--action', 'execute',\r\n '--dml', JSON.stringify(localDML)\r\n ]);\r\n\r\n if (response.status != 200) {\r\n returnFormattedError(response.status, response.message);\r\n }\r\n\r\n arrayResult = response.data;\r\n }\r\n\r\n if (computedFieldsNeeded.length > 0) {\r\n let newDataset: any = ComputedFieldProcessor.computedFields(arrayResult, computedFieldsNeeded);\r\n const result = newDataset.map((obj: any) => {\r\n const newObj = { ...obj };\r\n dependeciesArrray.forEach(key => delete newObj[key]);\r\n return newObj;\r\n });\r\n return result;\r\n }\r\n this.dml = {\r\n ...this.dml,\r\n type: 'select',\r\n columns: ['*'],\r\n distinct: false,\r\n joins: [],\r\n where: [],\r\n orderBy: [],\r\n groupBy: [],\r\n limit: null,\r\n offset: null,\r\n data: null,\r\n aggregation: null\r\n };\r\n return arrayResult;\r\n }\r\n\r\n}\r\n\r\nfunction returnFormattedError(status: number, message: string) {\r\n const RESET = '\\x1b[0m';\r\n const RED = '\\x1b[31m';\r\n const YELLOW = '\\x1b[33m';\r\n const BOLD = '\\x1b[1m';\r\n const CYAN = '\\x1b[36m';\r\n const GRAY = '\\x1b[90m';\r\n const UNDERLINE = '\\x1b[4m';\r\n const MAGENTA = '\\x1b[35m';\r\n\r\n let output = '';\r\n let help = '';\r\n const color = status === 600 ? YELLOW : RED;\r\n\r\n\r\n if (message.includes(\"[help]\")) {\r\n const parts = message.split(\"[help]\");\r\n output += `\\n${RED}${BOLD}${parts[0]}${RESET}`;\r\n help += `\\n${MAGENTA}${BOLD}[help]${RESET} ${GRAY}${parts[1]}${RESET}\\n`;\r\n } else {\r\n output += `\\n${color}${BOLD}${message}${RESET}\\n`;\r\n }\r\n\r\n const err = new Error();\r\n const stackLines = err.stack?.split('\\n') || [];\r\n\r\n // Buscamos la primera línea del stack fuera de node_modules\r\n const relevantStackLine = stackLines.find(line =>\r\n line.includes('.js:') && !line.includes('node_modules')\r\n );\r\n\r\n if (relevantStackLine) {\r\n const match = relevantStackLine.match(/\\((.*):(\\d+):(\\d+)\\)/) ||\r\n relevantStackLine.match(/at (.*):(\\d+):(\\d+)/);\r\n\r\n if (match) {\r\n const [, filePath, lineStr, columnStr] = match;\r\n const lineNum = parseInt(lineStr, 10);\r\n const errorLocation = `${filePath}:${lineStr}:${columnStr}`;\r\n\r\n // Leemos el archivo y sacamos las líneas relevantes\r\n try {\r\n const codeLines = fs.readFileSync(filePath, 'utf-8').split('\\n');\r\n const start = Math.max(0, lineNum - 3);\r\n const end = Math.min(codeLines.length, lineNum + 2);\r\n\r\n output += `\\n${CYAN}${BOLD}[code] ${RESET}${YELLOW} ${UNDERLINE}${errorLocation}${RESET}\\n`;\r\n\r\n for (let i = start; i < end; i++) {\r\n const line = codeLines[i];\r\n const lineLabel = `${i + 1}`.padStart(4, ' ');\r\n const pointer = i + 1 === lineNum ? `${RED}<-${RESET}` : ' ';\r\n output += `${GRAY}${lineLabel}${RESET} ${pointer} ${line}\\n`;\r\n }\r\n } catch (err) {\r\n output += `${YELLOW}⚠️ No se pudo leer el archivo de origen: ${filePath}${RESET}\\n`;\r\n output += `\\n${CYAN}${BOLD}Stack Trace:${RESET}\\n${stackLines.slice(2).join('\\n')}\\n`;\r\n }\r\n }\r\n }\r\n output += help;\r\n console.error(output);\r\n}\r\n\r\nexport default Database;\r\n","import path from \"path\";\r\nimport { FileLogger } from \"@dbcube/core\";\r\nimport { createRequire } from 'module';\r\n\r\nexport class Trigger{\r\n private triggers: any[];\r\n private databaseName: string;\r\n private instance: any;\r\n\r\n constructor(instance:any, databaseName:string, metadata: any[]){\r\n this.triggers = metadata;\r\n this.databaseName = databaseName;\r\n this.instance = instance;\r\n }\r\n\r\n get(type:string){\r\n return this.triggers.find((tr:any)=> tr.type === type);\r\n }\r\n\r\n async execute(type: string, row:any){\r\n const trigger = this.triggers.find((tr:any)=> tr.type === type);\r\n if (trigger) {\r\n const logFilePath = path.resolve(\r\n process.cwd(),\r\n 'dbcube',\r\n 'logs',\r\n 'triggers',\r\n this.databaseName,\r\n `${trigger.table_ref}_${trigger.type}.log`\r\n );\r\n \r\n const interceptor = FileLogger.interceptConsole(logFilePath, {\r\n keepOriginal: false,\r\n useBuffer: true\r\n });\r\n const pathFile = path.resolve(process.cwd(), 'dbcube', 'triggers', `${trigger.database_ref}_${trigger.table_ref}_${trigger.type}.js`);\r\n // Use __filename for CJS, process.cwd() for ESM\r\n const requireUrl = typeof __filename !== 'undefined' ? __filename : process.cwd();\r\n const require = createRequire(requireUrl);\r\n // Clear require cache to ensure fresh load\r\n delete require.cache[require.resolve(pathFile)];\r\n const triggerModule = require(pathFile);\r\n const dataProcess = triggerModule.default || triggerModule;\r\n await dataProcess({db: this.instance, oldData: row, newData: row});\r\n interceptor.restore(); \r\n return interceptor;\r\n }\r\n return null;\r\n }\r\n}"],"mappings":"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","names":["import_core","path","require","fs","err"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/lib/Database.ts","../src/lib/Trigger.ts"],"sourcesContent":["import { Table, Database } from './lib/Database';\r\nimport type { DatabaseRecord, WhereCallback } from './@types/Database';\r\n\r\nexport default Database;\r\nexport { \r\n Table, \r\n Database,\r\n type DatabaseRecord,\r\n type WhereCallback\r\n};","import fs from 'fs';\r\nimport { QueryEngine, ComputedFieldProcessor, TriggerProcessor } from \"@dbcube/core\";\r\nimport { DatabaseRecord, DML, WhereCallback, WhereCondition } from \"../@types/Database\";\r\nimport { Trigger } from './Trigger';\r\n\r\n/**\r\n * Main class to handle MySQL database connections and queries.\r\n * Implements the Singleton pattern to ensure a single instance of the connection pool.\r\n */\r\nexport class Database {\r\n private name: string;\r\n private engine: any;\r\n private computedFields: any[];\r\n private triggers: any[];\r\n\r\n constructor(name: string) {\r\n this.name = name;\r\n const engine = new QueryEngine(name);\r\n this.engine = engine;\r\n this.computedFields = [];\r\n this.triggers = [];\r\n }\r\n\r\n async useComputes(): Promise<Database> {\r\n const newDatabase = new Database(this.name); \r\n const arrayComputedFields = await ComputedFieldProcessor.getComputedFields(this.name);\r\n newDatabase.setComputedFields(arrayComputedFields);\r\n return newDatabase;\r\n }\r\n\r\n async useTriggers(): Promise<Database> {\r\n const newDatabase = new Database(this.name); \r\n const arrayTriggers = await TriggerProcessor.getTriggers(this.name);\r\n newDatabase.setTriggers(arrayTriggers);\r\n return newDatabase;\r\n }\r\n\r\n async connect(): Promise<void> {\r\n const response = await this.engine.run('query_engine', [\r\n '--action', 'connect',\r\n ]);\r\n if (response.status != 200) {\r\n returnFormattedError(response.status, response.message);\r\n }\r\n return response.data;\r\n }\r\n\r\n async disconnect(): Promise<void> {\r\n return this.engine.run('query_engine', [\r\n '--action', 'disconnect',\r\n ]);\r\n }\r\n\r\n /**\r\n * Creates and returns a new instance of `Table` for the specified table.\r\n * This method is used to start building queries for a specific table.\r\n * It provides a fluent interface for common database operations like select, insert, update, and delete.\r\n *\r\n * @param {string} tableName - The name of the table to query.\r\n * @returns {Table} - Returns a new instance of `Table` for the specified table.\r\n *\r\n * @example\r\n * // Select all records from a table\r\n * const users = await db.table('users').get();\r\n * \r\n * // Select records with conditions\r\n * const activeUsers = await db.table('users')\r\n * .where('status', '=', 'active')\r\n * .orderBy('created_at', 'DESC')\r\n * .limit(10)\r\n * .get();\r\n * \r\n * // Insert records\r\n * await db.table('users').insert([\r\n * { name: 'John', email: 'john@example.com', age: 30 }\r\n * ]);\r\n * \r\n * // Update records\r\n * await db.table('users')\r\n * .where('id', '=', 1)\r\n * .update({ status: 'inactive' });\r\n * \r\n * // Delete records\r\n * await db.table('users')\r\n * .where('status', '=', 'deleted')\r\n * .delete();\r\n * \r\n * // Access column management\r\n * const columns = await db.table('users').columns().get();\r\n */\r\n table(tableName: string): Table {\r\n return new Table(this, this.name, tableName, this.engine, this.computedFields, this.triggers);\r\n }\r\n\r\n private setComputedFields(computedFields: any[]){\r\n this.computedFields = computedFields;\r\n }\r\n\r\n private setTriggers(triggers: any[]){\r\n this.triggers = triggers;\r\n }\r\n}\r\n\r\n/**\r\n * Class to build and execute SQL queries for a specific table.\r\n * Supports operations like SELECT, INSERT, UPDATE, DELETE, and more.\r\n */\r\nexport class Table {\r\n private engine: any;\r\n private nextType: 'AND' | 'OR' = 'AND';\r\n private dml: DML;\r\n private computedFields: any[] = [];\r\n private trigger: any;\r\n private triggers: any;\r\n\r\n constructor(instance: any, databaseName: string, tableName: string, engine: any = null, computedFields: any[] = [], triggers: any[] = []) {\r\n this.engine = engine;\r\n this.computedFields = computedFields;\r\n this.triggers = triggers;\r\n this.trigger = new Trigger(instance, databaseName, triggers);\r\n this.nextType = 'AND';\r\n\r\n this.dml = {\r\n type: 'select',\r\n database: databaseName,\r\n table: tableName,\r\n columns: ['*'],\r\n distinct: false,\r\n joins: [],\r\n where: [],\r\n orderBy: [],\r\n groupBy: [],\r\n limit: null,\r\n offset: null,\r\n data: null,\r\n aggregation: null\r\n };\r\n }\r\n\r\n /**\r\n * Specifies the columns to select in a SELECT query.\r\n *\r\n * @param {string[]} fields - Array of column names to select. If empty, selects all columns.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').select(['id', 'name']).get();\r\n * console.log(users); // [{ id: 1, name: 'John' }, { id: 2, name: 'Jane' }]\r\n */\r\n select(fields: string[] = []): Table {\r\n this.dml.type = 'select';\r\n this.dml.columns = fields.length > 0 ? fields : ['*'];\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a WHERE condition to the query.\r\n *\r\n * @param {string} column - The column to filter by.\r\n * @param {string} operator - The comparison operator (e.g., '=', '>', '<', 'IS NULL', 'IS NOT NULL').\r\n * @param {any} value - The value to compare against (optional for IS NULL/IS NOT NULL).\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').where('age', '>', 25).get();\r\n * const nullUsers = await db.table('users').where('email', 'IS NULL').get();\r\n * console.log(users); // [{ id: 1, name: 'John', age: 30 }]\r\n */\r\n where(column: string, operator: 'IS NULL' | 'IS NOT NULL'): Table;\r\n where(column: string, operator: '=' | '!=' | '<>' | '>' | '<' | '>=' | '<=' | 'LIKE' | 'NOT LIKE' | 'IN' | 'NOT IN' | 'BETWEEN' | 'NOT BETWEEN', value: any): Table;\r\n where(column: string, operator: string, value?: any): Table {\r\n this.dml.where.push({\r\n column,\r\n operator,\r\n value,\r\n type: this.nextType,\r\n isGroup: false\r\n });\r\n this.nextType = 'AND';\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds an OR WHERE condition to the query.\r\n *\r\n * @param {string} column - The column to filter by.\r\n * @param {string} operator - The comparison operator (e.g., '=', '>', '<', 'IS NULL', 'IS NOT NULL').\r\n * @param {any} value - The value to compare against (optional for IS NULL/IS NOT NULL).\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').where('age', '>', 25).orWhere('name', '=', 'Jane').get();\r\n * const nullUsers = await db.table('users').where('active', '=', true).orWhere('email', 'IS NULL').get();\r\n * console.log(users); // [{ id: 1, name: 'John', age: 30 }, { id: 2, name: 'Jane', age: 25 }]\r\n */\r\n orWhere(column: string, operator: 'IS NULL' | 'IS NOT NULL'): Table;\r\n orWhere(column: string, operator: '=' | '!=' | '<>' | '>' | '<' | '>=' | '<=' | 'LIKE' | 'NOT LIKE' | 'IN' | 'NOT IN' | 'BETWEEN' | 'NOT BETWEEN', value: any): Table;\r\n orWhere(column: string, operator: string, value?: any): Table {\r\n this.dml.where.push({\r\n column,\r\n operator,\r\n value,\r\n type: 'OR',\r\n isGroup: false\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a grouped WHERE condition to the query.\r\n *\r\n * @param {WhereCallback} callback - A callback function that receives a new Table instance to build the grouped conditions.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').whereGroup(query => {\r\n * query.where('age', '>', 25).orWhere('name', '=', 'Jane');\r\n * }).get();\r\n * console.log(users); // [{ id: 1, name: 'John', age: 30 }, { id: 2, name: 'Jane', age: 25 }]\r\n */\r\n whereGroup(callback: WhereCallback): Table {\r\n const groupQuery = new Table(this.dml.database, this.dml.table, this.engine);\r\n callback(groupQuery);\r\n\r\n this.dml.where.push({\r\n type: this.nextType,\r\n isGroup: true,\r\n conditions: groupQuery.dml.where as WhereCondition[]\r\n });\r\n this.nextType = 'AND';\r\n return this;\r\n }\r\n\r\n or(): Table {\r\n this.nextType = 'OR';\r\n return this;\r\n }\r\n\r\n and(): Table {\r\n this.nextType = 'AND';\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a WHERE BETWEEN condition to the query.\r\n *\r\n * @param {string} column - The column to filter by.\r\n * @param {[any, any]} values - A tuple with two values representing the range.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').whereBetween('age', [20, 30]).get();\r\n * console.log(users); // [{ id: 1, name: 'John', age: 30 }, { id: 2, name: 'Jane', age: 25 }]\r\n */\r\n whereBetween(column: string, values: [any, any]): Table {\r\n const [value1, value2] = values;\r\n if (value1 !== undefined && value2 !== undefined) {\r\n this.dml.where.push({\r\n column,\r\n operator: 'BETWEEN',\r\n value: [value1, value2],\r\n type: this.nextType,\r\n isGroup: false\r\n });\r\n this.nextType = 'AND';\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a WHERE IN condition to the query.\r\n *\r\n * @param {string} column - The column to filter by.\r\n * @param {any[]} values - An array of values to match.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').whereIn('id', [1, 2]).get();\r\n * console.log(users); // [{ id: 1, name: 'John' }, { id: 2, name: 'Jane' }]\r\n */\r\n whereIn(column: string, values: any[]): Table {\r\n if (Array.isArray(values) && values.length > 0) {\r\n this.dml.where.push({\r\n column,\r\n operator: 'IN',\r\n value: values,\r\n type: this.nextType,\r\n isGroup: false\r\n });\r\n this.nextType = 'AND';\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a WHERE IS NULL condition to the query.\r\n *\r\n * @param {string} column - The column to filter by.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').whereNull('email').get();\r\n * console.log(users); // [{ id: 3, name: 'Alice', email: null }]\r\n */\r\n whereNull(column: string): Table {\r\n this.dml.where.push({\r\n column,\r\n operator: 'IS NULL',\r\n type: this.nextType,\r\n isGroup: false\r\n });\r\n this.nextType = 'AND';\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a WHERE IS NOT NULL condition to the query.\r\n *\r\n * @param {string} column - The column to filter by.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').whereNotNull('email').get();\r\n * console.log(users); // [{ id: 1, name: 'John', email: 'john@example.com' }]\r\n */\r\n whereNotNull(column: string): Table {\r\n this.dml.where.push({\r\n column,\r\n operator: 'IS NOT NULL',\r\n type: this.nextType,\r\n isGroup: false\r\n });\r\n this.nextType = 'AND';\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a JOIN clause to the query.\r\n *\r\n * @param {string} table - The table to join.\r\n * @param {string} column1 - The column from the current table.\r\n * @param {string} operator - The comparison operator (e.g., '=', '>', '<').\r\n * @param {string} column2 - The column from the joined table.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').join('orders', 'users.id', '=', 'orders.user_id').get();\r\n * console.log(users); // [{ id: 1, name: 'John', order_id: 101 }]\r\n */\r\n join(table: string, column1: string, operator: string, column2: string): Table {\r\n this.dml.joins.push({\r\n type: 'INNER',\r\n table,\r\n on: {\r\n column1,\r\n operator,\r\n column2\r\n }\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a LEFT JOIN clause to the query.\r\n *\r\n * @param {string} table - The table to join.\r\n * @param {string} column1 - The column from the current table.\r\n * @param {string} operator - The comparison operator (e.g., '=', '>', '<').\r\n * @param {string} column2 - The column from the joined table.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').leftJoin('orders', 'users.id', '=', 'orders.user_id').get();\r\n * console.log(users); // [{ id: 1, name: 'John', order_id: 101 }, { id: 2, name: 'Jane', order_id: null }]\r\n */\r\n leftJoin(table: string, column1: string, operator: string, column2: string): Table {\r\n this.dml.joins.push({\r\n type: 'LEFT',\r\n table,\r\n on: {\r\n column1,\r\n operator,\r\n column2\r\n }\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a RIGHT JOIN clause to the query.\r\n *\r\n * @param {string} table - The table to join.\r\n * @param {string} column1 - The column from the current table.\r\n * @param {string} operator - The comparison operator (e.g., '=', '>', '<').\r\n * @param {string} column2 - The column from the joined table.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').rightJoin('orders', 'users.id', '=', 'orders.user_id').get();\r\n * console.log(users); // [{ id: 1, name: 'John', order_id: 101 }, { id: null, name: null, order_id: 102 }]\r\n */\r\n rightJoin(table: string, column1: string, operator: string, column2: string): Table {\r\n this.dml.joins.push({\r\n type: 'RIGHT',\r\n table,\r\n on: {\r\n column1,\r\n operator,\r\n column2\r\n }\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds an ORDER BY clause to the query.\r\n *\r\n * @param {string} column - The column to order by.\r\n * @param {'ASC' | 'DESC'} direction - The sorting direction ('ASC' or 'DESC').\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').orderBy('name', 'ASC').get();\r\n * console.log(users); // [{ id: 2, name: 'Jane' }, { id: 1, name: 'John' }]\r\n */\r\n orderBy(column: string, direction: 'ASC' | 'DESC' = 'ASC'): Table {\r\n const validDirections: ('ASC' | 'DESC')[] = ['ASC', 'DESC'];\r\n if (validDirections.includes(direction.toUpperCase() as 'ASC' | 'DESC')) {\r\n this.dml.orderBy.push({\r\n column,\r\n direction: direction.toUpperCase() as 'ASC' | 'DESC'\r\n });\r\n } else {\r\n throw new Error(`Invalid direction: ${direction}. Use 'ASC' or 'DESC'.`);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a GROUP BY clause to the query.\r\n *\r\n * @param {string} column - The column to group by.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').groupBy('age').get();\r\n * console.log(users); // [{ age: 30, count: 1 }, { age: 25, count: 1 }]\r\n */\r\n groupBy(column: string): Table {\r\n this.dml.groupBy.push(column);\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a DISTINCT clause to the query.\r\n *\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').distinct().select(['name']).get();\r\n * console.log(users); // [{ name: 'John' }, { name: 'Jane' }]\r\n */\r\n distinct(): Table {\r\n this.dml.distinct = true;\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a COUNT clause to the query.\r\n *\r\n * @param {string} column - The column to count (default is '*').\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const count = await db.table('users').count().first();\r\n * console.log(count); // { count: 2 }\r\n */\r\n async count(column: string = '*'): Promise<Number> {\r\n this.dml.type = 'select';\r\n this.dml.aggregation = {\r\n type: 'COUNT',\r\n column,\r\n alias: 'count'\r\n };\r\n this.dml.columns = [`COUNT(${column}) AS count`];\r\n this.dml.data = null;\r\n this.dml.limit = 1;\r\n try {\r\n const result = await this.getResponse();\r\n const res = result[0] || null;\r\n if(res){\r\n return res.count;\r\n }\r\n return 0;\r\n }\r\n catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Adds a SUM clause to the query.\r\n *\r\n * @param {string} column - The column to sum.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const totalAge = await db.table('users').sum('age').first();\r\n * console.log(totalAge); // { sum: 55 }\r\n */\r\n async sum(column: string): Promise<Number> {\r\n this.dml.type = 'select';\r\n this.dml.aggregation = {\r\n type: 'SUM',\r\n column,\r\n alias: 'sum'\r\n };\r\n this.dml.columns = [`SUM(${column}) AS sum`];\r\n this.dml.data = null;\r\n this.dml.limit = 1;\r\n try {\r\n const result = await this.getResponse();\r\n const res = result[0] || null;\r\n if(res){\r\n return res.count;\r\n }\r\n return 0;\r\n }\r\n catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Adds an AVG clause to the query.\r\n *\r\n * @param {string} column - The column to calculate the average.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const avgAge = await db.table('users').avg('age').first();\r\n * console.log(avgAge); // { avg: 27.5 }\r\n */\r\n async avg(column: string): Promise<Number> {\r\n this.dml.type = 'select';\r\n this.dml.aggregation = {\r\n type: 'AVG',\r\n column,\r\n alias: 'avg'\r\n };\r\n this.dml.columns = [`AVG(${column}) AS avg`];\r\n this.dml.data = null;\r\n this.dml.limit = 1;\r\n try {\r\n const result = await this.getResponse();\r\n const res = result[0] || null;\r\n if(res){\r\n return res.count;\r\n }\r\n return 0;\r\n }\r\n catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Adds a MAX clause to the query.\r\n *\r\n * @param {string} column - The column to find the maximum value.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const maxAge = await db.table('users').max('age').first();\r\n * console.log(maxAge); // { max: 30 }\r\n */\r\n async max(column: string): Promise<Number> {\r\n this.dml.type = 'select';\r\n this.dml.aggregation = {\r\n type: 'MAX',\r\n column,\r\n alias: 'max'\r\n };\r\n this.dml.columns = [`MAX(${column}) AS max`];\r\n this.dml.data = null;\r\n this.dml.limit = 1;\r\n try {\r\n const result = await this.getResponse();\r\n const res = result[0] || null;\r\n if(res){\r\n return res.count;\r\n }\r\n return 0;\r\n }\r\n catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Adds a MIN clause to the query.\r\n *\r\n * @param {string} column - The column to find the minimum value.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const minAge = await db.table('users').min('age').first();\r\n * console.log(minAge); // { min: 25 }\r\n */\r\n async min(column: string): Promise<Number> {\r\n this.dml.type = 'select';\r\n this.dml.aggregation = {\r\n type: 'MIN',\r\n column,\r\n alias: 'min'\r\n };\r\n this.dml.columns = [`MIN(${column}) AS min`];\r\n this.dml.data = null;\r\n this.dml.limit = 1;\r\n try {\r\n const result = await this.getResponse();\r\n const res = result[0] || null;\r\n if(res){\r\n return res.count;\r\n }\r\n return 0;\r\n }\r\n catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Adds a LIMIT clause to the query.\r\n *\r\n * @param {number} number - The maximum number of rows to return.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').limit(1).get();\r\n * console.log(users); // [{ id: 1, name: 'John', age: 30 }]\r\n */\r\n limit(number: number): Table {\r\n this.dml.limit = number;\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds pagination to the query using LIMIT and OFFSET.\r\n *\r\n * @param {number} number - The page number (starting from 1).\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').limit(1).page(2).get();\r\n * console.log(users); // [{ id: 2, name: 'Jane', age: 25 }]\r\n */\r\n page(number: number): Table {\r\n if (this.dml.limit) {\r\n this.dml.offset = (number - 1) * this.dml.limit;\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Executes the query and returns all matching rows.\r\n *\r\n * @returns {Promise<DatabaseRecord[]>} - Returns an array of rows.\r\n *\r\n * @example\r\n * const users = await db.table('users').get();\r\n * console.log(users); // [{ id: 1, name: 'John' }, { id: 2, name: 'Jane' }]\r\n */\r\n async get(): Promise<DatabaseRecord[]> {\r\n try {\r\n this.dml.type = 'select';\r\n this.dml.data = null;\r\n const result = await this.getResponse();\r\n return result;\r\n }\r\n catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Executes the query and returns the first matching row.\r\n *\r\n * @returns {Promise<DatabaseRecord | null>} - Returns the first row or null if no rows match.\r\n *\r\n * @example\r\n * const user = await db.table('users').first();\r\n * console.log(user); // { id: 1, name: 'John' }\r\n */\r\n async first(): Promise<DatabaseRecord | null> {\r\n this.dml.type = 'select';\r\n this.dml.data = null;\r\n this.dml.limit = 1;\r\n try {\r\n const result = await this.getResponse();\r\n return result[0] || null;\r\n }\r\n catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Finds a row by a specific column value.\r\n *\r\n * @param {any} value - The value to search for.\r\n * @param {string} column - The column to search in (default is 'id').\r\n * @returns {Promise<DatabaseRecord | null>} - Returns the first matching row or null if no rows match.\r\n *\r\n * @example\r\n * const user = await db.table('users').find(1);\r\n * console.log(user); // { id: 1, name: 'John' }\r\n */\r\n async find(value: any, column: string = 'id'): Promise<DatabaseRecord | null> {\r\n this.dml.type = 'select';\r\n this.dml.data = null;\r\n this.where(column, '=', value);\r\n this.dml.limit = 1;\r\n try {\r\n const result = await this.getResponse();\r\n return result[0] || null;\r\n }\r\n catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Inserts one or more rows into the table.\r\n *\r\n * @param {DatabaseRecord[]} data - An array of objects representing the rows to insert.\r\n * @returns {Promise<DatabaseRecord[]>} - Returns an array of the inserted rows.\r\n *\r\n * @example\r\n * const newUsers = await db.table('users').insert([\r\n * { name: 'Alice', age: 28 },\r\n * { name: 'Bob', age: 32 }\r\n * ]);\r\n * console.log(newUsers); // [{ id: 3, name: 'Alice', age: 28 }, { id: 4, name: 'Bob', age: 32 }]\r\n */\r\n async insert(data: DatabaseRecord[]): Promise<DatabaseRecord[]> {\r\n if (!Array.isArray(data)) {\r\n throw new Error('The insert method requires an array of objects with key-value pairs.');\r\n }\r\n\r\n if (!data.every(item => typeof item === 'object' && item !== null)) {\r\n throw new Error('The array must contain only valid objects.');\r\n }\r\n\r\n this.dml.type = 'insert';\r\n this.dml.data = data;\r\n\r\n await this.getResponse(this.dml, 'Add');\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * Updates rows in the table based on the defined conditions.\r\n *\r\n * @param {DatabaseRecord} data - An object with key-value pairs representing the fields to update.\r\n * @returns {Promise<any>} - Returns the result of the update operation.\r\n *\r\n * @example\r\n * const result = await db.table('users')\r\n * .where('id', '=', 1)\r\n * .update({ name: 'John Updated', age: 31 });\r\n * console.log(result); // { affectedRows: 1 }\r\n */\r\n async update(data: DatabaseRecord): Promise<any> {\r\n if (typeof data !== 'object' || Array.isArray(data)) {\r\n throw new Error('The update method requires an object with key-value pairs.');\r\n }\r\n\r\n if (this.dml.where.length === 0) {\r\n throw new Error('You must specify at least one WHERE condition to perform an update.');\r\n }\r\n\r\n this.dml.type = 'update';\r\n this.dml.data = data;\r\n\r\n await this.getResponse(this.dml, 'Update');\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * Deletes rows from the table based on the defined conditions.\r\n *\r\n * @returns {Promise<any>} - Returns the result of the delete operation.\r\n *\r\n * @example\r\n * const result = await db.table('users').where('id', '=', 1).delete();\r\n * console.log(result); // { affectedRows: 1 }\r\n */\r\n async delete(): Promise<any> {\r\n if (this.dml.where.length === 0) {\r\n throw new Error('You must specify at least one WHERE condition to perform a delete.');\r\n }\r\n\r\n this.dml.type = 'delete';\r\n\r\n const deleteData = await this.getResponse(this.dml, 'Delete');\r\n return deleteData;\r\n }\r\n\r\n private async getResponse(dml: any = null, type: any = null): Promise<any> {\r\n const localDML = dml ? dml : this.dml;\r\n const computedFieldsNeeded: any[] = [];\r\n let dependeciesArrray: any[] = [];\r\n\r\n if (this.computedFields.length > 0) {\r\n let columns = localDML.columns;\r\n\r\n for (const field of localDML.columns) {\r\n const computedField = this.computedFields.find(cf => cf.column === field);\r\n\r\n if (computedField) {\r\n computedFieldsNeeded.push(computedField);\r\n // Add dependencies to real fields\r\n const dependencies = ComputedFieldProcessor.extractDependencies(computedField.instruction);\r\n dependeciesArrray = [...dependeciesArrray, ...dependencies];\r\n columns = Array.from(new Set([...columns, ...dependencies]));\r\n columns = columns.filter((col: string) => col != field);\r\n }\r\n }\r\n localDML.columns = columns;\r\n }\r\n\r\n let arrayResult = [];\r\n if (type) {\r\n const beffore = this.trigger.get('before' + type);\r\n const after = this.trigger.get('after' + type);\r\n if (this.triggers.length > 0 && (beffore || after)) {\r\n const dataset = localDML.data;\r\n for (let index = 0; index < dataset.length; index++) {\r\n const data = dataset[index];\r\n const newDML = { ...localDML, data: [data] };\r\n if (beffore) {\r\n const interceptor = await this.trigger.execute('before' + type, data);\r\n const response = await this.engine.run('query_engine', [\r\n '--action', 'execute',\r\n '--dml', JSON.stringify(newDML)\r\n ]);\r\n\r\n if (response.status != 200) {\r\n interceptor.discard();\r\n returnFormattedError(response.status, response.message);\r\n }\r\n await interceptor.commit();\r\n arrayResult = response.data;\r\n }\r\n if (after) {\r\n\r\n const response = await this.engine.run('query_engine', [\r\n '--action', 'execute',\r\n '--dml', JSON.stringify(newDML)\r\n ]);\r\n\r\n if (response.status != 200) {\r\n returnFormattedError(response.status, response.message);\r\n }\r\n const interceptor = await this.trigger.execute('after' + type, data);\r\n await interceptor.commit();\r\n }\r\n }\r\n } else {\r\n const response = await this.engine.run('query_engine', [\r\n '--action', 'execute',\r\n '--dml', JSON.stringify(localDML)\r\n ]);\r\n\r\n if (response.status != 200) {\r\n returnFormattedError(response.status, response.message);\r\n }\r\n\r\n arrayResult = response.data;\r\n }\r\n } else {\r\n const response = await this.engine.run('query_engine', [\r\n '--action', 'execute',\r\n '--dml', JSON.stringify(localDML)\r\n ]);\r\n\r\n if (response.status != 200) {\r\n returnFormattedError(response.status, response.message);\r\n }\r\n\r\n arrayResult = response.data;\r\n }\r\n\r\n if (computedFieldsNeeded.length > 0) {\r\n let newDataset: any = ComputedFieldProcessor.computedFields(arrayResult, computedFieldsNeeded);\r\n const result = newDataset.map((obj: any) => {\r\n const newObj = { ...obj };\r\n dependeciesArrray.forEach(key => delete newObj[key]);\r\n return newObj;\r\n });\r\n return result;\r\n }\r\n this.dml = {\r\n ...this.dml,\r\n type: 'select',\r\n columns: ['*'],\r\n distinct: false,\r\n joins: [],\r\n where: [],\r\n orderBy: [],\r\n groupBy: [],\r\n limit: null,\r\n offset: null,\r\n data: null,\r\n aggregation: null\r\n };\r\n return arrayResult;\r\n }\r\n\r\n}\r\n\r\nfunction returnFormattedError(status: number, message: string) {\r\n const RESET = '\\x1b[0m';\r\n const RED = '\\x1b[31m';\r\n const YELLOW = '\\x1b[33m';\r\n const BOLD = '\\x1b[1m';\r\n const CYAN = '\\x1b[36m';\r\n const GRAY = '\\x1b[90m';\r\n const UNDERLINE = '\\x1b[4m';\r\n const MAGENTA = '\\x1b[35m';\r\n\r\n let output = '';\r\n let help = '';\r\n const color = status === 600 ? YELLOW : RED;\r\n\r\n\r\n if (message.includes(\"[help]\")) {\r\n const parts = message.split(\"[help]\");\r\n output += `\\n${RED}${BOLD}${parts[0]}${RESET}`;\r\n help += `\\n${MAGENTA}${BOLD}[help]${RESET} ${GRAY}${parts[1]}${RESET}\\n`;\r\n } else {\r\n output += `\\n${color}${BOLD}${message}${RESET}\\n`;\r\n }\r\n\r\n const err = new Error();\r\n const stackLines = err.stack?.split('\\n') || [];\r\n\r\n // Buscamos la primera línea del stack fuera de node_modules\r\n const relevantStackLine = stackLines.find(line =>\r\n line.includes('.js:') && !line.includes('node_modules')\r\n );\r\n\r\n if (relevantStackLine) {\r\n const match = relevantStackLine.match(/\\((.*):(\\d+):(\\d+)\\)/) ||\r\n relevantStackLine.match(/at (.*):(\\d+):(\\d+)/);\r\n\r\n if (match) {\r\n const [, filePath, lineStr, columnStr] = match;\r\n const lineNum = parseInt(lineStr, 10);\r\n const errorLocation = `${filePath}:${lineStr}:${columnStr}`;\r\n\r\n // Leemos el archivo y sacamos las líneas relevantes\r\n try {\r\n const codeLines = fs.readFileSync(filePath, 'utf-8').split('\\n');\r\n const start = Math.max(0, lineNum - 3);\r\n const end = Math.min(codeLines.length, lineNum + 2);\r\n\r\n output += `\\n${CYAN}${BOLD}[code] ${RESET}${YELLOW} ${UNDERLINE}${errorLocation}${RESET}\\n`;\r\n\r\n for (let i = start; i < end; i++) {\r\n const line = codeLines[i];\r\n const lineLabel = `${i + 1}`.padStart(4, ' ');\r\n const pointer = i + 1 === lineNum ? `${RED}<-${RESET}` : ' ';\r\n output += `${GRAY}${lineLabel}${RESET} ${pointer} ${line}\\n`;\r\n }\r\n } catch (err) {\r\n output += `${YELLOW}⚠️ No se pudo leer el archivo de origen: ${filePath}${RESET}\\n`;\r\n output += `\\n${CYAN}${BOLD}Stack Trace:${RESET}\\n${stackLines.slice(2).join('\\n')}\\n`;\r\n }\r\n }\r\n }\r\n output += help;\r\n console.error(output);\r\n}\r\n\r\nexport default Database;\r\n","import path from \"path\";\r\nimport { FileLogger } from \"@dbcube/core\";\r\nimport { createRequire } from 'module';\r\n\r\nexport class Trigger{\r\n private triggers: any[];\r\n private databaseName: string;\r\n private instance: any;\r\n\r\n constructor(instance:any, databaseName:string, metadata: any[]){\r\n this.triggers = metadata;\r\n this.databaseName = databaseName;\r\n this.instance = instance;\r\n }\r\n\r\n get(type:string){\r\n return this.triggers.find((tr:any)=> tr.type === type);\r\n }\r\n\r\n async execute(type: string, row:any){\r\n const trigger = this.triggers.find((tr:any)=> tr.type === type);\r\n if (trigger) {\r\n const logFilePath = path.resolve(\r\n process.cwd(),\r\n 'dbcube',\r\n 'logs',\r\n 'triggers',\r\n this.databaseName,\r\n `${trigger.table_ref}_${trigger.type}.log`\r\n );\r\n \r\n const interceptor = FileLogger.interceptConsole(logFilePath, {\r\n keepOriginal: false,\r\n useBuffer: true\r\n });\r\n const pathFile = path.resolve(process.cwd(), 'dbcube', 'triggers', `${trigger.database_ref}_${trigger.table_ref}_${trigger.type}.js`);\r\n // Use __filename for CJS, process.cwd() for ESM\r\n const requireUrl = typeof __filename !== 'undefined' ? __filename : process.cwd();\r\n const require = createRequire(requireUrl);\r\n // Clear require cache to ensure fresh load\r\n delete require.cache[require.resolve(pathFile)];\r\n const triggerModule = require(pathFile);\r\n const dataProcess = triggerModule.default || triggerModule;\r\n await dataProcess({db: this.instance, oldData: row, newData: row});\r\n interceptor.restore(); \r\n return interceptor;\r\n }\r\n return null;\r\n }\r\n}"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,gBAAe;AACf,IAAAA,eAAsE;;;ACDtE,kBAAiB;AACjB,kBAA2B;AAC3B,oBAA8B;AAEvB,IAAM,UAAN,MAAa;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,UAAc,cAAqB,UAAgB;AAC3D,SAAK,WAAW;AAChB,SAAK,eAAe;AACpB,SAAK,WAAW;AAAA,EACpB;AAAA,EAEA,IAAI,MAAY;AACZ,WAAO,KAAK,SAAS,KAAK,CAAC,OAAU,GAAG,SAAS,IAAI;AAAA,EACzD;AAAA,EAEA,MAAM,QAAQ,MAAc,KAAQ;AAChC,UAAM,UAAU,KAAK,SAAS,KAAK,CAAC,OAAU,GAAG,SAAS,IAAI;AAC9D,QAAI,SAAS;AACT,YAAM,cAAc,YAAAC,QAAK;AAAA,QACrB,QAAQ,IAAI;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA,KAAK;AAAA,QACL,GAAG,QAAQ,SAAS,IAAI,QAAQ,IAAI;AAAA,MACxC;AAEA,YAAM,cAAc,uBAAW,iBAAiB,aAAa;AAAA,QACzD,cAAc;AAAA,QACd,WAAW;AAAA,MACf,CAAC;AACD,YAAM,WAAW,YAAAA,QAAK,QAAQ,QAAQ,IAAI,GAAG,UAAU,YAAY,GAAG,QAAQ,YAAY,IAAI,QAAQ,SAAS,IAAI,QAAQ,IAAI,KAAK;AAEpI,YAAM,aAAa,OAAO,eAAe,cAAc,aAAa,QAAQ,IAAI;AAChF,YAAMC,eAAU,6BAAc,UAAU;AAExC,aAAOA,SAAQ,MAAMA,SAAQ,QAAQ,QAAQ,CAAC;AAC9C,YAAM,gBAAgBA,SAAQ,QAAQ;AACtC,YAAM,cAAc,cAAc,WAAW;AAC7C,YAAM,YAAY,EAAC,IAAI,KAAK,UAAU,SAAS,KAAK,SAAS,IAAG,CAAC;AACjE,kBAAY,QAAQ;AACpB,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AACJ;;;ADxCO,IAAM,WAAN,MAAM,UAAS;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,MAAc;AACtB,SAAK,OAAO;AACZ,UAAM,SAAS,IAAI,yBAAY,IAAI;AACnC,SAAK,SAAS;AACd,SAAK,iBAAiB,CAAC;AACvB,SAAK,WAAW,CAAC;AAAA,EACrB;AAAA,EAEA,MAAM,cAAiC;AACnC,UAAM,cAAc,IAAI,UAAS,KAAK,IAAI;AAC1C,UAAM,sBAAsB,MAAM,oCAAuB,kBAAkB,KAAK,IAAI;AACpF,gBAAY,kBAAkB,mBAAmB;AACjD,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,cAAiC;AACnC,UAAM,cAAc,IAAI,UAAS,KAAK,IAAI;AAC1C,UAAM,gBAAgB,MAAM,8BAAiB,YAAY,KAAK,IAAI;AAClE,gBAAY,YAAY,aAAa;AACrC,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,UAAyB;AAC3B,UAAM,WAAW,MAAM,KAAK,OAAO,IAAI,gBAAgB;AAAA,MACnD;AAAA,MAAY;AAAA,IAChB,CAAC;AACD,QAAI,SAAS,UAAU,KAAK;AACxB,2BAAqB,SAAS,QAAQ,SAAS,OAAO;AAAA,IAC1D;AACA,WAAO,SAAS;AAAA,EACpB;AAAA,EAEA,MAAM,aAA4B;AAC9B,WAAO,KAAK,OAAO,IAAI,gBAAgB;AAAA,MACnC;AAAA,MAAY;AAAA,IAChB,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuCA,MAAM,WAA0B;AAC5B,WAAO,IAAI,MAAM,MAAM,KAAK,MAAM,WAAW,KAAK,QAAQ,KAAK,gBAAgB,KAAK,QAAQ;AAAA,EAChG;AAAA,EAEQ,kBAAkB,gBAAsB;AAC5C,SAAK,iBAAiB;AAAA,EAC1B;AAAA,EAEQ,YAAY,UAAgB;AAChC,SAAK,WAAW;AAAA,EACpB;AACJ;AAMO,IAAM,QAAN,MAAM,OAAM;AAAA,EACP;AAAA,EACA,WAAyB;AAAA,EACzB;AAAA,EACA,iBAAwB,CAAC;AAAA,EACzB;AAAA,EACA;AAAA,EAER,YAAY,UAAe,cAAsB,WAAmB,SAAc,MAAM,iBAAwB,CAAC,GAAG,WAAkB,CAAC,GAAG;AACtI,SAAK,SAAS;AACd,SAAK,iBAAiB;AACtB,SAAK,WAAW;AAChB,SAAK,UAAU,IAAI,QAAQ,UAAU,cAAc,QAAQ;AAC3D,SAAK,WAAW;AAEhB,SAAK,MAAM;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,OAAO;AAAA,MACP,SAAS,CAAC,GAAG;AAAA,MACb,UAAU;AAAA,MACV,OAAO,CAAC;AAAA,MACR,OAAO,CAAC;AAAA,MACR,SAAS,CAAC;AAAA,MACV,SAAS,CAAC;AAAA,MACV,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,aAAa;AAAA,IACjB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,OAAO,SAAmB,CAAC,GAAU;AACjC,SAAK,IAAI,OAAO;AAChB,SAAK,IAAI,UAAU,OAAO,SAAS,IAAI,SAAS,CAAC,GAAG;AACpD,WAAO;AAAA,EACX;AAAA,EAiBA,MAAM,QAAgB,UAAkB,OAAoB;AACxD,SAAK,IAAI,MAAM,KAAK;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM,KAAK;AAAA,MACX,SAAS;AAAA,IACb,CAAC;AACD,SAAK,WAAW;AAChB,WAAO;AAAA,EACX;AAAA,EAiBA,QAAQ,QAAgB,UAAkB,OAAoB;AAC1D,SAAK,IAAI,MAAM,KAAK;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN,SAAS;AAAA,IACb,CAAC;AACD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,WAAW,UAAgC;AACvC,UAAM,aAAa,IAAI,OAAM,KAAK,IAAI,UAAU,KAAK,IAAI,OAAO,KAAK,MAAM;AAC3E,aAAS,UAAU;AAEnB,SAAK,IAAI,MAAM,KAAK;AAAA,MAChB,MAAM,KAAK;AAAA,MACX,SAAS;AAAA,MACT,YAAY,WAAW,IAAI;AAAA,IAC/B,CAAC;AACD,SAAK,WAAW;AAChB,WAAO;AAAA,EACX;AAAA,EAEA,KAAY;AACR,SAAK,WAAW;AAChB,WAAO;AAAA,EACX;AAAA,EAEA,MAAa;AACT,SAAK,WAAW;AAChB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,aAAa,QAAgB,QAA2B;AACpD,UAAM,CAAC,QAAQ,MAAM,IAAI;AACzB,QAAI,WAAW,UAAa,WAAW,QAAW;AAC9C,WAAK,IAAI,MAAM,KAAK;AAAA,QAChB;AAAA,QACA,UAAU;AAAA,QACV,OAAO,CAAC,QAAQ,MAAM;AAAA,QACtB,MAAM,KAAK;AAAA,QACX,SAAS;AAAA,MACb,CAAC;AACD,WAAK,WAAW;AAAA,IACpB;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,QAAQ,QAAgB,QAAsB;AAC1C,QAAI,MAAM,QAAQ,MAAM,KAAK,OAAO,SAAS,GAAG;AAC5C,WAAK,IAAI,MAAM,KAAK;AAAA,QAChB;AAAA,QACA,UAAU;AAAA,QACV,OAAO;AAAA,QACP,MAAM,KAAK;AAAA,QACX,SAAS;AAAA,MACb,CAAC;AACD,WAAK,WAAW;AAAA,IACpB;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,UAAU,QAAuB;AAC7B,SAAK,IAAI,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,UAAU;AAAA,MACV,MAAM,KAAK;AAAA,MACX,SAAS;AAAA,IACb,CAAC;AACD,SAAK,WAAW;AAChB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,aAAa,QAAuB;AAChC,SAAK,IAAI,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,UAAU;AAAA,MACV,MAAM,KAAK;AAAA,MACX,SAAS;AAAA,IACb,CAAC;AACD,SAAK,WAAW;AAChB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,KAAK,OAAe,SAAiB,UAAkB,SAAwB;AAC3E,SAAK,IAAI,MAAM,KAAK;AAAA,MAChB,MAAM;AAAA,MACN;AAAA,MACA,IAAI;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ,CAAC;AACD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,SAAS,OAAe,SAAiB,UAAkB,SAAwB;AAC/E,SAAK,IAAI,MAAM,KAAK;AAAA,MAChB,MAAM;AAAA,MACN;AAAA,MACA,IAAI;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ,CAAC;AACD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,UAAU,OAAe,SAAiB,UAAkB,SAAwB;AAChF,SAAK,IAAI,MAAM,KAAK;AAAA,MAChB,MAAM;AAAA,MACN;AAAA,MACA,IAAI;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ,CAAC;AACD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,QAAQ,QAAgB,YAA4B,OAAc;AAC9D,UAAM,kBAAsC,CAAC,OAAO,MAAM;AAC1D,QAAI,gBAAgB,SAAS,UAAU,YAAY,CAAmB,GAAG;AACrE,WAAK,IAAI,QAAQ,KAAK;AAAA,QAClB;AAAA,QACA,WAAW,UAAU,YAAY;AAAA,MACrC,CAAC;AAAA,IACL,OAAO;AACH,YAAM,IAAI,MAAM,sBAAsB,SAAS,wBAAwB;AAAA,IAC3E;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,QAAQ,QAAuB;AAC3B,SAAK,IAAI,QAAQ,KAAK,MAAM;AAC5B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,WAAkB;AACd,SAAK,IAAI,WAAW;AACpB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,MAAM,SAAiB,KAAsB;AAC/C,SAAK,IAAI,OAAO;AAChB,SAAK,IAAI,cAAc;AAAA,MACnB,MAAM;AAAA,MACN;AAAA,MACA,OAAO;AAAA,IACX;AACA,SAAK,IAAI,UAAU,CAAC,SAAS,MAAM,YAAY;AAC/C,SAAK,IAAI,OAAO;AAChB,SAAK,IAAI,QAAQ;AACjB,QAAI;AACA,YAAM,SAAS,MAAM,KAAK,YAAY;AACtC,YAAM,MAAM,OAAO,CAAC,KAAK;AACzB,UAAG,KAAI;AACH,eAAO,IAAI;AAAA,MACf;AACA,aAAO;AAAA,IACX,SACO,OAAO;AACV,YAAM;AAAA,IACV;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,IAAI,QAAiC;AACvC,SAAK,IAAI,OAAO;AAChB,SAAK,IAAI,cAAc;AAAA,MACnB,MAAM;AAAA,MACN;AAAA,MACA,OAAO;AAAA,IACX;AACA,SAAK,IAAI,UAAU,CAAC,OAAO,MAAM,UAAU;AAC3C,SAAK,IAAI,OAAO;AAChB,SAAK,IAAI,QAAQ;AACjB,QAAI;AACA,YAAM,SAAS,MAAM,KAAK,YAAY;AACtC,YAAM,MAAM,OAAO,CAAC,KAAK;AACzB,UAAG,KAAI;AACH,eAAO,IAAI;AAAA,MACf;AACA,aAAO;AAAA,IACX,SACO,OAAO;AACV,YAAM;AAAA,IACV;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,IAAI,QAAiC;AACvC,SAAK,IAAI,OAAO;AAChB,SAAK,IAAI,cAAc;AAAA,MACnB,MAAM;AAAA,MACN;AAAA,MACA,OAAO;AAAA,IACX;AACA,SAAK,IAAI,UAAU,CAAC,OAAO,MAAM,UAAU;AAC3C,SAAK,IAAI,OAAO;AAChB,SAAK,IAAI,QAAQ;AACjB,QAAI;AACA,YAAM,SAAS,MAAM,KAAK,YAAY;AACtC,YAAM,MAAM,OAAO,CAAC,KAAK;AACzB,UAAG,KAAI;AACH,eAAO,IAAI;AAAA,MACf;AACA,aAAO;AAAA,IACX,SACO,OAAO;AACV,YAAM;AAAA,IACV;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,IAAI,QAAiC;AACvC,SAAK,IAAI,OAAO;AAChB,SAAK,IAAI,cAAc;AAAA,MACnB,MAAM;AAAA,MACN;AAAA,MACA,OAAO;AAAA,IACX;AACA,SAAK,IAAI,UAAU,CAAC,OAAO,MAAM,UAAU;AAC3C,SAAK,IAAI,OAAO;AAChB,SAAK,IAAI,QAAQ;AACjB,QAAI;AACA,YAAM,SAAS,MAAM,KAAK,YAAY;AACtC,YAAM,MAAM,OAAO,CAAC,KAAK;AACzB,UAAG,KAAI;AACH,eAAO,IAAI;AAAA,MACf;AACA,aAAO;AAAA,IACX,SACO,OAAO;AACV,YAAM;AAAA,IACV;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,IAAI,QAAiC;AACvC,SAAK,IAAI,OAAO;AAChB,SAAK,IAAI,cAAc;AAAA,MACnB,MAAM;AAAA,MACN;AAAA,MACA,OAAO;AAAA,IACX;AACA,SAAK,IAAI,UAAU,CAAC,OAAO,MAAM,UAAU;AAC3C,SAAK,IAAI,OAAO;AAChB,SAAK,IAAI,QAAQ;AACjB,QAAI;AACA,YAAM,SAAS,MAAM,KAAK,YAAY;AACtC,YAAM,MAAM,OAAO,CAAC,KAAK;AACzB,UAAG,KAAI;AACH,eAAO,IAAI;AAAA,MACf;AACA,aAAO;AAAA,IACX,SACO,OAAO;AACV,YAAM;AAAA,IACV;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,QAAuB;AACzB,SAAK,IAAI,QAAQ;AACjB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,KAAK,QAAuB;AACxB,QAAI,KAAK,IAAI,OAAO;AAChB,WAAK,IAAI,UAAU,SAAS,KAAK,KAAK,IAAI;AAAA,IAC9C;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,MAAiC;AACnC,QAAI;AACA,WAAK,IAAI,OAAO;AAChB,WAAK,IAAI,OAAO;AAChB,YAAM,SAAS,MAAM,KAAK,YAAY;AACtC,aAAO;AAAA,IACX,SACO,OAAO;AACV,YAAM;AAAA,IACV;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,QAAwC;AAC1C,SAAK,IAAI,OAAO;AAChB,SAAK,IAAI,OAAO;AAChB,SAAK,IAAI,QAAQ;AACjB,QAAI;AACA,YAAM,SAAS,MAAM,KAAK,YAAY;AACtC,aAAO,OAAO,CAAC,KAAK;AAAA,IACxB,SACO,OAAO;AACV,YAAM;AAAA,IACV;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,MAAM,KAAK,OAAY,SAAiB,MAAsC;AAC1E,SAAK,IAAI,OAAO;AAChB,SAAK,IAAI,OAAO;AAChB,SAAK,MAAM,QAAQ,KAAK,KAAK;AAC7B,SAAK,IAAI,QAAQ;AACjB,QAAI;AACA,YAAM,SAAS,MAAM,KAAK,YAAY;AACtC,aAAO,OAAO,CAAC,KAAK;AAAA,IACxB,SACO,OAAO;AACV,YAAM;AAAA,IACV;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,MAAM,OAAO,MAAmD;AAC5D,QAAI,CAAC,MAAM,QAAQ,IAAI,GAAG;AACtB,YAAM,IAAI,MAAM,sEAAsE;AAAA,IAC1F;AAEA,QAAI,CAAC,KAAK,MAAM,UAAQ,OAAO,SAAS,YAAY,SAAS,IAAI,GAAG;AAChE,YAAM,IAAI,MAAM,4CAA4C;AAAA,IAChE;AAEA,SAAK,IAAI,OAAO;AAChB,SAAK,IAAI,OAAO;AAEhB,UAAM,KAAK,YAAY,KAAK,KAAK,KAAK;AAEtC,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,MAAM,OAAO,MAAoC;AAC7C,QAAI,OAAO,SAAS,YAAY,MAAM,QAAQ,IAAI,GAAG;AACjD,YAAM,IAAI,MAAM,4DAA4D;AAAA,IAChF;AAEA,QAAI,KAAK,IAAI,MAAM,WAAW,GAAG;AAC7B,YAAM,IAAI,MAAM,qEAAqE;AAAA,IACzF;AAEA,SAAK,IAAI,OAAO;AAChB,SAAK,IAAI,OAAO;AAEhB,UAAM,KAAK,YAAY,KAAK,KAAK,QAAQ;AAEzC,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,SAAuB;AACzB,QAAI,KAAK,IAAI,MAAM,WAAW,GAAG;AAC7B,YAAM,IAAI,MAAM,oEAAoE;AAAA,IACxF;AAEA,SAAK,IAAI,OAAO;AAEhB,UAAM,aAAa,MAAM,KAAK,YAAY,KAAK,KAAK,QAAQ;AAC5D,WAAO;AAAA,EACX;AAAA,EAEA,MAAc,YAAY,MAAW,MAAM,OAAY,MAAoB;AACvE,UAAM,WAAW,MAAM,MAAM,KAAK;AAClC,UAAM,uBAA8B,CAAC;AACrC,QAAI,oBAA2B,CAAC;AAEhC,QAAI,KAAK,eAAe,SAAS,GAAG;AAChC,UAAI,UAAU,SAAS;AAEvB,iBAAW,SAAS,SAAS,SAAS;AAClC,cAAM,gBAAgB,KAAK,eAAe,KAAK,QAAM,GAAG,WAAW,KAAK;AAExE,YAAI,eAAe;AACf,+BAAqB,KAAK,aAAa;AAEvC,gBAAM,eAAe,oCAAuB,oBAAoB,cAAc,WAAW;AACzF,8BAAoB,CAAC,GAAG,mBAAmB,GAAG,YAAY;AAC1D,oBAAU,MAAM,KAAK,oBAAI,IAAI,CAAC,GAAG,SAAS,GAAG,YAAY,CAAC,CAAC;AAC3D,oBAAU,QAAQ,OAAO,CAAC,QAAgB,OAAO,KAAK;AAAA,QAC1D;AAAA,MACJ;AACA,eAAS,UAAU;AAAA,IACvB;AAEA,QAAI,cAAc,CAAC;AACnB,QAAI,MAAM;AACN,YAAM,UAAU,KAAK,QAAQ,IAAI,WAAW,IAAI;AAChD,YAAM,QAAQ,KAAK,QAAQ,IAAI,UAAU,IAAI;AAC7C,UAAI,KAAK,SAAS,SAAS,MAAM,WAAW,QAAQ;AAChD,cAAM,UAAU,SAAS;AACzB,iBAAS,QAAQ,GAAG,QAAQ,QAAQ,QAAQ,SAAS;AACjD,gBAAM,OAAO,QAAQ,KAAK;AAC1B,gBAAM,SAAS,EAAE,GAAG,UAAU,MAAM,CAAC,IAAI,EAAE;AAC3C,cAAI,SAAS;AACT,kBAAM,cAAc,MAAM,KAAK,QAAQ,QAAQ,WAAW,MAAM,IAAI;AACpE,kBAAM,WAAW,MAAM,KAAK,OAAO,IAAI,gBAAgB;AAAA,cACnD;AAAA,cAAY;AAAA,cACZ;AAAA,cAAS,KAAK,UAAU,MAAM;AAAA,YAClC,CAAC;AAED,gBAAI,SAAS,UAAU,KAAK;AACxB,0BAAY,QAAQ;AACpB,mCAAqB,SAAS,QAAQ,SAAS,OAAO;AAAA,YAC1D;AACA,kBAAM,YAAY,OAAO;AACzB,0BAAc,SAAS;AAAA,UAC3B;AACA,cAAI,OAAO;AAEP,kBAAM,WAAW,MAAM,KAAK,OAAO,IAAI,gBAAgB;AAAA,cACnD;AAAA,cAAY;AAAA,cACZ;AAAA,cAAS,KAAK,UAAU,MAAM;AAAA,YAClC,CAAC;AAED,gBAAI,SAAS,UAAU,KAAK;AACxB,mCAAqB,SAAS,QAAQ,SAAS,OAAO;AAAA,YAC1D;AACA,kBAAM,cAAc,MAAM,KAAK,QAAQ,QAAQ,UAAU,MAAM,IAAI;AACnE,kBAAM,YAAY,OAAO;AAAA,UAC7B;AAAA,QACJ;AAAA,MACJ,OAAO;AACH,cAAM,WAAW,MAAM,KAAK,OAAO,IAAI,gBAAgB;AAAA,UACnD;AAAA,UAAY;AAAA,UACZ;AAAA,UAAS,KAAK,UAAU,QAAQ;AAAA,QACpC,CAAC;AAED,YAAI,SAAS,UAAU,KAAK;AACxB,+BAAqB,SAAS,QAAQ,SAAS,OAAO;AAAA,QAC1D;AAEA,sBAAc,SAAS;AAAA,MAC3B;AAAA,IACJ,OAAO;AACH,YAAM,WAAW,MAAM,KAAK,OAAO,IAAI,gBAAgB;AAAA,QACnD;AAAA,QAAY;AAAA,QACZ;AAAA,QAAS,KAAK,UAAU,QAAQ;AAAA,MACpC,CAAC;AAED,UAAI,SAAS,UAAU,KAAK;AACxB,6BAAqB,SAAS,QAAQ,SAAS,OAAO;AAAA,MAC1D;AAEA,oBAAc,SAAS;AAAA,IAC3B;AAEA,QAAI,qBAAqB,SAAS,GAAG;AACjC,UAAI,aAAkB,oCAAuB,eAAe,aAAa,oBAAoB;AAC7F,YAAM,SAAS,WAAW,IAAI,CAAC,QAAa;AACxC,cAAM,SAAS,EAAE,GAAG,IAAI;AACxB,0BAAkB,QAAQ,SAAO,OAAO,OAAO,GAAG,CAAC;AACnD,eAAO;AAAA,MACX,CAAC;AACD,aAAO;AAAA,IACX;AACA,SAAK,MAAM;AAAA,MACP,GAAG,KAAK;AAAA,MACR,MAAM;AAAA,MACN,SAAS,CAAC,GAAG;AAAA,MACb,UAAU;AAAA,MACV,OAAO,CAAC;AAAA,MACR,OAAO,CAAC;AAAA,MACR,SAAS,CAAC;AAAA,MACV,SAAS,CAAC;AAAA,MACV,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,aAAa;AAAA,IACjB;AACA,WAAO;AAAA,EACX;AAEJ;AAEA,SAAS,qBAAqB,QAAgB,SAAiB;AAC3D,QAAM,QAAQ;AACd,QAAM,MAAM;AACZ,QAAM,SAAS;AACf,QAAM,OAAO;AACb,QAAM,OAAO;AACb,QAAM,OAAO;AACb,QAAM,YAAY;AAClB,QAAM,UAAU;AAEhB,MAAI,SAAS;AACb,MAAI,OAAO;AACX,QAAM,QAAQ,WAAW,MAAM,SAAS;AAGxC,MAAI,QAAQ,SAAS,QAAQ,GAAG;AAC5B,UAAM,QAAQ,QAAQ,MAAM,QAAQ;AACpC,cAAU;AAAA,EAAK,GAAG,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,KAAK;AAC5C,YAAQ;AAAA,EAAK,OAAO,GAAG,IAAI,SAAS,KAAK,IAAI,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,KAAK;AAAA;AAAA,EACxE,OAAO;AACH,cAAU;AAAA,EAAK,KAAK,GAAG,IAAI,GAAG,OAAO,GAAG,KAAK;AAAA;AAAA,EACjD;AAEA,QAAM,MAAM,IAAI,MAAM;AACtB,QAAM,aAAa,IAAI,OAAO,MAAM,IAAI,KAAK,CAAC;AAG9C,QAAM,oBAAoB,WAAW;AAAA,IAAK,UACtC,KAAK,SAAS,MAAM,KAAK,CAAC,KAAK,SAAS,cAAc;AAAA,EAC1D;AAEA,MAAI,mBAAmB;AACnB,UAAM,QAAQ,kBAAkB,MAAM,sBAAsB,KACxD,kBAAkB,MAAM,qBAAqB;AAEjD,QAAI,OAAO;AACP,YAAM,CAAC,EAAE,UAAU,SAAS,SAAS,IAAI;AACzC,YAAM,UAAU,SAAS,SAAS,EAAE;AACpC,YAAM,gBAAgB,GAAG,QAAQ,IAAI,OAAO,IAAI,SAAS;AAGzD,UAAI;AACA,cAAM,YAAY,UAAAC,QAAG,aAAa,UAAU,OAAO,EAAE,MAAM,IAAI;AAC/D,cAAM,QAAQ,KAAK,IAAI,GAAG,UAAU,CAAC;AACrC,cAAM,MAAM,KAAK,IAAI,UAAU,QAAQ,UAAU,CAAC;AAElD,kBAAU;AAAA,EAAK,IAAI,GAAG,IAAI,UAAU,KAAK,GAAG,MAAM,IAAI,SAAS,GAAG,aAAa,GAAG,KAAK;AAAA;AAEvF,iBAAS,IAAI,OAAO,IAAI,KAAK,KAAK;AAC9B,gBAAM,OAAO,UAAU,CAAC;AACxB,gBAAM,YAAY,GAAG,IAAI,CAAC,GAAG,SAAS,GAAG,GAAG;AAC5C,gBAAM,UAAU,IAAI,MAAM,UAAU,GAAG,GAAG,KAAK,KAAK,KAAK;AACzD,oBAAU,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,IAAI,OAAO,IAAI,IAAI;AAAA;AAAA,QAC5D;AAAA,MACJ,SAASC,MAAK;AACV,kBAAU,GAAG,MAAM,sDAA4C,QAAQ,GAAG,KAAK;AAAA;AAC/E,kBAAU;AAAA,EAAK,IAAI,GAAG,IAAI,eAAe,KAAK;AAAA,EAAK,WAAW,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA,MACrF;AAAA,IACJ;AAAA,EACJ;AACA,YAAU;AACV,UAAQ,MAAM,MAAM;AACxB;;;ADv9BA,IAAO,gBAAQ;","names":["import_core","path","require","fs","err"]}
|
package/dist/index.d.mts
CHANGED
|
@@ -255,7 +255,7 @@ declare class Table {
|
|
|
255
255
|
* const count = await db.table('users').count().first();
|
|
256
256
|
* console.log(count); // { count: 2 }
|
|
257
257
|
*/
|
|
258
|
-
count(column?: string):
|
|
258
|
+
count(column?: string): Promise<Number>;
|
|
259
259
|
/**
|
|
260
260
|
* Adds a SUM clause to the query.
|
|
261
261
|
*
|
|
@@ -266,7 +266,7 @@ declare class Table {
|
|
|
266
266
|
* const totalAge = await db.table('users').sum('age').first();
|
|
267
267
|
* console.log(totalAge); // { sum: 55 }
|
|
268
268
|
*/
|
|
269
|
-
sum(column: string):
|
|
269
|
+
sum(column: string): Promise<Number>;
|
|
270
270
|
/**
|
|
271
271
|
* Adds an AVG clause to the query.
|
|
272
272
|
*
|
|
@@ -277,7 +277,7 @@ declare class Table {
|
|
|
277
277
|
* const avgAge = await db.table('users').avg('age').first();
|
|
278
278
|
* console.log(avgAge); // { avg: 27.5 }
|
|
279
279
|
*/
|
|
280
|
-
avg(column: string):
|
|
280
|
+
avg(column: string): Promise<Number>;
|
|
281
281
|
/**
|
|
282
282
|
* Adds a MAX clause to the query.
|
|
283
283
|
*
|
|
@@ -288,7 +288,7 @@ declare class Table {
|
|
|
288
288
|
* const maxAge = await db.table('users').max('age').first();
|
|
289
289
|
* console.log(maxAge); // { max: 30 }
|
|
290
290
|
*/
|
|
291
|
-
max(column: string):
|
|
291
|
+
max(column: string): Promise<Number>;
|
|
292
292
|
/**
|
|
293
293
|
* Adds a MIN clause to the query.
|
|
294
294
|
*
|
|
@@ -299,7 +299,7 @@ declare class Table {
|
|
|
299
299
|
* const minAge = await db.table('users').min('age').first();
|
|
300
300
|
* console.log(minAge); // { min: 25 }
|
|
301
301
|
*/
|
|
302
|
-
min(column: string):
|
|
302
|
+
min(column: string): Promise<Number>;
|
|
303
303
|
/**
|
|
304
304
|
* Adds a LIMIT clause to the query.
|
|
305
305
|
*
|
package/dist/index.d.ts
CHANGED
|
@@ -255,7 +255,7 @@ declare class Table {
|
|
|
255
255
|
* const count = await db.table('users').count().first();
|
|
256
256
|
* console.log(count); // { count: 2 }
|
|
257
257
|
*/
|
|
258
|
-
count(column?: string):
|
|
258
|
+
count(column?: string): Promise<Number>;
|
|
259
259
|
/**
|
|
260
260
|
* Adds a SUM clause to the query.
|
|
261
261
|
*
|
|
@@ -266,7 +266,7 @@ declare class Table {
|
|
|
266
266
|
* const totalAge = await db.table('users').sum('age').first();
|
|
267
267
|
* console.log(totalAge); // { sum: 55 }
|
|
268
268
|
*/
|
|
269
|
-
sum(column: string):
|
|
269
|
+
sum(column: string): Promise<Number>;
|
|
270
270
|
/**
|
|
271
271
|
* Adds an AVG clause to the query.
|
|
272
272
|
*
|
|
@@ -277,7 +277,7 @@ declare class Table {
|
|
|
277
277
|
* const avgAge = await db.table('users').avg('age').first();
|
|
278
278
|
* console.log(avgAge); // { avg: 27.5 }
|
|
279
279
|
*/
|
|
280
|
-
avg(column: string):
|
|
280
|
+
avg(column: string): Promise<Number>;
|
|
281
281
|
/**
|
|
282
282
|
* Adds a MAX clause to the query.
|
|
283
283
|
*
|
|
@@ -288,7 +288,7 @@ declare class Table {
|
|
|
288
288
|
* const maxAge = await db.table('users').max('age').first();
|
|
289
289
|
* console.log(maxAge); // { max: 30 }
|
|
290
290
|
*/
|
|
291
|
-
max(column: string):
|
|
291
|
+
max(column: string): Promise<Number>;
|
|
292
292
|
/**
|
|
293
293
|
* Adds a MIN clause to the query.
|
|
294
294
|
*
|
|
@@ -299,7 +299,7 @@ declare class Table {
|
|
|
299
299
|
* const minAge = await db.table('users').min('age').first();
|
|
300
300
|
* console.log(minAge); // { min: 25 }
|
|
301
301
|
*/
|
|
302
|
-
min(column: string):
|
|
302
|
+
min(column: string): Promise<Number>;
|
|
303
303
|
/**
|
|
304
304
|
* Adds a LIMIT clause to the query.
|
|
305
305
|
*
|
package/dist/index.js
CHANGED
|
@@ -455,7 +455,7 @@ var Table = class _Table {
|
|
|
455
455
|
* const count = await db.table('users').count().first();
|
|
456
456
|
* console.log(count); // { count: 2 }
|
|
457
457
|
*/
|
|
458
|
-
count(column = "*") {
|
|
458
|
+
async count(column = "*") {
|
|
459
459
|
this.dml.type = "select";
|
|
460
460
|
this.dml.aggregation = {
|
|
461
461
|
type: "COUNT",
|
|
@@ -463,7 +463,18 @@ var Table = class _Table {
|
|
|
463
463
|
alias: "count"
|
|
464
464
|
};
|
|
465
465
|
this.dml.columns = [`COUNT(${column}) AS count`];
|
|
466
|
-
|
|
466
|
+
this.dml.data = null;
|
|
467
|
+
this.dml.limit = 1;
|
|
468
|
+
try {
|
|
469
|
+
const result = await this.getResponse();
|
|
470
|
+
const res = result[0] || null;
|
|
471
|
+
if (res) {
|
|
472
|
+
return res.count;
|
|
473
|
+
}
|
|
474
|
+
return 0;
|
|
475
|
+
} catch (error) {
|
|
476
|
+
throw error;
|
|
477
|
+
}
|
|
467
478
|
}
|
|
468
479
|
/**
|
|
469
480
|
* Adds a SUM clause to the query.
|
|
@@ -475,7 +486,7 @@ var Table = class _Table {
|
|
|
475
486
|
* const totalAge = await db.table('users').sum('age').first();
|
|
476
487
|
* console.log(totalAge); // { sum: 55 }
|
|
477
488
|
*/
|
|
478
|
-
sum(column) {
|
|
489
|
+
async sum(column) {
|
|
479
490
|
this.dml.type = "select";
|
|
480
491
|
this.dml.aggregation = {
|
|
481
492
|
type: "SUM",
|
|
@@ -483,7 +494,18 @@ var Table = class _Table {
|
|
|
483
494
|
alias: "sum"
|
|
484
495
|
};
|
|
485
496
|
this.dml.columns = [`SUM(${column}) AS sum`];
|
|
486
|
-
|
|
497
|
+
this.dml.data = null;
|
|
498
|
+
this.dml.limit = 1;
|
|
499
|
+
try {
|
|
500
|
+
const result = await this.getResponse();
|
|
501
|
+
const res = result[0] || null;
|
|
502
|
+
if (res) {
|
|
503
|
+
return res.count;
|
|
504
|
+
}
|
|
505
|
+
return 0;
|
|
506
|
+
} catch (error) {
|
|
507
|
+
throw error;
|
|
508
|
+
}
|
|
487
509
|
}
|
|
488
510
|
/**
|
|
489
511
|
* Adds an AVG clause to the query.
|
|
@@ -495,7 +517,7 @@ var Table = class _Table {
|
|
|
495
517
|
* const avgAge = await db.table('users').avg('age').first();
|
|
496
518
|
* console.log(avgAge); // { avg: 27.5 }
|
|
497
519
|
*/
|
|
498
|
-
avg(column) {
|
|
520
|
+
async avg(column) {
|
|
499
521
|
this.dml.type = "select";
|
|
500
522
|
this.dml.aggregation = {
|
|
501
523
|
type: "AVG",
|
|
@@ -503,7 +525,18 @@ var Table = class _Table {
|
|
|
503
525
|
alias: "avg"
|
|
504
526
|
};
|
|
505
527
|
this.dml.columns = [`AVG(${column}) AS avg`];
|
|
506
|
-
|
|
528
|
+
this.dml.data = null;
|
|
529
|
+
this.dml.limit = 1;
|
|
530
|
+
try {
|
|
531
|
+
const result = await this.getResponse();
|
|
532
|
+
const res = result[0] || null;
|
|
533
|
+
if (res) {
|
|
534
|
+
return res.count;
|
|
535
|
+
}
|
|
536
|
+
return 0;
|
|
537
|
+
} catch (error) {
|
|
538
|
+
throw error;
|
|
539
|
+
}
|
|
507
540
|
}
|
|
508
541
|
/**
|
|
509
542
|
* Adds a MAX clause to the query.
|
|
@@ -515,7 +548,7 @@ var Table = class _Table {
|
|
|
515
548
|
* const maxAge = await db.table('users').max('age').first();
|
|
516
549
|
* console.log(maxAge); // { max: 30 }
|
|
517
550
|
*/
|
|
518
|
-
max(column) {
|
|
551
|
+
async max(column) {
|
|
519
552
|
this.dml.type = "select";
|
|
520
553
|
this.dml.aggregation = {
|
|
521
554
|
type: "MAX",
|
|
@@ -523,7 +556,18 @@ var Table = class _Table {
|
|
|
523
556
|
alias: "max"
|
|
524
557
|
};
|
|
525
558
|
this.dml.columns = [`MAX(${column}) AS max`];
|
|
526
|
-
|
|
559
|
+
this.dml.data = null;
|
|
560
|
+
this.dml.limit = 1;
|
|
561
|
+
try {
|
|
562
|
+
const result = await this.getResponse();
|
|
563
|
+
const res = result[0] || null;
|
|
564
|
+
if (res) {
|
|
565
|
+
return res.count;
|
|
566
|
+
}
|
|
567
|
+
return 0;
|
|
568
|
+
} catch (error) {
|
|
569
|
+
throw error;
|
|
570
|
+
}
|
|
527
571
|
}
|
|
528
572
|
/**
|
|
529
573
|
* Adds a MIN clause to the query.
|
|
@@ -535,7 +579,7 @@ var Table = class _Table {
|
|
|
535
579
|
* const minAge = await db.table('users').min('age').first();
|
|
536
580
|
* console.log(minAge); // { min: 25 }
|
|
537
581
|
*/
|
|
538
|
-
min(column) {
|
|
582
|
+
async min(column) {
|
|
539
583
|
this.dml.type = "select";
|
|
540
584
|
this.dml.aggregation = {
|
|
541
585
|
type: "MIN",
|
|
@@ -543,7 +587,18 @@ var Table = class _Table {
|
|
|
543
587
|
alias: "min"
|
|
544
588
|
};
|
|
545
589
|
this.dml.columns = [`MIN(${column}) AS min`];
|
|
546
|
-
|
|
590
|
+
this.dml.data = null;
|
|
591
|
+
this.dml.limit = 1;
|
|
592
|
+
try {
|
|
593
|
+
const result = await this.getResponse();
|
|
594
|
+
const res = result[0] || null;
|
|
595
|
+
if (res) {
|
|
596
|
+
return res.count;
|
|
597
|
+
}
|
|
598
|
+
return 0;
|
|
599
|
+
} catch (error) {
|
|
600
|
+
throw error;
|
|
601
|
+
}
|
|
547
602
|
}
|
|
548
603
|
/**
|
|
549
604
|
* Adds a LIMIT clause to the query.
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/Database.ts","../src/lib/Trigger.ts","../src/index.ts"],"sourcesContent":["import fs from 'fs';\r\nimport { QueryEngine, ComputedFieldProcessor, TriggerProcessor } from \"@dbcube/core\";\r\nimport { DatabaseRecord, DML, WhereCallback, WhereCondition } from \"../@types/Database\";\r\nimport { Trigger } from './Trigger';\r\n\r\n/**\r\n * Main class to handle MySQL database connections and queries.\r\n * Implements the Singleton pattern to ensure a single instance of the connection pool.\r\n */\r\nexport class Database {\r\n private name: string;\r\n private engine: any;\r\n private computedFields: any[];\r\n private triggers: any[];\r\n\r\n constructor(name: string) {\r\n this.name = name;\r\n const engine = new QueryEngine(name);\r\n this.engine = engine;\r\n this.computedFields = [];\r\n this.triggers = [];\r\n }\r\n\r\n async useComputes(): Promise<Database> {\r\n const newDatabase = new Database(this.name); \r\n const arrayComputedFields = await ComputedFieldProcessor.getComputedFields(this.name);\r\n newDatabase.setComputedFields(arrayComputedFields);\r\n return newDatabase;\r\n }\r\n\r\n async useTriggers(): Promise<Database> {\r\n const newDatabase = new Database(this.name); \r\n const arrayTriggers = await TriggerProcessor.getTriggers(this.name);\r\n newDatabase.setTriggers(arrayTriggers);\r\n return newDatabase;\r\n }\r\n\r\n async connect(): Promise<void> {\r\n const response = await this.engine.run('query_engine', [\r\n '--action', 'connect',\r\n ]);\r\n if (response.status != 200) {\r\n returnFormattedError(response.status, response.message);\r\n }\r\n return response.data;\r\n }\r\n\r\n async disconnect(): Promise<void> {\r\n return this.engine.run('query_engine', [\r\n '--action', 'disconnect',\r\n ]);\r\n }\r\n\r\n /**\r\n * Creates and returns a new instance of `Table` for the specified table.\r\n * This method is used to start building queries for a specific table.\r\n * It provides a fluent interface for common database operations like select, insert, update, and delete.\r\n *\r\n * @param {string} tableName - The name of the table to query.\r\n * @returns {Table} - Returns a new instance of `Table` for the specified table.\r\n *\r\n * @example\r\n * // Select all records from a table\r\n * const users = await db.table('users').get();\r\n * \r\n * // Select records with conditions\r\n * const activeUsers = await db.table('users')\r\n * .where('status', '=', 'active')\r\n * .orderBy('created_at', 'DESC')\r\n * .limit(10)\r\n * .get();\r\n * \r\n * // Insert records\r\n * await db.table('users').insert([\r\n * { name: 'John', email: 'john@example.com', age: 30 }\r\n * ]);\r\n * \r\n * // Update records\r\n * await db.table('users')\r\n * .where('id', '=', 1)\r\n * .update({ status: 'inactive' });\r\n * \r\n * // Delete records\r\n * await db.table('users')\r\n * .where('status', '=', 'deleted')\r\n * .delete();\r\n * \r\n * // Access column management\r\n * const columns = await db.table('users').columns().get();\r\n */\r\n table(tableName: string): Table {\r\n return new Table(this, this.name, tableName, this.engine, this.computedFields, this.triggers);\r\n }\r\n\r\n private setComputedFields(computedFields: any[]){\r\n this.computedFields = computedFields;\r\n }\r\n\r\n private setTriggers(triggers: any[]){\r\n this.triggers = triggers;\r\n }\r\n}\r\n\r\n/**\r\n * Class to build and execute SQL queries for a specific table.\r\n * Supports operations like SELECT, INSERT, UPDATE, DELETE, and more.\r\n */\r\nexport class Table {\r\n private engine: any;\r\n private nextType: 'AND' | 'OR' = 'AND';\r\n private dml: DML;\r\n private computedFields: any[] = [];\r\n private trigger: any;\r\n private triggers: any;\r\n\r\n constructor(instance: any, databaseName: string, tableName: string, engine: any = null, computedFields: any[] = [], triggers: any[] = []) {\r\n this.engine = engine;\r\n this.computedFields = computedFields;\r\n this.triggers = triggers;\r\n this.trigger = new Trigger(instance, databaseName, triggers);\r\n this.nextType = 'AND';\r\n\r\n this.dml = {\r\n type: 'select',\r\n database: databaseName,\r\n table: tableName,\r\n columns: ['*'],\r\n distinct: false,\r\n joins: [],\r\n where: [],\r\n orderBy: [],\r\n groupBy: [],\r\n limit: null,\r\n offset: null,\r\n data: null,\r\n aggregation: null\r\n };\r\n }\r\n\r\n /**\r\n * Specifies the columns to select in a SELECT query.\r\n *\r\n * @param {string[]} fields - Array of column names to select. If empty, selects all columns.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').select(['id', 'name']).get();\r\n * console.log(users); // [{ id: 1, name: 'John' }, { id: 2, name: 'Jane' }]\r\n */\r\n select(fields: string[] = []): Table {\r\n this.dml.type = 'select';\r\n this.dml.columns = fields.length > 0 ? fields : ['*'];\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a WHERE condition to the query.\r\n *\r\n * @param {string} column - The column to filter by.\r\n * @param {string} operator - The comparison operator (e.g., '=', '>', '<', 'IS NULL', 'IS NOT NULL').\r\n * @param {any} value - The value to compare against (optional for IS NULL/IS NOT NULL).\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').where('age', '>', 25).get();\r\n * const nullUsers = await db.table('users').where('email', 'IS NULL').get();\r\n * console.log(users); // [{ id: 1, name: 'John', age: 30 }]\r\n */\r\n where(column: string, operator: 'IS NULL' | 'IS NOT NULL'): Table;\r\n where(column: string, operator: '=' | '!=' | '<>' | '>' | '<' | '>=' | '<=' | 'LIKE' | 'NOT LIKE' | 'IN' | 'NOT IN' | 'BETWEEN' | 'NOT BETWEEN', value: any): Table;\r\n where(column: string, operator: string, value?: any): Table {\r\n this.dml.where.push({\r\n column,\r\n operator,\r\n value,\r\n type: this.nextType,\r\n isGroup: false\r\n });\r\n this.nextType = 'AND';\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds an OR WHERE condition to the query.\r\n *\r\n * @param {string} column - The column to filter by.\r\n * @param {string} operator - The comparison operator (e.g., '=', '>', '<', 'IS NULL', 'IS NOT NULL').\r\n * @param {any} value - The value to compare against (optional for IS NULL/IS NOT NULL).\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').where('age', '>', 25).orWhere('name', '=', 'Jane').get();\r\n * const nullUsers = await db.table('users').where('active', '=', true).orWhere('email', 'IS NULL').get();\r\n * console.log(users); // [{ id: 1, name: 'John', age: 30 }, { id: 2, name: 'Jane', age: 25 }]\r\n */\r\n orWhere(column: string, operator: 'IS NULL' | 'IS NOT NULL'): Table;\r\n orWhere(column: string, operator: '=' | '!=' | '<>' | '>' | '<' | '>=' | '<=' | 'LIKE' | 'NOT LIKE' | 'IN' | 'NOT IN' | 'BETWEEN' | 'NOT BETWEEN', value: any): Table;\r\n orWhere(column: string, operator: string, value?: any): Table {\r\n this.dml.where.push({\r\n column,\r\n operator,\r\n value,\r\n type: 'OR',\r\n isGroup: false\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a grouped WHERE condition to the query.\r\n *\r\n * @param {WhereCallback} callback - A callback function that receives a new Table instance to build the grouped conditions.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').whereGroup(query => {\r\n * query.where('age', '>', 25).orWhere('name', '=', 'Jane');\r\n * }).get();\r\n * console.log(users); // [{ id: 1, name: 'John', age: 30 }, { id: 2, name: 'Jane', age: 25 }]\r\n */\r\n whereGroup(callback: WhereCallback): Table {\r\n const groupQuery = new Table(this.dml.database, this.dml.table, this.engine);\r\n callback(groupQuery);\r\n\r\n this.dml.where.push({\r\n type: this.nextType,\r\n isGroup: true,\r\n conditions: groupQuery.dml.where as WhereCondition[]\r\n });\r\n this.nextType = 'AND';\r\n return this;\r\n }\r\n\r\n or(): Table {\r\n this.nextType = 'OR';\r\n return this;\r\n }\r\n\r\n and(): Table {\r\n this.nextType = 'AND';\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a WHERE BETWEEN condition to the query.\r\n *\r\n * @param {string} column - The column to filter by.\r\n * @param {[any, any]} values - A tuple with two values representing the range.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').whereBetween('age', [20, 30]).get();\r\n * console.log(users); // [{ id: 1, name: 'John', age: 30 }, { id: 2, name: 'Jane', age: 25 }]\r\n */\r\n whereBetween(column: string, values: [any, any]): Table {\r\n const [value1, value2] = values;\r\n if (value1 !== undefined && value2 !== undefined) {\r\n this.dml.where.push({\r\n column,\r\n operator: 'BETWEEN',\r\n value: [value1, value2],\r\n type: this.nextType,\r\n isGroup: false\r\n });\r\n this.nextType = 'AND';\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a WHERE IN condition to the query.\r\n *\r\n * @param {string} column - The column to filter by.\r\n * @param {any[]} values - An array of values to match.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').whereIn('id', [1, 2]).get();\r\n * console.log(users); // [{ id: 1, name: 'John' }, { id: 2, name: 'Jane' }]\r\n */\r\n whereIn(column: string, values: any[]): Table {\r\n if (Array.isArray(values) && values.length > 0) {\r\n this.dml.where.push({\r\n column,\r\n operator: 'IN',\r\n value: values,\r\n type: this.nextType,\r\n isGroup: false\r\n });\r\n this.nextType = 'AND';\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a WHERE IS NULL condition to the query.\r\n *\r\n * @param {string} column - The column to filter by.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').whereNull('email').get();\r\n * console.log(users); // [{ id: 3, name: 'Alice', email: null }]\r\n */\r\n whereNull(column: string): Table {\r\n this.dml.where.push({\r\n column,\r\n operator: 'IS NULL',\r\n type: this.nextType,\r\n isGroup: false\r\n });\r\n this.nextType = 'AND';\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a WHERE IS NOT NULL condition to the query.\r\n *\r\n * @param {string} column - The column to filter by.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').whereNotNull('email').get();\r\n * console.log(users); // [{ id: 1, name: 'John', email: 'john@example.com' }]\r\n */\r\n whereNotNull(column: string): Table {\r\n this.dml.where.push({\r\n column,\r\n operator: 'IS NOT NULL',\r\n type: this.nextType,\r\n isGroup: false\r\n });\r\n this.nextType = 'AND';\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a JOIN clause to the query.\r\n *\r\n * @param {string} table - The table to join.\r\n * @param {string} column1 - The column from the current table.\r\n * @param {string} operator - The comparison operator (e.g., '=', '>', '<').\r\n * @param {string} column2 - The column from the joined table.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').join('orders', 'users.id', '=', 'orders.user_id').get();\r\n * console.log(users); // [{ id: 1, name: 'John', order_id: 101 }]\r\n */\r\n join(table: string, column1: string, operator: string, column2: string): Table {\r\n this.dml.joins.push({\r\n type: 'INNER',\r\n table,\r\n on: {\r\n column1,\r\n operator,\r\n column2\r\n }\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a LEFT JOIN clause to the query.\r\n *\r\n * @param {string} table - The table to join.\r\n * @param {string} column1 - The column from the current table.\r\n * @param {string} operator - The comparison operator (e.g., '=', '>', '<').\r\n * @param {string} column2 - The column from the joined table.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').leftJoin('orders', 'users.id', '=', 'orders.user_id').get();\r\n * console.log(users); // [{ id: 1, name: 'John', order_id: 101 }, { id: 2, name: 'Jane', order_id: null }]\r\n */\r\n leftJoin(table: string, column1: string, operator: string, column2: string): Table {\r\n this.dml.joins.push({\r\n type: 'LEFT',\r\n table,\r\n on: {\r\n column1,\r\n operator,\r\n column2\r\n }\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a RIGHT JOIN clause to the query.\r\n *\r\n * @param {string} table - The table to join.\r\n * @param {string} column1 - The column from the current table.\r\n * @param {string} operator - The comparison operator (e.g., '=', '>', '<').\r\n * @param {string} column2 - The column from the joined table.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').rightJoin('orders', 'users.id', '=', 'orders.user_id').get();\r\n * console.log(users); // [{ id: 1, name: 'John', order_id: 101 }, { id: null, name: null, order_id: 102 }]\r\n */\r\n rightJoin(table: string, column1: string, operator: string, column2: string): Table {\r\n this.dml.joins.push({\r\n type: 'RIGHT',\r\n table,\r\n on: {\r\n column1,\r\n operator,\r\n column2\r\n }\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds an ORDER BY clause to the query.\r\n *\r\n * @param {string} column - The column to order by.\r\n * @param {'ASC' | 'DESC'} direction - The sorting direction ('ASC' or 'DESC').\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').orderBy('name', 'ASC').get();\r\n * console.log(users); // [{ id: 2, name: 'Jane' }, { id: 1, name: 'John' }]\r\n */\r\n orderBy(column: string, direction: 'ASC' | 'DESC' = 'ASC'): Table {\r\n const validDirections: ('ASC' | 'DESC')[] = ['ASC', 'DESC'];\r\n if (validDirections.includes(direction.toUpperCase() as 'ASC' | 'DESC')) {\r\n this.dml.orderBy.push({\r\n column,\r\n direction: direction.toUpperCase() as 'ASC' | 'DESC'\r\n });\r\n } else {\r\n throw new Error(`Invalid direction: ${direction}. Use 'ASC' or 'DESC'.`);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a GROUP BY clause to the query.\r\n *\r\n * @param {string} column - The column to group by.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').groupBy('age').get();\r\n * console.log(users); // [{ age: 30, count: 1 }, { age: 25, count: 1 }]\r\n */\r\n groupBy(column: string): Table {\r\n this.dml.groupBy.push(column);\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a DISTINCT clause to the query.\r\n *\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').distinct().select(['name']).get();\r\n * console.log(users); // [{ name: 'John' }, { name: 'Jane' }]\r\n */\r\n distinct(): Table {\r\n this.dml.distinct = true;\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a COUNT clause to the query.\r\n *\r\n * @param {string} column - The column to count (default is '*').\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const count = await db.table('users').count().first();\r\n * console.log(count); // { count: 2 }\r\n */\r\n count(column: string = '*'): Table {\r\n this.dml.type = 'select';\r\n this.dml.aggregation = {\r\n type: 'COUNT',\r\n column,\r\n alias: 'count'\r\n };\r\n this.dml.columns = [`COUNT(${column}) AS count`];\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a SUM clause to the query.\r\n *\r\n * @param {string} column - The column to sum.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const totalAge = await db.table('users').sum('age').first();\r\n * console.log(totalAge); // { sum: 55 }\r\n */\r\n sum(column: string): Table {\r\n this.dml.type = 'select';\r\n this.dml.aggregation = {\r\n type: 'SUM',\r\n column,\r\n alias: 'sum'\r\n };\r\n this.dml.columns = [`SUM(${column}) AS sum`];\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds an AVG clause to the query.\r\n *\r\n * @param {string} column - The column to calculate the average.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const avgAge = await db.table('users').avg('age').first();\r\n * console.log(avgAge); // { avg: 27.5 }\r\n */\r\n avg(column: string): Table {\r\n this.dml.type = 'select';\r\n this.dml.aggregation = {\r\n type: 'AVG',\r\n column,\r\n alias: 'avg'\r\n };\r\n this.dml.columns = [`AVG(${column}) AS avg`];\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a MAX clause to the query.\r\n *\r\n * @param {string} column - The column to find the maximum value.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const maxAge = await db.table('users').max('age').first();\r\n * console.log(maxAge); // { max: 30 }\r\n */\r\n max(column: string): Table {\r\n this.dml.type = 'select';\r\n this.dml.aggregation = {\r\n type: 'MAX',\r\n column,\r\n alias: 'max'\r\n };\r\n this.dml.columns = [`MAX(${column}) AS max`];\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a MIN clause to the query.\r\n *\r\n * @param {string} column - The column to find the minimum value.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const minAge = await db.table('users').min('age').first();\r\n * console.log(minAge); // { min: 25 }\r\n */\r\n min(column: string): Table {\r\n this.dml.type = 'select';\r\n this.dml.aggregation = {\r\n type: 'MIN',\r\n column,\r\n alias: 'min'\r\n };\r\n this.dml.columns = [`MIN(${column}) AS min`];\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a LIMIT clause to the query.\r\n *\r\n * @param {number} number - The maximum number of rows to return.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').limit(1).get();\r\n * console.log(users); // [{ id: 1, name: 'John', age: 30 }]\r\n */\r\n limit(number: number): Table {\r\n this.dml.limit = number;\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds pagination to the query using LIMIT and OFFSET.\r\n *\r\n * @param {number} number - The page number (starting from 1).\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').limit(1).page(2).get();\r\n * console.log(users); // [{ id: 2, name: 'Jane', age: 25 }]\r\n */\r\n page(number: number): Table {\r\n if (this.dml.limit) {\r\n this.dml.offset = (number - 1) * this.dml.limit;\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Executes the query and returns all matching rows.\r\n *\r\n * @returns {Promise<DatabaseRecord[]>} - Returns an array of rows.\r\n *\r\n * @example\r\n * const users = await db.table('users').get();\r\n * console.log(users); // [{ id: 1, name: 'John' }, { id: 2, name: 'Jane' }]\r\n */\r\n async get(): Promise<DatabaseRecord[]> {\r\n try {\r\n this.dml.type = 'select';\r\n this.dml.data = null;\r\n const result = await this.getResponse();\r\n return result;\r\n }\r\n catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Executes the query and returns the first matching row.\r\n *\r\n * @returns {Promise<DatabaseRecord | null>} - Returns the first row or null if no rows match.\r\n *\r\n * @example\r\n * const user = await db.table('users').first();\r\n * console.log(user); // { id: 1, name: 'John' }\r\n */\r\n async first(): Promise<DatabaseRecord | null> {\r\n this.dml.type = 'select';\r\n this.dml.data = null;\r\n this.dml.limit = 1;\r\n try {\r\n const result = await this.getResponse();\r\n return result[0] || null;\r\n }\r\n catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Finds a row by a specific column value.\r\n *\r\n * @param {any} value - The value to search for.\r\n * @param {string} column - The column to search in (default is 'id').\r\n * @returns {Promise<DatabaseRecord | null>} - Returns the first matching row or null if no rows match.\r\n *\r\n * @example\r\n * const user = await db.table('users').find(1);\r\n * console.log(user); // { id: 1, name: 'John' }\r\n */\r\n async find(value: any, column: string = 'id'): Promise<DatabaseRecord | null> {\r\n this.dml.type = 'select';\r\n this.dml.data = null;\r\n this.where(column, '=', value);\r\n this.dml.limit = 1;\r\n try {\r\n const result = await this.getResponse();\r\n return result[0] || null;\r\n }\r\n catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Inserts one or more rows into the table.\r\n *\r\n * @param {DatabaseRecord[]} data - An array of objects representing the rows to insert.\r\n * @returns {Promise<DatabaseRecord[]>} - Returns an array of the inserted rows.\r\n *\r\n * @example\r\n * const newUsers = await db.table('users').insert([\r\n * { name: 'Alice', age: 28 },\r\n * { name: 'Bob', age: 32 }\r\n * ]);\r\n * console.log(newUsers); // [{ id: 3, name: 'Alice', age: 28 }, { id: 4, name: 'Bob', age: 32 }]\r\n */\r\n async insert(data: DatabaseRecord[]): Promise<DatabaseRecord[]> {\r\n if (!Array.isArray(data)) {\r\n throw new Error('The insert method requires an array of objects with key-value pairs.');\r\n }\r\n\r\n if (!data.every(item => typeof item === 'object' && item !== null)) {\r\n throw new Error('The array must contain only valid objects.');\r\n }\r\n\r\n this.dml.type = 'insert';\r\n this.dml.data = data;\r\n\r\n await this.getResponse(this.dml, 'Add');\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * Updates rows in the table based on the defined conditions.\r\n *\r\n * @param {DatabaseRecord} data - An object with key-value pairs representing the fields to update.\r\n * @returns {Promise<any>} - Returns the result of the update operation.\r\n *\r\n * @example\r\n * const result = await db.table('users')\r\n * .where('id', '=', 1)\r\n * .update({ name: 'John Updated', age: 31 });\r\n * console.log(result); // { affectedRows: 1 }\r\n */\r\n async update(data: DatabaseRecord): Promise<any> {\r\n if (typeof data !== 'object' || Array.isArray(data)) {\r\n throw new Error('The update method requires an object with key-value pairs.');\r\n }\r\n\r\n if (this.dml.where.length === 0) {\r\n throw new Error('You must specify at least one WHERE condition to perform an update.');\r\n }\r\n\r\n this.dml.type = 'update';\r\n this.dml.data = data;\r\n\r\n await this.getResponse(this.dml, 'Update');\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * Deletes rows from the table based on the defined conditions.\r\n *\r\n * @returns {Promise<any>} - Returns the result of the delete operation.\r\n *\r\n * @example\r\n * const result = await db.table('users').where('id', '=', 1).delete();\r\n * console.log(result); // { affectedRows: 1 }\r\n */\r\n async delete(): Promise<any> {\r\n if (this.dml.where.length === 0) {\r\n throw new Error('You must specify at least one WHERE condition to perform a delete.');\r\n }\r\n\r\n this.dml.type = 'delete';\r\n\r\n const deleteData = await this.getResponse(this.dml, 'Delete');\r\n return deleteData;\r\n }\r\n\r\n private async getResponse(dml: any = null, type: any = null): Promise<any> {\r\n const localDML = dml ? dml : this.dml;\r\n const computedFieldsNeeded: any[] = [];\r\n let dependeciesArrray: any[] = [];\r\n\r\n if (this.computedFields.length > 0) {\r\n let columns = localDML.columns;\r\n\r\n for (const field of localDML.columns) {\r\n const computedField = this.computedFields.find(cf => cf.column === field);\r\n\r\n if (computedField) {\r\n computedFieldsNeeded.push(computedField);\r\n // Add dependencies to real fields\r\n const dependencies = ComputedFieldProcessor.extractDependencies(computedField.instruction);\r\n dependeciesArrray = [...dependeciesArrray, ...dependencies];\r\n columns = Array.from(new Set([...columns, ...dependencies]));\r\n columns = columns.filter((col: string) => col != field);\r\n }\r\n }\r\n localDML.columns = columns;\r\n }\r\n\r\n let arrayResult = [];\r\n if (type) {\r\n const beffore = this.trigger.get('before' + type);\r\n const after = this.trigger.get('after' + type);\r\n if (this.triggers.length > 0 && (beffore || after)) {\r\n const dataset = localDML.data;\r\n for (let index = 0; index < dataset.length; index++) {\r\n const data = dataset[index];\r\n const newDML = { ...localDML, data: [data] };\r\n if (beffore) {\r\n const interceptor = await this.trigger.execute('before' + type, data);\r\n const response = await this.engine.run('query_engine', [\r\n '--action', 'execute',\r\n '--dml', JSON.stringify(newDML)\r\n ]);\r\n\r\n if (response.status != 200) {\r\n interceptor.discard();\r\n returnFormattedError(response.status, response.message);\r\n }\r\n await interceptor.commit();\r\n arrayResult = response.data;\r\n }\r\n if (after) {\r\n\r\n const response = await this.engine.run('query_engine', [\r\n '--action', 'execute',\r\n '--dml', JSON.stringify(newDML)\r\n ]);\r\n\r\n if (response.status != 200) {\r\n returnFormattedError(response.status, response.message);\r\n }\r\n const interceptor = await this.trigger.execute('after' + type, data);\r\n await interceptor.commit();\r\n }\r\n }\r\n } else {\r\n const response = await this.engine.run('query_engine', [\r\n '--action', 'execute',\r\n '--dml', JSON.stringify(localDML)\r\n ]);\r\n\r\n if (response.status != 200) {\r\n returnFormattedError(response.status, response.message);\r\n }\r\n\r\n arrayResult = response.data;\r\n }\r\n } else {\r\n const response = await this.engine.run('query_engine', [\r\n '--action', 'execute',\r\n '--dml', JSON.stringify(localDML)\r\n ]);\r\n\r\n if (response.status != 200) {\r\n returnFormattedError(response.status, response.message);\r\n }\r\n\r\n arrayResult = response.data;\r\n }\r\n\r\n if (computedFieldsNeeded.length > 0) {\r\n let newDataset: any = ComputedFieldProcessor.computedFields(arrayResult, computedFieldsNeeded);\r\n const result = newDataset.map((obj: any) => {\r\n const newObj = { ...obj };\r\n dependeciesArrray.forEach(key => delete newObj[key]);\r\n return newObj;\r\n });\r\n return result;\r\n }\r\n this.dml = {\r\n ...this.dml,\r\n type: 'select',\r\n columns: ['*'],\r\n distinct: false,\r\n joins: [],\r\n where: [],\r\n orderBy: [],\r\n groupBy: [],\r\n limit: null,\r\n offset: null,\r\n data: null,\r\n aggregation: null\r\n };\r\n return arrayResult;\r\n }\r\n\r\n}\r\n\r\nfunction returnFormattedError(status: number, message: string) {\r\n const RESET = '\\x1b[0m';\r\n const RED = '\\x1b[31m';\r\n const YELLOW = '\\x1b[33m';\r\n const BOLD = '\\x1b[1m';\r\n const CYAN = '\\x1b[36m';\r\n const GRAY = '\\x1b[90m';\r\n const UNDERLINE = '\\x1b[4m';\r\n const MAGENTA = '\\x1b[35m';\r\n\r\n let output = '';\r\n let help = '';\r\n const color = status === 600 ? YELLOW : RED;\r\n\r\n\r\n if (message.includes(\"[help]\")) {\r\n const parts = message.split(\"[help]\");\r\n output += `\\n${RED}${BOLD}${parts[0]}${RESET}`;\r\n help += `\\n${MAGENTA}${BOLD}[help]${RESET} ${GRAY}${parts[1]}${RESET}\\n`;\r\n } else {\r\n output += `\\n${color}${BOLD}${message}${RESET}\\n`;\r\n }\r\n\r\n const err = new Error();\r\n const stackLines = err.stack?.split('\\n') || [];\r\n\r\n // Buscamos la primera línea del stack fuera de node_modules\r\n const relevantStackLine = stackLines.find(line =>\r\n line.includes('.js:') && !line.includes('node_modules')\r\n );\r\n\r\n if (relevantStackLine) {\r\n const match = relevantStackLine.match(/\\((.*):(\\d+):(\\d+)\\)/) ||\r\n relevantStackLine.match(/at (.*):(\\d+):(\\d+)/);\r\n\r\n if (match) {\r\n const [, filePath, lineStr, columnStr] = match;\r\n const lineNum = parseInt(lineStr, 10);\r\n const errorLocation = `${filePath}:${lineStr}:${columnStr}`;\r\n\r\n // Leemos el archivo y sacamos las líneas relevantes\r\n try {\r\n const codeLines = fs.readFileSync(filePath, 'utf-8').split('\\n');\r\n const start = Math.max(0, lineNum - 3);\r\n const end = Math.min(codeLines.length, lineNum + 2);\r\n\r\n output += `\\n${CYAN}${BOLD}[code] ${RESET}${YELLOW} ${UNDERLINE}${errorLocation}${RESET}\\n`;\r\n\r\n for (let i = start; i < end; i++) {\r\n const line = codeLines[i];\r\n const lineLabel = `${i + 1}`.padStart(4, ' ');\r\n const pointer = i + 1 === lineNum ? `${RED}<-${RESET}` : ' ';\r\n output += `${GRAY}${lineLabel}${RESET} ${pointer} ${line}\\n`;\r\n }\r\n } catch (err) {\r\n output += `${YELLOW}⚠️ No se pudo leer el archivo de origen: ${filePath}${RESET}\\n`;\r\n output += `\\n${CYAN}${BOLD}Stack Trace:${RESET}\\n${stackLines.slice(2).join('\\n')}\\n`;\r\n }\r\n }\r\n }\r\n output += help;\r\n console.error(output);\r\n}\r\n\r\nexport default Database;\r\n","import path from \"path\";\r\nimport { FileLogger } from \"@dbcube/core\";\r\nimport { createRequire } from 'module';\r\n\r\nexport class Trigger{\r\n private triggers: any[];\r\n private databaseName: string;\r\n private instance: any;\r\n\r\n constructor(instance:any, databaseName:string, metadata: any[]){\r\n this.triggers = metadata;\r\n this.databaseName = databaseName;\r\n this.instance = instance;\r\n }\r\n\r\n get(type:string){\r\n return this.triggers.find((tr:any)=> tr.type === type);\r\n }\r\n\r\n async execute(type: string, row:any){\r\n const trigger = this.triggers.find((tr:any)=> tr.type === type);\r\n if (trigger) {\r\n const logFilePath = path.resolve(\r\n process.cwd(),\r\n 'dbcube',\r\n 'logs',\r\n 'triggers',\r\n this.databaseName,\r\n `${trigger.table_ref}_${trigger.type}.log`\r\n );\r\n \r\n const interceptor = FileLogger.interceptConsole(logFilePath, {\r\n keepOriginal: false,\r\n useBuffer: true\r\n });\r\n const pathFile = path.resolve(process.cwd(), 'dbcube', 'triggers', `${trigger.database_ref}_${trigger.table_ref}_${trigger.type}.js`);\r\n // Use __filename for CJS, process.cwd() for ESM\r\n const requireUrl = typeof __filename !== 'undefined' ? __filename : process.cwd();\r\n const require = createRequire(requireUrl);\r\n // Clear require cache to ensure fresh load\r\n delete require.cache[require.resolve(pathFile)];\r\n const triggerModule = require(pathFile);\r\n const dataProcess = triggerModule.default || triggerModule;\r\n await dataProcess({db: this.instance, oldData: row, newData: row});\r\n interceptor.restore(); \r\n return interceptor;\r\n }\r\n return null;\r\n }\r\n}","import { Table, Database } from './lib/Database';\r\nimport type { DatabaseRecord, WhereCallback } from './@types/Database';\r\n\r\nexport default Database;\r\nexport { \r\n Table, \r\n Database,\r\n type DatabaseRecord,\r\n type WhereCallback\r\n};"],"mappings":"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","names":["require","err"]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/Database.ts","../src/lib/Trigger.ts","../src/index.ts"],"sourcesContent":["import fs from 'fs';\r\nimport { QueryEngine, ComputedFieldProcessor, TriggerProcessor } from \"@dbcube/core\";\r\nimport { DatabaseRecord, DML, WhereCallback, WhereCondition } from \"../@types/Database\";\r\nimport { Trigger } from './Trigger';\r\n\r\n/**\r\n * Main class to handle MySQL database connections and queries.\r\n * Implements the Singleton pattern to ensure a single instance of the connection pool.\r\n */\r\nexport class Database {\r\n private name: string;\r\n private engine: any;\r\n private computedFields: any[];\r\n private triggers: any[];\r\n\r\n constructor(name: string) {\r\n this.name = name;\r\n const engine = new QueryEngine(name);\r\n this.engine = engine;\r\n this.computedFields = [];\r\n this.triggers = [];\r\n }\r\n\r\n async useComputes(): Promise<Database> {\r\n const newDatabase = new Database(this.name); \r\n const arrayComputedFields = await ComputedFieldProcessor.getComputedFields(this.name);\r\n newDatabase.setComputedFields(arrayComputedFields);\r\n return newDatabase;\r\n }\r\n\r\n async useTriggers(): Promise<Database> {\r\n const newDatabase = new Database(this.name); \r\n const arrayTriggers = await TriggerProcessor.getTriggers(this.name);\r\n newDatabase.setTriggers(arrayTriggers);\r\n return newDatabase;\r\n }\r\n\r\n async connect(): Promise<void> {\r\n const response = await this.engine.run('query_engine', [\r\n '--action', 'connect',\r\n ]);\r\n if (response.status != 200) {\r\n returnFormattedError(response.status, response.message);\r\n }\r\n return response.data;\r\n }\r\n\r\n async disconnect(): Promise<void> {\r\n return this.engine.run('query_engine', [\r\n '--action', 'disconnect',\r\n ]);\r\n }\r\n\r\n /**\r\n * Creates and returns a new instance of `Table` for the specified table.\r\n * This method is used to start building queries for a specific table.\r\n * It provides a fluent interface for common database operations like select, insert, update, and delete.\r\n *\r\n * @param {string} tableName - The name of the table to query.\r\n * @returns {Table} - Returns a new instance of `Table` for the specified table.\r\n *\r\n * @example\r\n * // Select all records from a table\r\n * const users = await db.table('users').get();\r\n * \r\n * // Select records with conditions\r\n * const activeUsers = await db.table('users')\r\n * .where('status', '=', 'active')\r\n * .orderBy('created_at', 'DESC')\r\n * .limit(10)\r\n * .get();\r\n * \r\n * // Insert records\r\n * await db.table('users').insert([\r\n * { name: 'John', email: 'john@example.com', age: 30 }\r\n * ]);\r\n * \r\n * // Update records\r\n * await db.table('users')\r\n * .where('id', '=', 1)\r\n * .update({ status: 'inactive' });\r\n * \r\n * // Delete records\r\n * await db.table('users')\r\n * .where('status', '=', 'deleted')\r\n * .delete();\r\n * \r\n * // Access column management\r\n * const columns = await db.table('users').columns().get();\r\n */\r\n table(tableName: string): Table {\r\n return new Table(this, this.name, tableName, this.engine, this.computedFields, this.triggers);\r\n }\r\n\r\n private setComputedFields(computedFields: any[]){\r\n this.computedFields = computedFields;\r\n }\r\n\r\n private setTriggers(triggers: any[]){\r\n this.triggers = triggers;\r\n }\r\n}\r\n\r\n/**\r\n * Class to build and execute SQL queries for a specific table.\r\n * Supports operations like SELECT, INSERT, UPDATE, DELETE, and more.\r\n */\r\nexport class Table {\r\n private engine: any;\r\n private nextType: 'AND' | 'OR' = 'AND';\r\n private dml: DML;\r\n private computedFields: any[] = [];\r\n private trigger: any;\r\n private triggers: any;\r\n\r\n constructor(instance: any, databaseName: string, tableName: string, engine: any = null, computedFields: any[] = [], triggers: any[] = []) {\r\n this.engine = engine;\r\n this.computedFields = computedFields;\r\n this.triggers = triggers;\r\n this.trigger = new Trigger(instance, databaseName, triggers);\r\n this.nextType = 'AND';\r\n\r\n this.dml = {\r\n type: 'select',\r\n database: databaseName,\r\n table: tableName,\r\n columns: ['*'],\r\n distinct: false,\r\n joins: [],\r\n where: [],\r\n orderBy: [],\r\n groupBy: [],\r\n limit: null,\r\n offset: null,\r\n data: null,\r\n aggregation: null\r\n };\r\n }\r\n\r\n /**\r\n * Specifies the columns to select in a SELECT query.\r\n *\r\n * @param {string[]} fields - Array of column names to select. If empty, selects all columns.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').select(['id', 'name']).get();\r\n * console.log(users); // [{ id: 1, name: 'John' }, { id: 2, name: 'Jane' }]\r\n */\r\n select(fields: string[] = []): Table {\r\n this.dml.type = 'select';\r\n this.dml.columns = fields.length > 0 ? fields : ['*'];\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a WHERE condition to the query.\r\n *\r\n * @param {string} column - The column to filter by.\r\n * @param {string} operator - The comparison operator (e.g., '=', '>', '<', 'IS NULL', 'IS NOT NULL').\r\n * @param {any} value - The value to compare against (optional for IS NULL/IS NOT NULL).\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').where('age', '>', 25).get();\r\n * const nullUsers = await db.table('users').where('email', 'IS NULL').get();\r\n * console.log(users); // [{ id: 1, name: 'John', age: 30 }]\r\n */\r\n where(column: string, operator: 'IS NULL' | 'IS NOT NULL'): Table;\r\n where(column: string, operator: '=' | '!=' | '<>' | '>' | '<' | '>=' | '<=' | 'LIKE' | 'NOT LIKE' | 'IN' | 'NOT IN' | 'BETWEEN' | 'NOT BETWEEN', value: any): Table;\r\n where(column: string, operator: string, value?: any): Table {\r\n this.dml.where.push({\r\n column,\r\n operator,\r\n value,\r\n type: this.nextType,\r\n isGroup: false\r\n });\r\n this.nextType = 'AND';\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds an OR WHERE condition to the query.\r\n *\r\n * @param {string} column - The column to filter by.\r\n * @param {string} operator - The comparison operator (e.g., '=', '>', '<', 'IS NULL', 'IS NOT NULL').\r\n * @param {any} value - The value to compare against (optional for IS NULL/IS NOT NULL).\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').where('age', '>', 25).orWhere('name', '=', 'Jane').get();\r\n * const nullUsers = await db.table('users').where('active', '=', true).orWhere('email', 'IS NULL').get();\r\n * console.log(users); // [{ id: 1, name: 'John', age: 30 }, { id: 2, name: 'Jane', age: 25 }]\r\n */\r\n orWhere(column: string, operator: 'IS NULL' | 'IS NOT NULL'): Table;\r\n orWhere(column: string, operator: '=' | '!=' | '<>' | '>' | '<' | '>=' | '<=' | 'LIKE' | 'NOT LIKE' | 'IN' | 'NOT IN' | 'BETWEEN' | 'NOT BETWEEN', value: any): Table;\r\n orWhere(column: string, operator: string, value?: any): Table {\r\n this.dml.where.push({\r\n column,\r\n operator,\r\n value,\r\n type: 'OR',\r\n isGroup: false\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a grouped WHERE condition to the query.\r\n *\r\n * @param {WhereCallback} callback - A callback function that receives a new Table instance to build the grouped conditions.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').whereGroup(query => {\r\n * query.where('age', '>', 25).orWhere('name', '=', 'Jane');\r\n * }).get();\r\n * console.log(users); // [{ id: 1, name: 'John', age: 30 }, { id: 2, name: 'Jane', age: 25 }]\r\n */\r\n whereGroup(callback: WhereCallback): Table {\r\n const groupQuery = new Table(this.dml.database, this.dml.table, this.engine);\r\n callback(groupQuery);\r\n\r\n this.dml.where.push({\r\n type: this.nextType,\r\n isGroup: true,\r\n conditions: groupQuery.dml.where as WhereCondition[]\r\n });\r\n this.nextType = 'AND';\r\n return this;\r\n }\r\n\r\n or(): Table {\r\n this.nextType = 'OR';\r\n return this;\r\n }\r\n\r\n and(): Table {\r\n this.nextType = 'AND';\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a WHERE BETWEEN condition to the query.\r\n *\r\n * @param {string} column - The column to filter by.\r\n * @param {[any, any]} values - A tuple with two values representing the range.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').whereBetween('age', [20, 30]).get();\r\n * console.log(users); // [{ id: 1, name: 'John', age: 30 }, { id: 2, name: 'Jane', age: 25 }]\r\n */\r\n whereBetween(column: string, values: [any, any]): Table {\r\n const [value1, value2] = values;\r\n if (value1 !== undefined && value2 !== undefined) {\r\n this.dml.where.push({\r\n column,\r\n operator: 'BETWEEN',\r\n value: [value1, value2],\r\n type: this.nextType,\r\n isGroup: false\r\n });\r\n this.nextType = 'AND';\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a WHERE IN condition to the query.\r\n *\r\n * @param {string} column - The column to filter by.\r\n * @param {any[]} values - An array of values to match.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').whereIn('id', [1, 2]).get();\r\n * console.log(users); // [{ id: 1, name: 'John' }, { id: 2, name: 'Jane' }]\r\n */\r\n whereIn(column: string, values: any[]): Table {\r\n if (Array.isArray(values) && values.length > 0) {\r\n this.dml.where.push({\r\n column,\r\n operator: 'IN',\r\n value: values,\r\n type: this.nextType,\r\n isGroup: false\r\n });\r\n this.nextType = 'AND';\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a WHERE IS NULL condition to the query.\r\n *\r\n * @param {string} column - The column to filter by.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').whereNull('email').get();\r\n * console.log(users); // [{ id: 3, name: 'Alice', email: null }]\r\n */\r\n whereNull(column: string): Table {\r\n this.dml.where.push({\r\n column,\r\n operator: 'IS NULL',\r\n type: this.nextType,\r\n isGroup: false\r\n });\r\n this.nextType = 'AND';\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a WHERE IS NOT NULL condition to the query.\r\n *\r\n * @param {string} column - The column to filter by.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').whereNotNull('email').get();\r\n * console.log(users); // [{ id: 1, name: 'John', email: 'john@example.com' }]\r\n */\r\n whereNotNull(column: string): Table {\r\n this.dml.where.push({\r\n column,\r\n operator: 'IS NOT NULL',\r\n type: this.nextType,\r\n isGroup: false\r\n });\r\n this.nextType = 'AND';\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a JOIN clause to the query.\r\n *\r\n * @param {string} table - The table to join.\r\n * @param {string} column1 - The column from the current table.\r\n * @param {string} operator - The comparison operator (e.g., '=', '>', '<').\r\n * @param {string} column2 - The column from the joined table.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').join('orders', 'users.id', '=', 'orders.user_id').get();\r\n * console.log(users); // [{ id: 1, name: 'John', order_id: 101 }]\r\n */\r\n join(table: string, column1: string, operator: string, column2: string): Table {\r\n this.dml.joins.push({\r\n type: 'INNER',\r\n table,\r\n on: {\r\n column1,\r\n operator,\r\n column2\r\n }\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a LEFT JOIN clause to the query.\r\n *\r\n * @param {string} table - The table to join.\r\n * @param {string} column1 - The column from the current table.\r\n * @param {string} operator - The comparison operator (e.g., '=', '>', '<').\r\n * @param {string} column2 - The column from the joined table.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').leftJoin('orders', 'users.id', '=', 'orders.user_id').get();\r\n * console.log(users); // [{ id: 1, name: 'John', order_id: 101 }, { id: 2, name: 'Jane', order_id: null }]\r\n */\r\n leftJoin(table: string, column1: string, operator: string, column2: string): Table {\r\n this.dml.joins.push({\r\n type: 'LEFT',\r\n table,\r\n on: {\r\n column1,\r\n operator,\r\n column2\r\n }\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a RIGHT JOIN clause to the query.\r\n *\r\n * @param {string} table - The table to join.\r\n * @param {string} column1 - The column from the current table.\r\n * @param {string} operator - The comparison operator (e.g., '=', '>', '<').\r\n * @param {string} column2 - The column from the joined table.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').rightJoin('orders', 'users.id', '=', 'orders.user_id').get();\r\n * console.log(users); // [{ id: 1, name: 'John', order_id: 101 }, { id: null, name: null, order_id: 102 }]\r\n */\r\n rightJoin(table: string, column1: string, operator: string, column2: string): Table {\r\n this.dml.joins.push({\r\n type: 'RIGHT',\r\n table,\r\n on: {\r\n column1,\r\n operator,\r\n column2\r\n }\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds an ORDER BY clause to the query.\r\n *\r\n * @param {string} column - The column to order by.\r\n * @param {'ASC' | 'DESC'} direction - The sorting direction ('ASC' or 'DESC').\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').orderBy('name', 'ASC').get();\r\n * console.log(users); // [{ id: 2, name: 'Jane' }, { id: 1, name: 'John' }]\r\n */\r\n orderBy(column: string, direction: 'ASC' | 'DESC' = 'ASC'): Table {\r\n const validDirections: ('ASC' | 'DESC')[] = ['ASC', 'DESC'];\r\n if (validDirections.includes(direction.toUpperCase() as 'ASC' | 'DESC')) {\r\n this.dml.orderBy.push({\r\n column,\r\n direction: direction.toUpperCase() as 'ASC' | 'DESC'\r\n });\r\n } else {\r\n throw new Error(`Invalid direction: ${direction}. Use 'ASC' or 'DESC'.`);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a GROUP BY clause to the query.\r\n *\r\n * @param {string} column - The column to group by.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').groupBy('age').get();\r\n * console.log(users); // [{ age: 30, count: 1 }, { age: 25, count: 1 }]\r\n */\r\n groupBy(column: string): Table {\r\n this.dml.groupBy.push(column);\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a DISTINCT clause to the query.\r\n *\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').distinct().select(['name']).get();\r\n * console.log(users); // [{ name: 'John' }, { name: 'Jane' }]\r\n */\r\n distinct(): Table {\r\n this.dml.distinct = true;\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a COUNT clause to the query.\r\n *\r\n * @param {string} column - The column to count (default is '*').\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const count = await db.table('users').count().first();\r\n * console.log(count); // { count: 2 }\r\n */\r\n async count(column: string = '*'): Promise<Number> {\r\n this.dml.type = 'select';\r\n this.dml.aggregation = {\r\n type: 'COUNT',\r\n column,\r\n alias: 'count'\r\n };\r\n this.dml.columns = [`COUNT(${column}) AS count`];\r\n this.dml.data = null;\r\n this.dml.limit = 1;\r\n try {\r\n const result = await this.getResponse();\r\n const res = result[0] || null;\r\n if(res){\r\n return res.count;\r\n }\r\n return 0;\r\n }\r\n catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Adds a SUM clause to the query.\r\n *\r\n * @param {string} column - The column to sum.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const totalAge = await db.table('users').sum('age').first();\r\n * console.log(totalAge); // { sum: 55 }\r\n */\r\n async sum(column: string): Promise<Number> {\r\n this.dml.type = 'select';\r\n this.dml.aggregation = {\r\n type: 'SUM',\r\n column,\r\n alias: 'sum'\r\n };\r\n this.dml.columns = [`SUM(${column}) AS sum`];\r\n this.dml.data = null;\r\n this.dml.limit = 1;\r\n try {\r\n const result = await this.getResponse();\r\n const res = result[0] || null;\r\n if(res){\r\n return res.count;\r\n }\r\n return 0;\r\n }\r\n catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Adds an AVG clause to the query.\r\n *\r\n * @param {string} column - The column to calculate the average.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const avgAge = await db.table('users').avg('age').first();\r\n * console.log(avgAge); // { avg: 27.5 }\r\n */\r\n async avg(column: string): Promise<Number> {\r\n this.dml.type = 'select';\r\n this.dml.aggregation = {\r\n type: 'AVG',\r\n column,\r\n alias: 'avg'\r\n };\r\n this.dml.columns = [`AVG(${column}) AS avg`];\r\n this.dml.data = null;\r\n this.dml.limit = 1;\r\n try {\r\n const result = await this.getResponse();\r\n const res = result[0] || null;\r\n if(res){\r\n return res.count;\r\n }\r\n return 0;\r\n }\r\n catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Adds a MAX clause to the query.\r\n *\r\n * @param {string} column - The column to find the maximum value.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const maxAge = await db.table('users').max('age').first();\r\n * console.log(maxAge); // { max: 30 }\r\n */\r\n async max(column: string): Promise<Number> {\r\n this.dml.type = 'select';\r\n this.dml.aggregation = {\r\n type: 'MAX',\r\n column,\r\n alias: 'max'\r\n };\r\n this.dml.columns = [`MAX(${column}) AS max`];\r\n this.dml.data = null;\r\n this.dml.limit = 1;\r\n try {\r\n const result = await this.getResponse();\r\n const res = result[0] || null;\r\n if(res){\r\n return res.count;\r\n }\r\n return 0;\r\n }\r\n catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Adds a MIN clause to the query.\r\n *\r\n * @param {string} column - The column to find the minimum value.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const minAge = await db.table('users').min('age').first();\r\n * console.log(minAge); // { min: 25 }\r\n */\r\n async min(column: string): Promise<Number> {\r\n this.dml.type = 'select';\r\n this.dml.aggregation = {\r\n type: 'MIN',\r\n column,\r\n alias: 'min'\r\n };\r\n this.dml.columns = [`MIN(${column}) AS min`];\r\n this.dml.data = null;\r\n this.dml.limit = 1;\r\n try {\r\n const result = await this.getResponse();\r\n const res = result[0] || null;\r\n if(res){\r\n return res.count;\r\n }\r\n return 0;\r\n }\r\n catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Adds a LIMIT clause to the query.\r\n *\r\n * @param {number} number - The maximum number of rows to return.\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').limit(1).get();\r\n * console.log(users); // [{ id: 1, name: 'John', age: 30 }]\r\n */\r\n limit(number: number): Table {\r\n this.dml.limit = number;\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds pagination to the query using LIMIT and OFFSET.\r\n *\r\n * @param {number} number - The page number (starting from 1).\r\n * @returns {Table} - Returns the current instance of Table for method chaining.\r\n *\r\n * @example\r\n * const users = await db.table('users').limit(1).page(2).get();\r\n * console.log(users); // [{ id: 2, name: 'Jane', age: 25 }]\r\n */\r\n page(number: number): Table {\r\n if (this.dml.limit) {\r\n this.dml.offset = (number - 1) * this.dml.limit;\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Executes the query and returns all matching rows.\r\n *\r\n * @returns {Promise<DatabaseRecord[]>} - Returns an array of rows.\r\n *\r\n * @example\r\n * const users = await db.table('users').get();\r\n * console.log(users); // [{ id: 1, name: 'John' }, { id: 2, name: 'Jane' }]\r\n */\r\n async get(): Promise<DatabaseRecord[]> {\r\n try {\r\n this.dml.type = 'select';\r\n this.dml.data = null;\r\n const result = await this.getResponse();\r\n return result;\r\n }\r\n catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Executes the query and returns the first matching row.\r\n *\r\n * @returns {Promise<DatabaseRecord | null>} - Returns the first row or null if no rows match.\r\n *\r\n * @example\r\n * const user = await db.table('users').first();\r\n * console.log(user); // { id: 1, name: 'John' }\r\n */\r\n async first(): Promise<DatabaseRecord | null> {\r\n this.dml.type = 'select';\r\n this.dml.data = null;\r\n this.dml.limit = 1;\r\n try {\r\n const result = await this.getResponse();\r\n return result[0] || null;\r\n }\r\n catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Finds a row by a specific column value.\r\n *\r\n * @param {any} value - The value to search for.\r\n * @param {string} column - The column to search in (default is 'id').\r\n * @returns {Promise<DatabaseRecord | null>} - Returns the first matching row or null if no rows match.\r\n *\r\n * @example\r\n * const user = await db.table('users').find(1);\r\n * console.log(user); // { id: 1, name: 'John' }\r\n */\r\n async find(value: any, column: string = 'id'): Promise<DatabaseRecord | null> {\r\n this.dml.type = 'select';\r\n this.dml.data = null;\r\n this.where(column, '=', value);\r\n this.dml.limit = 1;\r\n try {\r\n const result = await this.getResponse();\r\n return result[0] || null;\r\n }\r\n catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Inserts one or more rows into the table.\r\n *\r\n * @param {DatabaseRecord[]} data - An array of objects representing the rows to insert.\r\n * @returns {Promise<DatabaseRecord[]>} - Returns an array of the inserted rows.\r\n *\r\n * @example\r\n * const newUsers = await db.table('users').insert([\r\n * { name: 'Alice', age: 28 },\r\n * { name: 'Bob', age: 32 }\r\n * ]);\r\n * console.log(newUsers); // [{ id: 3, name: 'Alice', age: 28 }, { id: 4, name: 'Bob', age: 32 }]\r\n */\r\n async insert(data: DatabaseRecord[]): Promise<DatabaseRecord[]> {\r\n if (!Array.isArray(data)) {\r\n throw new Error('The insert method requires an array of objects with key-value pairs.');\r\n }\r\n\r\n if (!data.every(item => typeof item === 'object' && item !== null)) {\r\n throw new Error('The array must contain only valid objects.');\r\n }\r\n\r\n this.dml.type = 'insert';\r\n this.dml.data = data;\r\n\r\n await this.getResponse(this.dml, 'Add');\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * Updates rows in the table based on the defined conditions.\r\n *\r\n * @param {DatabaseRecord} data - An object with key-value pairs representing the fields to update.\r\n * @returns {Promise<any>} - Returns the result of the update operation.\r\n *\r\n * @example\r\n * const result = await db.table('users')\r\n * .where('id', '=', 1)\r\n * .update({ name: 'John Updated', age: 31 });\r\n * console.log(result); // { affectedRows: 1 }\r\n */\r\n async update(data: DatabaseRecord): Promise<any> {\r\n if (typeof data !== 'object' || Array.isArray(data)) {\r\n throw new Error('The update method requires an object with key-value pairs.');\r\n }\r\n\r\n if (this.dml.where.length === 0) {\r\n throw new Error('You must specify at least one WHERE condition to perform an update.');\r\n }\r\n\r\n this.dml.type = 'update';\r\n this.dml.data = data;\r\n\r\n await this.getResponse(this.dml, 'Update');\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * Deletes rows from the table based on the defined conditions.\r\n *\r\n * @returns {Promise<any>} - Returns the result of the delete operation.\r\n *\r\n * @example\r\n * const result = await db.table('users').where('id', '=', 1).delete();\r\n * console.log(result); // { affectedRows: 1 }\r\n */\r\n async delete(): Promise<any> {\r\n if (this.dml.where.length === 0) {\r\n throw new Error('You must specify at least one WHERE condition to perform a delete.');\r\n }\r\n\r\n this.dml.type = 'delete';\r\n\r\n const deleteData = await this.getResponse(this.dml, 'Delete');\r\n return deleteData;\r\n }\r\n\r\n private async getResponse(dml: any = null, type: any = null): Promise<any> {\r\n const localDML = dml ? dml : this.dml;\r\n const computedFieldsNeeded: any[] = [];\r\n let dependeciesArrray: any[] = [];\r\n\r\n if (this.computedFields.length > 0) {\r\n let columns = localDML.columns;\r\n\r\n for (const field of localDML.columns) {\r\n const computedField = this.computedFields.find(cf => cf.column === field);\r\n\r\n if (computedField) {\r\n computedFieldsNeeded.push(computedField);\r\n // Add dependencies to real fields\r\n const dependencies = ComputedFieldProcessor.extractDependencies(computedField.instruction);\r\n dependeciesArrray = [...dependeciesArrray, ...dependencies];\r\n columns = Array.from(new Set([...columns, ...dependencies]));\r\n columns = columns.filter((col: string) => col != field);\r\n }\r\n }\r\n localDML.columns = columns;\r\n }\r\n\r\n let arrayResult = [];\r\n if (type) {\r\n const beffore = this.trigger.get('before' + type);\r\n const after = this.trigger.get('after' + type);\r\n if (this.triggers.length > 0 && (beffore || after)) {\r\n const dataset = localDML.data;\r\n for (let index = 0; index < dataset.length; index++) {\r\n const data = dataset[index];\r\n const newDML = { ...localDML, data: [data] };\r\n if (beffore) {\r\n const interceptor = await this.trigger.execute('before' + type, data);\r\n const response = await this.engine.run('query_engine', [\r\n '--action', 'execute',\r\n '--dml', JSON.stringify(newDML)\r\n ]);\r\n\r\n if (response.status != 200) {\r\n interceptor.discard();\r\n returnFormattedError(response.status, response.message);\r\n }\r\n await interceptor.commit();\r\n arrayResult = response.data;\r\n }\r\n if (after) {\r\n\r\n const response = await this.engine.run('query_engine', [\r\n '--action', 'execute',\r\n '--dml', JSON.stringify(newDML)\r\n ]);\r\n\r\n if (response.status != 200) {\r\n returnFormattedError(response.status, response.message);\r\n }\r\n const interceptor = await this.trigger.execute('after' + type, data);\r\n await interceptor.commit();\r\n }\r\n }\r\n } else {\r\n const response = await this.engine.run('query_engine', [\r\n '--action', 'execute',\r\n '--dml', JSON.stringify(localDML)\r\n ]);\r\n\r\n if (response.status != 200) {\r\n returnFormattedError(response.status, response.message);\r\n }\r\n\r\n arrayResult = response.data;\r\n }\r\n } else {\r\n const response = await this.engine.run('query_engine', [\r\n '--action', 'execute',\r\n '--dml', JSON.stringify(localDML)\r\n ]);\r\n\r\n if (response.status != 200) {\r\n returnFormattedError(response.status, response.message);\r\n }\r\n\r\n arrayResult = response.data;\r\n }\r\n\r\n if (computedFieldsNeeded.length > 0) {\r\n let newDataset: any = ComputedFieldProcessor.computedFields(arrayResult, computedFieldsNeeded);\r\n const result = newDataset.map((obj: any) => {\r\n const newObj = { ...obj };\r\n dependeciesArrray.forEach(key => delete newObj[key]);\r\n return newObj;\r\n });\r\n return result;\r\n }\r\n this.dml = {\r\n ...this.dml,\r\n type: 'select',\r\n columns: ['*'],\r\n distinct: false,\r\n joins: [],\r\n where: [],\r\n orderBy: [],\r\n groupBy: [],\r\n limit: null,\r\n offset: null,\r\n data: null,\r\n aggregation: null\r\n };\r\n return arrayResult;\r\n }\r\n\r\n}\r\n\r\nfunction returnFormattedError(status: number, message: string) {\r\n const RESET = '\\x1b[0m';\r\n const RED = '\\x1b[31m';\r\n const YELLOW = '\\x1b[33m';\r\n const BOLD = '\\x1b[1m';\r\n const CYAN = '\\x1b[36m';\r\n const GRAY = '\\x1b[90m';\r\n const UNDERLINE = '\\x1b[4m';\r\n const MAGENTA = '\\x1b[35m';\r\n\r\n let output = '';\r\n let help = '';\r\n const color = status === 600 ? YELLOW : RED;\r\n\r\n\r\n if (message.includes(\"[help]\")) {\r\n const parts = message.split(\"[help]\");\r\n output += `\\n${RED}${BOLD}${parts[0]}${RESET}`;\r\n help += `\\n${MAGENTA}${BOLD}[help]${RESET} ${GRAY}${parts[1]}${RESET}\\n`;\r\n } else {\r\n output += `\\n${color}${BOLD}${message}${RESET}\\n`;\r\n }\r\n\r\n const err = new Error();\r\n const stackLines = err.stack?.split('\\n') || [];\r\n\r\n // Buscamos la primera línea del stack fuera de node_modules\r\n const relevantStackLine = stackLines.find(line =>\r\n line.includes('.js:') && !line.includes('node_modules')\r\n );\r\n\r\n if (relevantStackLine) {\r\n const match = relevantStackLine.match(/\\((.*):(\\d+):(\\d+)\\)/) ||\r\n relevantStackLine.match(/at (.*):(\\d+):(\\d+)/);\r\n\r\n if (match) {\r\n const [, filePath, lineStr, columnStr] = match;\r\n const lineNum = parseInt(lineStr, 10);\r\n const errorLocation = `${filePath}:${lineStr}:${columnStr}`;\r\n\r\n // Leemos el archivo y sacamos las líneas relevantes\r\n try {\r\n const codeLines = fs.readFileSync(filePath, 'utf-8').split('\\n');\r\n const start = Math.max(0, lineNum - 3);\r\n const end = Math.min(codeLines.length, lineNum + 2);\r\n\r\n output += `\\n${CYAN}${BOLD}[code] ${RESET}${YELLOW} ${UNDERLINE}${errorLocation}${RESET}\\n`;\r\n\r\n for (let i = start; i < end; i++) {\r\n const line = codeLines[i];\r\n const lineLabel = `${i + 1}`.padStart(4, ' ');\r\n const pointer = i + 1 === lineNum ? `${RED}<-${RESET}` : ' ';\r\n output += `${GRAY}${lineLabel}${RESET} ${pointer} ${line}\\n`;\r\n }\r\n } catch (err) {\r\n output += `${YELLOW}⚠️ No se pudo leer el archivo de origen: ${filePath}${RESET}\\n`;\r\n output += `\\n${CYAN}${BOLD}Stack Trace:${RESET}\\n${stackLines.slice(2).join('\\n')}\\n`;\r\n }\r\n }\r\n }\r\n output += help;\r\n console.error(output);\r\n}\r\n\r\nexport default Database;\r\n","import path from \"path\";\r\nimport { FileLogger } from \"@dbcube/core\";\r\nimport { createRequire } from 'module';\r\n\r\nexport class Trigger{\r\n private triggers: any[];\r\n private databaseName: string;\r\n private instance: any;\r\n\r\n constructor(instance:any, databaseName:string, metadata: any[]){\r\n this.triggers = metadata;\r\n this.databaseName = databaseName;\r\n this.instance = instance;\r\n }\r\n\r\n get(type:string){\r\n return this.triggers.find((tr:any)=> tr.type === type);\r\n }\r\n\r\n async execute(type: string, row:any){\r\n const trigger = this.triggers.find((tr:any)=> tr.type === type);\r\n if (trigger) {\r\n const logFilePath = path.resolve(\r\n process.cwd(),\r\n 'dbcube',\r\n 'logs',\r\n 'triggers',\r\n this.databaseName,\r\n `${trigger.table_ref}_${trigger.type}.log`\r\n );\r\n \r\n const interceptor = FileLogger.interceptConsole(logFilePath, {\r\n keepOriginal: false,\r\n useBuffer: true\r\n });\r\n const pathFile = path.resolve(process.cwd(), 'dbcube', 'triggers', `${trigger.database_ref}_${trigger.table_ref}_${trigger.type}.js`);\r\n // Use __filename for CJS, process.cwd() for ESM\r\n const requireUrl = typeof __filename !== 'undefined' ? __filename : process.cwd();\r\n const require = createRequire(requireUrl);\r\n // Clear require cache to ensure fresh load\r\n delete require.cache[require.resolve(pathFile)];\r\n const triggerModule = require(pathFile);\r\n const dataProcess = triggerModule.default || triggerModule;\r\n await dataProcess({db: this.instance, oldData: row, newData: row});\r\n interceptor.restore(); \r\n return interceptor;\r\n }\r\n return null;\r\n }\r\n}","import { Table, Database } from './lib/Database';\r\nimport type { DatabaseRecord, WhereCallback } from './@types/Database';\r\n\r\nexport default Database;\r\nexport { \r\n Table, \r\n Database,\r\n type DatabaseRecord,\r\n type WhereCallback\r\n};"],"mappings":"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","names":["require","err"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dbcube/query-builder",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.26",
|
|
4
4
|
"description": "The DBCube Query Builder is a lightweight, flexible, and fluent library for building queries across multiple database engines, including MySQL, PostgreSQL, SQLite, and MongoDB, using JavaScript/Node.js. \nIts agnostic design allows you to generate data manipulation (DML) and data definition (DDL) operations with a clean, chainable syntax—without sacrificing power or expressiveness.\nIt’s designed to work seamlessly in both SQL and NoSQL environments, providing a consistent abstraction layer across different storage technologies while still leveraging the native capabilities of each engine.",
|
|
5
5
|
"main": "dist/index.cjs",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -54,15 +54,15 @@
|
|
|
54
54
|
"access": "public"
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
|
-
"@dbcube/core": "^3.0.
|
|
57
|
+
"@dbcube/core": "^3.0.28"
|
|
58
58
|
},
|
|
59
59
|
"repository": {
|
|
60
60
|
"type": "git",
|
|
61
61
|
"url": "https://github.com/Dbcube/query-builder"
|
|
62
62
|
},
|
|
63
63
|
"devDependencies": {
|
|
64
|
-
"@types/node": "^24.
|
|
65
|
-
"rollup": "^4.52.
|
|
64
|
+
"@types/node": "^24.8.1",
|
|
65
|
+
"rollup": "^4.52.5",
|
|
66
66
|
"tsup": "^8.5.0",
|
|
67
67
|
"typescript": "^5.9.3"
|
|
68
68
|
}
|