lonnymq 0.0.5 → 0.0.6

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:()=>i,MessageDeleteCommand:()=>l,MessageDeferCommand:()=>h,MessageCreateCommand:()=>o,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 o{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,8 +174,7 @@ 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");
@@ -191,8 +187,7 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
191
187
  'id', v_message_locked.id,
192
188
  'channel_name', v_message_locked.channel_name,
193
189
  'state', v_message_locked.state,
194
- 'name', v_message_locked.name,
195
- 'dequeue_nonce', v_dequeue_nonce,
190
+ 'name', v_message_locked.name
196
191
  'content', v_message_locked.content,
197
192
  'num_attempts', v_message_locked.num_attempts
198
193
  );
@@ -246,7 +241,6 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
246
241
  UPDATE ${t(e.schema)}."message" SET
247
242
  "is_locked" = TRUE,
248
243
  "num_attempts" = v_message_dequeue."num_attempts" + 1,
249
- "dequeue_nonce" = v_dequeue_nonce,
250
244
  "dequeue_after" = v_now + (v_message_dequeue."lock_ms" * INTERVAL '1 millisecond')
251
245
  WHERE "id" = v_message_dequeue."id";
252
246
 
@@ -288,24 +282,22 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
288
282
  JSON_BUILD_OBJECT(
289
283
  'id', v_message_dequeue.id,
290
284
  'channel_name', v_message_dequeue.channel_name,
291
- 'dequeue_nonce', v_dequeue_nonce,
292
285
  'name', v_message_dequeue.name,
293
286
  'num_attempts', v_message_dequeue.num_attempts
294
287
  );
295
288
  RETURN;
296
289
  END;
297
290
  $$ LANGUAGE plpgsql;
298
- `]}};class u{schema;constructor(e){this.schema=e.schema}async execute(e){let n=await e.query(s`
291
+ `]}};class i{schema;constructor(e){this.schema=e.schema}async execute(e){let n=await e.query(s`
299
292
  SELECT
300
293
  result_code,
301
294
  metadata,
302
295
  content,
303
296
  state
304
297
  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`
298
+ `.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 B={name:c(__filename),sql:(e)=>{return[s`
306
299
  CREATE FUNCTION ${t(e.schema)}."message_delete" (
307
- p_id BIGINT,
308
- p_dequeue_nonce UUID
300
+ p_id UUID
309
301
  )
310
302
  RETURNS TABLE (
311
303
  result_code INTEGER
@@ -318,7 +310,7 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
318
310
  SELECT
319
311
  "message"."id",
320
312
  "message"."channel_name",
321
- "message"."dequeue_nonce"
313
+ "message"."is_locked"
322
314
  FROM ${t(e.schema)}."message"
323
315
  WHERE "id" = p_id
324
316
  FOR UPDATE
@@ -328,7 +320,7 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
328
320
  RETURN QUERY SELECT
329
321
  ${E(0)};
330
322
  RETURN;
331
- ELSEIF v_message."dequeue_nonce" != p_dequeue_nonce THEN
323
+ ELSIF NOT v_message."is_locked" THEN
332
324
  RETURN QUERY SELECT
333
325
  ${E(1)};
334
326
  RETURN;
@@ -368,15 +360,13 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
368
360
  RETURN;
369
361
  END;
370
362
  $$ 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`
363
+ `]}};class l{schema;id;constructor(e){this.schema=e.schema,this.id=e.id}async execute(e){let n=await e.query(s`
372
364
  SELECT * FROM ${t(this.schema)}."message_delete"(
373
- $1,
374
- $2
365
+ $1
375
366
  )
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`
367
+ `.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 P={name:c(__filename),sql:(e)=>{return[s`
377
368
  CREATE FUNCTION ${t(e.schema)}."message_defer" (
378
- p_id BIGINT,
379
- p_dequeue_nonce UUID,
369
+ p_id UUID,
380
370
  p_delay_ms INTEGER,
381
371
  p_state BYTEA
382
372
  )
@@ -391,7 +381,7 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
391
381
  SELECT
392
382
  "message"."id",
393
383
  "message"."channel_name",
394
- "message"."dequeue_nonce"
384
+ "message"."is_locked"
395
385
  FROM ${t(e.schema)}."message"
396
386
  WHERE "id" = p_id
397
387
  FOR UPDATE
@@ -401,7 +391,7 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
401
391
  RETURN QUERY SELECT
402
392
  ${E(0)};
403
393
  RETURN;
404
- ELSEIF v_message."dequeue_nonce" != p_dequeue_nonce THEN
394
+ ELSIF NOT v_message."is_locked" THEN
405
395
  RETURN QUERY SELECT
406
396
  ${E(1)};
407
397
  RETURN;
@@ -446,18 +436,17 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
446
436
  RETURN;
447
437
  END;
448
438
  $$ 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`
439
+ `]}};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
440
  SELECT * FROM ${t(this.schema)}."message_defer"(
451
441
  $1,
452
442
  $2,
453
- $3,
454
- $4
443
+ $3
455
444
  )
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`
445
+ `.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(`
446
+ `),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(`
447
+ `).trim()};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/00-table-channel-policy.ts",k={name:c(__filename),sql:(e)=>{return[s`
459
448
  CREATE TABLE ${t(e.schema)}."channel_policy" (
460
- "id" BIGSERIAL NOT NULL,
449
+ "id" UUID NOT NULL DEFAULT GEN_RANDOM_UUID(),
461
450
  "name" TEXT NOT NULL,
462
451
  "max_size" INTEGER,
463
452
  "max_concurrency" INTEGER,
@@ -467,16 +456,16 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
467
456
  `,s`
468
457
  CREATE UNIQUE INDEX "channel_policy_name_ux"
469
458
  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`
459
+ `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/01-table-channel-state.ts",b={name:c(__filename),sql:(e)=>{return[s`
471
460
  CREATE TABLE ${t(e.schema)}."channel_state" (
472
- "id" BIGSERIAL NOT NULL,
461
+ "id" UUID NOT NULL DEFAULT GEN_RANDOM_UUID(),
473
462
  "name" TEXT NOT NULL,
474
463
  "max_size" INTEGER,
475
464
  "max_concurrency" INTEGER,
476
465
  "release_interval_ms" INTEGER,
477
466
  "current_size" INTEGER NOT NULL,
478
467
  "current_concurrency" INTEGER NOT NULL,
479
- "message_next_id" BIGINT,
468
+ "message_next_id" UUID,
480
469
  "message_next_dequeue_after" TIMESTAMP,
481
470
  PRIMARY KEY ("id")
482
471
  );
@@ -491,9 +480,8 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
491
480
  AND ("max_concurrency" IS NULL OR "current_concurrency" < "max_concurrency");
492
481
  `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/02-table-message.ts",z={name:c(__filename),sql:(e)=>{return[s`
493
482
  CREATE TABLE ${t(e.schema)}."message" (
494
- "id" BIGSERIAL NOT NULL,
483
+ "id" UUID NOT NULL,
495
484
  "channel_name" TEXT NOT NULL,
496
- "dequeue_nonce" UUID,
497
485
  "name" TEXT,
498
486
  "content" BYTEA NOT NULL,
499
487
  "state" BYTEA,
@@ -521,7 +509,7 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
521
509
  ON ${t(e.schema)}."message" (
522
510
  "dequeue_after" ASC
523
511
  ) 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`
512
+ `]}};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
513
  CREATE FUNCTION ${t(e.schema)}."wake" (
526
514
  p_delay_ms INTEGER
527
515
  ) RETURNS VOID AS $$
@@ -595,4 +583,4 @@ var{defineProperty:R,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,X=
595
583
  PERFORM ${t(e.schema)}."wake"(0);
596
584
  END;
597
585
  $$ 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)}}
586
+ `]}};class S{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 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 L{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 I{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(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 o({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 i({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 I({schema:this.schema})}migrations(e){return[k,b,z,w,F,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 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 i=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 o{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,22 +174,20 @@ 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)},
183
+ ${c(1)},
188
184
  NULL::BYTEA,
189
185
  NULL::BYTEA,
190
186
  JSON_BUILD_OBJECT(
191
187
  'id', v_message_locked.id,
192
188
  'channel_name', v_message_locked.channel_name,
193
189
  'state', v_message_locked.state,
194
- 'name', v_message_locked.name,
195
- 'dequeue_nonce', v_dequeue_nonce,
190
+ 'name', v_message_locked.name
196
191
  'content', v_message_locked.content,
197
192
  'num_attempts', v_message_locked.num_attempts
198
193
  );
@@ -222,7 +217,7 @@ var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=
222
217
  );
223
218
 
224
219
  RETURN QUERY SELECT
225
- ${E(0)},
220
+ ${c(0)},
226
221
  NULL::BYTEA,
227
222
  NULL::BYTEA,
228
223
  JSON_BUILD_OBJECT(
@@ -246,7 +241,6 @@ var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=
246
241
  UPDATE ${n(e.schema)}."message" SET
247
242
  "is_locked" = TRUE,
248
243
  "num_attempts" = v_message_dequeue."num_attempts" + 1,
249
- "dequeue_nonce" = v_dequeue_nonce,
250
244
  "dequeue_after" = v_now + (v_message_dequeue."lock_ms" * INTERVAL '1 millisecond')
251
245
  WHERE "id" = v_message_dequeue."id";
252
246
 
@@ -282,30 +276,28 @@ var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=
282
276
 
283
277
 
284
278
  RETURN QUERY SELECT
285
- ${E(1)},
279
+ ${c(1)},
286
280
  v_message_dequeue.content,
287
281
  v_message_dequeue.state,
288
282
  JSON_BUILD_OBJECT(
289
283
  'id', v_message_dequeue.id,
290
284
  'channel_name', v_message_dequeue.channel_name,
291
- 'dequeue_nonce', v_dequeue_nonce,
292
285
  'name', v_message_dequeue.name,
293
286
  'num_attempts', v_message_dequeue.num_attempts
294
287
  );
295
288
  RETURN;
296
289
  END;
297
290
  $$ LANGUAGE plpgsql;
298
- `]}};class T{schema;constructor(e){this.schema=e.schema}async execute(e){let t=await e.query(s`
291
+ `]}};class h{schema;constructor(e){this.schema=e.schema}async execute(e){let t=await e.query(a`
299
292
  SELECT
300
293
  result_code,
301
294
  metadata,
302
295
  content,
303
296
  state
304
297
  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`
298
+ `.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
299
  CREATE FUNCTION ${n(e.schema)}."message_delete" (
307
- p_id BIGINT,
308
- p_dequeue_nonce UUID
300
+ p_id UUID
309
301
  )
310
302
  RETURNS TABLE (
311
303
  result_code INTEGER
@@ -318,7 +310,7 @@ var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=
318
310
  SELECT
319
311
  "message"."id",
320
312
  "message"."channel_name",
321
- "message"."dequeue_nonce"
313
+ "message"."is_locked"
322
314
  FROM ${n(e.schema)}."message"
323
315
  WHERE "id" = p_id
324
316
  FOR UPDATE
@@ -326,11 +318,11 @@ var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=
326
318
 
327
319
  IF v_message."id" IS NULL THEN
328
320
  RETURN QUERY SELECT
329
- ${E(0)};
321
+ ${c(0)};
330
322
  RETURN;
331
- ELSEIF v_message."dequeue_nonce" != p_dequeue_nonce THEN
323
+ ELSIF NOT v_message."is_locked" THEN
332
324
  RETURN QUERY SELECT
333
- ${E(1)};
325
+ ${c(1)};
334
326
  RETURN;
335
327
  END IF;
336
328
 
@@ -364,19 +356,17 @@ var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=
364
356
  WHERE "id" = p_id;
365
357
 
366
358
  RETURN QUERY SELECT
367
- ${E(2)};
359
+ ${c(2)};
368
360
  RETURN;
369
361
  END;
370
362
  $$ 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`
363
+ `]}};class u{schema;id;constructor(e){this.schema=e.schema,this.id=e.id}async execute(e){let t=await e.query(a`
372
364
  SELECT * FROM ${n(this.schema)}."message_delete"(
373
- $1,
374
- $2
365
+ $1
375
366
  )
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`
367
+ `.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
368
  CREATE FUNCTION ${n(e.schema)}."message_defer" (
378
- p_id BIGINT,
379
- p_dequeue_nonce UUID,
369
+ p_id UUID,
380
370
  p_delay_ms INTEGER,
381
371
  p_state BYTEA
382
372
  )
@@ -391,7 +381,7 @@ var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=
391
381
  SELECT
392
382
  "message"."id",
393
383
  "message"."channel_name",
394
- "message"."dequeue_nonce"
384
+ "message"."is_locked"
395
385
  FROM ${n(e.schema)}."message"
396
386
  WHERE "id" = p_id
397
387
  FOR UPDATE
@@ -399,11 +389,11 @@ var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=
399
389
 
400
390
  IF v_message."id" IS NULL THEN
401
391
  RETURN QUERY SELECT
402
- ${E(0)};
392
+ ${c(0)};
403
393
  RETURN;
404
- ELSEIF v_message."dequeue_nonce" != p_dequeue_nonce THEN
394
+ ELSIF NOT v_message."is_locked" THEN
405
395
  RETURN QUERY SELECT
406
- ${E(1)};
396
+ ${c(1)};
407
397
  RETURN;
408
398
  END IF;
409
399
 
@@ -442,58 +432,56 @@ var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=
442
432
  PERFORM ${n(e.schema)}."wake"(GREATEST(0, p_delay_ms));
443
433
 
444
434
  RETURN QUERY SELECT
445
- ${E(2)};
435
+ ${c(2)};
446
436
  RETURN;
447
437
  END;
448
438
  $$ 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`
439
+ `]}};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
440
  SELECT * FROM ${n(this.schema)}."message_defer"(
451
441
  $1,
452
442
  $2,
453
- $3,
454
- $4
443
+ $3
455
444
  )
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`
445
+ `.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(`
446
+ `),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(`
447
+ `).trim()};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/00-table-channel-policy.ts",M={name:_(__filename),sql:(e)=>{return[a`
459
448
  CREATE TABLE ${n(e.schema)}."channel_policy" (
460
- "id" BIGSERIAL NOT NULL,
449
+ "id" UUID NOT NULL DEFAULT GEN_RANDOM_UUID(),
461
450
  "name" TEXT NOT NULL,
462
451
  "max_size" INTEGER,
463
452
  "max_concurrency" INTEGER,
464
453
  "release_interval_ms" INTEGER,
465
454
  PRIMARY KEY ("id")
466
455
  );
467
- `,s`
456
+ `,a`
468
457
  CREATE UNIQUE INDEX "channel_policy_name_ux"
469
458
  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`
459
+ `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/01-table-channel-state.ts",G={name:_(__filename),sql:(e)=>{return[a`
471
460
  CREATE TABLE ${n(e.schema)}."channel_state" (
472
- "id" BIGSERIAL NOT NULL,
461
+ "id" UUID NOT NULL DEFAULT GEN_RANDOM_UUID(),
473
462
  "name" TEXT NOT NULL,
474
463
  "max_size" INTEGER,
475
464
  "max_concurrency" INTEGER,
476
465
  "release_interval_ms" INTEGER,
477
466
  "current_size" INTEGER NOT NULL,
478
467
  "current_concurrency" INTEGER NOT NULL,
479
- "message_next_id" BIGINT,
468
+ "message_next_id" UUID,
480
469
  "message_next_dequeue_after" TIMESTAMP,
481
470
  PRIMARY KEY ("id")
482
471
  );
483
- `,s`
472
+ `,a`
484
473
  CREATE UNIQUE INDEX "channel_state_name_ux"
485
474
  ON ${n(e.schema)}."channel_state" ("name");
486
- `,s`
475
+ `,a`
487
476
  CREATE INDEX "channel_state_dequeue_ix"
488
477
  ON ${n(e.schema)}."channel_state" (
489
478
  "message_next_dequeue_after" ASC
490
479
  ) WHERE "message_next_id" IS NOT NULL
491
480
  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`
481
+ `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/02-table-message.ts",B={name:_(__filename),sql:(e)=>{return[a`
493
482
  CREATE TABLE ${n(e.schema)}."message" (
494
- "id" BIGSERIAL NOT NULL,
483
+ "id" UUID NOT NULL,
495
484
  "channel_name" TEXT NOT NULL,
496
- "dequeue_nonce" UUID,
497
485
  "name" TEXT,
498
486
  "content" BYTEA NOT NULL,
499
487
  "state" BYTEA,
@@ -503,35 +491,35 @@ var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=
503
491
  "dequeue_after" TIMESTAMP NOT NULL,
504
492
  PRIMARY KEY ("id")
505
493
  );
506
- `,s`
494
+ `,a`
507
495
  CREATE UNIQUE INDEX "message_name_ux"
508
496
  ON ${n(e.schema)}."message" (
509
497
  "channel_name",
510
498
  "name"
511
499
  ) WHERE "num_attempts" = 0
512
- `,s`
500
+ `,a`
513
501
  CREATE INDEX "message_dequeue_ix"
514
502
  ON ${n(e.schema)}."message" (
515
503
  "channel_name",
516
504
  "dequeue_after" ASC,
517
505
  "id" ASC
518
506
  ) WHERE NOT "is_locked";
519
- `,s`
507
+ `,a`
520
508
  CREATE INDEX "message_locked_dequeue_ix"
521
509
  ON ${n(e.schema)}."message" (
522
510
  "dequeue_after" ASC
523
511
  ) 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`
512
+ `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/03-function-wake.ts",P={name:_(__filename),sql:(e)=>{let t=i.toString(e.schema);return[a`
525
513
  CREATE FUNCTION ${n(e.schema)}."wake" (
526
514
  p_delay_ms INTEGER
527
515
  ) RETURNS VOID AS $$
528
516
  BEGIN
529
- IF ${E(e.useWake)} THEN
530
- PERFORM PG_NOTIFY(${E(t)}, p_delay_ms::TEXT);
517
+ IF ${c(e.useWake)} THEN
518
+ PERFORM PG_NOTIFY(${c(t)}, p_delay_ms::TEXT);
531
519
  END IF;
532
520
  END;
533
521
  $$ 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`
522
+ `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/08-function-channel-policy-set.ts",H={name:_(__filename),sql:(e)=>{return[a`
535
523
  CREATE FUNCTION ${n(e.schema)}."channel_policy_set" (
536
524
  p_name TEXT,
537
525
  p_max_size INTEGER,
@@ -563,7 +551,7 @@ var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=
563
551
  PERFORM ${n(e.schema)}."wake"(0);
564
552
  END;
565
553
  $$ 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`
554
+ `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/09-function-channel-policy-clear.ts",k={name:_(__filename),sql:(e)=>{return[a`
567
555
  CREATE FUNCTION ${n(e.schema)}."channel_policy_clear" (
568
556
  p_name TEXT
569
557
  ) RETURNS VOID AS $$
@@ -595,4 +583,4 @@ var E=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),w=(e)=
595
583
  PERFORM ${n(e.schema)}."wake"(0);
596
584
  END;
597
585
  $$ 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};
586
+ `]}};class R{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}),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 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 I{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 I({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,B,P,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 i.toString(this.schema)}}export{b as Queue,h as MessageDequeueCommand,u as MessageDeleteCommand,N as MessageDeferCommand,o 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.6",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {