@m2k-5f/pgtx 2.1.0 → 2.3.0

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.
Files changed (45) hide show
  1. package/README.md +66 -13
  2. package/dist/clauses/abstract.clause.js +1 -5
  3. package/dist/clauses/array.clause.js +3 -7
  4. package/dist/clauses/empty.clause.js +3 -7
  5. package/dist/clauses/exclude.clause.js +2 -6
  6. package/dist/clauses/fragment.clause.js +4 -8
  7. package/dist/clauses/iden.caluse.js +2 -6
  8. package/dist/clauses/index.js +9 -25
  9. package/dist/clauses/insert.clause.js +2 -6
  10. package/dist/clauses/literal.clause.js +2 -6
  11. package/dist/clauses/update.clause.js +2 -6
  12. package/dist/clauses/where.clause.js +2 -6
  13. package/dist/connection.d.ts +56 -10
  14. package/dist/connection.d.ts.map +1 -1
  15. package/dist/connection.js +220 -117
  16. package/dist/error.d.ts +1 -1
  17. package/dist/error.d.ts.map +1 -1
  18. package/dist/error.js +2 -6
  19. package/dist/index.js +24 -37
  20. package/dist/pool.d.ts +20 -6
  21. package/dist/pool.d.ts.map +1 -1
  22. package/dist/pool.js +40 -41
  23. package/dist/protocol/connection-request-writer.js +13 -18
  24. package/dist/protocol/connection-response-reader.d.ts +5 -0
  25. package/dist/protocol/connection-response-reader.d.ts.map +1 -1
  26. package/dist/protocol/connection-response-reader.js +11 -9
  27. package/dist/protocol/constants.d.ts +1 -0
  28. package/dist/protocol/constants.d.ts.map +1 -1
  29. package/dist/protocol/constants.js +6 -8
  30. package/dist/protocol/socket-authorization.d.ts +5 -1
  31. package/dist/protocol/socket-authorization.d.ts.map +1 -1
  32. package/dist/protocol/socket-authorization.js +38 -34
  33. package/dist/protocol/socket-connector.d.ts.map +1 -1
  34. package/dist/protocol/socket-connector.js +4 -7
  35. package/dist/query.js +2 -6
  36. package/dist/queue.js +1 -5
  37. package/dist/security/md5.js +4 -8
  38. package/dist/security/sasl.js +7 -11
  39. package/dist/transaction.d.ts +7 -5
  40. package/dist/transaction.d.ts.map +1 -1
  41. package/dist/transaction.js +18 -26
  42. package/dist/types.js +0 -2
  43. package/dist/utils/template-compiler.js +3 -6
  44. package/dist/utils/value-parser.js +2 -7
  45. package/package.json +5 -2
package/README.md CHANGED
@@ -97,6 +97,25 @@ await pool.begin(async (tx) => {
97
97
 
98
98
  ---
99
99
 
100
+
101
+ ## 🎯 Typed Error Handling
102
+
103
+ Pgtx queries return `Future<T, PostgresError>` from [fluent-future](https://www.npmjs.com/package/fluent-future) instead of raw `Promise<T>`. This gives you:
104
+
105
+ - **Typed errors** — `PostgresError` with `code`, `severity`, `detail`
106
+ - **Declarative recovery** — `.recover()`, `.recoverIf()` instead of try/catch
107
+ - **Chain composition** — `.andThen()`, `.orElse()`, `.tap()`, `.tapErr()`
108
+
109
+ ```typescript
110
+ const users = await pool.query<User>`SELECT * FROM users WHERE id = ${1}`
111
+ .recoverIf(err => err.code === '42P01', []) // undefined_table → []
112
+ .recoverIf(err => err.code === '23505', []) // unique_violation → []
113
+ .tapErr(err => logger.error(err)) // log remaining errors
114
+ ```
115
+
116
+ ---
117
+
118
+
100
119
  ## 📖 Features
101
120
 
102
121
  ### Transactions & Savepoints
@@ -105,14 +124,44 @@ await pool.begin(async (tx) => {
105
124
  await pool.begin(async (tx) => {
106
125
  await tx.query`INSERT INTO orders (user_id) VALUES (${userId})`
107
126
 
108
- // err: Error | null
109
- const err = await tx.savepoint('update_stock', async (stx) => {
127
+ await tx.savepoint('update_stock', async (stx) => {
110
128
  await stx.query`UPDATE stock SET count = count - 1 WHERE product_id = ${productId}`
111
- if (outOfStock) throw new Error() // Only savepoint rolls back
129
+ if (outOfStock) throw new Error('out of stock') // Only savepoint rolls back
112
130
  })
131
+ .tapErr(console.log) // Error: out of stock
113
132
  })
114
133
  ```
115
134
 
135
+
136
+ ### Async Notifications (LISTEN / NOTIFY)
137
+
138
+ Pgtx natively handles PostgreSQL `LISTEN/NOTIFY` protocol messages asynchronously without interrupting multiplexed query pipeline.
139
+
140
+ ```typescript
141
+ // 1. Sending a notification
142
+ await pool.notify('user_events', JSON.stringify({ id: 42, action: 'signup' }))
143
+
144
+ // 2. Receiving notifications (Requires a dedicated connection from the pool)
145
+ const conn = await pool.acquire()
146
+
147
+ const onEvent = (payload: string) => {
148
+ console.log(`Received payload: ${payload}`)
149
+ }
150
+
151
+ // Multiplexes multiple callbacks onto a single LISTEN command seamlessly
152
+ await conn.listen('user_events', onEvent)
153
+ await conn.listen('user_events', (data) => logToFile(data))
154
+
155
+ // Clean up callbacks (Sends UNLISTEN only when the channel has zero callbacks left)
156
+ await conn.unlisten('user_events', onEvent)
157
+
158
+ // Keep the connection active as long as you need notifications!
159
+ // Do NOT release it back to the pool prematurely.
160
+ ```
161
+
162
+ > ⚠️ **Architecture Note:** While `notify` is atomic and can be triggered directly from the `Pool` on any random socket, `listen` and `unlisten` are stateful commands tied to a specific PostgreSQL backend process. Therefore, subscription methods are **strictly available only on explicit `Connection` instances** fetched via `pool.acquire()`.
163
+
164
+
116
165
  ### Bulk Inserts
117
166
 
118
167
  ```typescript
@@ -250,8 +299,11 @@ await pool.query`
250
299
  class Connection {
251
300
  static new(params: ConnectionParams): Promise<Connection>
252
301
 
253
- query<T>(strings: TemplateStringsArray, ...values: any[]): Promise<T[]>
254
- begin<T>(callback: (tx: Transaction) => Promise<T>): Promise<T>
302
+ query<T>(strings: TemplateStringsArray, ...values: any[]): Promise<T[], PostgresError>
303
+ begin<T>(callback: (tx: Transaction) => Promise<T>): Future<T, Error>
304
+ notify(channelName: string, payload?: string): Future<[], PostgresError>
305
+ listen(channelName: string, callback: (payload: string) => void): Future<[], PostgresError>
306
+ unlisten(channelName: string, callback: (payload: string) => void): Future<[], PostgresError>
255
307
 
256
308
  get isAlive(): boolean
257
309
  close(): void
@@ -273,11 +325,12 @@ interface ConnectionParams {
273
325
  class Pool {
274
326
  constructor(config: PoolConfig)
275
327
 
276
- query<T>(strings: TemplateStringsArray, ...values: any[]): Promise<T[]>
277
- begin<T>(callback: (tx: Transaction) => Promise<T>): Promise<T>
278
- acquire(): Promise<Connection>
328
+ query<T>(strings: TemplateStringsArray, ...values: any[]): Future<T[], Error>
329
+ begin<T>(callback: (tx: Transaction) => Promise<T>): Future<T, Error>
330
+ notify(channelName: string, payload?: string): Future<[], PostgresError>
331
+ acquire(): Future<Connection, Error>
279
332
  release(conn: Connection): void
280
- close(): Promise<void>
333
+ close(): void
281
334
 
282
335
  get size(): number
283
336
  get total(): number
@@ -292,10 +345,10 @@ interface PoolConfig extends ConnectionParams {
292
345
 
293
346
  ```typescript
294
347
  class Transaction {
295
- query<T>(strings: TemplateStringsArray, ...values: any[]): Promise<T[]>
296
- commit(): Promise<void>
297
- rollback(): Promise<void>
298
- savepoint<T>(name: string, callback: (tx: Transaction) => Promise<T>): Promise<T>
348
+ query<T>(strings: TemplateStringsArray, ...values: any[]): Future<T[], PostgresError>
349
+ commit(): Future<[], PostgresError>
350
+ rollback(): Future<[], PostgresError>
351
+ savepoint<T>(name: string, callback: (tx: Transaction) => Promise<T>): Future<T, Error>
299
352
 
300
353
  get isActive(): boolean
301
354
  }
@@ -1,6 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Clause = void 0;
4
- class Clause {
1
+ export class Clause {
5
2
  }
6
- exports.Clause = Clause;
@@ -1,8 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ArrayClause = void 0;
4
- const abstract_clause_1 = require("./abstract.clause");
5
- class ArrayClause extends abstract_clause_1.Clause {
1
+ import { Clause } from "./abstract.clause";
2
+ export class ArrayClause extends Clause {
6
3
  constructor(array, separator = ", ") {
7
4
  super();
8
5
  this.array = array;
@@ -20,7 +17,7 @@ class ArrayClause extends abstract_clause_1.Clause {
20
17
  }
21
18
  if (index)
22
19
  params.text.push(this.separator);
23
- if (value instanceof abstract_clause_1.Clause) {
20
+ if (value instanceof Clause) {
24
21
  value.mapIntoQuery(params);
25
22
  }
26
23
  else {
@@ -30,4 +27,3 @@ class ArrayClause extends abstract_clause_1.Clause {
30
27
  });
31
28
  }
32
29
  }
33
- exports.ArrayClause = ArrayClause;
@@ -1,12 +1,8 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.emptyClause = exports.EmptyClause = void 0;
4
- const abstract_clause_1 = require("./abstract.clause");
5
- class EmptyClause extends abstract_clause_1.Clause {
1
+ import { Clause } from "./abstract.clause";
2
+ export class EmptyClause extends Clause {
6
3
  static create() {
7
4
  return new EmptyClause();
8
5
  }
9
6
  mapIntoQuery(params) { }
10
7
  }
11
- exports.EmptyClause = EmptyClause;
12
- exports.emptyClause = EmptyClause.create();
8
+ export const emptyClause = EmptyClause.create();
@@ -1,8 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ExcludeUpdateClause = void 0;
4
- const abstract_clause_1 = require("./abstract.clause");
5
- class ExcludeUpdateClause extends abstract_clause_1.Clause {
1
+ import { Clause } from "./abstract.clause";
2
+ export class ExcludeUpdateClause extends Clause {
6
3
  constructor(fields) {
7
4
  super();
8
5
  this.fields = fields;
@@ -15,4 +12,3 @@ class ExcludeUpdateClause extends abstract_clause_1.Clause {
15
12
  .join(', '));
16
13
  }
17
14
  }
18
- exports.ExcludeUpdateClause = ExcludeUpdateClause;
@@ -1,9 +1,6 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FragmentClause = void 0;
4
- const abstract_clause_1 = require("./abstract.clause");
5
- const template_compiler_1 = require("../utils/template-compiler");
6
- class FragmentClause extends abstract_clause_1.Clause {
1
+ import { Clause, } from "./abstract.clause";
2
+ import { compileSqlTemplate } from "../utils/template-compiler";
3
+ export class FragmentClause extends Clause {
7
4
  constructor(templates, args) {
8
5
  super();
9
6
  this.templates = templates;
@@ -13,7 +10,7 @@ class FragmentClause extends abstract_clause_1.Clause {
13
10
  return new FragmentClause(strings, values);
14
11
  }
15
12
  mapIntoQuery(params) {
16
- const compiled = (0, template_compiler_1.compileSqlTemplate)({
13
+ const compiled = compileSqlTemplate({
17
14
  args: this.args,
18
15
  templates: this.templates
19
16
  }, params.args.length);
@@ -21,4 +18,3 @@ class FragmentClause extends abstract_clause_1.Clause {
21
18
  params.text.push(compiled.text);
22
19
  }
23
20
  }
24
- exports.FragmentClause = FragmentClause;
@@ -1,8 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.IdentifierClause = void 0;
4
- const abstract_clause_1 = require("./abstract.clause");
5
- class IdentifierClause extends abstract_clause_1.Clause {
1
+ import { Clause } from "./abstract.clause";
2
+ export class IdentifierClause extends Clause {
6
3
  constructor(value) {
7
4
  super();
8
5
  this.value = value;
@@ -16,4 +13,3 @@ class IdentifierClause extends abstract_clause_1.Clause {
16
13
  params.text.push(`"${this.value}"`);
17
14
  }
18
15
  }
19
- exports.IdentifierClause = IdentifierClause;
@@ -1,25 +1,9 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./array.clause"), exports);
18
- __exportStar(require("./empty.clause"), exports);
19
- __exportStar(require("./exclude.clause"), exports);
20
- __exportStar(require("./fragment.clause"), exports);
21
- __exportStar(require("./iden.caluse"), exports);
22
- __exportStar(require("./insert.clause"), exports);
23
- __exportStar(require("./literal.clause"), exports);
24
- __exportStar(require("./update.clause"), exports);
25
- __exportStar(require("./where.clause"), exports);
1
+ export * from './array.clause';
2
+ export * from './empty.clause';
3
+ export * from './exclude.clause';
4
+ export * from './fragment.clause';
5
+ export * from './iden.caluse';
6
+ export * from './insert.clause';
7
+ export * from './literal.clause';
8
+ export * from './update.clause';
9
+ export * from './where.clause';
@@ -1,8 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.InsertClause = void 0;
4
- const abstract_clause_1 = require("./abstract.clause");
5
- class InsertClause extends abstract_clause_1.Clause {
1
+ import { Clause } from "./abstract.clause";
2
+ export class InsertClause extends Clause {
6
3
  constructor(inserts) {
7
4
  super();
8
5
  this.inserts = inserts;
@@ -33,4 +30,3 @@ class InsertClause extends abstract_clause_1.Clause {
33
30
  });
34
31
  }
35
32
  }
36
- exports.InsertClause = InsertClause;
@@ -1,8 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LiteralClause = void 0;
4
- const abstract_clause_1 = require("./abstract.clause");
5
- class LiteralClause extends abstract_clause_1.Clause {
1
+ import { Clause } from "./abstract.clause";
2
+ export class LiteralClause extends Clause {
6
3
  constructor(value) {
7
4
  super();
8
5
  this.value = value;
@@ -17,4 +14,3 @@ class LiteralClause extends abstract_clause_1.Clause {
17
14
  params.text.push(this.value);
18
15
  }
19
16
  }
20
- exports.LiteralClause = LiteralClause;
@@ -1,8 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UpdateClause = void 0;
4
- const abstract_clause_1 = require("./abstract.clause");
5
- class UpdateClause extends abstract_clause_1.Clause {
1
+ import { Clause } from "./abstract.clause";
2
+ export class UpdateClause extends Clause {
6
3
  constructor(updateMap) {
7
4
  super();
8
5
  this.updateMap = updateMap;
@@ -22,4 +19,3 @@ class UpdateClause extends abstract_clause_1.Clause {
22
19
  });
23
20
  }
24
21
  }
25
- exports.UpdateClause = UpdateClause;
@@ -1,8 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WhereClause = void 0;
4
- const abstract_clause_1 = require("./abstract.clause");
5
- class WhereClause extends abstract_clause_1.Clause {
1
+ import { Clause } from "./abstract.clause";
2
+ export class WhereClause extends Clause {
6
3
  constructor(_value) {
7
4
  super();
8
5
  this._value = _value;
@@ -22,4 +19,3 @@ class WhereClause extends abstract_clause_1.Clause {
22
19
  });
23
20
  }
24
21
  }
25
- exports.WhereClause = WhereClause;
@@ -1,5 +1,7 @@
1
1
  import { Branded, ColumnDescription } from "./types";
2
2
  import { Transaction } from "./transaction";
3
+ import { Future } from 'fluent-future';
4
+ import { PostgresError } from "./error";
3
5
  type LogLevel = "none" | "error" | "notice" | "query";
4
6
  export type ConnectionParams = {
5
7
  user: string;
@@ -26,8 +28,9 @@ export type DescribeQueueUnit = {
26
28
  reject: (error: Error) => void;
27
29
  statementName: StatementName;
28
30
  };
29
- export type StatementName = Branded<string, 'statementName'>;
30
- export type QueryText = Branded<string, 'queryText'>;
31
+ export type StatementName = Branded<string, 'StatementName'>;
32
+ export type QueryText = Branded<string, 'QueryText'>;
33
+ export type ChannelName = Branded<string, "ChannelName">;
31
34
  /**
32
35
  * Represents a single dedicated connection to the PostgreSQL database.
33
36
  *
@@ -59,8 +62,10 @@ export type QueryText = Branded<string, 'queryText'>;
59
62
  * ```
60
63
  */
61
64
  export declare class Connection {
65
+ private readonly params;
62
66
  private _isFlushing;
63
- private _isAlive;
67
+ private _isOpened;
68
+ private _isReconnecting;
64
69
  private _socket;
65
70
  private _writer;
66
71
  private _pipelinesQueue;
@@ -68,9 +73,11 @@ export declare class Connection {
68
73
  private _describingPending;
69
74
  private _parsed;
70
75
  private _parsingPending;
76
+ private _listeningCallbacks;
71
77
  private _stmtCounter;
72
78
  private _logLevel;
73
79
  private _nextStatement;
80
+ private _checkOpened;
74
81
  private constructor();
75
82
  /**
76
83
  * Creates a new database connection.
@@ -90,7 +97,7 @@ export declare class Connection {
90
97
  * })
91
98
  * ```
92
99
  */
93
- static new(params: ConnectionParams): Promise<Connection>;
100
+ static new(params: ConnectionParams): Future<Connection, PostgresError>;
94
101
  /**
95
102
  * Executes a query using tagged template literals.
96
103
  *
@@ -115,9 +122,7 @@ export declare class Connection {
115
122
  * const users = await conn.query<User>`SELECT * FROM users`
116
123
  * ```
117
124
  */
118
- query<T extends Record<string, any>>(templates: TemplateStringsArray, ...params: any[]): Promise<T[]>;
119
- private _createQuery;
120
- private _writeQuery;
125
+ query<T extends Record<string, any>>(templates: TemplateStringsArray, ...params: any[]): Future<T[], PostgresError>;
121
126
  /**
122
127
  * Starts a managed transaction on this connection.
123
128
  *
@@ -139,9 +144,51 @@ export declare class Connection {
139
144
  * })
140
145
  * ```
141
146
  */
142
- begin<T>(txCallback: (transaction: Transaction) => Promise<T>): Promise<T>;
147
+ begin<T>(txCallback: (transaction: Transaction) => Promise<T>): Future<T, Error>;
148
+ /**
149
+ * Sends an asynchronous notification to a channel via `pg_notify`.
150
+ *
151
+ * @param channelName - The channel identifier
152
+ * @param payload - Optional string data (max 8000 bytes)
153
+ *
154
+ * @example
155
+ * ```ts
156
+ * await conn.notify('events', 'hello')
157
+ * ```
158
+ */
159
+ notify(channelName: string, payload?: string): Future<Record<string, any>[], PostgresError>;
160
+ /**
161
+ * Subscribes a callback to a channel. Sends `LISTEN` on the first subscription.
162
+ *
163
+ * @param channelName - The channel identifier
164
+ * @param callback - Function invoked when a notification arrives
165
+ *
166
+ * @example
167
+ * ```ts
168
+ * await conn.listen('events', data => console.log(data))
169
+ * ```
170
+ */
171
+ listen(channelName: string, callback: (payload: string) => void): Future<Record<string, any>[], PostgresError>;
172
+ /**
173
+ * Unsubscribes a callback. Sends `UNLISTEN` if no callbacks remain for the channel.
174
+ *
175
+ * @param channelName - The channel identifier
176
+ * @param callback - The registered callback to remove
177
+ *
178
+ * @example
179
+ * ```ts
180
+ * await conn.unlisten('events', callback)
181
+ * ```
182
+ */
183
+ unlisten(channelName: string, callback: (payload: string) => void): Future<[], PostgresError>;
184
+ private _createQuery;
185
+ private _writeQuery;
143
186
  private _registerFlush;
144
187
  private _flush;
188
+ private _registerReconnect;
189
+ private _resetConnectionState;
190
+ private _reconnect;
191
+ private _restoreSubscriptions;
145
192
  private _getCurrentQuery;
146
193
  private _rejectPipeline;
147
194
  private _handlePacket;
@@ -149,8 +196,7 @@ export declare class Connection {
149
196
  * Checks if the connection is still alive and usable.
150
197
  * Returns `false` if the socket is destroyed or connection is dead.
151
198
  */
152
- get isAlive(): boolean;
153
- private _destroyConnection;
199
+ get isOpened(): boolean;
154
200
  /**
155
201
  * Closes the connection immediately.
156
202
  * All pending queries will be rejected with an error.
@@ -1 +1 @@
1
- {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}