@kurdel/db 0.1.0-beta.2 → 0.1.0-beta.4
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/README.md +25 -3
- package/lib/database-driver.d.ts +2 -2
- package/lib/database-factory.d.ts +5 -3
- package/lib/database-factory.js +3 -0
- package/lib/database-factory.js.map +1 -1
- package/lib/db-connector.d.ts +2 -2
- package/lib/db-connector.js.map +1 -1
- package/lib/index.d.ts +3 -1
- package/lib/index.js +3 -1
- package/lib/index.js.map +1 -1
- package/lib/interfaces.d.ts +18 -10
- package/lib/interfaces.js +1 -1
- package/lib/interfaces.js.map +1 -1
- package/lib/postgres-db.d.ts +17 -0
- package/lib/postgres-db.js +61 -0
- package/lib/postgres-db.js.map +1 -0
- package/lib/postgres-driver.d.ts +14 -0
- package/lib/postgres-driver.js +24 -0
- package/lib/postgres-driver.js.map +1 -0
- package/lib/query-builder.d.ts +2 -2
- package/lib/sqlite-db.d.ts +4 -3
- package/lib/sqlite-db.js +1 -0
- package/lib/sqlite-db.js.map +1 -1
- package/lib/sqlite-driver.d.ts +4 -4
- package/lib/sqlite-driver.js.map +1 -1
- package/package.json +6 -3
package/README.md
CHANGED
|
@@ -1,11 +1,33 @@
|
|
|
1
1
|
# @kurdel/db
|
|
2
2
|
|
|
3
|
+
Kurdel's database contract and built-in SQLite and PostgreSQL adapters.
|
|
4
|
+
|
|
5
|
+
Create either driver through the same factory:
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
const sqlite = DatabaseFactory.createDriver({
|
|
9
|
+
type: 'sqlite',
|
|
10
|
+
filename: './app.db',
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
const postgres = DatabaseFactory.createDriver({
|
|
14
|
+
type: 'postgres',
|
|
15
|
+
connectionString: process.env.DATABASE_URL,
|
|
16
|
+
ssl: true,
|
|
17
|
+
});
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Portable application queries use `?` placeholders. The PostgreSQL adapter
|
|
21
|
+
converts them to positional parameters before execution. `get`, `all`, `run`,
|
|
22
|
+
transactions, and connection shutdown have the same contract for both
|
|
23
|
+
adapters.
|
|
24
|
+
|
|
3
25
|
Database contracts, SQLite connectivity, and query-building utilities for
|
|
4
26
|
Kurdel applications.
|
|
5
27
|
|
|
6
28
|
## Transactions
|
|
7
29
|
|
|
8
|
-
Use `
|
|
30
|
+
Use `Database.transaction` to execute related operations atomically:
|
|
9
31
|
|
|
10
32
|
```ts
|
|
11
33
|
const user = await db.transaction(async transaction => {
|
|
@@ -22,12 +44,12 @@ const user = await db.transaction(async transaction => {
|
|
|
22
44
|
```
|
|
23
45
|
|
|
24
46
|
The callback result is returned after commit. Throwing or rejecting rolls back
|
|
25
|
-
every operation performed through the supplied `
|
|
47
|
+
every operation performed through the supplied `DatabaseSession`.
|
|
26
48
|
|
|
27
49
|
Always use the callback's `transaction` argument inside the callback. Calling
|
|
28
50
|
the outer `db` object would schedule work outside the transaction and may wait
|
|
29
51
|
for the callback to finish. Nested transactions are intentionally not exposed
|
|
30
|
-
by `
|
|
52
|
+
by `DatabaseSession`.
|
|
31
53
|
|
|
32
54
|
The SQLite implementation serializes the complete callback with respect to
|
|
33
55
|
all other operations on its connection. This prevents another request from
|
package/lib/database-driver.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare abstract class DatabaseDriver<T extends
|
|
1
|
+
import type { DatabaseConfig } from './interfaces.js';
|
|
2
|
+
export declare abstract class DatabaseDriver<T extends DatabaseConfig> {
|
|
3
3
|
protected config: T;
|
|
4
4
|
constructor(config: T);
|
|
5
5
|
abstract connect(): Promise<void>;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { SQLiteConfig } from './sqlite-driver.js';
|
|
2
2
|
import { SQLiteDriver } from './sqlite-driver.js';
|
|
3
|
-
|
|
3
|
+
import type { PostgresConfig } from './postgres-driver.js';
|
|
4
|
+
import { PostgresDriver } from './postgres-driver.js';
|
|
5
|
+
export type DatabaseDriverConfig = SQLiteConfig | PostgresConfig;
|
|
4
6
|
export declare class DatabaseFactory {
|
|
5
|
-
static createDriver(config:
|
|
7
|
+
static createDriver(config: DatabaseDriverConfig): SQLiteDriver | PostgresDriver;
|
|
6
8
|
}
|
package/lib/database-factory.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { SQLiteDriver } from './sqlite-driver.js';
|
|
2
|
+
import { PostgresDriver } from './postgres-driver.js';
|
|
2
3
|
export class DatabaseFactory {
|
|
3
4
|
static createDriver(config) {
|
|
4
5
|
switch (config.type) {
|
|
5
6
|
case 'sqlite':
|
|
6
7
|
return new SQLiteDriver(config);
|
|
8
|
+
case 'postgres':
|
|
9
|
+
return new PostgresDriver(config);
|
|
7
10
|
default:
|
|
8
11
|
throw new Error(`Unsupported database type: ${config.type}`);
|
|
9
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database-factory.js","sourceRoot":"","sources":["../src/database-factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"database-factory.js","sourceRoot":"","sources":["../src/database-factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAItD,MAAM,OAAO,eAAe;IAC1B,MAAM,CAAC,YAAY,CAAC,MAA4B;QAC9C,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,QAAQ;gBACX,OAAO,IAAI,YAAY,CAAC,MAAsB,CAAC,CAAC;YAClD,KAAK,UAAU;gBACb,OAAO,IAAI,cAAc,CAAC,MAAwB,CAAC,CAAC;YACtD;gBACE,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;CACF"}
|
package/lib/db-connector.d.ts
CHANGED
package/lib/db-connector.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-connector.js","sourceRoot":"","sources":["../src/db-connector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,MAAM,OAAO,WAAW;IAGtB;QACE,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;IACrC,CAAC;IAEM,KAAK,CAAC,GAAG;QACd,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"db-connector.js","sourceRoot":"","sources":["../src/db-connector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,MAAM,OAAO,WAAW;IAGtB;QACE,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;IACrC,CAAC;IAEM,KAAK,CAAC,GAAG;QACd,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,QAA8B;QACpD,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACtD,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,MAAM,CAAC,UAAU,CAAC;IAC3B,CAAC;CACF"}
|
package/lib/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { Database, type DatabaseSession, type QueryBuilderContract, type DatabaseConfig, type DatabaseQuery, type DatabaseDialect, } from './interfaces.js';
|
|
2
2
|
export { DatabaseFactory } from './database-factory.js';
|
|
3
|
+
export { PostgresDB, postgresPlaceholders } from './postgres-db.js';
|
|
4
|
+
export { PostgresDriver, type PostgresConfig } from './postgres-driver.js';
|
|
3
5
|
export { DBConnector } from './db-connector.js';
|
|
4
6
|
export { QueryBuilder } from './query-builder.js';
|
package/lib/index.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { Database, } from './interfaces.js';
|
|
2
2
|
export { DatabaseFactory } from './database-factory.js';
|
|
3
|
+
export { PostgresDB, postgresPlaceholders } from './postgres-db.js';
|
|
4
|
+
export { PostgresDriver } from './postgres-driver.js';
|
|
3
5
|
export { DBConnector } from './db-connector.js';
|
|
4
6
|
export { QueryBuilder } from './query-builder.js';
|
|
5
7
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,GAMT,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAuB,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
|
package/lib/interfaces.d.ts
CHANGED
|
@@ -1,35 +1,43 @@
|
|
|
1
|
-
export interface
|
|
1
|
+
export interface DatabaseConfig {
|
|
2
2
|
type: string;
|
|
3
3
|
host?: string;
|
|
4
4
|
filename?: string;
|
|
5
5
|
port?: number;
|
|
6
6
|
user?: string;
|
|
7
7
|
password?: string;
|
|
8
|
+
database?: string;
|
|
9
|
+
connectionString?: string;
|
|
10
|
+
ssl?: boolean | {
|
|
11
|
+
rejectUnauthorized?: boolean;
|
|
12
|
+
ca?: string;
|
|
13
|
+
};
|
|
8
14
|
}
|
|
15
|
+
export type DatabaseDialect = 'sqlite' | 'postgres';
|
|
9
16
|
export type DatabaseQuery = {
|
|
10
17
|
sql: string;
|
|
11
18
|
params: any[];
|
|
12
19
|
};
|
|
13
|
-
export declare const
|
|
14
|
-
export interface
|
|
20
|
+
export declare const Database: unique symbol;
|
|
21
|
+
export interface DatabaseSession {
|
|
15
22
|
get(query: DatabaseQuery): Promise<any>;
|
|
16
23
|
all(query: DatabaseQuery): Promise<any>;
|
|
17
24
|
run(query: DatabaseQuery): Promise<void>;
|
|
18
25
|
}
|
|
19
|
-
export interface
|
|
26
|
+
export interface Database extends DatabaseSession {
|
|
27
|
+
readonly dialect: DatabaseDialect;
|
|
20
28
|
/**
|
|
21
29
|
* Runs work atomically on an isolated database session.
|
|
22
30
|
*
|
|
23
31
|
* Queries inside the callback must use the supplied transaction session.
|
|
24
32
|
* Resolves with the callback result after commit and rolls back on failure.
|
|
25
33
|
*/
|
|
26
|
-
transaction<T>(work: (transaction:
|
|
34
|
+
transaction<T>(work: (transaction: DatabaseSession) => Promise<T>): Promise<T>;
|
|
27
35
|
close(): Promise<void>;
|
|
28
36
|
}
|
|
29
|
-
export interface
|
|
30
|
-
insert(table: string, data: Record<string, any>):
|
|
31
|
-
select(fields: string | string[]):
|
|
32
|
-
from(table: string):
|
|
33
|
-
where(condition: string, params?: any[]):
|
|
37
|
+
export interface QueryBuilderContract {
|
|
38
|
+
insert(table: string, data: Record<string, any>): QueryBuilderContract;
|
|
39
|
+
select(fields: string | string[]): QueryBuilderContract;
|
|
40
|
+
from(table: string): QueryBuilderContract;
|
|
41
|
+
where(condition: string, params?: any[]): QueryBuilderContract;
|
|
34
42
|
build(): DatabaseQuery;
|
|
35
43
|
}
|
package/lib/interfaces.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const
|
|
1
|
+
export const Database = Symbol('Database');
|
|
2
2
|
//# sourceMappingURL=interfaces.js.map
|
package/lib/interfaces.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAsBA,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type PoolConfig } from 'pg';
|
|
2
|
+
import type { DatabaseQuery, Database, DatabaseSession } from './interfaces.js';
|
|
3
|
+
/** Converts portable question-mark parameters into PostgreSQL positional parameters. */
|
|
4
|
+
export declare function postgresPlaceholders(sql: string): string;
|
|
5
|
+
/** PostgreSQL implementation of the common database contract. */
|
|
6
|
+
export declare class PostgresDB implements Database {
|
|
7
|
+
readonly dialect: "postgres";
|
|
8
|
+
private readonly pool;
|
|
9
|
+
constructor(config: PoolConfig);
|
|
10
|
+
connect(): Promise<void>;
|
|
11
|
+
get({ sql, params }: DatabaseQuery): Promise<any>;
|
|
12
|
+
all({ sql, params }: DatabaseQuery): Promise<any[]>;
|
|
13
|
+
run({ sql, params }: DatabaseQuery): Promise<void>;
|
|
14
|
+
transaction<T>(work: (transaction: DatabaseSession) => Promise<T>): Promise<T>;
|
|
15
|
+
close(): Promise<void>;
|
|
16
|
+
private query;
|
|
17
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Pool } from 'pg';
|
|
2
|
+
/** Converts portable question-mark parameters into PostgreSQL positional parameters. */
|
|
3
|
+
export function postgresPlaceholders(sql) {
|
|
4
|
+
let index = 0;
|
|
5
|
+
let quoted = false;
|
|
6
|
+
return [...sql].map((character, position) => {
|
|
7
|
+
if (character === "'" && sql[position - 1] !== '\\')
|
|
8
|
+
quoted = !quoted;
|
|
9
|
+
if (character === '?' && !quoted)
|
|
10
|
+
return `$${++index}`;
|
|
11
|
+
return character;
|
|
12
|
+
}).join('');
|
|
13
|
+
}
|
|
14
|
+
/** PostgreSQL implementation of the common database contract. */
|
|
15
|
+
export class PostgresDB {
|
|
16
|
+
constructor(config) {
|
|
17
|
+
this.dialect = 'postgres';
|
|
18
|
+
this.pool = new Pool(config);
|
|
19
|
+
}
|
|
20
|
+
async connect() {
|
|
21
|
+
const client = await this.pool.connect();
|
|
22
|
+
client.release();
|
|
23
|
+
}
|
|
24
|
+
async get({ sql, params }) {
|
|
25
|
+
return (await this.query(this.pool, sql, params)).rows[0];
|
|
26
|
+
}
|
|
27
|
+
async all({ sql, params }) {
|
|
28
|
+
return (await this.query(this.pool, sql, params)).rows;
|
|
29
|
+
}
|
|
30
|
+
async run({ sql, params }) {
|
|
31
|
+
await this.query(this.pool, sql, params);
|
|
32
|
+
}
|
|
33
|
+
async transaction(work) {
|
|
34
|
+
const client = await this.pool.connect();
|
|
35
|
+
try {
|
|
36
|
+
await client.query('BEGIN');
|
|
37
|
+
const transaction = {
|
|
38
|
+
get: async (query) => (await this.query(client, query.sql, query.params)).rows[0],
|
|
39
|
+
all: async (query) => (await this.query(client, query.sql, query.params)).rows,
|
|
40
|
+
run: async (query) => { await this.query(client, query.sql, query.params); },
|
|
41
|
+
};
|
|
42
|
+
const result = await work(transaction);
|
|
43
|
+
await client.query('COMMIT');
|
|
44
|
+
return result;
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
await client.query('ROLLBACK');
|
|
48
|
+
throw error;
|
|
49
|
+
}
|
|
50
|
+
finally {
|
|
51
|
+
client.release();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
async close() {
|
|
55
|
+
await this.pool.end();
|
|
56
|
+
}
|
|
57
|
+
query(connection, sql, params) {
|
|
58
|
+
return connection.query(postgresPlaceholders(sql), params);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=postgres-db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-db.js","sourceRoot":"","sources":["../src/postgres-db.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { DatabaseDriver } from './database-driver.js';
|
|
2
|
+
import type { DatabaseConfig } from './interfaces.js';
|
|
3
|
+
import { PostgresDB } from './postgres-db.js';
|
|
4
|
+
export interface PostgresConfig extends DatabaseConfig {
|
|
5
|
+
type: 'postgres';
|
|
6
|
+
database?: string;
|
|
7
|
+
connectionString?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare class PostgresDriver extends DatabaseDriver<PostgresConfig> {
|
|
10
|
+
private db?;
|
|
11
|
+
connect(): Promise<void>;
|
|
12
|
+
disconnect(): Promise<void>;
|
|
13
|
+
get connection(): PostgresDB | undefined;
|
|
14
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { DatabaseDriver } from './database-driver.js';
|
|
2
|
+
import { PostgresDB } from './postgres-db.js';
|
|
3
|
+
export class PostgresDriver extends DatabaseDriver {
|
|
4
|
+
async connect() {
|
|
5
|
+
this.db = new PostgresDB({
|
|
6
|
+
connectionString: this.config.connectionString,
|
|
7
|
+
host: this.config.host,
|
|
8
|
+
port: this.config.port,
|
|
9
|
+
user: this.config.user,
|
|
10
|
+
password: this.config.password,
|
|
11
|
+
database: this.config.database,
|
|
12
|
+
ssl: this.config.ssl,
|
|
13
|
+
});
|
|
14
|
+
await this.db.connect();
|
|
15
|
+
}
|
|
16
|
+
async disconnect() {
|
|
17
|
+
await this.db?.close();
|
|
18
|
+
this.db = undefined;
|
|
19
|
+
}
|
|
20
|
+
get connection() {
|
|
21
|
+
return this.db;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=postgres-driver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-driver.js","sourceRoot":"","sources":["../src/postgres-driver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAQ9C,MAAM,OAAO,cAAe,SAAQ,cAA8B;IAGhE,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,EAAE,GAAG,IAAI,UAAU,CAAC;YACvB,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB;YAC9C,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YACtB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YACtB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YACtB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;YAC9B,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;YAC9B,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG;SACrB,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;IACtB,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;CACF"}
|
package/lib/query-builder.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { DatabaseQuery,
|
|
1
|
+
import type { DatabaseQuery, QueryBuilderContract } from './interfaces.js';
|
|
2
2
|
type SelectOptions = {
|
|
3
3
|
fn?: 'MAX' | 'MIN' | 'COUNT';
|
|
4
4
|
as?: string;
|
|
5
5
|
};
|
|
6
|
-
export declare class QueryBuilder implements
|
|
6
|
+
export declare class QueryBuilder implements QueryBuilderContract {
|
|
7
7
|
private sql;
|
|
8
8
|
private params;
|
|
9
9
|
select(fields: string | string[], options?: SelectOptions): QueryBuilder;
|
package/lib/sqlite-db.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import type { DatabaseQuery,
|
|
2
|
-
export declare class SQLiteDB implements
|
|
1
|
+
import type { DatabaseQuery, Database, DatabaseSession } from './interfaces.js';
|
|
2
|
+
export declare class SQLiteDB implements Database {
|
|
3
|
+
readonly dialect: "sqlite";
|
|
3
4
|
private db;
|
|
4
5
|
private queue;
|
|
5
6
|
constructor(path: string);
|
|
6
7
|
get({ sql, params }: DatabaseQuery): Promise<any>;
|
|
7
8
|
all({ sql, params }: DatabaseQuery): Promise<any>;
|
|
8
9
|
run({ sql, params }: DatabaseQuery): Promise<void>;
|
|
9
|
-
transaction<T>(work: (transaction:
|
|
10
|
+
transaction<T>(work: (transaction: DatabaseSession) => Promise<T>): Promise<T>;
|
|
10
11
|
close(): Promise<void>;
|
|
11
12
|
private getRaw;
|
|
12
13
|
private allRaw;
|
package/lib/sqlite-db.js
CHANGED
package/lib/sqlite-db.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-db.js","sourceRoot":"","sources":["../src/sqlite-db.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAG9B,MAAM,OAAO,QAAQ;
|
|
1
|
+
{"version":3,"file":"sqlite-db.js","sourceRoot":"","sources":["../src/sqlite-db.ts"],"names":[],"mappings":"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"}
|
package/lib/sqlite-driver.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { DatabaseDriver } from './database-driver.js';
|
|
2
|
-
import type {
|
|
2
|
+
import type { DatabaseConfig } from './interfaces.js';
|
|
3
3
|
import { SQLiteDB } from './sqlite-db.js';
|
|
4
|
-
export interface
|
|
4
|
+
export interface SQLiteConfig extends DatabaseConfig {
|
|
5
5
|
filename: string;
|
|
6
6
|
}
|
|
7
|
-
export declare class SQLiteDriver extends DatabaseDriver<
|
|
7
|
+
export declare class SQLiteDriver extends DatabaseDriver<SQLiteConfig> {
|
|
8
8
|
private db?;
|
|
9
|
-
constructor(config:
|
|
9
|
+
constructor(config: SQLiteConfig);
|
|
10
10
|
connect(): Promise<void>;
|
|
11
11
|
disconnect(): Promise<void>;
|
|
12
12
|
get connection(): SQLiteDB | undefined;
|
package/lib/sqlite-driver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-driver.js","sourceRoot":"","sources":["../src/sqlite-driver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAM1C,MAAM,OAAO,YAAa,SAAQ,
|
|
1
|
+
{"version":3,"file":"sqlite-driver.js","sourceRoot":"","sources":["../src/sqlite-driver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAM1C,MAAM,OAAO,YAAa,SAAQ,cAA4B;IAG5D,YAAY,MAAoB;QAC9B,KAAK,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,EAAE,GAAG,MAAM,IAAI,OAAO,CAAW,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxD,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC9C,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC;YACrB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACpC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;gBACZ,IAAI,CAAC;oBACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;oBAChB,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;gBACtB,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;YACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kurdel/db",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
4
|
-
"description": "Database abstractions
|
|
3
|
+
"version": "0.1.0-beta.4",
|
|
4
|
+
"description": "Database abstractions with SQLite and PostgreSQL adapters for Kurdel",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
7
7
|
".": "./lib/index.js"
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
"kurdel",
|
|
23
23
|
"database",
|
|
24
24
|
"sqlite",
|
|
25
|
+
"postgresql",
|
|
25
26
|
"framework"
|
|
26
27
|
],
|
|
27
28
|
"author": "Andrii Sorokin",
|
|
@@ -44,6 +45,7 @@
|
|
|
44
45
|
},
|
|
45
46
|
"devDependencies": {
|
|
46
47
|
"@types/node": "^20.9.0",
|
|
48
|
+
"@types/pg": "^8.21.0",
|
|
47
49
|
"rimraf": "^3.0.2",
|
|
48
50
|
"tsc-alias": "^1.8.16"
|
|
49
51
|
},
|
|
@@ -51,6 +53,7 @@
|
|
|
51
53
|
"sqlite3": "^6.0.1"
|
|
52
54
|
},
|
|
53
55
|
"dependencies": {
|
|
54
|
-
"@kurdel/common": "0.1.0-beta.
|
|
56
|
+
"@kurdel/common": "0.1.0-beta.4",
|
|
57
|
+
"pg": "^8.23.0"
|
|
55
58
|
}
|
|
56
59
|
}
|