prisma-pgmq 0.1.0 → 1.0.1

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 CHANGED
@@ -24,6 +24,25 @@ yarn add prisma-pgmq
24
24
  - Prisma Client v5.0.0 or higher
25
25
  - Node.js 16+
26
26
 
27
+ > **Enabling the PGMQ extension via Prisma**
28
+ >
29
+ > You can manage PostgreSQL extensions (including PGMQ) directly in your Prisma schema using the `postgresqlExtensions` preview feature. Add the extension to your `datasource` block in `schema.prisma`:
30
+ >
31
+ > ```prisma
32
+ > generator client {
33
+ > provider = "prisma-client-js"
34
+ > previewFeatures = ["postgresqlExtensions"]
35
+ > }
36
+ >
37
+ > datasource db {
38
+ > provider = "postgresql"
39
+ > url = env("DATABASE_URL")
40
+ > extensions = [pgmq]
41
+ > }
42
+ > ```
43
+ >
44
+ > For more details, see the [Prisma documentation on PostgreSQL extensions](https://www.prisma.io/docs/orm/prisma-schema/postgresql-extensions).
45
+
27
46
  ## Quick Start
28
47
 
29
48
  ### Functional API
@@ -35,18 +54,13 @@ import { pgmq } from 'prisma-pgmq';
35
54
  const prisma = new PrismaClient();
36
55
 
37
56
  // Create a queue
38
- await prisma.$transaction(async (tx) => {
39
- await pgmq.createQueue(tx, 'my-work-queue');
40
- });
57
+ await pgmq.createQueue(prisma, 'my-work-queue');
41
58
 
42
59
  // Send a message
43
- await prisma.$transaction(async (tx) => {
44
- const msgId = await pgmq.send(tx, 'my-work-queue', {
45
- userId: 123,
46
- action: 'send-email',
47
- email: 'user@example.com'
48
- });
49
- console.log('Message sent with ID:', msgId);
60
+ await pgmq.send(prisma, 'my-work-queue', {
61
+ userId: 123,
62
+ action: 'send-email',
63
+ email: 'user@example.com'
50
64
  });
51
65
  ```
52
66
 
@@ -54,162 +68,166 @@ await prisma.$transaction(async (tx) => {
54
68
 
55
69
  ### Message Operations
56
70
 
57
- #### `send(queueName, message, delay?)`
71
+ #### `send(tx, queueName, message, delay?)`
58
72
  Send a single message to a queue.
59
73
 
60
74
  ```typescript
61
- // Send immediately
62
- const msgId = await prisma.$pgmq.send('my-queue', { data: 'hello' });
75
+ const msgId = await pgmq.send(tx, 'my-queue', { data: 'hello' });
63
76
 
64
77
  // Send with delay (seconds)
65
- const msgId = await prisma.$pgmq.send('my-queue', { data: 'hello' }, 30);
78
+ const msgId = await pgmq.send(tx, 'my-queue', { data: 'hello' }, 30);
66
79
 
67
80
  // Send with specific time
68
- const msgId = await prisma.$pgmq.send('my-queue', { data: 'hello' }, new Date('2024-01-01T10:00:00Z'));
81
+ const msgId = await pgmq.send(
82
+ tx,
83
+ 'my-queue',
84
+ { data: 'hello' },
85
+ new Date('2024-01-01T10:00:00Z')
86
+ );
69
87
  ```
70
88
 
71
- #### `sendBatch(queueName, messages, delay?)`
89
+ #### `sendBatch(tx, queueName, messages, delay?)`
72
90
  Send multiple messages to a queue in a single operation.
73
91
 
74
92
  ```typescript
75
- const msgIds = await prisma.$pgmq.sendBatch('my-queue', [
93
+ const msgIds = await pgmq.sendBatch(tx, 'my-queue', [
76
94
  { id: 1, data: 'message 1' },
77
95
  { id: 2, data: 'message 2' },
78
96
  { id: 3, data: 'message 3' }
79
97
  ]);
80
98
  ```
81
99
 
82
- #### `read(queueName, vt, qty?, conditional?)`
100
+ #### `read(tx, queueName, vt, qty?, conditional?)`
83
101
  Read messages from a queue with visibility timeout.
84
102
 
85
103
  ```typescript
86
104
  // Read up to 5 messages with 30 second visibility timeout
87
- const messages = await prisma.$pgmq.read('my-queue', 30, 5);
105
+ const messages = await pgmq.read(tx, 'my-queue', 30, 5);
88
106
 
89
107
  // Read with conditional filtering
90
- const messages = await prisma.$pgmq.read('my-queue', 30, 5, { priority: 'high' });
108
+ const messages = await pgmq.read(tx, 'my-queue', 30, 5, { priority: 'high' });
91
109
  ```
92
110
 
93
- #### `readWithPoll(queueName, vt, qty?, maxPollSeconds?, pollIntervalMs?, conditional?)`
111
+ #### `readWithPoll(tx, queueName, vt, qty?, maxPollSeconds?, pollIntervalMs?, conditional?)`
94
112
  Read messages with polling (wait for messages if none available).
95
113
 
96
114
  ```typescript
97
115
  // Poll for up to 10 seconds, checking every 500ms
98
- const messages = await prisma.$pgmq.readWithPoll('my-queue', 30, 1, 10, 500);
116
+ const messages = await pgmq.readWithPoll(tx, 'my-queue', 30, 1, 10, 500);
99
117
  ```
100
118
 
101
- #### `pop(queueName)`
119
+ #### `pop(tx, queueName)`
102
120
  Read and immediately delete a message (atomic operation).
103
121
 
104
122
  ```typescript
105
- const messages = await prisma.$pgmq.pop('my-queue');
123
+ const messages = await pgmq.pop(tx, 'my-queue');
106
124
  ```
107
125
 
108
126
  ### Message Management
109
127
 
110
- #### `deleteMessage(queueName, msgId)`
128
+ #### `deleteMessage(tx, queueName, msgId)`
111
129
  Delete a specific message.
112
130
 
113
131
  ```typescript
114
- const deleted = await prisma.$pgmq.deleteMessage('my-queue', 123);
132
+ const deleted = await pgmq.deleteMessage(tx, 'my-queue', 123);
115
133
  ```
116
134
 
117
- #### `deleteBatch(queueName, msgIds)`
135
+ #### `deleteBatch(tx, queueName, msgIds)`
118
136
  Delete multiple messages.
119
137
 
120
138
  ```typescript
121
- const deletedIds = await prisma.$pgmq.deleteBatch('my-queue', [123, 124, 125]);
139
+ const deletedIds = await pgmq.deleteBatch(tx, 'my-queue', [123, 124, 125]);
122
140
  ```
123
141
 
124
- #### `archive(queueName, msgId)`
142
+ #### `archive(tx, queueName, msgId)`
125
143
  Archive a message (move to archive table).
126
144
 
127
145
  ```typescript
128
- const archived = await prisma.$pgmq.archive('my-queue', 123);
146
+ const archived = await pgmq.archive(tx, 'my-queue', 123);
129
147
  ```
130
148
 
131
- #### `archiveBatch(queueName, msgIds)`
149
+ #### `archiveBatch(tx, queueName, msgIds)`
132
150
  Archive multiple messages.
133
151
 
134
152
  ```typescript
135
- const archivedIds = await prisma.$pgmq.archiveBatch('my-queue', [123, 124, 125]);
153
+ const archivedIds = await pgmq.archiveBatch(tx, 'my-queue', [123, 124, 125]);
136
154
  ```
137
155
 
138
156
  ### Queue Management
139
157
 
140
- #### `createQueue(queueName)`
158
+ #### `createQueue(tx, queueName)`
141
159
  Create a new queue.
142
160
 
143
161
  ```typescript
144
- await prisma.$pgmq.createQueue('my-new-queue');
162
+ await pgmq.createQueue(tx, 'my-new-queue');
145
163
  ```
146
164
 
147
- #### `createPartitionedQueue(queueName, partitionInterval?, retentionInterval?)`
165
+ #### `createPartitionedQueue(tx, queueName, partitionInterval?, retentionInterval?)`
148
166
  Create a partitioned queue for high-throughput scenarios.
149
167
 
150
168
  ```typescript
151
- await prisma.$pgmq.createPartitionedQueue('high-volume-queue', '10000', '100000');
169
+ await pgmq.createPartitionedQueue(tx, 'high-volume-queue', '10000', '100000');
152
170
  ```
153
171
 
154
- #### `createUnloggedQueue(queueName)`
172
+ #### `createUnloggedQueue(tx, queueName)`
155
173
  Create an unlogged queue (better performance, less durability).
156
174
 
157
175
  ```typescript
158
- await prisma.$pgmq.createUnloggedQueue('temp-queue');
176
+ await pgmq.createUnloggedQueue(tx, 'temp-queue');
159
177
  ```
160
178
 
161
- #### `dropQueue(queueName)`
179
+ #### `dropQueue(tx, queueName)`
162
180
  Delete a queue and all its messages.
163
181
 
164
182
  ```typescript
165
- const dropped = await prisma.$pgmq.dropQueue('old-queue');
183
+ const dropped = await pgmq.dropQueue(tx, 'old-queue');
166
184
  ```
167
185
 
168
- #### `purgeQueue(queueName)`
186
+ #### `purgeQueue(tx, queueName)`
169
187
  Remove all messages from a queue.
170
188
 
171
189
  ```typescript
172
- const messageCount = await prisma.$pgmq.purgeQueue('my-queue');
190
+ const messageCount = await pgmq.purgeQueue(tx, 'my-queue');
173
191
  ```
174
192
 
175
193
  ### Utilities
176
194
 
177
- #### `setVt(queueName, msgId, vtOffset)`
195
+ #### `setVt(tx, queueName, msgId, vtOffset)`
178
196
  Set visibility timeout for a specific message.
179
197
 
180
198
  ```typescript
181
- const message = await prisma.$pgmq.setVt('my-queue', 123, 60); // 60 seconds
199
+ const message = await pgmq.setVt(tx, 'my-queue', 123, 60); // 60 seconds
182
200
  ```
183
201
 
184
- #### `listQueues()`
202
+ #### `listQueues(tx)`
185
203
  Get information about all queues.
186
204
 
187
205
  ```typescript
188
- const queues = await prisma.$pgmq.listQueues();
206
+ const queues = await pgmq.listQueues(tx);
189
207
  console.log(queues); // [{ queue_name: 'my-queue', created_at: ..., is_partitioned: false }]
190
208
  ```
191
209
 
192
- #### `metrics(queueName)`
210
+ #### `metrics(tx, queueName)`
193
211
  Get metrics for a specific queue.
194
212
 
195
213
  ```typescript
196
- const metrics = await prisma.$pgmq.metrics('my-queue');
214
+ const metrics = await pgmq.metrics(tx, 'my-queue');
197
215
  console.log(metrics);
198
216
  // {
199
217
  // queue_name: 'my-queue',
200
- // queue_length: 5n,
218
+ // queue_length: 5,
201
219
  // newest_msg_age_sec: 10,
202
220
  // oldest_msg_age_sec: 300,
203
- // total_messages: 1000n,
221
+ // total_messages: 1000,
204
222
  // scrape_time: 2024-01-01T10:00:00.000Z
205
223
  // }
206
224
  ```
207
225
 
208
- #### `metricsAll()`
226
+ #### `metricsAll(tx)`
209
227
  Get metrics for all queues.
210
228
 
211
229
  ```typescript
212
- const allMetrics = await prisma.$pgmq.metricsAll();
230
+ const allMetrics = await pgmq.metricsAll(tx);
213
231
  ```
214
232
 
215
233
  ## Type Definitions
@@ -252,38 +270,6 @@ interface QueueInfo {
252
270
  }
253
271
  ```
254
272
 
255
- ## Best Practices
256
-
257
- ### 1. Use Appropriate Visibility Timeouts
258
- Choose visibility timeouts based on your message processing time:
259
-
260
- ```typescript
261
- // For quick operations (30 seconds)
262
- const messages = await prisma.$pgmq.read('quick-tasks', 30);
263
-
264
- // For longer operations (5 minutes)
265
- const messages = await prisma.$pgmq.read('heavy-tasks', 300);
266
- ```
267
-
268
- ### 2. Handle Message Processing Failures
269
- Always delete or archive messages after successful processing:
270
-
271
- ```typescript
272
- const messages = await prisma.$pgmq.read('my-queue', 30, 10);
273
-
274
- for (const message of messages) {
275
- try {
276
- await processMessage(message.message);
277
- await prisma.$pgmq.deleteMessage('my-queue', message.msg_id);
278
- } catch (error) {
279
- // Handle error - message will become visible again after timeout
280
- console.error('Failed to process message:', error);
281
- // Optionally archive failed messages
282
- await prisma.$pgmq.archive('my-queue', message.msg_id);
283
- }
284
- }
285
- ```
286
-
287
273
  ## Examples
288
274
 
289
275
  ### Basic Worker Pattern
@@ -296,33 +282,27 @@ const prisma = new PrismaClient();
296
282
 
297
283
  // Producer
298
284
  async function sendTask(taskData: any) {
299
- await prisma.$transaction(async (tx) => {
300
- await pgmq.send(tx, 'work-queue', {
301
- type: 'process-user-data',
302
- data: taskData,
303
- timestamp: Date.now()
304
- });
285
+ await pgmq.send(prisma, 'work-queue', {
286
+ type: 'process-user-data',
287
+ data: taskData,
288
+ timestamp: Date.now()
305
289
  });
306
290
  }
307
291
 
308
292
  // Consumer
309
293
  async function processMessages() {
310
- while (true) {
311
- await prisma.$transaction(async (tx) => {
312
- const messages = await pgmq.readWithPoll(tx, 'work-queue', 30, 5, 10, 1000);
313
- for (const message of messages) {
314
- try {
315
- // Process the message
316
- await handleTask(message.message);
317
- // Delete on success
318
- await pgmq.deleteMessage(tx, 'work-queue', message.msg_id);
319
- } catch (error) {
320
- console.error('Task failed:', error);
321
- // Archive failed messages for later analysis
322
- await pgmq.archive(tx, 'work-queue', message.msg_id);
323
- }
324
- }
325
- });
294
+ const messages = await pgmq.readWithPoll(prisma, 'work-queue', 30, 5, 10, 1000);
295
+ for (const message of messages) {
296
+ try {
297
+ // Process the message
298
+ await handleTask(message.message);
299
+ // Delete on success
300
+ await pgmq.deleteMessage(prisma, 'work-queue', message.msg_id);
301
+ } catch (error) {
302
+ console.error('Task failed:', error);
303
+ // Archive failed messages for later analysis
304
+ await pgmq.archive(prisma, 'work-queue', message.msg_id);
305
+ }
326
306
  }
327
307
  }
328
308
 
@@ -338,32 +318,13 @@ async function handleTask(task: any) {
338
318
  // Schedule a message for later processing
339
319
  const futureDate = new Date(Date.now() + 24 * 60 * 60 * 1000); // 24 hours
340
320
 
341
- await prisma.$pgmq.send('scheduled-tasks', {
321
+ await pgmq.send(prisma, 'scheduled-tasks', {
342
322
  type: 'send-reminder',
343
323
  userId: 123,
344
324
  reminder: 'Your subscription expires tomorrow'
345
325
  }, futureDate);
346
326
  ```
347
327
 
348
- ### Priority Queue Pattern
349
-
350
- ```typescript
351
- // Send high-priority message
352
- await prisma.$pgmq.send('tasks', {
353
- priority: 'high',
354
- type: 'urgent-processing',
355
- data: urgentData
356
- });
357
-
358
- // Read high-priority messages first
359
- const highPriorityMessages = await prisma.$pgmq.read('tasks', 30, 10, { priority: 'high' });
360
-
361
- if (highPriorityMessages.length === 0) {
362
- // Fall back to normal priority
363
- const normalMessages = await prisma.$pgmq.read('tasks', 30, 10, { priority: 'normal' });
364
- }
365
- ```
366
-
367
328
  ## Contributing
368
329
 
369
330
  1. Fork the repository
@@ -376,7 +337,7 @@ if (highPriorityMessages.length === 0) {
376
337
 
377
338
  ```bash
378
339
  # Clone the repository
379
- git clone https://github.com/your-username/prisma-pgmq.git
340
+ git clone https://github.com/dvlkv/prisma-pgmq.git
380
341
  cd prisma-pgmq
381
342
 
382
343
  # Install dependencies
package/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { Prisma } from '@prisma/client/extension';
1
+ import { Prisma } from '@prisma/client';
2
2
 
3
3
  type Task = Record<string, unknown>;
4
4
  interface MessageRecord {
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Prisma } from '@prisma/client/extension';
1
+ import { Prisma } from '@prisma/client';
2
2
 
3
3
  type Task = Record<string, unknown>;
4
4
  interface MessageRecord {
package/dist/index.js CHANGED
@@ -47,8 +47,8 @@ __export(pgmq_exports, {
47
47
  sendBatch: () => sendBatch,
48
48
  setVt: () => setVt
49
49
  });
50
- var import_extension = require("@prisma/client/extension");
51
- var PrismaAny = import_extension.Prisma;
50
+ var import_client = require("@prisma/client");
51
+ var PrismaAny = import_client.Prisma;
52
52
  async function send(tx, queueName, msg, delay) {
53
53
  const delayRepr = typeof delay === "number" ? PrismaAny.sql`${delay}::integer` : PrismaAny.sql`${delay}`;
54
54
  const delaySql = delay ? PrismaAny.sql`, ${delayRepr}` : PrismaAny.sql``;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/pgmq.ts"],"sourcesContent":["export { \n Task,\n MessageRecord,\n QueueInfo,\n QueueMetrics,\n } from './pgmq';\n \nexport * as pgmq from './pgmq';","import { Prisma } from '@prisma/client/extension';\n\nexport type Task = Record<string, unknown>;\n\n// Message record type based on PGMQ documentation\nexport interface MessageRecord {\n msg_id: number;\n read_ct: number;\n enqueued_at: Date;\n vt: Date;\n message: Task;\n}\n\n// Queue metrics type\nexport interface QueueMetrics {\n queue_name: string;\n queue_length: number;\n newest_msg_age_sec: number | null;\n oldest_msg_age_sec: number | null;\n total_messages: number;\n scrape_time: Date;\n}\n\n// Queue info type\nexport interface QueueInfo {\n queue_name: string;\n created_at: Date;\n is_partitioned: boolean;\n is_unlogged: boolean;\n}\n\n// I expect that Prisma has `sql` defined\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst PrismaAny = Prisma as any;\n\nexport async function send(tx: Prisma.TransactionClient, queueName: string, msg: Task, delay?: number | Date): Promise<number> {\n const delayRepr = typeof delay === 'number' ? PrismaAny.sql`${delay}::integer` : PrismaAny.sql`${delay}`;\n const delaySql = delay ? PrismaAny.sql`, ${delayRepr}` : PrismaAny.sql``;\n const result: { send: number }[] = await tx.$queryRaw`SELECT pgmq.send(${queueName}, ${msg}${delaySql})`;\n const firstResult = result[0];\n if (!firstResult) {\n throw new Error('No result returned from pgmq.send');\n }\n return firstResult.send;\n}\n\nexport async function sendBatch(tx: Prisma.TransactionClient, queueName: string, msgs: Task[], delay?: number | Date): Promise<number[]> {\n const delayRepr = typeof delay === 'number' ? PrismaAny.sql`${delay}::integer` : PrismaAny.sql`${delay}`;\n const delaySql = delay ? PrismaAny.sql`, ${delayRepr}` : PrismaAny.sql``;\n const result: { send_batch: number }[] = await tx.$queryRaw`SELECT pgmq.send_batch(${queueName}, ${msgs}${delaySql})`;\n return result.map(a => a.send_batch);\n}\n\n// Reading Messages\n\nexport function read(\n tx: Prisma.TransactionClient, \n queueName: string, \n vt: number, \n qty: number = 1, \n conditional: Task = {}\n): Promise<MessageRecord[]> {\n return tx.$queryRaw`SELECT * FROM pgmq.read(${queueName}, ${vt}::integer, ${qty}::integer, ${conditional})` as Promise<MessageRecord[]>;\n}\n\nexport function readWithPoll(\n tx: Prisma.TransactionClient,\n queueName: string,\n vt: number,\n qty: number = 1,\n maxPollSeconds: number = 5,\n pollIntervalMs: number = 100,\n conditional: Task = {}\n): Promise<MessageRecord[]> {\n return tx.$queryRaw`SELECT * FROM pgmq.read_with_poll(${queueName}, ${vt}::integer, ${qty}::integer, ${maxPollSeconds}::integer, ${pollIntervalMs}::integer, ${conditional})` as Promise<MessageRecord[]>;\n}\n\nexport function pop(tx: Prisma.TransactionClient, queueName: string): Promise<MessageRecord[]> {\n return tx.$queryRaw`SELECT * FROM pgmq.pop(${queueName})` as Promise<MessageRecord[]>;\n}\n\n// Deleting/Archiving Messages\n\nexport async function deleteMessage(tx: Prisma.TransactionClient, queueName: string, msgId: number): Promise<boolean> {\n const result: { delete: boolean }[] = await tx.$queryRaw`SELECT pgmq.delete(${queueName}, ${msgId}::integer)`;\n const firstResult = result[0];\n if (!firstResult) {\n throw new Error('No result returned from pgmq.delete');\n }\n return firstResult.delete;\n}\n\nexport async function deleteBatch(tx: Prisma.TransactionClient, queueName: string, msgIds: number[]): Promise<number[]> {\n const result: { delete: number }[] = await tx.$queryRaw`SELECT pgmq.delete(${queueName}, ${msgIds}::integer[])`;\n return result.map(a => a.delete);\n}\n\nexport async function purgeQueue(tx: Prisma.TransactionClient, queueName: string): Promise<number> {\n const result: { purge_queue: number }[] = await tx.$queryRaw`SELECT pgmq.purge_queue(${queueName})`;\n const firstResult = result[0];\n if (!firstResult) {\n throw new Error('No result returned from pgmq.purge_queue');\n }\n return firstResult.purge_queue;\n}\n\nexport async function archive(tx: Prisma.TransactionClient, queueName: string, msgId: number): Promise<boolean> {\n const result: { archive: boolean }[] = await tx.$queryRaw`SELECT pgmq.archive(${queueName}, ${msgId}::integer)`;\n const firstResult = result[0];\n if (!firstResult) {\n throw new Error('No result returned from pgmq.archive');\n }\n return firstResult.archive;\n}\n\nexport async function archiveBatch(tx: Prisma.TransactionClient, queueName: string, msgIds: number[]): Promise<number[]> {\n const result: { archive: number }[] = await tx.$queryRaw`SELECT pgmq.archive(${queueName}, ${msgIds}::integer[])`;\n return result.map(a => a.archive);\n}\n\n// Queue Management\n\nexport async function createQueue(tx: Prisma.TransactionClient, queueName: string): Promise<void> {\n await tx.$executeRaw`SELECT pgmq.create(${queueName})`;\n}\n\nexport async function createPartitionedQueue(\n tx: Prisma.TransactionClient, \n queueName: string, \n partitionInterval: string = '10000', \n retentionInterval: string = '100000'\n): Promise<void> {\n await tx.$executeRaw`SELECT pgmq.create_partitioned(${queueName}, ${partitionInterval}, ${retentionInterval})`;\n}\n\nexport async function createUnloggedQueue(tx: Prisma.TransactionClient, queueName: string): Promise<void> {\n await tx.$executeRaw`SELECT pgmq.create_unlogged(${queueName})`;\n}\n\nexport async function detachArchive(tx: Prisma.TransactionClient, queueName: string): Promise<void> {\n await tx.$executeRaw`SELECT pgmq.detach_archive(${queueName})`;\n}\n\nexport async function dropQueue(tx: Prisma.TransactionClient, queueName: string): Promise<boolean> {\n const result: { drop_queue: boolean }[] = await tx.$queryRaw`SELECT pgmq.drop_queue(${queueName})`;\n const firstResult = result[0];\n if (!firstResult) {\n throw new Error('No result returned from pgmq.drop_queue');\n }\n return firstResult.drop_queue;\n}\n\n// Utilities\n\nexport async function setVt(\n tx: Prisma.TransactionClient, \n queueName: string, \n msgId: number, \n vtOffset: number\n): Promise<MessageRecord> {\n const result: MessageRecord[] = await tx.$queryRaw`SELECT * FROM pgmq.set_vt(${queueName}, ${msgId}::integer, ${vtOffset}::integer)`;\n const firstResult = result[0];\n if (!firstResult) {\n throw new Error('No result returned from pgmq.set_vt');\n }\n return firstResult;\n}\n\nexport async function listQueues(tx: Prisma.TransactionClient): Promise<QueueInfo[]> {\n const result: QueueInfo[] = await tx.$queryRaw`SELECT * FROM pgmq.list_queues()`;\n return result;\n}\n\nexport async function metrics(tx: Prisma.TransactionClient, queueName: string): Promise<QueueMetrics> {\n const result: QueueMetrics[] = await tx.$queryRaw`SELECT * FROM pgmq.metrics(${queueName})`;\n const firstResult = result[0];\n if (!firstResult) {\n throw new Error('No result returned from pgmq.metrics');\n }\n return firstResult;\n}\n\nexport async function metricsAll(tx: Prisma.TransactionClient): Promise<QueueMetrics[]> {\n const result: QueueMetrics[] = await tx.$queryRaw`SELECT * FROM pgmq.metrics_all()`;\n return result;\n}"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/pgmq.ts"],"sourcesContent":["export { \n Task,\n MessageRecord,\n QueueInfo,\n QueueMetrics,\n } from './pgmq';\n \nexport * as pgmq from './pgmq';","import { Prisma } from '@prisma/client';\n\nexport type Task = Record<string, unknown>;\n\n// Message record type based on PGMQ documentation\nexport interface MessageRecord {\n msg_id: number;\n read_ct: number;\n enqueued_at: Date;\n vt: Date;\n message: Task;\n}\n\n// Queue metrics type\nexport interface QueueMetrics {\n queue_name: string;\n queue_length: number;\n newest_msg_age_sec: number | null;\n oldest_msg_age_sec: number | null;\n total_messages: number;\n scrape_time: Date;\n}\n\n// Queue info type\nexport interface QueueInfo {\n queue_name: string;\n created_at: Date;\n is_partitioned: boolean;\n is_unlogged: boolean;\n}\n\n// I expect that Prisma has `sql` defined\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst PrismaAny = Prisma as any;\n\nexport async function send(tx: Prisma.TransactionClient, queueName: string, msg: Task, delay?: number | Date): Promise<number> {\n const delayRepr = typeof delay === 'number' ? PrismaAny.sql`${delay}::integer` : PrismaAny.sql`${delay}`;\n const delaySql = delay ? PrismaAny.sql`, ${delayRepr}` : PrismaAny.sql``;\n const result: { send: number }[] = await tx.$queryRaw`SELECT pgmq.send(${queueName}, ${msg}${delaySql})`;\n const firstResult = result[0];\n if (!firstResult) {\n throw new Error('No result returned from pgmq.send');\n }\n return firstResult.send;\n}\n\nexport async function sendBatch(tx: Prisma.TransactionClient, queueName: string, msgs: Task[], delay?: number | Date): Promise<number[]> {\n const delayRepr = typeof delay === 'number' ? PrismaAny.sql`${delay}::integer` : PrismaAny.sql`${delay}`;\n const delaySql = delay ? PrismaAny.sql`, ${delayRepr}` : PrismaAny.sql``;\n const result: { send_batch: number }[] = await tx.$queryRaw`SELECT pgmq.send_batch(${queueName}, ${msgs}${delaySql})`;\n return result.map(a => a.send_batch);\n}\n\n// Reading Messages\n\nexport function read(\n tx: Prisma.TransactionClient, \n queueName: string, \n vt: number, \n qty: number = 1, \n conditional: Task = {}\n): Promise<MessageRecord[]> {\n return tx.$queryRaw`SELECT * FROM pgmq.read(${queueName}, ${vt}::integer, ${qty}::integer, ${conditional})` as Promise<MessageRecord[]>;\n}\n\nexport function readWithPoll(\n tx: Prisma.TransactionClient,\n queueName: string,\n vt: number,\n qty: number = 1,\n maxPollSeconds: number = 5,\n pollIntervalMs: number = 100,\n conditional: Task = {}\n): Promise<MessageRecord[]> {\n return tx.$queryRaw`SELECT * FROM pgmq.read_with_poll(${queueName}, ${vt}::integer, ${qty}::integer, ${maxPollSeconds}::integer, ${pollIntervalMs}::integer, ${conditional})` as Promise<MessageRecord[]>;\n}\n\nexport function pop(tx: Prisma.TransactionClient, queueName: string): Promise<MessageRecord[]> {\n return tx.$queryRaw`SELECT * FROM pgmq.pop(${queueName})` as Promise<MessageRecord[]>;\n}\n\n// Deleting/Archiving Messages\n\nexport async function deleteMessage(tx: Prisma.TransactionClient, queueName: string, msgId: number): Promise<boolean> {\n const result: { delete: boolean }[] = await tx.$queryRaw`SELECT pgmq.delete(${queueName}, ${msgId}::integer)`;\n const firstResult = result[0];\n if (!firstResult) {\n throw new Error('No result returned from pgmq.delete');\n }\n return firstResult.delete;\n}\n\nexport async function deleteBatch(tx: Prisma.TransactionClient, queueName: string, msgIds: number[]): Promise<number[]> {\n const result: { delete: number }[] = await tx.$queryRaw`SELECT pgmq.delete(${queueName}, ${msgIds}::integer[])`;\n return result.map(a => a.delete);\n}\n\nexport async function purgeQueue(tx: Prisma.TransactionClient, queueName: string): Promise<number> {\n const result: { purge_queue: number }[] = await tx.$queryRaw`SELECT pgmq.purge_queue(${queueName})`;\n const firstResult = result[0];\n if (!firstResult) {\n throw new Error('No result returned from pgmq.purge_queue');\n }\n return firstResult.purge_queue;\n}\n\nexport async function archive(tx: Prisma.TransactionClient, queueName: string, msgId: number): Promise<boolean> {\n const result: { archive: boolean }[] = await tx.$queryRaw`SELECT pgmq.archive(${queueName}, ${msgId}::integer)`;\n const firstResult = result[0];\n if (!firstResult) {\n throw new Error('No result returned from pgmq.archive');\n }\n return firstResult.archive;\n}\n\nexport async function archiveBatch(tx: Prisma.TransactionClient, queueName: string, msgIds: number[]): Promise<number[]> {\n const result: { archive: number }[] = await tx.$queryRaw`SELECT pgmq.archive(${queueName}, ${msgIds}::integer[])`;\n return result.map(a => a.archive);\n}\n\n// Queue Management\n\nexport async function createQueue(tx: Prisma.TransactionClient, queueName: string): Promise<void> {\n await tx.$executeRaw`SELECT pgmq.create(${queueName})`;\n}\n\nexport async function createPartitionedQueue(\n tx: Prisma.TransactionClient, \n queueName: string, \n partitionInterval: string = '10000', \n retentionInterval: string = '100000'\n): Promise<void> {\n await tx.$executeRaw`SELECT pgmq.create_partitioned(${queueName}, ${partitionInterval}, ${retentionInterval})`;\n}\n\nexport async function createUnloggedQueue(tx: Prisma.TransactionClient, queueName: string): Promise<void> {\n await tx.$executeRaw`SELECT pgmq.create_unlogged(${queueName})`;\n}\n\nexport async function detachArchive(tx: Prisma.TransactionClient, queueName: string): Promise<void> {\n await tx.$executeRaw`SELECT pgmq.detach_archive(${queueName})`;\n}\n\nexport async function dropQueue(tx: Prisma.TransactionClient, queueName: string): Promise<boolean> {\n const result: { drop_queue: boolean }[] = await tx.$queryRaw`SELECT pgmq.drop_queue(${queueName})`;\n const firstResult = result[0];\n if (!firstResult) {\n throw new Error('No result returned from pgmq.drop_queue');\n }\n return firstResult.drop_queue;\n}\n\n// Utilities\n\nexport async function setVt(\n tx: Prisma.TransactionClient, \n queueName: string, \n msgId: number, \n vtOffset: number\n): Promise<MessageRecord> {\n const result: MessageRecord[] = await tx.$queryRaw`SELECT * FROM pgmq.set_vt(${queueName}, ${msgId}::integer, ${vtOffset}::integer)`;\n const firstResult = result[0];\n if (!firstResult) {\n throw new Error('No result returned from pgmq.set_vt');\n }\n return firstResult;\n}\n\nexport async function listQueues(tx: Prisma.TransactionClient): Promise<QueueInfo[]> {\n const result: QueueInfo[] = await tx.$queryRaw`SELECT * FROM pgmq.list_queues()`;\n return result;\n}\n\nexport async function metrics(tx: Prisma.TransactionClient, queueName: string): Promise<QueueMetrics> {\n const result: QueueMetrics[] = await tx.$queryRaw`SELECT * FROM pgmq.metrics(${queueName})`;\n const firstResult = result[0];\n if (!firstResult) {\n throw new Error('No result returned from pgmq.metrics');\n }\n return firstResult;\n}\n\nexport async function metricsAll(tx: Prisma.TransactionClient): Promise<QueueMetrics[]> {\n const result: QueueMetrics[] = await tx.$queryRaw`SELECT * FROM pgmq.metrics_all()`;\n return result;\n}"],"mappings":"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","names":[]}
package/dist/index.mjs CHANGED
@@ -27,7 +27,7 @@ __export(pgmq_exports, {
27
27
  sendBatch: () => sendBatch,
28
28
  setVt: () => setVt
29
29
  });
30
- import { Prisma } from "@prisma/client/extension";
30
+ import { Prisma } from "@prisma/client";
31
31
  var PrismaAny = Prisma;
32
32
  async function send(tx, queueName, msg, delay) {
33
33
  const delayRepr = typeof delay === "number" ? PrismaAny.sql`${delay}::integer` : PrismaAny.sql`${delay}`;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/pgmq.ts"],"sourcesContent":["import { Prisma } from '@prisma/client/extension';\n\nexport type Task = Record<string, unknown>;\n\n// Message record type based on PGMQ documentation\nexport interface MessageRecord {\n msg_id: number;\n read_ct: number;\n enqueued_at: Date;\n vt: Date;\n message: Task;\n}\n\n// Queue metrics type\nexport interface QueueMetrics {\n queue_name: string;\n queue_length: number;\n newest_msg_age_sec: number | null;\n oldest_msg_age_sec: number | null;\n total_messages: number;\n scrape_time: Date;\n}\n\n// Queue info type\nexport interface QueueInfo {\n queue_name: string;\n created_at: Date;\n is_partitioned: boolean;\n is_unlogged: boolean;\n}\n\n// I expect that Prisma has `sql` defined\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst PrismaAny = Prisma as any;\n\nexport async function send(tx: Prisma.TransactionClient, queueName: string, msg: Task, delay?: number | Date): Promise<number> {\n const delayRepr = typeof delay === 'number' ? PrismaAny.sql`${delay}::integer` : PrismaAny.sql`${delay}`;\n const delaySql = delay ? PrismaAny.sql`, ${delayRepr}` : PrismaAny.sql``;\n const result: { send: number }[] = await tx.$queryRaw`SELECT pgmq.send(${queueName}, ${msg}${delaySql})`;\n const firstResult = result[0];\n if (!firstResult) {\n throw new Error('No result returned from pgmq.send');\n }\n return firstResult.send;\n}\n\nexport async function sendBatch(tx: Prisma.TransactionClient, queueName: string, msgs: Task[], delay?: number | Date): Promise<number[]> {\n const delayRepr = typeof delay === 'number' ? PrismaAny.sql`${delay}::integer` : PrismaAny.sql`${delay}`;\n const delaySql = delay ? PrismaAny.sql`, ${delayRepr}` : PrismaAny.sql``;\n const result: { send_batch: number }[] = await tx.$queryRaw`SELECT pgmq.send_batch(${queueName}, ${msgs}${delaySql})`;\n return result.map(a => a.send_batch);\n}\n\n// Reading Messages\n\nexport function read(\n tx: Prisma.TransactionClient, \n queueName: string, \n vt: number, \n qty: number = 1, \n conditional: Task = {}\n): Promise<MessageRecord[]> {\n return tx.$queryRaw`SELECT * FROM pgmq.read(${queueName}, ${vt}::integer, ${qty}::integer, ${conditional})` as Promise<MessageRecord[]>;\n}\n\nexport function readWithPoll(\n tx: Prisma.TransactionClient,\n queueName: string,\n vt: number,\n qty: number = 1,\n maxPollSeconds: number = 5,\n pollIntervalMs: number = 100,\n conditional: Task = {}\n): Promise<MessageRecord[]> {\n return tx.$queryRaw`SELECT * FROM pgmq.read_with_poll(${queueName}, ${vt}::integer, ${qty}::integer, ${maxPollSeconds}::integer, ${pollIntervalMs}::integer, ${conditional})` as Promise<MessageRecord[]>;\n}\n\nexport function pop(tx: Prisma.TransactionClient, queueName: string): Promise<MessageRecord[]> {\n return tx.$queryRaw`SELECT * FROM pgmq.pop(${queueName})` as Promise<MessageRecord[]>;\n}\n\n// Deleting/Archiving Messages\n\nexport async function deleteMessage(tx: Prisma.TransactionClient, queueName: string, msgId: number): Promise<boolean> {\n const result: { delete: boolean }[] = await tx.$queryRaw`SELECT pgmq.delete(${queueName}, ${msgId}::integer)`;\n const firstResult = result[0];\n if (!firstResult) {\n throw new Error('No result returned from pgmq.delete');\n }\n return firstResult.delete;\n}\n\nexport async function deleteBatch(tx: Prisma.TransactionClient, queueName: string, msgIds: number[]): Promise<number[]> {\n const result: { delete: number }[] = await tx.$queryRaw`SELECT pgmq.delete(${queueName}, ${msgIds}::integer[])`;\n return result.map(a => a.delete);\n}\n\nexport async function purgeQueue(tx: Prisma.TransactionClient, queueName: string): Promise<number> {\n const result: { purge_queue: number }[] = await tx.$queryRaw`SELECT pgmq.purge_queue(${queueName})`;\n const firstResult = result[0];\n if (!firstResult) {\n throw new Error('No result returned from pgmq.purge_queue');\n }\n return firstResult.purge_queue;\n}\n\nexport async function archive(tx: Prisma.TransactionClient, queueName: string, msgId: number): Promise<boolean> {\n const result: { archive: boolean }[] = await tx.$queryRaw`SELECT pgmq.archive(${queueName}, ${msgId}::integer)`;\n const firstResult = result[0];\n if (!firstResult) {\n throw new Error('No result returned from pgmq.archive');\n }\n return firstResult.archive;\n}\n\nexport async function archiveBatch(tx: Prisma.TransactionClient, queueName: string, msgIds: number[]): Promise<number[]> {\n const result: { archive: number }[] = await tx.$queryRaw`SELECT pgmq.archive(${queueName}, ${msgIds}::integer[])`;\n return result.map(a => a.archive);\n}\n\n// Queue Management\n\nexport async function createQueue(tx: Prisma.TransactionClient, queueName: string): Promise<void> {\n await tx.$executeRaw`SELECT pgmq.create(${queueName})`;\n}\n\nexport async function createPartitionedQueue(\n tx: Prisma.TransactionClient, \n queueName: string, \n partitionInterval: string = '10000', \n retentionInterval: string = '100000'\n): Promise<void> {\n await tx.$executeRaw`SELECT pgmq.create_partitioned(${queueName}, ${partitionInterval}, ${retentionInterval})`;\n}\n\nexport async function createUnloggedQueue(tx: Prisma.TransactionClient, queueName: string): Promise<void> {\n await tx.$executeRaw`SELECT pgmq.create_unlogged(${queueName})`;\n}\n\nexport async function detachArchive(tx: Prisma.TransactionClient, queueName: string): Promise<void> {\n await tx.$executeRaw`SELECT pgmq.detach_archive(${queueName})`;\n}\n\nexport async function dropQueue(tx: Prisma.TransactionClient, queueName: string): Promise<boolean> {\n const result: { drop_queue: boolean }[] = await tx.$queryRaw`SELECT pgmq.drop_queue(${queueName})`;\n const firstResult = result[0];\n if (!firstResult) {\n throw new Error('No result returned from pgmq.drop_queue');\n }\n return firstResult.drop_queue;\n}\n\n// Utilities\n\nexport async function setVt(\n tx: Prisma.TransactionClient, \n queueName: string, \n msgId: number, \n vtOffset: number\n): Promise<MessageRecord> {\n const result: MessageRecord[] = await tx.$queryRaw`SELECT * FROM pgmq.set_vt(${queueName}, ${msgId}::integer, ${vtOffset}::integer)`;\n const firstResult = result[0];\n if (!firstResult) {\n throw new Error('No result returned from pgmq.set_vt');\n }\n return firstResult;\n}\n\nexport async function listQueues(tx: Prisma.TransactionClient): Promise<QueueInfo[]> {\n const result: QueueInfo[] = await tx.$queryRaw`SELECT * FROM pgmq.list_queues()`;\n return result;\n}\n\nexport async function metrics(tx: Prisma.TransactionClient, queueName: string): Promise<QueueMetrics> {\n const result: QueueMetrics[] = await tx.$queryRaw`SELECT * FROM pgmq.metrics(${queueName})`;\n const firstResult = result[0];\n if (!firstResult) {\n throw new Error('No result returned from pgmq.metrics');\n }\n return firstResult;\n}\n\nexport async function metricsAll(tx: Prisma.TransactionClient): Promise<QueueMetrics[]> {\n const result: QueueMetrics[] = await tx.$queryRaw`SELECT * FROM pgmq.metrics_all()`;\n return result;\n}"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/pgmq.ts"],"sourcesContent":["import { Prisma } from '@prisma/client';\n\nexport type Task = Record<string, unknown>;\n\n// Message record type based on PGMQ documentation\nexport interface MessageRecord {\n msg_id: number;\n read_ct: number;\n enqueued_at: Date;\n vt: Date;\n message: Task;\n}\n\n// Queue metrics type\nexport interface QueueMetrics {\n queue_name: string;\n queue_length: number;\n newest_msg_age_sec: number | null;\n oldest_msg_age_sec: number | null;\n total_messages: number;\n scrape_time: Date;\n}\n\n// Queue info type\nexport interface QueueInfo {\n queue_name: string;\n created_at: Date;\n is_partitioned: boolean;\n is_unlogged: boolean;\n}\n\n// I expect that Prisma has `sql` defined\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst PrismaAny = Prisma as any;\n\nexport async function send(tx: Prisma.TransactionClient, queueName: string, msg: Task, delay?: number | Date): Promise<number> {\n const delayRepr = typeof delay === 'number' ? PrismaAny.sql`${delay}::integer` : PrismaAny.sql`${delay}`;\n const delaySql = delay ? PrismaAny.sql`, ${delayRepr}` : PrismaAny.sql``;\n const result: { send: number }[] = await tx.$queryRaw`SELECT pgmq.send(${queueName}, ${msg}${delaySql})`;\n const firstResult = result[0];\n if (!firstResult) {\n throw new Error('No result returned from pgmq.send');\n }\n return firstResult.send;\n}\n\nexport async function sendBatch(tx: Prisma.TransactionClient, queueName: string, msgs: Task[], delay?: number | Date): Promise<number[]> {\n const delayRepr = typeof delay === 'number' ? PrismaAny.sql`${delay}::integer` : PrismaAny.sql`${delay}`;\n const delaySql = delay ? PrismaAny.sql`, ${delayRepr}` : PrismaAny.sql``;\n const result: { send_batch: number }[] = await tx.$queryRaw`SELECT pgmq.send_batch(${queueName}, ${msgs}${delaySql})`;\n return result.map(a => a.send_batch);\n}\n\n// Reading Messages\n\nexport function read(\n tx: Prisma.TransactionClient, \n queueName: string, \n vt: number, \n qty: number = 1, \n conditional: Task = {}\n): Promise<MessageRecord[]> {\n return tx.$queryRaw`SELECT * FROM pgmq.read(${queueName}, ${vt}::integer, ${qty}::integer, ${conditional})` as Promise<MessageRecord[]>;\n}\n\nexport function readWithPoll(\n tx: Prisma.TransactionClient,\n queueName: string,\n vt: number,\n qty: number = 1,\n maxPollSeconds: number = 5,\n pollIntervalMs: number = 100,\n conditional: Task = {}\n): Promise<MessageRecord[]> {\n return tx.$queryRaw`SELECT * FROM pgmq.read_with_poll(${queueName}, ${vt}::integer, ${qty}::integer, ${maxPollSeconds}::integer, ${pollIntervalMs}::integer, ${conditional})` as Promise<MessageRecord[]>;\n}\n\nexport function pop(tx: Prisma.TransactionClient, queueName: string): Promise<MessageRecord[]> {\n return tx.$queryRaw`SELECT * FROM pgmq.pop(${queueName})` as Promise<MessageRecord[]>;\n}\n\n// Deleting/Archiving Messages\n\nexport async function deleteMessage(tx: Prisma.TransactionClient, queueName: string, msgId: number): Promise<boolean> {\n const result: { delete: boolean }[] = await tx.$queryRaw`SELECT pgmq.delete(${queueName}, ${msgId}::integer)`;\n const firstResult = result[0];\n if (!firstResult) {\n throw new Error('No result returned from pgmq.delete');\n }\n return firstResult.delete;\n}\n\nexport async function deleteBatch(tx: Prisma.TransactionClient, queueName: string, msgIds: number[]): Promise<number[]> {\n const result: { delete: number }[] = await tx.$queryRaw`SELECT pgmq.delete(${queueName}, ${msgIds}::integer[])`;\n return result.map(a => a.delete);\n}\n\nexport async function purgeQueue(tx: Prisma.TransactionClient, queueName: string): Promise<number> {\n const result: { purge_queue: number }[] = await tx.$queryRaw`SELECT pgmq.purge_queue(${queueName})`;\n const firstResult = result[0];\n if (!firstResult) {\n throw new Error('No result returned from pgmq.purge_queue');\n }\n return firstResult.purge_queue;\n}\n\nexport async function archive(tx: Prisma.TransactionClient, queueName: string, msgId: number): Promise<boolean> {\n const result: { archive: boolean }[] = await tx.$queryRaw`SELECT pgmq.archive(${queueName}, ${msgId}::integer)`;\n const firstResult = result[0];\n if (!firstResult) {\n throw new Error('No result returned from pgmq.archive');\n }\n return firstResult.archive;\n}\n\nexport async function archiveBatch(tx: Prisma.TransactionClient, queueName: string, msgIds: number[]): Promise<number[]> {\n const result: { archive: number }[] = await tx.$queryRaw`SELECT pgmq.archive(${queueName}, ${msgIds}::integer[])`;\n return result.map(a => a.archive);\n}\n\n// Queue Management\n\nexport async function createQueue(tx: Prisma.TransactionClient, queueName: string): Promise<void> {\n await tx.$executeRaw`SELECT pgmq.create(${queueName})`;\n}\n\nexport async function createPartitionedQueue(\n tx: Prisma.TransactionClient, \n queueName: string, \n partitionInterval: string = '10000', \n retentionInterval: string = '100000'\n): Promise<void> {\n await tx.$executeRaw`SELECT pgmq.create_partitioned(${queueName}, ${partitionInterval}, ${retentionInterval})`;\n}\n\nexport async function createUnloggedQueue(tx: Prisma.TransactionClient, queueName: string): Promise<void> {\n await tx.$executeRaw`SELECT pgmq.create_unlogged(${queueName})`;\n}\n\nexport async function detachArchive(tx: Prisma.TransactionClient, queueName: string): Promise<void> {\n await tx.$executeRaw`SELECT pgmq.detach_archive(${queueName})`;\n}\n\nexport async function dropQueue(tx: Prisma.TransactionClient, queueName: string): Promise<boolean> {\n const result: { drop_queue: boolean }[] = await tx.$queryRaw`SELECT pgmq.drop_queue(${queueName})`;\n const firstResult = result[0];\n if (!firstResult) {\n throw new Error('No result returned from pgmq.drop_queue');\n }\n return firstResult.drop_queue;\n}\n\n// Utilities\n\nexport async function setVt(\n tx: Prisma.TransactionClient, \n queueName: string, \n msgId: number, \n vtOffset: number\n): Promise<MessageRecord> {\n const result: MessageRecord[] = await tx.$queryRaw`SELECT * FROM pgmq.set_vt(${queueName}, ${msgId}::integer, ${vtOffset}::integer)`;\n const firstResult = result[0];\n if (!firstResult) {\n throw new Error('No result returned from pgmq.set_vt');\n }\n return firstResult;\n}\n\nexport async function listQueues(tx: Prisma.TransactionClient): Promise<QueueInfo[]> {\n const result: QueueInfo[] = await tx.$queryRaw`SELECT * FROM pgmq.list_queues()`;\n return result;\n}\n\nexport async function metrics(tx: Prisma.TransactionClient, queueName: string): Promise<QueueMetrics> {\n const result: QueueMetrics[] = await tx.$queryRaw`SELECT * FROM pgmq.metrics(${queueName})`;\n const firstResult = result[0];\n if (!firstResult) {\n throw new Error('No result returned from pgmq.metrics');\n }\n return firstResult;\n}\n\nexport async function metricsAll(tx: Prisma.TransactionClient): Promise<QueueMetrics[]> {\n const result: QueueMetrics[] = await tx.$queryRaw`SELECT * FROM pgmq.metrics_all()`;\n return result;\n}"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prisma-pgmq",
3
- "version": "0.1.0",
3
+ "version": "1.0.1",
4
4
  "description": "A Prisma PGMQ implementation providing type-safe message queue operations",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",