lonnymq 0.0.5 → 0.0.7

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/dist/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
- var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=Object.prototype.hasOwnProperty;var f=new WeakMap,J=(e)=>{var n=f.get(e),a;if(n)return n;if(n=R({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function")Q(e).map((_)=>!X.call(n,_)&&R(n,_,{get:()=>e[_],enumerable:!(a=V(e,_))||a.enumerable}));return f.set(e,n),n};var K=(e,n)=>{for(var a in n)R(e,a,{get:n[a],enumerable:!0,configurable:!0,set:(_)=>n[a]=()=>_})};var Ee={};K(Ee,{Queue:()=>x,MessageDequeueCommand:()=>u,MessageDeleteCommand:()=>h,MessageDeferCommand:()=>T,MessageCreateCommand:()=>o,ChannelPolicySetCommand:()=>m,ChannelPolicyClearCommand:()=>r});module.exports=J(Ee);var E=(e)=>({nodeType:"VALUE",value:e}),t=(e)=>({nodeType:"REF",value:e}),j=(e)=>({nodeType:"RAW",value:e}),Z=(e)=>{return`'${e.replace(/'/g,"''")}'`},ee=(e)=>{if(e===null)return"NULL";else if(typeof e==="string")return Z(e);else if(typeof e==="number")return e.toString();else if(typeof e==="boolean")return e?"TRUE":"FALSE";else if(e instanceof Date)return`'${e.toISOString()}'`;else if(typeof e==="bigint")return e.toString();else throw new Error(`Unsupported value type: ${typeof e}`)},ne=(e)=>{return`"${e.replace(/"/g,'""')}"`},te=(e)=>{if(e.nodeType==="VALUE")return ee(e.value);else if(e.nodeType==="REF")return ne(e.value);else if(e.nodeType==="RAW")return e.value;else throw new Error("Unsupported SQL node type")};var s=(e,...n)=>{let a=[];for(let _=0;_<e.length;_+=1)if(a.push(e[_]),_<n.length)a.push(te(n[_]));return j(a.join(""))};class r{schema;channelName;createdAt;constructor(e){this.schema=e.schema,this.channelName=e.channelName,this.createdAt=new Date}sortKeyGet(){return JSON.stringify([this.channelName,null,this.createdAt.toISOString()])}async execute(e){await e.query(s`
1
+ var{defineProperty:d,getOwnPropertyNames:V,getOwnPropertyDescriptor:X}=Object,K=Object.prototype.hasOwnProperty;var x=new WeakMap,J=(e)=>{var n=x.get(e),a;if(n)return n;if(n=d({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function")V(e).map((_)=>!K.call(n,_)&&d(n,_,{get:()=>e[_],enumerable:!(a=X(e,_))||a.enumerable}));return x.set(e,n),n};var j=(e,n)=>{for(var a in n)d(e,a,{get:n[a],enumerable:!0,configurable:!0,set:(_)=>n[a]=()=>_})};var re={};j(re,{Queue:()=>y,MessageDequeueCommand:()=>o,MessageDeleteCommand:()=>l,MessageDeferCommand:()=>h,MessageCreateCommand:()=>i,ChannelPolicySetCommand:()=>m,ChannelPolicyClearCommand:()=>r});module.exports=J(re);var E=(e)=>({nodeType:"VALUE",value:e}),t=(e)=>({nodeType:"REF",value:e}),Z=(e)=>({nodeType:"RAW",value:e}),ee=(e)=>{return`'${e.replace(/'/g,"''")}'`},ne=(e)=>{if(e===null)return"NULL";else if(typeof e==="string")return ee(e);else if(typeof e==="number")return e.toString();else if(typeof e==="boolean")return e?"TRUE":"FALSE";else if(e instanceof Date)return`'${e.toISOString()}'`;else if(typeof e==="bigint")return e.toString();else throw new Error(`Unsupported value type: ${typeof e}`)},te=(e)=>{return`"${e.replace(/"/g,'""')}"`},ae=(e)=>{if(e.nodeType==="VALUE")return ne(e.value);else if(e.nodeType==="REF")return te(e.value);else if(e.nodeType==="RAW")return e.value;else throw new Error("Unsupported SQL node type")};var s=(e,...n)=>{let a=[];for(let _=0;_<e.length;_+=1)if(a.push(e[_]),_<n.length)a.push(ae(n[_]));return Z(a.join(""))};class r{schema;channelName;createdAt;constructor(e){this.schema=e.schema,this.channelName=e.channelName,this.createdAt=new Date}sortKeyGet(){return JSON.stringify([this.channelName,null,this.createdAt.toISOString()])}async execute(e){await e.query(s`
2
2
  SELECT 1 FROM ${t(this.schema)}."channel_policy_clear"(
3
3
  $1
4
4
  )
@@ -9,16 +9,16 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
9
9
  $3::INTEGER,
10
10
  $4::INTEGER
11
11
  )
12
- `.value,[this.channelName,this.maxSize,this.maxConcurrency,this.releaseIntervalMs])}}var g=(e)=>{return e*1000},ae=(e)=>{return g(e*60)},p=(e)=>{return ae(e*60)};var C=require("node:crypto");class q{value;constructor(e){this.value=e}toString(e){return C.createHash("sha256").update(e).update(this.value).digest("base64").replace(/=/g,"")}}var N=new q("WAKE"),$=!1,d=g(0),F=p(1);var S=require("path"),__filename="/home/runner/work/lonnymq/lonnymq/src/core/path.ts",se=S.dirname(S.dirname(__filename)),_e=new RegExp(`^${se}/`),c=(e)=>{return e.replace(_e,"")};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/04-function-message-create.ts";var M={name:c(__filename),sql:(e)=>{return[s`
12
+ `.value,[this.channelName,this.maxSize,this.maxConcurrency,this.releaseIntervalMs])}}var R=(e)=>{return e*1000},se=(e)=>{return R(e*60)},f=(e)=>{return se(e*60)};var C=require("node:crypto");class p{value;constructor(e){this.value=e}toString(e){return C.createHash("sha256").update(e).update(this.value).digest("base64").replace(/=/g,"")}}var u=new p("WAKE"),$=!1,N=R(0),q=f(1);var g=require("path"),__filename="/home/runner/work/lonnymq/lonnymq/src/core/path.ts",_e=g.dirname(g.dirname(__filename)),ce=new RegExp(`^${_e}/`),c=(e)=>{return e.replace(ce,"")};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/04-function-message-create.ts";var F={name:c(__filename),sql:(e)=>{return[s`
13
13
  CREATE FUNCTION ${t(e.schema)}."message_create" (
14
+ p_id UUID,
14
15
  p_channel_name TEXT,
15
16
  p_name TEXT,
16
17
  p_content BYTEA,
17
18
  p_lock_ms INTEGER,
18
19
  p_delay_ms INTEGER
19
20
  ) RETURNS TABLE (
20
- result_code INTEGER,
21
- metadata JSON
21
+ result_code INTEGER
22
22
  ) AS $$
23
23
  DECLARE
24
24
  v_now TIMESTAMP;
@@ -70,18 +70,19 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
70
70
 
71
71
  IF v_channel_state."current_size" >= v_channel_policy."max_size" THEN
72
72
  RETURN QUERY SELECT
73
- ${E(1)},
74
- JSON_BUILD_OBJECT();
73
+ ${E(1)};
75
74
  RETURN;
76
75
  END IF;
77
76
 
78
77
  INSERT INTO ${t(e.schema)}."message" (
78
+ "id",
79
79
  "channel_name",
80
80
  "name",
81
81
  "content",
82
82
  "lock_ms",
83
83
  "dequeue_after"
84
84
  ) VALUES (
85
+ p_id,
85
86
  p_channel_name,
86
87
  p_name,
87
88
  p_content,
@@ -94,14 +95,12 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
94
95
  "name" = EXCLUDED."name"
95
96
  RETURNING
96
97
  "id",
97
- "xmax",
98
98
  "dequeue_after"
99
99
  INTO v_message;
100
100
 
101
- IF v_message."xmax" != 0 THEN
101
+ IF v_message."id" != p_id THEN
102
102
  RETURN QUERY SELECT
103
- ${E(2)},
104
- JSON_BUILD_OBJECT('id', v_message."id");
103
+ ${E(2)};
105
104
  RETURN;
106
105
  END IF;
107
106
 
@@ -123,20 +122,20 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
123
122
  PERFORM ${t(e.schema)}."wake"(GREATEST(0, p_delay_ms));
124
123
 
125
124
  RETURN QUERY SELECT
126
- ${E(0)},
127
- JSON_BUILD_OBJECT('id', v_message."id");
125
+ ${E(0)};
128
126
  RETURN;
129
127
  END;
130
128
  $$ LANGUAGE plpgsql;
131
- `]}};class o{schema;channelName;name;content;lockMs;delayMs;createdAt;constructor(e){let n=e.name??null,a=e.lockMs===void 0?F:Math.max(0,e.lockMs),_=e.delayMs===void 0?d:e.delayMs;this.schema=e.schema,this.channelName=e.channelName,this.content=e.content,this.name=n,this.lockMs=a,this.delayMs=_,this.createdAt=new Date}async execute(e){let n=await e.query(s`
129
+ `]}};var M=require("node:crypto");class i{schema;channelName;name;content;lockMs;id;delayMs;createdAt;constructor(e){let n=e.name??null,a=e.lockMs===void 0?q:Math.max(0,e.lockMs),_=e.delayMs===void 0?N:e.delayMs;this.id=M.randomUUID(),this.schema=e.schema,this.channelName=e.channelName,this.content=e.content,this.name=n,this.lockMs=a,this.delayMs=_,this.createdAt=new Date}async execute(e){let n=await e.query(s`
132
130
  SELECT * FROM ${t(this.schema)}."message_create"(
133
131
  $1,
134
132
  $2,
135
133
  $3,
136
- $4::INTEGER,
137
- $5::INTEGER
134
+ $4,
135
+ $5::INTEGER,
136
+ $6::INTEGER
138
137
  )
139
- `.value,[this.channelName,this.name,this.content,this.lockMs,this.delayMs]).then((a)=>a.rows[0]);if(n.result_code===1)return{resultType:"MESSAGE_DROPPED"};else if(n.result_code===2)return{resultType:"MESSAGE_DEDUPLICATED",id:BigInt(n.metadata.id)};else if(n.result_code===0)return{resultType:"MESSAGE_CREATED",id:BigInt(n.metadata.id)};else throw new Error("Unexpected result")}}var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/05-function-message-dequeue.ts";var G={name:c(__filename),sql:(e)=>{return[s`
138
+ `.value,[this.id,this.channelName,this.name,this.content,this.lockMs,this.delayMs]).then((a)=>a.rows[0]);if(n.result_code===1)return{resultType:"MESSAGE_DROPPED"};else if(n.result_code===2)return{resultType:"MESSAGE_DEDUPLICATED"};else if(n.result_code===0)return{resultType:"MESSAGE_CREATED"};else throw new Error("Unexpected result")}}var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/05-function-message-dequeue.ts";var G={name:c(__filename),sql:(e)=>{return[s`
140
139
  CREATE FUNCTION ${t(e.schema)}."message_dequeue" ()
141
140
  RETURNS TABLE (
142
141
  result_code INTEGER,
@@ -146,7 +145,6 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
146
145
  ) AS $$
147
146
  DECLARE
148
147
  v_now TIMESTAMP;
149
- v_dequeue_nonce UUID;
150
148
  v_channel_state RECORD;
151
149
  v_message_locked RECORD;
152
150
  v_retry_after TIMESTAMP;
@@ -155,7 +153,6 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
155
153
  v_message_next_dequeue_after TIMESTAMP;
156
154
  BEGIN
157
155
  v_now := NOW();
158
- v_dequeue_nonce := GEN_RANDOM_UUID();
159
156
 
160
157
  SELECT
161
158
  "message"."id",
@@ -177,23 +174,19 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
177
174
  IF v_message_locked."dequeue_after" <= v_now THEN
178
175
  UPDATE ${t(e.schema)}."message" SET
179
176
  "num_attempts" = v_message_locked."num_attempts" + 1,
180
- "dequeue_after" = v_now + (v_message_locked."lock_ms" * INTERVAL '1 millisecond'),
181
- "dequeue_nonce" = v_dequeue_nonce
177
+ "dequeue_after" = v_now + (v_message_locked."lock_ms" * INTERVAL '1 millisecond')
182
178
  WHERE "id" = v_message_locked."id";
183
179
 
184
180
  PERFORM ${t(e.schema)}."wake"(v_message_locked."lock_ms");
185
181
 
186
182
  RETURN QUERY SELECT
187
183
  ${E(1)},
188
- NULL::BYTEA,
189
- NULL::BYTEA,
184
+ v_message_locked.content,
185
+ v_message_locked.state,
190
186
  JSON_BUILD_OBJECT(
191
187
  'id', v_message_locked.id,
192
188
  'channel_name', v_message_locked.channel_name,
193
- 'state', v_message_locked.state,
194
189
  'name', v_message_locked.name,
195
- 'dequeue_nonce', v_dequeue_nonce,
196
- 'content', v_message_locked.content,
197
190
  'num_attempts', v_message_locked.num_attempts
198
191
  );
199
192
  RETURN;
@@ -246,7 +239,6 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
246
239
  UPDATE ${t(e.schema)}."message" SET
247
240
  "is_locked" = TRUE,
248
241
  "num_attempts" = v_message_dequeue."num_attempts" + 1,
249
- "dequeue_nonce" = v_dequeue_nonce,
250
242
  "dequeue_after" = v_now + (v_message_dequeue."lock_ms" * INTERVAL '1 millisecond')
251
243
  WHERE "id" = v_message_dequeue."id";
252
244
 
@@ -288,24 +280,22 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
288
280
  JSON_BUILD_OBJECT(
289
281
  'id', v_message_dequeue.id,
290
282
  'channel_name', v_message_dequeue.channel_name,
291
- 'dequeue_nonce', v_dequeue_nonce,
292
283
  'name', v_message_dequeue.name,
293
284
  'num_attempts', v_message_dequeue.num_attempts
294
285
  );
295
286
  RETURN;
296
287
  END;
297
288
  $$ LANGUAGE plpgsql;
298
- `]}};class u{schema;constructor(e){this.schema=e.schema}async execute(e){let n=await e.query(s`
289
+ `]}};class o{schema;constructor(e){this.schema=e.schema}async execute(e){let n=await e.query(s`
299
290
  SELECT
300
291
  result_code,
301
292
  metadata,
302
293
  content,
303
294
  state
304
295
  FROM ${t(this.schema)}."message_dequeue"()
305
- `.value,[]).then((a)=>a.rows[0]);if(n.result_code===0)return{resultType:"MESSAGE_NOT_AVAILABLE",retryMs:n.metadata.retry_ms};else if(n.result_code===1)return{resultType:"MESSAGE_DEQUEUED",message:{id:BigInt(n.metadata.id),channelName:n.metadata.channel_name,name:n.metadata.name,content:n.content,dequeueNonce:n.metadata.dequeue_nonce,state:n.state,numAttempts:n.metadata.num_attempts}};else throw new Error("Unexpected dequeue result")}}var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/06-function-message-delete.ts";var B={name:c(__filename),sql:(e)=>{return[s`
296
+ `.value,[]).then((a)=>a.rows[0]);if(n.result_code===0)return{resultType:"MESSAGE_NOT_AVAILABLE",retryMs:n.metadata.retry_ms};else if(n.result_code===1)return{resultType:"MESSAGE_DEQUEUED",message:{id:n.metadata.id,channelName:n.metadata.channel_name,name:n.metadata.name,content:n.content,state:n.state,numAttempts:n.metadata.num_attempts}};else throw new Error("Unexpected dequeue result")}}var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/06-function-message-delete.ts";var P={name:c(__filename),sql:(e)=>{return[s`
306
297
  CREATE FUNCTION ${t(e.schema)}."message_delete" (
307
- p_id BIGINT,
308
- p_dequeue_nonce UUID
298
+ p_id UUID
309
299
  )
310
300
  RETURNS TABLE (
311
301
  result_code INTEGER
@@ -318,7 +308,7 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
318
308
  SELECT
319
309
  "message"."id",
320
310
  "message"."channel_name",
321
- "message"."dequeue_nonce"
311
+ "message"."is_locked"
322
312
  FROM ${t(e.schema)}."message"
323
313
  WHERE "id" = p_id
324
314
  FOR UPDATE
@@ -328,7 +318,7 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
328
318
  RETURN QUERY SELECT
329
319
  ${E(0)};
330
320
  RETURN;
331
- ELSEIF v_message."dequeue_nonce" != p_dequeue_nonce THEN
321
+ ELSIF NOT v_message."is_locked" THEN
332
322
  RETURN QUERY SELECT
333
323
  ${E(1)};
334
324
  RETURN;
@@ -368,15 +358,13 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
368
358
  RETURN;
369
359
  END;
370
360
  $$ LANGUAGE plpgsql;
371
- `]}};class h{schema;id;dequeueNonce;constructor(e){this.schema=e.schema,this.id=e.id,this.dequeueNonce=e.dequeueNonce}async execute(e){let n=await e.query(s`
361
+ `]}};class l{schema;id;constructor(e){this.schema=e.schema,this.id=e.id}async execute(e){let n=await e.query(s`
372
362
  SELECT * FROM ${t(this.schema)}."message_delete"(
373
- $1,
374
- $2
363
+ $1
375
364
  )
376
- `.value,[this.id,this.dequeueNonce]).then((a)=>a.rows[0]);if(n.result_code===0)return{resultType:"MESSAGE_NOT_FOUND"};else if(n.result_code===1)return{resultType:"STATE_INVALID"};else if(n.result_code===2)return{resultType:"MESSAGE_DELETED"};else throw new Error("Unexpected result")}}var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/07-function-message-defer.ts";var P={name:c(__filename),sql:(e)=>{return[s`
365
+ `.value,[this.id]).then((a)=>a.rows[0]);if(n.result_code===0)return{resultType:"MESSAGE_NOT_FOUND"};else if(n.result_code===1)return{resultType:"STATE_INVALID"};else if(n.result_code===2)return{resultType:"MESSAGE_DELETED"};else throw new Error("Unexpected result")}}var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/07-function-message-defer.ts";var B={name:c(__filename),sql:(e)=>{return[s`
377
366
  CREATE FUNCTION ${t(e.schema)}."message_defer" (
378
- p_id BIGINT,
379
- p_dequeue_nonce UUID,
367
+ p_id UUID,
380
368
  p_delay_ms INTEGER,
381
369
  p_state BYTEA
382
370
  )
@@ -391,7 +379,7 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
391
379
  SELECT
392
380
  "message"."id",
393
381
  "message"."channel_name",
394
- "message"."dequeue_nonce"
382
+ "message"."is_locked"
395
383
  FROM ${t(e.schema)}."message"
396
384
  WHERE "id" = p_id
397
385
  FOR UPDATE
@@ -401,7 +389,7 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
401
389
  RETURN QUERY SELECT
402
390
  ${E(0)};
403
391
  RETURN;
404
- ELSEIF v_message."dequeue_nonce" != p_dequeue_nonce THEN
392
+ ELSIF NOT v_message."is_locked" THEN
405
393
  RETURN QUERY SELECT
406
394
  ${E(1)};
407
395
  RETURN;
@@ -446,18 +434,17 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
446
434
  RETURN;
447
435
  END;
448
436
  $$ LANGUAGE plpgsql;
449
- `]}};class T{schema;id;dequeueNonce;delayMs;state;constructor(e){let n=e.delayMs===void 0?d:e.delayMs;this.schema=e.schema,this.id=e.id,this.dequeueNonce=e.dequeueNonce,this.delayMs=n,this.state=e.state??null}async execute(e){let n=await e.query(s`
437
+ `]}};class h{schema;id;delayMs;state;constructor(e){let n=e.delayMs===void 0?N:e.delayMs;this.schema=e.schema,this.id=e.id,this.delayMs=n,this.state=e.state??null}async execute(e){let n=await e.query(s`
450
438
  SELECT * FROM ${t(this.schema)}."message_defer"(
451
439
  $1,
452
440
  $2,
453
- $3,
454
- $4
441
+ $3
455
442
  )
456
- `.value,[this.id,this.dequeueNonce,this.delayMs,this.state]).then((a)=>a.rows[0]);if(n.result_code===0)return{resultType:"MESSAGE_NOT_FOUND"};else if(n.result_code===1)return{resultType:"STATE_INVALID"};else if(n.result_code===2)return{resultType:"MESSAGE_DEFERRED"};else throw new Error("Unexpected result")}}var H=(e)=>{let n=e.split(`
457
- `),a=Number.MAX_SAFE_INTEGER;for(let _ of n){if(_.trim().length===0)continue;let l=_.search(/\S/);a=Math.min(a,l)}return n.map((_)=>_.slice(a)).join(`
458
- `).trim()};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/00-table-channel-policy.ts",b={name:c(__filename),sql:(e)=>{return[s`
443
+ `.value,[this.id,this.delayMs,this.state]).then((a)=>a.rows[0]);if(n.result_code===0)return{resultType:"MESSAGE_NOT_FOUND"};else if(n.result_code===1)return{resultType:"STATE_INVALID"};else if(n.result_code===2)return{resultType:"MESSAGE_DEFERRED"};else throw new Error("Unexpected result")}}var H=(e)=>{let n=e.split(`
444
+ `),a=Number.MAX_SAFE_INTEGER;for(let _ of n){if(_.trim().length===0)continue;let T=_.search(/\S/);a=Math.min(a,T)}return n.map((_)=>_.slice(a)).join(`
445
+ `).trim()};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/00-table-channel-policy.ts",k={name:c(__filename),sql:(e)=>{return[s`
459
446
  CREATE TABLE ${t(e.schema)}."channel_policy" (
460
- "id" BIGSERIAL NOT NULL,
447
+ "id" UUID NOT NULL DEFAULT GEN_RANDOM_UUID(),
461
448
  "name" TEXT NOT NULL,
462
449
  "max_size" INTEGER,
463
450
  "max_concurrency" INTEGER,
@@ -467,16 +454,16 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
467
454
  `,s`
468
455
  CREATE UNIQUE INDEX "channel_policy_name_ux"
469
456
  ON ${t(e.schema)}."channel_policy" ("name");
470
- `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/01-table-channel-state.ts",k={name:c(__filename),sql:(e)=>{return[s`
457
+ `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/01-table-channel-state.ts",b={name:c(__filename),sql:(e)=>{return[s`
471
458
  CREATE TABLE ${t(e.schema)}."channel_state" (
472
- "id" BIGSERIAL NOT NULL,
459
+ "id" UUID NOT NULL DEFAULT GEN_RANDOM_UUID(),
473
460
  "name" TEXT NOT NULL,
474
461
  "max_size" INTEGER,
475
462
  "max_concurrency" INTEGER,
476
463
  "release_interval_ms" INTEGER,
477
464
  "current_size" INTEGER NOT NULL,
478
465
  "current_concurrency" INTEGER NOT NULL,
479
- "message_next_id" BIGINT,
466
+ "message_next_id" UUID,
480
467
  "message_next_dequeue_after" TIMESTAMP,
481
468
  PRIMARY KEY ("id")
482
469
  );
@@ -491,9 +478,8 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
491
478
  AND ("max_concurrency" IS NULL OR "current_concurrency" < "max_concurrency");
492
479
  `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/02-table-message.ts",z={name:c(__filename),sql:(e)=>{return[s`
493
480
  CREATE TABLE ${t(e.schema)}."message" (
494
- "id" BIGSERIAL NOT NULL,
481
+ "id" UUID NOT NULL,
495
482
  "channel_name" TEXT NOT NULL,
496
- "dequeue_nonce" UUID,
497
483
  "name" TEXT,
498
484
  "content" BYTEA NOT NULL,
499
485
  "state" BYTEA,
@@ -521,7 +507,7 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
521
507
  ON ${t(e.schema)}."message" (
522
508
  "dequeue_after" ASC
523
509
  ) WHERE "is_locked";
524
- `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/03-function-wake.ts",w={name:c(__filename),sql:(e)=>{let n=N.toString(e.schema);return[s`
510
+ `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/03-function-wake.ts",w={name:c(__filename),sql:(e)=>{let n=u.toString(e.schema);return[s`
525
511
  CREATE FUNCTION ${t(e.schema)}."wake" (
526
512
  p_delay_ms INTEGER
527
513
  ) RETURNS VOID AS $$
@@ -595,4 +581,4 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
595
581
  PERFORM ${t(e.schema)}."wake"(0);
596
582
  END;
597
583
  $$ LANGUAGE plpgsql;
598
- `]}};class i{value;isSet;constructor(){this.isSet=!1,this.value=null}get(){return this.isSet?{resultType:"RESULT_SET",value:this.value}:{resultType:"RESULT_NOT_SET"}}set(e){this.isSet=!0,this.value=e}}class A{schema;channelName;registerFn;constructor(e){this.schema=e.schema,this.channelName=e.channelName,this.registerFn=e.registerFn}create(e){let n=new o({schema:this.schema,channelName:this.channelName,name:e.name,content:e.content,lockMs:e.lockMs,delayMs:e.delayMs}),a=new i;return this.registerFn({sortKey:JSON.stringify([n.channelName,n.name,n.createdAt.toISOString()]),execute:(_)=>n.execute(_).then((l)=>a.set(l))}),a}}class I{schema;channelName;registerFn;constructor(e){this.schema=e.schema,this.channelName=e.channelName,this.registerFn=e.registerFn}set(e){let n=new m({schema:this.schema,channelName:this.channelName,maxConcurrency:e.maxConcurrency,maxSize:e.maxSize,releaseIntervalMs:e.releaseIntervalMs}),a=new i;return this.registerFn({sortKey:JSON.stringify([n.channelName,null,n.createdAt.toISOString()]),execute:(_)=>n.execute(_).then((l)=>a.set(l))}),a}clear(){let e=new r({schema:this.schema,channelName:this.channelName}),n=new i;return this.registerFn({sortKey:JSON.stringify([e.channelName,null,e.createdAt.toISOString()]),execute:(a)=>e.execute(a).then((_)=>n.set(_))}),n}}class L{policy;message;constructor(e){this.message=new A(e),this.policy=new I(e)}}var ce=(e,n)=>{return e.sortKey.localeCompare(n.sortKey)};class v{commands;schema;constructor(e){this.commands=[],this.schema=e.schema}channel(e){return new L({schema:this.schema,channelName:e,registerFn:(n)=>{this.commands.push(n)}})}async execute(e){for(let n of this.commands.sort(ce))await n.execute(e.databaseClient)}}class U{schema;channelName;constructor(e){this.schema=e.schema,this.channelName=e.channelName}async create(e){return new o({schema:this.schema,channelName:this.channelName,name:e.name,content:e.content,lockMs:e.lockMs,delayMs:e.delayMs}).execute(e.databaseClient)}}class O{schema;channelName;constructor(e){this.schema=e.schema,this.channelName=e.channelName}set(e){return new m({schema:this.schema,channelName:this.channelName,maxConcurrency:e.maxConcurrency,maxSize:e.maxSize,releaseIntervalMs:e.releaseIntervalMs}).execute(e.databaseClient)}clear(e){return new r({schema:this.schema,channelName:this.channelName}).execute(e.databaseClient)}}class y{policy;message;constructor(e){this.message=new U({schema:e.schema,channelName:e.channelName}),this.policy=new O({schema:e.schema,channelName:e.channelName})}}class D{schema;id;channelName;name;content;dequeueNonce;state;numAttempts;constructor(e){this.schema=e.schema,this.id=e.id,this.channelName=e.channelName,this.dequeueNonce=e.dequeueNonce,this.name=e.name,this.content=e.content,this.state=e.state,this.numAttempts=e.numAttempts}async defer(e){return new T({schema:this.schema,id:this.id,dequeueNonce:this.dequeueNonce,delayMs:e.delayMs,state:e.state}).execute(e.databaseClient)}async delete(e){return new h({schema:this.schema,id:this.id,dequeueNonce:this.dequeueNonce}).execute(e.databaseClient)}}class x{schema;constructor(e){this.schema=e}async dequeue(e){let a=await new u({schema:this.schema}).execute(e.databaseClient);if(a.resultType==="MESSAGE_DEQUEUED")return{resultType:"MESSAGE_DEQUEUED",message:new D({schema:this.schema,id:a.message.id,dequeueNonce:a.message.dequeueNonce,channelName:a.message.channelName,name:a.message.name,content:a.message.content,state:a.message.state,numAttempts:a.message.numAttempts})};else return a}channel(e){return new y({schema:this.schema,channelName:e})}batch(){return new v({schema:this.schema})}migrations(e){return[b,k,z,w,M,G,B,P,W,Y].map((n)=>({name:n.name,sql:n.sql({schema:this.schema,useWake:e.useWake??$}).map((a)=>H(a.value))})).sort((n,a)=>n.name.localeCompare(a.name))}wakeChannel(){return N.toString(this.schema)}}
584
+ `]}};class S{schema;channelName;registerFn;constructor(e){this.schema=e.schema,this.channelName=e.channelName,this.registerFn=e.registerFn}create(e){let n=new i({schema:this.schema,channelName:this.channelName,name:e.name,content:e.content,lockMs:e.lockMs,delayMs:e.delayMs}),a=new Promise((_)=>{this.registerFn({sortKey:JSON.stringify([n.channelName,n.name,n.createdAt.toISOString()]),execute:(T)=>n.execute(T).then((Q)=>_(Q))})});return{messageId:n.id,promise:a}}}class A{schema;channelName;registerFn;constructor(e){this.schema=e.schema,this.channelName=e.channelName,this.registerFn=e.registerFn}set(e){let n=new m({schema:this.schema,channelName:this.channelName,maxConcurrency:e.maxConcurrency,maxSize:e.maxSize,releaseIntervalMs:e.releaseIntervalMs});this.registerFn({sortKey:JSON.stringify([n.channelName,null,n.createdAt.toISOString()]),execute:async(a)=>{await n.execute(a)}})}clear(){let e=new r({schema:this.schema,channelName:this.channelName});this.registerFn({sortKey:JSON.stringify([e.channelName,null,e.createdAt.toISOString()]),execute:async(n)=>{await e.execute(n)}})}}class I{policy;message;constructor(e){this.message=new S(e),this.policy=new A(e)}}var Ee=(e,n)=>{return e.sortKey.localeCompare(n.sortKey)};class L{commands;schema;constructor(e){this.commands=[],this.schema=e.schema}channel(e){return new I({schema:this.schema,channelName:e,registerFn:(n)=>{this.commands.push(n)}})}async execute(e){for(let n of this.commands.sort(Ee))await n.execute(e.databaseClient)}}class U{schema;channelName;constructor(e){this.schema=e.schema,this.channelName=e.channelName}async create(e){return new i({schema:this.schema,channelName:this.channelName,name:e.name,content:e.content,lockMs:e.lockMs,delayMs:e.delayMs}).execute(e.databaseClient)}}class D{schema;channelName;constructor(e){this.schema=e.schema,this.channelName=e.channelName}set(e){return new m({schema:this.schema,channelName:this.channelName,maxConcurrency:e.maxConcurrency,maxSize:e.maxSize,releaseIntervalMs:e.releaseIntervalMs}).execute(e.databaseClient)}clear(e){return new r({schema:this.schema,channelName:this.channelName}).execute(e.databaseClient)}}class O{policy;message;constructor(e){this.message=new U({schema:e.schema,channelName:e.channelName}),this.policy=new D({schema:e.schema,channelName:e.channelName})}}class v{schema;id;channelName;name;content;state;numAttempts;constructor(e){this.schema=e.schema,this.id=e.id,this.channelName=e.channelName,this.name=e.name,this.content=e.content,this.state=e.state,this.numAttempts=e.numAttempts}async defer(e){return new h({schema:this.schema,id:this.id,delayMs:e.delayMs,state:e.state}).execute(e.databaseClient)}async delete(e){return new l({schema:this.schema,id:this.id}).execute(e.databaseClient)}}class y{schema;constructor(e){this.schema=e}async dequeue(e){let a=await new o({schema:this.schema}).execute(e.databaseClient);if(a.resultType==="MESSAGE_DEQUEUED")return{resultType:"MESSAGE_DEQUEUED",message:new v({schema:this.schema,id:a.message.id,channelName:a.message.channelName,name:a.message.name,content:a.message.content,state:a.message.state,numAttempts:a.message.numAttempts})};else return a}channel(e){return new O({schema:this.schema,channelName:e})}batch(){return new L({schema:this.schema})}migrations(e){return[k,b,z,w,F,G,P,B,W,Y].map((n)=>({name:n.name,sql:n.sql({schema:this.schema,useWake:e.useWake??$}).map((a)=>H(a.value))})).sort((n,a)=>n.name.localeCompare(a.name))}wakeChannel(){return u.toString(this.schema)}}
package/dist/index.d.ts CHANGED
@@ -1,18 +1,5 @@
1
1
  // Generated by dts-bundle-generator v9.5.1
2
2
 
3
- export type DeferredGetResult<T> = {
4
- resultType: "RESULT_NOT_SET";
5
- } | {
6
- resultType: "RESULT_SET";
7
- value: T;
8
- };
9
- export declare class Deferred<T> {
10
- private value;
11
- private isSet;
12
- constructor();
13
- get(): DeferredGetResult<T>;
14
- set(value: T): void;
15
- }
16
3
  export type DatabaseClientQueryResult = {
17
4
  rows: Array<Record<string, unknown>>;
18
5
  };
@@ -49,11 +36,9 @@ export declare class ChannelPolicySetCommand {
49
36
  }
50
37
  export type MessageCreateCommandResultMessageCreated = {
51
38
  resultType: "MESSAGE_CREATED";
52
- id: bigint;
53
39
  };
54
40
  export type MessageCreateCommandResultMessageDeduplicated = {
55
41
  resultType: "MESSAGE_DEDUPLICATED";
56
- id: bigint;
57
42
  };
58
43
  export type MessageCreateCommandResultMessageDropped = {
59
44
  resultType: "MESSAGE_DROPPED";
@@ -65,6 +50,7 @@ export declare class MessageCreateCommand {
65
50
  readonly name: string | null;
66
51
  readonly content: Buffer;
67
52
  readonly lockMs: number;
53
+ readonly id: string;
68
54
  readonly delayMs: number;
69
55
  readonly createdAt: Date;
70
56
  constructor(params: {
@@ -80,11 +66,10 @@ export declare class MessageCreateCommand {
80
66
  export type MessageDequeueCommandResultMessageDequeued = {
81
67
  resultType: "MESSAGE_DEQUEUED";
82
68
  message: {
83
- id: bigint;
69
+ id: string;
84
70
  channelName: string;
85
71
  name: string | null;
86
72
  content: Buffer;
87
- dequeueNonce: string;
88
73
  state: Buffer | null;
89
74
  numAttempts: number;
90
75
  };
@@ -113,12 +98,10 @@ export type MessageDeleteCommandResultMessageDeleted = {
113
98
  export type MessageDeleteCommandResult = MessageDeleteCommandResultMessageNotFound | MessageDeleteCommandResultStateInvalid | MessageDeleteCommandResultMessageDeleted;
114
99
  export declare class MessageDeleteCommand {
115
100
  readonly schema: string;
116
- readonly id: bigint;
117
- readonly dequeueNonce: string;
101
+ readonly id: string;
118
102
  constructor(params: {
119
103
  schema: string;
120
- id: bigint;
121
- dequeueNonce: string;
104
+ id: string;
122
105
  });
123
106
  execute(databaseClient: DatabaseClient): Promise<MessageDeleteCommandResult>;
124
107
  }
@@ -134,19 +117,21 @@ export type MessageDeferCommandResultMessageDeferred = {
134
117
  export type MessageDeferCommandResult = MessageDeferCommandResultMessageNotFound | MessageDeferCommandResultStateInvalid | MessageDeferCommandResultMessageDeferred;
135
118
  export declare class MessageDeferCommand {
136
119
  readonly schema: string;
137
- readonly id: bigint;
138
- readonly dequeueNonce: string;
120
+ readonly id: string;
139
121
  readonly delayMs: number;
140
122
  readonly state: Buffer | null;
141
123
  constructor(params: {
142
124
  schema: string;
143
- id: bigint;
144
- dequeueNonce: string;
125
+ id: string;
145
126
  delayMs?: number;
146
127
  state?: Buffer | null;
147
128
  });
148
129
  execute(databaseClient: DatabaseClient): Promise<MessageDeferCommandResult>;
149
130
  }
131
+ export type QueueBatchChannelMessageCreateResult = {
132
+ messageId: string;
133
+ promise: Promise<MessageCreateCommandResult>;
134
+ };
150
135
  export declare class QueueBatchChannelMessage {
151
136
  private readonly schema;
152
137
  private readonly channelName;
@@ -161,7 +146,7 @@ export declare class QueueBatchChannelMessage {
161
146
  lockMs?: number;
162
147
  content: Buffer;
163
148
  delayMs?: number;
164
- }): Deferred<MessageCreateCommandResult>;
149
+ }): QueueBatchChannelMessageCreateResult;
165
150
  }
166
151
  export declare class QueueBatchChannelPolicy {
167
152
  private readonly schema;
@@ -176,8 +161,8 @@ export declare class QueueBatchChannelPolicy {
176
161
  maxConcurrency?: number | null;
177
162
  maxSize?: number | null;
178
163
  releaseIntervalMs?: number | null;
179
- }): Deferred<void>;
180
- clear(): Deferred<void>;
164
+ }): void;
165
+ clear(): void;
181
166
  }
182
167
  export declare class QueueBatchChannel {
183
168
  readonly policy: QueueBatchChannelPolicy;
@@ -246,17 +231,15 @@ export declare class QueueChannel {
246
231
  }
247
232
  export declare class QueueMessage {
248
233
  private readonly schema;
249
- readonly id: bigint;
234
+ readonly id: string;
250
235
  readonly channelName: string;
251
236
  readonly name: string | null;
252
237
  readonly content: Buffer;
253
- readonly dequeueNonce: string;
254
238
  readonly state: Buffer | null;
255
239
  readonly numAttempts: number;
256
240
  constructor(params: {
257
241
  schema: string;
258
- id: bigint;
259
- dequeueNonce: string;
242
+ id: string;
260
243
  channelName: string;
261
244
  name: string | null;
262
245
  content: Buffer;
package/dist/index.js CHANGED
@@ -1,24 +1,24 @@
1
- var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=>({nodeType:"RAW",value:e}),W=(e)=>{return`'${e.replace(/'/g,"''")}'`},Y=(e)=>{if(e===null)return"NULL";else if(typeof e==="string")return W(e);else if(typeof e==="number")return e.toString();else if(typeof e==="boolean")return e?"TRUE":"FALSE";else if(e instanceof Date)return`'${e.toISOString()}'`;else if(typeof e==="bigint")return e.toString();else throw new Error(`Unsupported value type: ${typeof e}`)},Q=(e)=>{return`"${e.replace(/"/g,'""')}"`},V=(e)=>{if(e.nodeType==="VALUE")return Y(e.value);else if(e.nodeType==="REF")return Q(e.value);else if(e.nodeType==="RAW")return e.value;else throw new Error("Unsupported SQL node type")};var s=(e,...t)=>{let a=[];for(let _=0;_<e.length;_+=1)if(a.push(e[_]),_<t.length)a.push(V(t[_]));return w(a.join(""))};class r{schema;channelName;createdAt;constructor(e){this.schema=e.schema,this.channelName=e.channelName,this.createdAt=new Date}sortKeyGet(){return JSON.stringify([this.channelName,null,this.createdAt.toISOString()])}async execute(e){await e.query(s`
1
+ var c=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=>({nodeType:"RAW",value:e}),W=(e)=>{return`'${e.replace(/'/g,"''")}'`},Y=(e)=>{if(e===null)return"NULL";else if(typeof e==="string")return W(e);else if(typeof e==="number")return e.toString();else if(typeof e==="boolean")return e?"TRUE":"FALSE";else if(e instanceof Date)return`'${e.toISOString()}'`;else if(typeof e==="bigint")return e.toString();else throw new Error(`Unsupported value type: ${typeof e}`)},Q=(e)=>{return`"${e.replace(/"/g,'""')}"`},V=(e)=>{if(e.nodeType==="VALUE")return Y(e.value);else if(e.nodeType==="REF")return Q(e.value);else if(e.nodeType==="RAW")return e.value;else throw new Error("Unsupported SQL node type")};var a=(e,...t)=>{let s=[];for(let E=0;E<e.length;E+=1)if(s.push(e[E]),E<t.length)s.push(V(t[E]));return w(s.join(""))};class r{schema;channelName;createdAt;constructor(e){this.schema=e.schema,this.channelName=e.channelName,this.createdAt=new Date}sortKeyGet(){return JSON.stringify([this.channelName,null,this.createdAt.toISOString()])}async execute(e){await e.query(a`
2
2
  SELECT 1 FROM ${n(this.schema)}."channel_policy_clear"(
3
3
  $1
4
4
  )
5
- `.value,[this.channelName])}}class m{schema;channelName;maxSize;maxConcurrency;releaseIntervalMs;createdAt;constructor(e){this.schema=e.schema,this.channelName=e.channelName;let t=e.maxConcurrency??null;this.maxConcurrency=t!==null?Math.max(0,t):null;let a=e.maxSize??null;this.maxSize=a!==null?Math.max(0,a):null;let _=e.releaseIntervalMs??null;this.releaseIntervalMs=_!==null?Math.max(0,_):null,this.createdAt=new Date}sortKeyGet(){return JSON.stringify([this.channelName,null,this.createdAt.toISOString()])}async execute(e){await e.query(s`
5
+ `.value,[this.channelName])}}class m{schema;channelName;maxSize;maxConcurrency;releaseIntervalMs;createdAt;constructor(e){this.schema=e.schema,this.channelName=e.channelName;let t=e.maxConcurrency??null;this.maxConcurrency=t!==null?Math.max(0,t):null;let s=e.maxSize??null;this.maxSize=s!==null?Math.max(0,s):null;let E=e.releaseIntervalMs??null;this.releaseIntervalMs=E!==null?Math.max(0,E):null,this.createdAt=new Date}sortKeyGet(){return JSON.stringify([this.channelName,null,this.createdAt.toISOString()])}async execute(e){await e.query(a`
6
6
  SELECT 1 FROM ${n(this.schema)}."channel_policy_set"(
7
7
  $1,
8
8
  $2::INTEGER,
9
9
  $3::INTEGER,
10
10
  $4::INTEGER
11
11
  )
12
- `.value,[this.channelName,this.maxSize,this.maxConcurrency,this.releaseIntervalMs])}}var R=(e)=>{return e*1000},X=(e)=>{return R(e*60)},y=(e)=>{return X(e*60)};import{createHash as J}from"node:crypto";class D{value;constructor(e){this.value=e}toString(e){return J("sha256").update(e).update(this.value).digest("base64").replace(/=/g,"")}}var u=new D("WAKE"),x=!1,h=R(0),f=y(1);import{dirname as p}from"path";var __filename="/home/runner/work/lonnymq/lonnymq/src/core/path.ts",K=p(p(__filename)),j=new RegExp(`^${K}/`),c=(e)=>{return e.replace(j,"")};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/04-function-message-create.ts";var C={name:c(__filename),sql:(e)=>{return[s`
12
+ `.value,[this.channelName,this.maxSize,this.maxConcurrency,this.releaseIntervalMs])}}var d=(e)=>{return e*1000},X=(e)=>{return d(e*60)},O=(e)=>{return X(e*60)};import{createHash as K}from"node:crypto";class v{value;constructor(e){this.value=e}toString(e){return K("sha256").update(e).update(this.value).digest("base64").replace(/=/g,"")}}var o=new v("WAKE"),y=!1,l=d(0),x=O(1);import{dirname as f}from"path";var __filename="/home/runner/work/lonnymq/lonnymq/src/core/path.ts",J=f(f(__filename)),j=new RegExp(`^${J}/`),_=(e)=>{return e.replace(j,"")};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/04-function-message-create.ts";var C={name:_(__filename),sql:(e)=>{return[a`
13
13
  CREATE FUNCTION ${n(e.schema)}."message_create" (
14
+ p_id UUID,
14
15
  p_channel_name TEXT,
15
16
  p_name TEXT,
16
17
  p_content BYTEA,
17
18
  p_lock_ms INTEGER,
18
19
  p_delay_ms INTEGER
19
20
  ) RETURNS TABLE (
20
- result_code INTEGER,
21
- metadata JSON
21
+ result_code INTEGER
22
22
  ) AS $$
23
23
  DECLARE
24
24
  v_now TIMESTAMP;
@@ -70,18 +70,19 @@ var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=
70
70
 
71
71
  IF v_channel_state."current_size" >= v_channel_policy."max_size" THEN
72
72
  RETURN QUERY SELECT
73
- ${E(1)},
74
- JSON_BUILD_OBJECT();
73
+ ${c(1)};
75
74
  RETURN;
76
75
  END IF;
77
76
 
78
77
  INSERT INTO ${n(e.schema)}."message" (
78
+ "id",
79
79
  "channel_name",
80
80
  "name",
81
81
  "content",
82
82
  "lock_ms",
83
83
  "dequeue_after"
84
84
  ) VALUES (
85
+ p_id,
85
86
  p_channel_name,
86
87
  p_name,
87
88
  p_content,
@@ -94,14 +95,12 @@ var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=
94
95
  "name" = EXCLUDED."name"
95
96
  RETURNING
96
97
  "id",
97
- "xmax",
98
98
  "dequeue_after"
99
99
  INTO v_message;
100
100
 
101
- IF v_message."xmax" != 0 THEN
101
+ IF v_message."id" != p_id THEN
102
102
  RETURN QUERY SELECT
103
- ${E(2)},
104
- JSON_BUILD_OBJECT('id', v_message."id");
103
+ ${c(2)};
105
104
  RETURN;
106
105
  END IF;
107
106
 
@@ -123,20 +122,20 @@ var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=
123
122
  PERFORM ${n(e.schema)}."wake"(GREATEST(0, p_delay_ms));
124
123
 
125
124
  RETURN QUERY SELECT
126
- ${E(0)},
127
- JSON_BUILD_OBJECT('id', v_message."id");
125
+ ${c(0)};
128
126
  RETURN;
129
127
  END;
130
128
  $$ LANGUAGE plpgsql;
131
- `]}};class o{schema;channelName;name;content;lockMs;delayMs;createdAt;constructor(e){let t=e.name??null,a=e.lockMs===void 0?f:Math.max(0,e.lockMs),_=e.delayMs===void 0?h:e.delayMs;this.schema=e.schema,this.channelName=e.channelName,this.content=e.content,this.name=t,this.lockMs=a,this.delayMs=_,this.createdAt=new Date}async execute(e){let t=await e.query(s`
129
+ `]}};import{randomUUID as Z}from"node:crypto";class i{schema;channelName;name;content;lockMs;id;delayMs;createdAt;constructor(e){let t=e.name??null,s=e.lockMs===void 0?x:Math.max(0,e.lockMs),E=e.delayMs===void 0?l:e.delayMs;this.id=Z(),this.schema=e.schema,this.channelName=e.channelName,this.content=e.content,this.name=t,this.lockMs=s,this.delayMs=E,this.createdAt=new Date}async execute(e){let t=await e.query(a`
132
130
  SELECT * FROM ${n(this.schema)}."message_create"(
133
131
  $1,
134
132
  $2,
135
133
  $3,
136
- $4::INTEGER,
137
- $5::INTEGER
134
+ $4,
135
+ $5::INTEGER,
136
+ $6::INTEGER
138
137
  )
139
- `.value,[this.channelName,this.name,this.content,this.lockMs,this.delayMs]).then((a)=>a.rows[0]);if(t.result_code===1)return{resultType:"MESSAGE_DROPPED"};else if(t.result_code===2)return{resultType:"MESSAGE_DEDUPLICATED",id:BigInt(t.metadata.id)};else if(t.result_code===0)return{resultType:"MESSAGE_CREATED",id:BigInt(t.metadata.id)};else throw new Error("Unexpected result")}}var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/05-function-message-dequeue.ts";var q={name:c(__filename),sql:(e)=>{return[s`
138
+ `.value,[this.id,this.channelName,this.name,this.content,this.lockMs,this.delayMs]).then((s)=>s.rows[0]);if(t.result_code===1)return{resultType:"MESSAGE_DROPPED"};else if(t.result_code===2)return{resultType:"MESSAGE_DEDUPLICATED"};else if(t.result_code===0)return{resultType:"MESSAGE_CREATED"};else throw new Error("Unexpected result")}}var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/05-function-message-dequeue.ts";var p={name:_(__filename),sql:(e)=>{return[a`
140
139
  CREATE FUNCTION ${n(e.schema)}."message_dequeue" ()
141
140
  RETURNS TABLE (
142
141
  result_code INTEGER,
@@ -146,7 +145,6 @@ var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=
146
145
  ) AS $$
147
146
  DECLARE
148
147
  v_now TIMESTAMP;
149
- v_dequeue_nonce UUID;
150
148
  v_channel_state RECORD;
151
149
  v_message_locked RECORD;
152
150
  v_retry_after TIMESTAMP;
@@ -155,7 +153,6 @@ var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=
155
153
  v_message_next_dequeue_after TIMESTAMP;
156
154
  BEGIN
157
155
  v_now := NOW();
158
- v_dequeue_nonce := GEN_RANDOM_UUID();
159
156
 
160
157
  SELECT
161
158
  "message"."id",
@@ -177,23 +174,19 @@ var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=
177
174
  IF v_message_locked."dequeue_after" <= v_now THEN
178
175
  UPDATE ${n(e.schema)}."message" SET
179
176
  "num_attempts" = v_message_locked."num_attempts" + 1,
180
- "dequeue_after" = v_now + (v_message_locked."lock_ms" * INTERVAL '1 millisecond'),
181
- "dequeue_nonce" = v_dequeue_nonce
177
+ "dequeue_after" = v_now + (v_message_locked."lock_ms" * INTERVAL '1 millisecond')
182
178
  WHERE "id" = v_message_locked."id";
183
179
 
184
180
  PERFORM ${n(e.schema)}."wake"(v_message_locked."lock_ms");
185
181
 
186
182
  RETURN QUERY SELECT
187
- ${E(1)},
188
- NULL::BYTEA,
189
- NULL::BYTEA,
183
+ ${c(1)},
184
+ v_message_locked.content,
185
+ v_message_locked.state,
190
186
  JSON_BUILD_OBJECT(
191
187
  'id', v_message_locked.id,
192
188
  'channel_name', v_message_locked.channel_name,
193
- 'state', v_message_locked.state,
194
189
  'name', v_message_locked.name,
195
- 'dequeue_nonce', v_dequeue_nonce,
196
- 'content', v_message_locked.content,
197
190
  'num_attempts', v_message_locked.num_attempts
198
191
  );
199
192
  RETURN;
@@ -222,7 +215,7 @@ var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=
222
215
  );
223
216
 
224
217
  RETURN QUERY SELECT
225
- ${E(0)},
218
+ ${c(0)},
226
219
  NULL::BYTEA,
227
220
  NULL::BYTEA,
228
221
  JSON_BUILD_OBJECT(
@@ -246,7 +239,6 @@ var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=
246
239
  UPDATE ${n(e.schema)}."message" SET
247
240
  "is_locked" = TRUE,
248
241
  "num_attempts" = v_message_dequeue."num_attempts" + 1,
249
- "dequeue_nonce" = v_dequeue_nonce,
250
242
  "dequeue_after" = v_now + (v_message_dequeue."lock_ms" * INTERVAL '1 millisecond')
251
243
  WHERE "id" = v_message_dequeue."id";
252
244
 
@@ -282,30 +274,28 @@ var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=
282
274
 
283
275
 
284
276
  RETURN QUERY SELECT
285
- ${E(1)},
277
+ ${c(1)},
286
278
  v_message_dequeue.content,
287
279
  v_message_dequeue.state,
288
280
  JSON_BUILD_OBJECT(
289
281
  'id', v_message_dequeue.id,
290
282
  'channel_name', v_message_dequeue.channel_name,
291
- 'dequeue_nonce', v_dequeue_nonce,
292
283
  'name', v_message_dequeue.name,
293
284
  'num_attempts', v_message_dequeue.num_attempts
294
285
  );
295
286
  RETURN;
296
287
  END;
297
288
  $$ LANGUAGE plpgsql;
298
- `]}};class T{schema;constructor(e){this.schema=e.schema}async execute(e){let t=await e.query(s`
289
+ `]}};class h{schema;constructor(e){this.schema=e.schema}async execute(e){let t=await e.query(a`
299
290
  SELECT
300
291
  result_code,
301
292
  metadata,
302
293
  content,
303
294
  state
304
295
  FROM ${n(this.schema)}."message_dequeue"()
305
- `.value,[]).then((a)=>a.rows[0]);if(t.result_code===0)return{resultType:"MESSAGE_NOT_AVAILABLE",retryMs:t.metadata.retry_ms};else if(t.result_code===1)return{resultType:"MESSAGE_DEQUEUED",message:{id:BigInt(t.metadata.id),channelName:t.metadata.channel_name,name:t.metadata.name,content:t.content,dequeueNonce:t.metadata.dequeue_nonce,state:t.state,numAttempts:t.metadata.num_attempts}};else throw new Error("Unexpected dequeue result")}}var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/06-function-message-delete.ts";var $={name:c(__filename),sql:(e)=>{return[s`
296
+ `.value,[]).then((s)=>s.rows[0]);if(t.result_code===0)return{resultType:"MESSAGE_NOT_AVAILABLE",retryMs:t.metadata.retry_ms};else if(t.result_code===1)return{resultType:"MESSAGE_DEQUEUED",message:{id:t.metadata.id,channelName:t.metadata.channel_name,name:t.metadata.name,content:t.content,state:t.state,numAttempts:t.metadata.num_attempts}};else throw new Error("Unexpected dequeue result")}}var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/06-function-message-delete.ts";var $={name:_(__filename),sql:(e)=>{return[a`
306
297
  CREATE FUNCTION ${n(e.schema)}."message_delete" (
307
- p_id BIGINT,
308
- p_dequeue_nonce UUID
298
+ p_id UUID
309
299
  )
310
300
  RETURNS TABLE (
311
301
  result_code INTEGER
@@ -318,7 +308,7 @@ var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=
318
308
  SELECT
319
309
  "message"."id",
320
310
  "message"."channel_name",
321
- "message"."dequeue_nonce"
311
+ "message"."is_locked"
322
312
  FROM ${n(e.schema)}."message"
323
313
  WHERE "id" = p_id
324
314
  FOR UPDATE
@@ -326,11 +316,11 @@ var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=
326
316
 
327
317
  IF v_message."id" IS NULL THEN
328
318
  RETURN QUERY SELECT
329
- ${E(0)};
319
+ ${c(0)};
330
320
  RETURN;
331
- ELSEIF v_message."dequeue_nonce" != p_dequeue_nonce THEN
321
+ ELSIF NOT v_message."is_locked" THEN
332
322
  RETURN QUERY SELECT
333
- ${E(1)};
323
+ ${c(1)};
334
324
  RETURN;
335
325
  END IF;
336
326
 
@@ -364,19 +354,17 @@ var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=
364
354
  WHERE "id" = p_id;
365
355
 
366
356
  RETURN QUERY SELECT
367
- ${E(2)};
357
+ ${c(2)};
368
358
  RETURN;
369
359
  END;
370
360
  $$ LANGUAGE plpgsql;
371
- `]}};class N{schema;id;dequeueNonce;constructor(e){this.schema=e.schema,this.id=e.id,this.dequeueNonce=e.dequeueNonce}async execute(e){let t=await e.query(s`
361
+ `]}};class u{schema;id;constructor(e){this.schema=e.schema,this.id=e.id}async execute(e){let t=await e.query(a`
372
362
  SELECT * FROM ${n(this.schema)}."message_delete"(
373
- $1,
374
- $2
363
+ $1
375
364
  )
376
- `.value,[this.id,this.dequeueNonce]).then((a)=>a.rows[0]);if(t.result_code===0)return{resultType:"MESSAGE_NOT_FOUND"};else if(t.result_code===1)return{resultType:"STATE_INVALID"};else if(t.result_code===2)return{resultType:"MESSAGE_DELETED"};else throw new Error("Unexpected result")}}var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/07-function-message-defer.ts";var F={name:c(__filename),sql:(e)=>{return[s`
365
+ `.value,[this.id]).then((s)=>s.rows[0]);if(t.result_code===0)return{resultType:"MESSAGE_NOT_FOUND"};else if(t.result_code===1)return{resultType:"STATE_INVALID"};else if(t.result_code===2)return{resultType:"MESSAGE_DELETED"};else throw new Error("Unexpected result")}}var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/07-function-message-defer.ts";var q={name:_(__filename),sql:(e)=>{return[a`
377
366
  CREATE FUNCTION ${n(e.schema)}."message_defer" (
378
- p_id BIGINT,
379
- p_dequeue_nonce UUID,
367
+ p_id UUID,
380
368
  p_delay_ms INTEGER,
381
369
  p_state BYTEA
382
370
  )
@@ -391,7 +379,7 @@ var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=
391
379
  SELECT
392
380
  "message"."id",
393
381
  "message"."channel_name",
394
- "message"."dequeue_nonce"
382
+ "message"."is_locked"
395
383
  FROM ${n(e.schema)}."message"
396
384
  WHERE "id" = p_id
397
385
  FOR UPDATE
@@ -399,11 +387,11 @@ var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=
399
387
 
400
388
  IF v_message."id" IS NULL THEN
401
389
  RETURN QUERY SELECT
402
- ${E(0)};
390
+ ${c(0)};
403
391
  RETURN;
404
- ELSEIF v_message."dequeue_nonce" != p_dequeue_nonce THEN
392
+ ELSIF NOT v_message."is_locked" THEN
405
393
  RETURN QUERY SELECT
406
- ${E(1)};
394
+ ${c(1)};
407
395
  RETURN;
408
396
  END IF;
409
397
 
@@ -442,58 +430,56 @@ var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=
442
430
  PERFORM ${n(e.schema)}."wake"(GREATEST(0, p_delay_ms));
443
431
 
444
432
  RETURN QUERY SELECT
445
- ${E(2)};
433
+ ${c(2)};
446
434
  RETURN;
447
435
  END;
448
436
  $$ LANGUAGE plpgsql;
449
- `]}};class d{schema;id;dequeueNonce;delayMs;state;constructor(e){let t=e.delayMs===void 0?h:e.delayMs;this.schema=e.schema,this.id=e.id,this.dequeueNonce=e.dequeueNonce,this.delayMs=t,this.state=e.state??null}async execute(e){let t=await e.query(s`
437
+ `]}};class N{schema;id;delayMs;state;constructor(e){let t=e.delayMs===void 0?l:e.delayMs;this.schema=e.schema,this.id=e.id,this.delayMs=t,this.state=e.state??null}async execute(e){let t=await e.query(a`
450
438
  SELECT * FROM ${n(this.schema)}."message_defer"(
451
439
  $1,
452
440
  $2,
453
- $3,
454
- $4
441
+ $3
455
442
  )
456
- `.value,[this.id,this.dequeueNonce,this.delayMs,this.state]).then((a)=>a.rows[0]);if(t.result_code===0)return{resultType:"MESSAGE_NOT_FOUND"};else if(t.result_code===1)return{resultType:"STATE_INVALID"};else if(t.result_code===2)return{resultType:"MESSAGE_DEFERRED"};else throw new Error("Unexpected result")}}var M=(e)=>{let t=e.split(`
457
- `),a=Number.MAX_SAFE_INTEGER;for(let _ of t){if(_.trim().length===0)continue;let l=_.search(/\S/);a=Math.min(a,l)}return t.map((_)=>_.slice(a)).join(`
458
- `).trim()};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/00-table-channel-policy.ts",G={name:c(__filename),sql:(e)=>{return[s`
443
+ `.value,[this.id,this.delayMs,this.state]).then((s)=>s.rows[0]);if(t.result_code===0)return{resultType:"MESSAGE_NOT_FOUND"};else if(t.result_code===1)return{resultType:"STATE_INVALID"};else if(t.result_code===2)return{resultType:"MESSAGE_DEFERRED"};else throw new Error("Unexpected result")}}var F=(e)=>{let t=e.split(`
444
+ `),s=Number.MAX_SAFE_INTEGER;for(let E of t){if(E.trim().length===0)continue;let T=E.search(/\S/);s=Math.min(s,T)}return t.map((E)=>E.slice(s)).join(`
445
+ `).trim()};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/00-table-channel-policy.ts",M={name:_(__filename),sql:(e)=>{return[a`
459
446
  CREATE TABLE ${n(e.schema)}."channel_policy" (
460
- "id" BIGSERIAL NOT NULL,
447
+ "id" UUID NOT NULL DEFAULT GEN_RANDOM_UUID(),
461
448
  "name" TEXT NOT NULL,
462
449
  "max_size" INTEGER,
463
450
  "max_concurrency" INTEGER,
464
451
  "release_interval_ms" INTEGER,
465
452
  PRIMARY KEY ("id")
466
453
  );
467
- `,s`
454
+ `,a`
468
455
  CREATE UNIQUE INDEX "channel_policy_name_ux"
469
456
  ON ${n(e.schema)}."channel_policy" ("name");
470
- `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/01-table-channel-state.ts",B={name:c(__filename),sql:(e)=>{return[s`
457
+ `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/01-table-channel-state.ts",G={name:_(__filename),sql:(e)=>{return[a`
471
458
  CREATE TABLE ${n(e.schema)}."channel_state" (
472
- "id" BIGSERIAL NOT NULL,
459
+ "id" UUID NOT NULL DEFAULT GEN_RANDOM_UUID(),
473
460
  "name" TEXT NOT NULL,
474
461
  "max_size" INTEGER,
475
462
  "max_concurrency" INTEGER,
476
463
  "release_interval_ms" INTEGER,
477
464
  "current_size" INTEGER NOT NULL,
478
465
  "current_concurrency" INTEGER NOT NULL,
479
- "message_next_id" BIGINT,
466
+ "message_next_id" UUID,
480
467
  "message_next_dequeue_after" TIMESTAMP,
481
468
  PRIMARY KEY ("id")
482
469
  );
483
- `,s`
470
+ `,a`
484
471
  CREATE UNIQUE INDEX "channel_state_name_ux"
485
472
  ON ${n(e.schema)}."channel_state" ("name");
486
- `,s`
473
+ `,a`
487
474
  CREATE INDEX "channel_state_dequeue_ix"
488
475
  ON ${n(e.schema)}."channel_state" (
489
476
  "message_next_dequeue_after" ASC
490
477
  ) WHERE "message_next_id" IS NOT NULL
491
478
  AND ("max_concurrency" IS NULL OR "current_concurrency" < "max_concurrency");
492
- `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/02-table-message.ts",P={name:c(__filename),sql:(e)=>{return[s`
479
+ `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/02-table-message.ts",P={name:_(__filename),sql:(e)=>{return[a`
493
480
  CREATE TABLE ${n(e.schema)}."message" (
494
- "id" BIGSERIAL NOT NULL,
481
+ "id" UUID NOT NULL,
495
482
  "channel_name" TEXT NOT NULL,
496
- "dequeue_nonce" UUID,
497
483
  "name" TEXT,
498
484
  "content" BYTEA NOT NULL,
499
485
  "state" BYTEA,
@@ -503,35 +489,35 @@ var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=
503
489
  "dequeue_after" TIMESTAMP NOT NULL,
504
490
  PRIMARY KEY ("id")
505
491
  );
506
- `,s`
492
+ `,a`
507
493
  CREATE UNIQUE INDEX "message_name_ux"
508
494
  ON ${n(e.schema)}."message" (
509
495
  "channel_name",
510
496
  "name"
511
497
  ) WHERE "num_attempts" = 0
512
- `,s`
498
+ `,a`
513
499
  CREATE INDEX "message_dequeue_ix"
514
500
  ON ${n(e.schema)}."message" (
515
501
  "channel_name",
516
502
  "dequeue_after" ASC,
517
503
  "id" ASC
518
504
  ) WHERE NOT "is_locked";
519
- `,s`
505
+ `,a`
520
506
  CREATE INDEX "message_locked_dequeue_ix"
521
507
  ON ${n(e.schema)}."message" (
522
508
  "dequeue_after" ASC
523
509
  ) WHERE "is_locked";
524
- `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/03-function-wake.ts",H={name:c(__filename),sql:(e)=>{let t=u.toString(e.schema);return[s`
510
+ `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/03-function-wake.ts",B={name:_(__filename),sql:(e)=>{let t=o.toString(e.schema);return[a`
525
511
  CREATE FUNCTION ${n(e.schema)}."wake" (
526
512
  p_delay_ms INTEGER
527
513
  ) RETURNS VOID AS $$
528
514
  BEGIN
529
- IF ${E(e.useWake)} THEN
530
- PERFORM PG_NOTIFY(${E(t)}, p_delay_ms::TEXT);
515
+ IF ${c(e.useWake)} THEN
516
+ PERFORM PG_NOTIFY(${c(t)}, p_delay_ms::TEXT);
531
517
  END IF;
532
518
  END;
533
519
  $$ LANGUAGE plpgsql;
534
- `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/08-function-channel-policy-set.ts",b={name:c(__filename),sql:(e)=>{return[s`
520
+ `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/08-function-channel-policy-set.ts",H={name:_(__filename),sql:(e)=>{return[a`
535
521
  CREATE FUNCTION ${n(e.schema)}."channel_policy_set" (
536
522
  p_name TEXT,
537
523
  p_max_size INTEGER,
@@ -563,7 +549,7 @@ var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=
563
549
  PERFORM ${n(e.schema)}."wake"(0);
564
550
  END;
565
551
  $$ LANGUAGE plpgsql;
566
- `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/09-function-channel-policy-clear.ts",k={name:c(__filename),sql:(e)=>{return[s`
552
+ `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/09-function-channel-policy-clear.ts",k={name:_(__filename),sql:(e)=>{return[a`
567
553
  CREATE FUNCTION ${n(e.schema)}."channel_policy_clear" (
568
554
  p_name TEXT
569
555
  ) RETURNS VOID AS $$
@@ -595,4 +581,4 @@ var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=
595
581
  PERFORM ${n(e.schema)}."wake"(0);
596
582
  END;
597
583
  $$ LANGUAGE plpgsql;
598
- `]}};class i{value;isSet;constructor(){this.isSet=!1,this.value=null}get(){return this.isSet?{resultType:"RESULT_SET",value:this.value}:{resultType:"RESULT_NOT_SET"}}set(e){this.isSet=!0,this.value=e}}class g{schema;channelName;registerFn;constructor(e){this.schema=e.schema,this.channelName=e.channelName,this.registerFn=e.registerFn}create(e){let t=new o({schema:this.schema,channelName:this.channelName,name:e.name,content:e.content,lockMs:e.lockMs,delayMs:e.delayMs}),a=new i;return this.registerFn({sortKey:JSON.stringify([t.channelName,t.name,t.createdAt.toISOString()]),execute:(_)=>t.execute(_).then((l)=>a.set(l))}),a}}class S{schema;channelName;registerFn;constructor(e){this.schema=e.schema,this.channelName=e.channelName,this.registerFn=e.registerFn}set(e){let t=new m({schema:this.schema,channelName:this.channelName,maxConcurrency:e.maxConcurrency,maxSize:e.maxSize,releaseIntervalMs:e.releaseIntervalMs}),a=new i;return this.registerFn({sortKey:JSON.stringify([t.channelName,null,t.createdAt.toISOString()]),execute:(_)=>t.execute(_).then((l)=>a.set(l))}),a}clear(){let e=new r({schema:this.schema,channelName:this.channelName}),t=new i;return this.registerFn({sortKey:JSON.stringify([e.channelName,null,e.createdAt.toISOString()]),execute:(a)=>e.execute(a).then((_)=>t.set(_))}),t}}class A{policy;message;constructor(e){this.message=new g(e),this.policy=new S(e)}}var Z=(e,t)=>{return e.sortKey.localeCompare(t.sortKey)};class I{commands;schema;constructor(e){this.commands=[],this.schema=e.schema}channel(e){return new A({schema:this.schema,channelName:e,registerFn:(t)=>{this.commands.push(t)}})}async execute(e){for(let t of this.commands.sort(Z))await t.execute(e.databaseClient)}}class L{schema;channelName;constructor(e){this.schema=e.schema,this.channelName=e.channelName}async create(e){return new o({schema:this.schema,channelName:this.channelName,name:e.name,content:e.content,lockMs:e.lockMs,delayMs:e.delayMs}).execute(e.databaseClient)}}class v{schema;channelName;constructor(e){this.schema=e.schema,this.channelName=e.channelName}set(e){return new m({schema:this.schema,channelName:this.channelName,maxConcurrency:e.maxConcurrency,maxSize:e.maxSize,releaseIntervalMs:e.releaseIntervalMs}).execute(e.databaseClient)}clear(e){return new r({schema:this.schema,channelName:this.channelName}).execute(e.databaseClient)}}class U{policy;message;constructor(e){this.message=new L({schema:e.schema,channelName:e.channelName}),this.policy=new v({schema:e.schema,channelName:e.channelName})}}class O{schema;id;channelName;name;content;dequeueNonce;state;numAttempts;constructor(e){this.schema=e.schema,this.id=e.id,this.channelName=e.channelName,this.dequeueNonce=e.dequeueNonce,this.name=e.name,this.content=e.content,this.state=e.state,this.numAttempts=e.numAttempts}async defer(e){return new d({schema:this.schema,id:this.id,dequeueNonce:this.dequeueNonce,delayMs:e.delayMs,state:e.state}).execute(e.databaseClient)}async delete(e){return new N({schema:this.schema,id:this.id,dequeueNonce:this.dequeueNonce}).execute(e.databaseClient)}}class z{schema;constructor(e){this.schema=e}async dequeue(e){let a=await new T({schema:this.schema}).execute(e.databaseClient);if(a.resultType==="MESSAGE_DEQUEUED")return{resultType:"MESSAGE_DEQUEUED",message:new O({schema:this.schema,id:a.message.id,dequeueNonce:a.message.dequeueNonce,channelName:a.message.channelName,name:a.message.name,content:a.message.content,state:a.message.state,numAttempts:a.message.numAttempts})};else return a}channel(e){return new U({schema:this.schema,channelName:e})}batch(){return new I({schema:this.schema})}migrations(e){return[G,B,P,H,C,q,$,F,b,k].map((t)=>({name:t.name,sql:t.sql({schema:this.schema,useWake:e.useWake??x}).map((a)=>M(a.value))})).sort((t,a)=>t.name.localeCompare(a.name))}wakeChannel(){return u.toString(this.schema)}}export{z as Queue,T as MessageDequeueCommand,N as MessageDeleteCommand,d as MessageDeferCommand,o as MessageCreateCommand,m as ChannelPolicySetCommand,r as ChannelPolicyClearCommand};
584
+ `]}};class R{schema;channelName;registerFn;constructor(e){this.schema=e.schema,this.channelName=e.channelName,this.registerFn=e.registerFn}create(e){let t=new i({schema:this.schema,channelName:this.channelName,name:e.name,content:e.content,lockMs:e.lockMs,delayMs:e.delayMs}),s=new Promise((E)=>{this.registerFn({sortKey:JSON.stringify([t.channelName,t.name,t.createdAt.toISOString()]),execute:(T)=>t.execute(T).then((z)=>E(z))})});return{messageId:t.id,promise:s}}}class g{schema;channelName;registerFn;constructor(e){this.schema=e.schema,this.channelName=e.channelName,this.registerFn=e.registerFn}set(e){let t=new m({schema:this.schema,channelName:this.channelName,maxConcurrency:e.maxConcurrency,maxSize:e.maxSize,releaseIntervalMs:e.releaseIntervalMs});this.registerFn({sortKey:JSON.stringify([t.channelName,null,t.createdAt.toISOString()]),execute:async(s)=>{await t.execute(s)}})}clear(){let e=new r({schema:this.schema,channelName:this.channelName});this.registerFn({sortKey:JSON.stringify([e.channelName,null,e.createdAt.toISOString()]),execute:async(t)=>{await e.execute(t)}})}}class S{policy;message;constructor(e){this.message=new R(e),this.policy=new g(e)}}var ee=(e,t)=>{return e.sortKey.localeCompare(t.sortKey)};class A{commands;schema;constructor(e){this.commands=[],this.schema=e.schema}channel(e){return new S({schema:this.schema,channelName:e,registerFn:(t)=>{this.commands.push(t)}})}async execute(e){for(let t of this.commands.sort(ee))await t.execute(e.databaseClient)}}class I{schema;channelName;constructor(e){this.schema=e.schema,this.channelName=e.channelName}async create(e){return new i({schema:this.schema,channelName:this.channelName,name:e.name,content:e.content,lockMs:e.lockMs,delayMs:e.delayMs}).execute(e.databaseClient)}}class L{schema;channelName;constructor(e){this.schema=e.schema,this.channelName=e.channelName}set(e){return new m({schema:this.schema,channelName:this.channelName,maxConcurrency:e.maxConcurrency,maxSize:e.maxSize,releaseIntervalMs:e.releaseIntervalMs}).execute(e.databaseClient)}clear(e){return new r({schema:this.schema,channelName:this.channelName}).execute(e.databaseClient)}}class U{policy;message;constructor(e){this.message=new I({schema:e.schema,channelName:e.channelName}),this.policy=new L({schema:e.schema,channelName:e.channelName})}}class D{schema;id;channelName;name;content;state;numAttempts;constructor(e){this.schema=e.schema,this.id=e.id,this.channelName=e.channelName,this.name=e.name,this.content=e.content,this.state=e.state,this.numAttempts=e.numAttempts}async defer(e){return new N({schema:this.schema,id:this.id,delayMs:e.delayMs,state:e.state}).execute(e.databaseClient)}async delete(e){return new u({schema:this.schema,id:this.id}).execute(e.databaseClient)}}class b{schema;constructor(e){this.schema=e}async dequeue(e){let s=await new h({schema:this.schema}).execute(e.databaseClient);if(s.resultType==="MESSAGE_DEQUEUED")return{resultType:"MESSAGE_DEQUEUED",message:new D({schema:this.schema,id:s.message.id,channelName:s.message.channelName,name:s.message.name,content:s.message.content,state:s.message.state,numAttempts:s.message.numAttempts})};else return s}channel(e){return new U({schema:this.schema,channelName:e})}batch(){return new A({schema:this.schema})}migrations(e){return[M,G,P,B,C,p,$,q,H,k].map((t)=>({name:t.name,sql:t.sql({schema:this.schema,useWake:e.useWake??y}).map((s)=>F(s.value))})).sort((t,s)=>t.name.localeCompare(s.name))}wakeChannel(){return o.toString(this.schema)}}export{b as Queue,h as MessageDequeueCommand,u as MessageDeleteCommand,N as MessageDeferCommand,i as MessageCreateCommand,m as ChannelPolicySetCommand,r as ChannelPolicyClearCommand};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lonnymq",
3
- "version": "0.0.5",
3
+ "version": "0.0.7",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {