@m2k-5f/pgtx 2.6.0 → 2.6.2
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 +214 -480
- package/dist/batch.d.ts +3 -2
- package/dist/batch.d.ts.map +1 -1
- package/dist/batch.js +9 -9
- package/dist/clauses/abstract.clause.d.ts.map +1 -1
- package/dist/connection.d.ts +42 -175
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +205 -290
- package/dist/error.d.ts +5 -0
- package/dist/error.d.ts.map +1 -1
- package/dist/error.js +5 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/pool.d.ts +35 -192
- package/dist/pool.d.ts.map +1 -1
- package/dist/pool.js +70 -202
- package/dist/protocol/connection-response-reader.d.ts +3 -4
- package/dist/protocol/connection-response-reader.d.ts.map +1 -1
- package/dist/protocol/connection-response-reader.js +4 -2
- package/dist/protocol/socket-authorization.d.ts +1 -10
- package/dist/protocol/socket-authorization.d.ts.map +1 -1
- package/dist/protocol/socket-authorization.js +1 -4
- package/dist/protocol/socket-connector.d.ts +5 -5
- package/dist/protocol/socket-connector.d.ts.map +1 -1
- package/dist/protocol/socket-connector.js +24 -17
- package/dist/query.d.ts +17 -26
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +24 -27
- package/dist/transaction.d.ts +11 -4
- package/dist/transaction.d.ts.map +1 -1
- package/dist/transaction.js +24 -11
- package/dist/types.d.ts +59 -11
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/query.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAa,SAAS,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACtF,OAAO,EAAmB,aAAa,EAAE,MAAM,SAAS,CAAC;AAGzD,8BAAsB,KAAK;IAIZ,SAAS,EAAE,aAAa;IACxB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE;IALlC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,CAAA;gBAGtB,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EAC9B,OAAO,EAAE,MAAM;IAQnB,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAE3C,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAEtC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;CACtC;AAGD,qBAAa,YAAY,CAAC,CAAC,SAAS,GAAG,CAAE,SAAQ,KAAK;IAUvC,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI;IATvC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,EAAE,aAAa,CAAC,CAAA;IACzC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,KAAK,CAAU;gBAGnB,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EAChB,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI,EAC1C,OAAO,EAAE,MAAM;IAWnB,IAAI,CAAC,KAAK,EAAE,CAAC;IAKb,MAAM,CAAC,KAAK,EAAE,aAAa;IAM3B,OAAO;CAIV;AAGD,qBAAa,YAAa,SAAQ,KAAK;IAQxB,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI;IAPvC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;IAC1C,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,OAAO,CAAiC;gBAE5C,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EAChB,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI,EAC1C,OAAO,EAAE,MAAM;IASnB,MAAM,CAAC,KAAK,EAAE,aAAa;IAM3B,OAAO;IAKP,IAAI,IAAI,IAAI;CACf;AAGD,qBAAa,WAAW,CAAC,CAAC,CAAE,SAAQ,KAAK;IAK1B,UAAU,EAAE,+BAA+B,CAAC,CAAC,CAAC;IAC9C,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI;gBAJ1C,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EAChB,UAAU,EAAE,+BAA+B,CAAC,CAAC,CAAC,EAC9C,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI,EAC1C,OAAO,EAAE,MAAM;IAMnB,IAAI,CAAC,KAAK,EAAE,CAAC;IAOb,MAAM,CAAC,KAAK,EAAE,aAAa;IAM3B,OAAO;CAMV;AAED,MAAM,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,YAAY,CAAA"}
|
package/dist/query.js
CHANGED
|
@@ -1,26 +1,18 @@
|
|
|
1
1
|
import { Future } from "fluent-future";
|
|
2
2
|
import { ErrQueryTimeout } from "./error";
|
|
3
|
-
export const QueryState = {
|
|
4
|
-
Parsing: 0,
|
|
5
|
-
Executing: 1,
|
|
6
|
-
Completed: 2,
|
|
7
|
-
Failed: 3
|
|
8
|
-
};
|
|
9
3
|
export class Query {
|
|
10
|
-
constructor(statement) {
|
|
4
|
+
constructor(statement, text, args, timeout) {
|
|
11
5
|
this.statement = statement;
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
this.text = text;
|
|
7
|
+
this.args = args;
|
|
14
8
|
this._timer = setTimeout(() => {
|
|
15
9
|
this.reject(ErrQueryTimeout);
|
|
16
10
|
}, timeout);
|
|
17
11
|
}
|
|
18
12
|
}
|
|
19
|
-
export class
|
|
20
|
-
constructor(statement, text, args, columns) {
|
|
21
|
-
super(statement);
|
|
22
|
-
this.text = text;
|
|
23
|
-
this.args = args;
|
|
13
|
+
export class CollectQuery extends Query {
|
|
14
|
+
constructor(statement, text, args, columns, timeout) {
|
|
15
|
+
super(statement, text, args, timeout);
|
|
24
16
|
this.columns = columns;
|
|
25
17
|
this._rows = [];
|
|
26
18
|
const { future, reject, resolve } = Future.withResolvers();
|
|
@@ -40,34 +32,36 @@ export class SimpleQuery extends Query {
|
|
|
40
32
|
this._resolve(this._rows);
|
|
41
33
|
}
|
|
42
34
|
}
|
|
43
|
-
export class
|
|
44
|
-
constructor(statement, text) {
|
|
45
|
-
super(statement);
|
|
46
|
-
this.
|
|
35
|
+
export class ExecuteQuery extends Query {
|
|
36
|
+
constructor(statement, text, args, columns, timeout) {
|
|
37
|
+
super(statement, text, args, timeout);
|
|
38
|
+
this.columns = columns;
|
|
47
39
|
const { future, reject, resolve } = Future.withResolvers();
|
|
48
40
|
this.future = future;
|
|
49
|
-
this._resolve = resolve;
|
|
50
41
|
this._reject = reject;
|
|
42
|
+
this._resolve = resolve;
|
|
51
43
|
}
|
|
52
44
|
reject(cause) {
|
|
53
45
|
clearTimeout(this._timer);
|
|
54
46
|
this._reject(cause);
|
|
55
47
|
}
|
|
56
|
-
resolve(
|
|
48
|
+
resolve() {
|
|
57
49
|
clearTimeout(this._timer);
|
|
58
|
-
this._resolve(
|
|
50
|
+
this._resolve();
|
|
59
51
|
}
|
|
52
|
+
push() { }
|
|
60
53
|
}
|
|
61
54
|
export class StreamQuery extends Query {
|
|
62
|
-
constructor(statement, text, args, controller, columns) {
|
|
63
|
-
super(statement);
|
|
64
|
-
this.text = text;
|
|
65
|
-
this.args = args;
|
|
55
|
+
constructor(statement, text, args, controller, columns, timeout) {
|
|
56
|
+
super(statement, text, args, timeout);
|
|
66
57
|
this.controller = controller;
|
|
67
58
|
this.columns = columns;
|
|
68
59
|
}
|
|
69
60
|
push(value) {
|
|
70
|
-
|
|
61
|
+
try {
|
|
62
|
+
this.controller.enqueue(value);
|
|
63
|
+
}
|
|
64
|
+
catch { }
|
|
71
65
|
}
|
|
72
66
|
reject(cause) {
|
|
73
67
|
clearTimeout(this._timer);
|
|
@@ -75,6 +69,9 @@ export class StreamQuery extends Query {
|
|
|
75
69
|
}
|
|
76
70
|
resolve() {
|
|
77
71
|
clearTimeout(this._timer);
|
|
78
|
-
|
|
72
|
+
try {
|
|
73
|
+
this.controller.close();
|
|
74
|
+
}
|
|
75
|
+
catch { }
|
|
79
76
|
}
|
|
80
77
|
}
|
package/dist/transaction.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Future } from "fluent-future";
|
|
2
2
|
import { Connection } from "./connection";
|
|
3
3
|
import { PostgresError } from "./error";
|
|
4
|
+
import { Row } from "./types";
|
|
4
5
|
/**
|
|
5
6
|
* Represents an active SQL transaction.
|
|
6
7
|
* All queries are executed on a single dedicated connection.
|
|
@@ -13,19 +14,25 @@ export declare class Transaction {
|
|
|
13
14
|
* Returns true if the transaction is still open (not committed or rolled back).
|
|
14
15
|
*/
|
|
15
16
|
get isActive(): boolean;
|
|
16
|
-
private checkActive;
|
|
17
17
|
/**
|
|
18
18
|
* Commits the current transaction.
|
|
19
19
|
*/
|
|
20
|
-
commit(): Future<
|
|
20
|
+
commit(): Future<void, PostgresError>;
|
|
21
21
|
/**
|
|
22
22
|
* Rolls back the current transaction.
|
|
23
23
|
*/
|
|
24
|
-
rollback(): Future<
|
|
24
|
+
rollback(): Future<void, PostgresError>;
|
|
25
25
|
/**
|
|
26
26
|
* Executes a query within the current transaction.
|
|
27
27
|
*/
|
|
28
|
-
query<T extends
|
|
28
|
+
query<T extends Row>(strings: TemplateStringsArray, ...values: any[]): Future<T[], PostgresError>;
|
|
29
|
+
/**
|
|
30
|
+
* Like {@link query}, but for statements that don't return rows (INSERT/UPDATE/DDL/etc).
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* await tx.execute`UPDATE users SET name = ${name} WHERE id = ${id}`
|
|
34
|
+
*/
|
|
35
|
+
execute(strings: TemplateStringsArray, ...params: any[]): Future<void, PostgresError>;
|
|
29
36
|
/**
|
|
30
37
|
* Creates a sub-transaction using PostgreSQL SAVEPOINT.
|
|
31
38
|
* If the callback throws, only the actions within this savepoint are rolled back.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,MAAM,eAAe,CAAA;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,MAAM,eAAe,CAAA;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAwB,aAAa,EAAE,MAAM,SAAS,CAAA;AAC7D,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAA;AAE7B;;;GAGG;AACH,qBAAa,WAAW;IAIhB,QAAQ,CAAC,IAAI,EAAE,UAAU;IAH7B,OAAO,CAAC,UAAU,CAAiB;gBAGtB,IAAI,EAAE,UAAU;IAG7B;;OAEG;IACH,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED;;OAEG;IACI,MAAM;IAQb;;OAEG;IACI,QAAQ;IAQf;;OAEG;IACI,KAAK,CAAC,CAAC,SAAS,GAAG,EAAE,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE;IAM3E;;;;;OAKG;IACI,OAAO,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE;IAM9D;;;;;;;;;OASG;IACI,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC;CAW9E"}
|
package/dist/transaction.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Begin, Future } from "fluent-future";
|
|
2
2
|
import { IdentifierClause } from "./clauses";
|
|
3
|
+
import { ErrTransactionClosed } from "./error";
|
|
3
4
|
/**
|
|
4
5
|
* Represents an active SQL transaction.
|
|
5
6
|
* All queries are executed on a single dedicated connection.
|
|
@@ -15,34 +16,45 @@ export class Transaction {
|
|
|
15
16
|
get isActive() {
|
|
16
17
|
return !this.isFinished;
|
|
17
18
|
}
|
|
18
|
-
checkActive() {
|
|
19
|
-
if (this.isFinished) {
|
|
20
|
-
throw new Error("Transaction is finished");
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
19
|
/**
|
|
24
20
|
* Commits the current transaction.
|
|
25
21
|
*/
|
|
26
22
|
commit() {
|
|
27
|
-
this.
|
|
23
|
+
if (this.isFinished)
|
|
24
|
+
return Future.reject(ErrTransactionClosed);
|
|
28
25
|
return this.conn.query `COMMIT`
|
|
29
|
-
.tap(() => this.isFinished = true)
|
|
26
|
+
.tap(() => this.isFinished = true)
|
|
27
|
+
.map(() => { });
|
|
30
28
|
}
|
|
31
29
|
/**
|
|
32
30
|
* Rolls back the current transaction.
|
|
33
31
|
*/
|
|
34
32
|
rollback() {
|
|
35
|
-
this.
|
|
33
|
+
if (this.isFinished)
|
|
34
|
+
return Future.reject(ErrTransactionClosed);
|
|
36
35
|
return this.conn.query `ROLLBACK`
|
|
37
|
-
.tap(() => this.isFinished = true)
|
|
36
|
+
.tap(() => this.isFinished = true)
|
|
37
|
+
.map(() => { });
|
|
38
38
|
}
|
|
39
39
|
/**
|
|
40
40
|
* Executes a query within the current transaction.
|
|
41
41
|
*/
|
|
42
42
|
query(strings, ...values) {
|
|
43
|
-
this.
|
|
43
|
+
if (this.isFinished)
|
|
44
|
+
return Future.reject(ErrTransactionClosed);
|
|
44
45
|
return this.conn.query(strings, ...values);
|
|
45
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Like {@link query}, but for statements that don't return rows (INSERT/UPDATE/DDL/etc).
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* await tx.execute`UPDATE users SET name = ${name} WHERE id = ${id}`
|
|
52
|
+
*/
|
|
53
|
+
execute(strings, ...params) {
|
|
54
|
+
if (this.isFinished)
|
|
55
|
+
return Future.reject(ErrTransactionClosed);
|
|
56
|
+
return this.conn.execute(strings, ...params);
|
|
57
|
+
}
|
|
46
58
|
/**
|
|
47
59
|
* Creates a sub-transaction using PostgreSQL SAVEPOINT.
|
|
48
60
|
* If the callback throws, only the actions within this savepoint are rolled back.
|
|
@@ -54,7 +66,8 @@ export class Transaction {
|
|
|
54
66
|
* });
|
|
55
67
|
*/
|
|
56
68
|
savepoint(name, callback) {
|
|
57
|
-
this.
|
|
69
|
+
if (this.isFinished)
|
|
70
|
+
return Future.reject(ErrTransactionClosed);
|
|
58
71
|
return Begin()
|
|
59
72
|
.andThen(() => this.conn.query `SAVEPOINT ${IdentifierClause.create(name)}`)
|
|
60
73
|
.andThen(() => Future.of(callback(this))
|
package/dist/types.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import { Future } from "fluent-future";
|
|
2
|
+
import { Connection } from "./connection";
|
|
3
|
+
import { PostgresError } from "./error";
|
|
1
4
|
import { DataTypeOid } from "./protocol/constants";
|
|
2
|
-
export type
|
|
3
|
-
|
|
4
|
-
name: string;
|
|
5
|
-
execute: (...args: Tparams) => Promise<TResult[]>;
|
|
5
|
+
export type Branded<T, Brand> = T & {
|
|
6
|
+
__brand: Brand;
|
|
6
7
|
};
|
|
8
|
+
export type ValueOF<T extends Record<string, unknown>> = T[keyof T];
|
|
7
9
|
export type CompiledSqlQuery = {
|
|
8
10
|
text: string;
|
|
9
11
|
args: (string | null)[];
|
|
@@ -12,16 +14,62 @@ export type ClauseStrategyParams = {
|
|
|
12
14
|
text: string;
|
|
13
15
|
args: any[];
|
|
14
16
|
};
|
|
15
|
-
export type CompileSQLParams = {
|
|
16
|
-
templates: TemplateStringsArray;
|
|
17
|
-
args: any[];
|
|
18
|
-
};
|
|
19
17
|
export type ColumnDescription = {
|
|
20
18
|
name: string;
|
|
21
19
|
typeOID: DataTypeOid;
|
|
22
20
|
};
|
|
23
|
-
export type
|
|
24
|
-
|
|
21
|
+
export type AuthorizationParams = {
|
|
22
|
+
host: string;
|
|
23
|
+
port: number;
|
|
24
|
+
user: string;
|
|
25
|
+
database: string;
|
|
26
|
+
password?: string;
|
|
25
27
|
};
|
|
26
|
-
|
|
28
|
+
type LogLevel = "none" | "error" | "notice" | "query";
|
|
29
|
+
export type ConnectionPartialConfig = {
|
|
30
|
+
user: string;
|
|
31
|
+
password?: string;
|
|
32
|
+
host: string;
|
|
33
|
+
port: number;
|
|
34
|
+
database: string;
|
|
35
|
+
logLevel?: LogLevel;
|
|
36
|
+
int8toBigint?: boolean;
|
|
37
|
+
queryTimeout?: number;
|
|
38
|
+
syncShedule?: "beforeMicrotask" | "afterMicrotask" | "Immediate";
|
|
39
|
+
};
|
|
40
|
+
export type ConnectionConfig = {
|
|
41
|
+
user: string;
|
|
42
|
+
password?: string;
|
|
43
|
+
host: string;
|
|
44
|
+
port: number;
|
|
45
|
+
database: string;
|
|
46
|
+
logLevel: LogLevel;
|
|
47
|
+
int8toBigint: boolean;
|
|
48
|
+
queryTimeout: number;
|
|
49
|
+
syncShedule: "beforeMicrotask" | "afterMicrotask" | "Immediate";
|
|
50
|
+
};
|
|
51
|
+
export type StatementName = Branded<string, 'StatementName'>;
|
|
52
|
+
export type QueryText = Branded<string, 'QueryText'>;
|
|
53
|
+
export type ChannelName = Branded<string, "ChannelName">;
|
|
54
|
+
export type QueryMeta = {
|
|
55
|
+
statement: StatementName;
|
|
56
|
+
columns: ColumnDescription[];
|
|
57
|
+
};
|
|
58
|
+
export type PoolPartialConfig = ConnectionPartialConfig & {
|
|
59
|
+
max?: number;
|
|
60
|
+
};
|
|
61
|
+
export type PoolConfig = ConnectionPartialConfig & {
|
|
62
|
+
max: number;
|
|
63
|
+
};
|
|
64
|
+
export type Waiter = {
|
|
65
|
+
resolve: (conn: Connection) => void;
|
|
66
|
+
reject: (err: PostgresError) => void;
|
|
67
|
+
};
|
|
68
|
+
export type Row = Record<string, any>;
|
|
69
|
+
export type Resolvers<T extends Future<any>> = {
|
|
70
|
+
future: T;
|
|
71
|
+
resolve: (value: T extends Future<infer I> ? I : never) => void;
|
|
72
|
+
reject: (cause: T extends Future<any, infer E> ? E : never) => void;
|
|
73
|
+
};
|
|
74
|
+
export {};
|
|
27
75
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|