lonnymq 0.0.13 → 0.0.15

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,16 +1,16 @@
1
- var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=Object.prototype.hasOwnProperty;var I=new WeakMap,Y=(e)=>{var t=I.get(e),s;if(t)return t;if(t=h({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function")z(e).map((E)=>!W.call(t,E)&&h(t,E,{get:()=>e[E],enumerable:!(s=V(e,E))||s.enumerable}));return I.set(e,t),t};var X=(e,t)=>{for(var s in t)h(e,s,{get:t[s],enumerable:!0,configurable:!0,set:(E)=>t[s]=()=>E})};var ce={};X(ce,{queueEventDecode:()=>f,Queue:()=>L,MessageDequeueCommand:()=>m,MessageDeleteCommand:()=>i,MessageDeferCommand:()=>u,MessageCreateCommand:()=>o,ChannelPolicySetCommand:()=>c,ChannelPolicyClearCommand:()=>l});module.exports=Y(ce);var r=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),J=(e)=>({nodeType:"RAW",value:e}),K=(e)=>{return`'${e.replace(/'/g,"''")}'`},j=(e)=>{if(e===null)return"NULL";else if(typeof e==="string")return K(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}`)},Z=(e)=>{return`"${e.replace(/"/g,'""')}"`},ee=(e)=>{if(e.nodeType==="VALUE")return j(e.value);else if(e.nodeType==="REF")return Z(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(ee(t[E]));return J(s.join(""))};class l{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
- SELECT 1 FROM ${n(this.schema)}."channel_policy_clear"(
1
+ var{defineProperty:h,getOwnPropertyNames:W,getOwnPropertyDescriptor:Y}=Object,X=Object.prototype.hasOwnProperty;var U=new WeakMap,J=(e)=>{var t=U.get(e),n;if(t)return t;if(t=h({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function")W(e).map((E)=>!X.call(t,E)&&h(t,E,{get:()=>e[E],enumerable:!(n=Y(e,E))||n.enumerable}));return U.set(e,t),t};var K=(e,t)=>{for(var n in t)h(e,n,{get:t[n],enumerable:!0,configurable:!0,set:(E)=>t[n]=()=>E})};var Te={};K(Te,{queueEventDecode:()=>x,Queue:()=>L,MessageHeartbeatCommand:()=>S,MessageDequeueCommand:()=>i,MessageDeleteCommand:()=>u,MessageDeferCommand:()=>o,MessageCreateCommand:()=>c,ChannelPolicySetCommand:()=>m,ChannelPolicyClearCommand:()=>l});module.exports=J(Te);var r=(e)=>({nodeType:"VALUE",value:e}),s=(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}`)},te=(e)=>{return`"${e.replace(/"/g,'""')}"`},se=(e)=>{if(e.nodeType==="VALUE")return ee(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 a=(e,...t)=>{let n=[];for(let E=0;E<e.length;E+=1)if(n.push(e[E]),E<t.length)n.push(se(t[E]));return j(n.join(""))};class l{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
+ SELECT 1 FROM ${s(this.schema)}."channel_policy_clear"(
3
3
  $1
4
4
  )
5
- `.value,[this.channelName])}}class c{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
- SELECT 1 FROM ${n(this.schema)}."channel_policy_set"(
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 n=e.maxSize??null;this.maxSize=n!==null?Math.max(0,n):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
+ SELECT 1 FROM ${s(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 N=(e)=>{return e*1000},te=(e)=>{return N(e*60)},U=(e)=>{return te(e*60)};var d=N(0),O=U(1);var f=(e)=>{let t=JSON.parse(e);if(t.type===0)return{eventType:"MESSAGE_CREATED",id:t.id,delayMs:t.delay_ms};else if(t.type===1)return{eventType:"MESSAGE_DELETED",id:t.id};else if(t.type===2)return{eventType:"MESSAGE_DEFERRED",id:t.id,delayMs:t.delay_ms};else throw new Error("Unknown event type")};var x=require("node:crypto");class o{schema;channelName;name;content;lockMs;id;delayMs;createdAt;constructor(e){let t=e.name??null,s=e.lockMs===void 0?O:Math.max(0,e.lockMs),E=e.delayMs===void 0?d:e.delayMs;this.id=x.randomUUID(),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`
13
- SELECT * FROM ${n(this.schema)}."message_create"(
12
+ `.value,[this.channelName,this.maxSize,this.maxConcurrency,this.releaseIntervalMs])}}var N=(e)=>{return e*1000},ne=(e)=>{return N(e*60)},O=(e)=>{return ne(e*60)};var d=N(0),f=O(1);var x=(e)=>{let t=JSON.parse(e);if(t.type===0)return{eventType:"MESSAGE_CREATED",id:t.id,delayMs:t.delay_ms};else if(t.type===1)return{eventType:"MESSAGE_DELETED",id:t.id};else if(t.type===2)return{eventType:"MESSAGE_DEFERRED",id:t.id,delayMs:t.delay_ms};else throw new Error("Unknown event type")};var G=require("node:crypto");class c{schema;channelName;name;content;lockMs;id;delayMs;createdAt;constructor(e){let t=e.name??null,n=e.lockMs===void 0?f:Math.max(0,e.lockMs),E=e.delayMs===void 0?d:e.delayMs;this.id=G.randomUUID(),this.schema=e.schema,this.channelName=e.channelName,this.content=e.content,this.name=t,this.lockMs=n,this.delayMs=E,this.createdAt=new Date}async execute(e){let t=await e.query(a`
13
+ SELECT * FROM ${s(this.schema)}."message_create"(
14
14
  $1,
15
15
  $2,
16
16
  $3,
@@ -18,27 +18,34 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
18
18
  $5::BIGINT,
19
19
  $6::BIGINT
20
20
  )
21
- `.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")}}class m{schema;constructor(e){this.schema=e.schema}async execute(e){let t=await e.query(a`
21
+ `.value,[this.id,this.channelName,this.name,this.content,this.lockMs,this.delayMs]).then((n)=>n.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")}}class i{schema;constructor(e){this.schema=e.schema}async execute(e){let t=await e.query(a`
22
22
  SELECT
23
23
  result_code,
24
24
  metadata,
25
25
  content,
26
26
  state
27
- FROM ${n(this.schema)}."message_dequeue"()
28
- `.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,isUnlocked:t.metadata.is_unlocked,name:t.metadata.name,content:t.content,state:t.state,numAttempts:t.metadata.num_attempts}};else throw new Error("Unexpected dequeue result")}}class i{schema;id;constructor(e){this.schema=e.schema,this.id=e.id}async execute(e){let t=await e.query(a`
29
- SELECT * FROM ${n(this.schema)}."message_delete"(
30
- $1
27
+ FROM ${s(this.schema)}."message_dequeue"()
28
+ `.value,[]).then((n)=>n.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,isUnlocked:t.metadata.is_unlocked,name:t.metadata.name,content:t.content,state:t.state,numAttempts:t.metadata.num_attempts}};else throw new Error("Unexpected dequeue result")}}class u{schema;id;numAttempts;constructor(e){this.schema=e.schema,this.id=e.id,this.numAttempts=e.numAttempts}async execute(e){let t=await e.query(a`
29
+ SELECT * FROM ${s(this.schema)}."message_delete"(
30
+ $1,
31
+ $2::BIGINT
31
32
  )
32
- `.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")}}class u{schema;id;delayMs;state;constructor(e){let t=e.delayMs===void 0?d: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`
33
- SELECT * FROM ${n(this.schema)}."message_defer"(
33
+ `.value,[this.id,this.numAttempts]).then((n)=>n.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")}}class o{schema;id;numAttempts;delayMs;state;constructor(e){let t=e.delayMs===void 0?d:e.delayMs;this.schema=e.schema,this.numAttempts=e.numAttempts,this.id=e.id,this.delayMs=t,this.state=e.state??null}async execute(e){let t=await e.query(a`
34
+ SELECT * FROM ${s(this.schema)}."message_defer"(
34
35
  $1,
35
36
  $2::BIGINT,
36
- $3
37
+ $3::BIGINT,
38
+ $4
39
+ )
40
+ `.value,[this.id,this.numAttempts,this.delayMs,this.state]).then((n)=>n.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")}}class S{schema;id;numAttempts;constructor(e){this.schema=e.schema,this.numAttempts=e.numAttempts,this.id=e.id}async execute(e){let t=await e.query(a`
41
+ SELECT * FROM ${s(this.schema)}."message_heartbeat"(
42
+ $1,
43
+ $2::BIGINT
37
44
  )
38
- `.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 G=(e)=>{let t=e.split(`
39
- `),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(`
40
- `).trim()};var g=require("path"),__filename="/home/runner/work/lonnymq/lonnymq/src/core/path.ts",Ee=g.dirname(g.dirname(__filename)),_e=new RegExp(`^${Ee}/`),_=(e)=>{return e.replace(_e,"")};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/00-table-channel-policy.ts",F={name:_(__filename),sql:(e)=>{return[a`
41
- CREATE TABLE ${n(e.schema)}."channel_policy" (
45
+ `.value,[this.id,this.numAttempts]).then((n)=>n.rows[0]);if(t.result_code===0)return{resultType:"MESSAGE_NOT_FOUND"};else if(t.result_code===1)return{resultType:"MESSAGE_STATE_INVALID"};else if(t.result_code===2)return{resultType:"MESSAGE_HEARTBEATED"};else throw new Error("Unexpected result")}}var F=(e)=>{let t=e.split(`
46
+ `),n=Number.MAX_SAFE_INTEGER;for(let E of t){if(E.trim().length===0)continue;let T=E.search(/\S/);n=Math.min(n,T)}return t.map((E)=>E.slice(n)).join(`
47
+ `).trim()};var g=require("path"),__filename="/home/runner/work/lonnymq/lonnymq/src/core/path.ts",me=g.dirname(g.dirname(__filename)),ce=new RegExp(`^${me}/`),_=(e)=>{return e.replace(ce,"")};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/00-table-channel-policy.ts",q={name:_(__filename),sql:(e)=>{return[a`
48
+ CREATE TABLE ${s(e.schema)}."channel_policy" (
42
49
  "id" UUID NOT NULL DEFAULT GEN_RANDOM_UUID(),
43
50
  "name" TEXT NOT NULL,
44
51
  "max_size" INTEGER,
@@ -49,9 +56,9 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
49
56
  );
50
57
  `,a`
51
58
  CREATE UNIQUE INDEX "channel_policy_name_ux"
52
- ON ${n(e.schema)}."channel_policy" ("name");
53
- `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/01-table-channel-state.ts",q={name:_(__filename),sql:(e)=>{return[a`
54
- CREATE TABLE ${n(e.schema)}."channel_state" (
59
+ ON ${s(e.schema)}."channel_policy" ("name");
60
+ `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/01-table-channel-state.ts",$={name:_(__filename),sql:(e)=>{return[a`
61
+ CREATE TABLE ${s(e.schema)}."channel_state" (
55
62
  "id" UUID NOT NULL DEFAULT GEN_RANDOM_UUID(),
56
63
  "name" TEXT NOT NULL,
57
64
  "max_size" INTEGER,
@@ -69,15 +76,15 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
69
76
  );
70
77
  `,a`
71
78
  CREATE UNIQUE INDEX "channel_state_name_ux"
72
- ON ${n(e.schema)}."channel_state" ("name");
79
+ ON ${s(e.schema)}."channel_state" ("name");
73
80
  `,a`
74
81
  CREATE INDEX "channel_state_dequeue_ix"
75
- ON ${n(e.schema)}."channel_state" (
82
+ ON ${s(e.schema)}."channel_state" (
76
83
  "active_next_at" ASC
77
84
  ) WHERE "message_id" IS NOT NULL
78
85
  AND ("max_concurrency" IS NULL OR "current_concurrency" < "max_concurrency");
79
- `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/02-table-message.ts",$={name:_(__filename),sql:(e)=>{return[a`
80
- CREATE TABLE ${n(e.schema)}."message" (
86
+ `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/02-table-message.ts",b={name:_(__filename),sql:(e)=>{return[a`
87
+ CREATE TABLE ${s(e.schema)}."message" (
81
88
  "id" UUID NOT NULL,
82
89
  "channel_name" TEXT NOT NULL,
83
90
  "seq_no" BIGSERIAL NOT NULL,
@@ -94,24 +101,24 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
94
101
  );
95
102
  `,a`
96
103
  CREATE UNIQUE INDEX "message_name_ux"
97
- ON ${n(e.schema)}."message" (
104
+ ON ${s(e.schema)}."message" (
98
105
  "channel_name",
99
106
  "name"
100
107
  ) WHERE "num_attempts" = 0
101
108
  `,a`
102
109
  CREATE INDEX "message_dequeue_ix"
103
- ON ${n(e.schema)}."message" (
110
+ ON ${s(e.schema)}."message" (
104
111
  "channel_name",
105
112
  "dequeue_at" ASC,
106
113
  "seq_no" ASC
107
114
  ) WHERE NOT "is_locked";
108
115
  `,a`
109
116
  CREATE INDEX "message_locked_dequeue_ix"
110
- ON ${n(e.schema)}."message" (
117
+ ON ${s(e.schema)}."message" (
111
118
  "unlock_at" ASC
112
119
  ) WHERE "is_locked";
113
120
  `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/03-function-message-create.ts",B={name:_(__filename),sql:(e)=>{return[a`
114
- CREATE FUNCTION ${n(e.schema)}."message_create" (
121
+ CREATE FUNCTION ${s(e.schema)}."message_create" (
115
122
  p_id UUID,
116
123
  p_channel_name TEXT,
117
124
  p_name TEXT,
@@ -134,12 +141,12 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
134
141
  "channel_policy"."max_size",
135
142
  "channel_policy"."max_concurrency",
136
143
  "channel_policy"."release_interval_ms"
137
- FROM ${n(e.schema)}."channel_policy"
144
+ FROM ${s(e.schema)}."channel_policy"
138
145
  WHERE "name" = p_channel_name
139
146
  FOR SHARE
140
147
  INTO v_channel_policy;
141
148
 
142
- INSERT INTO ${n(e.schema)}."channel_state" (
149
+ INSERT INTO ${s(e.schema)}."channel_state" (
143
150
  "name",
144
151
  "current_size",
145
152
  "current_concurrency",
@@ -178,7 +185,7 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
178
185
  RETURN;
179
186
  END IF;
180
187
 
181
- INSERT INTO ${n(e.schema)}."message" (
188
+ INSERT INTO ${s(e.schema)}."message" (
182
189
  "id",
183
190
  "channel_name",
184
191
  "name",
@@ -220,7 +227,7 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
220
227
  v_message."dequeue_at" < v_channel_state."message_dequeue_at" OR
221
228
  v_message."dequeue_at" = v_channel_state."message_dequeue_at" AND v_message."seq_no" < v_channel_state."message_seq_no"
222
229
  THEN
223
- UPDATE ${n(e.schema)}."channel_state" SET
230
+ UPDATE ${s(e.schema)}."channel_state" SET
224
231
  "current_size" = v_channel_state."current_size" + 1,
225
232
  "message_id" = v_message."id",
226
233
  "message_dequeue_at" = v_message."dequeue_at",
@@ -231,7 +238,7 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
231
238
  )
232
239
  WHERE "id" = v_channel_state."id";
233
240
  ELSE
234
- UPDATE ${n(e.schema)}."channel_state" SET
241
+ UPDATE ${s(e.schema)}."channel_state" SET
235
242
  "current_size" = v_channel_state."current_size" + 1
236
243
  WHERE "id" = v_channel_state."id";
237
244
  END IF;
@@ -252,8 +259,44 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
252
259
  RETURN;
253
260
  END;
254
261
  $$ LANGUAGE plpgsql;
255
- `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/04-function-message-dequeue.ts",P={name:_(__filename),sql:(e)=>{return[a`
256
- CREATE FUNCTION ${n(e.schema)}."message_dequeue" ()
262
+ `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/04-function-message-dequeue.ts",oe=(e)=>a`
263
+ SELECT
264
+ "message"."id",
265
+ "message"."name",
266
+ "message"."state",
267
+ "message"."content",
268
+ "message"."channel_name",
269
+ "message"."lock_ms",
270
+ "message"."unlock_at",
271
+ "message"."num_attempts"
272
+ FROM ${s(e.schema)}."message"
273
+ WHERE "is_locked"
274
+ AND "unlock_at" <= ${e.now}
275
+ ORDER BY "unlock_at" ASC
276
+ `,ie=(e)=>a`
277
+ SELECT
278
+ "channel_state"."id",
279
+ "channel_state"."name",
280
+ "channel_state"."release_interval_ms",
281
+ "channel_state"."message_id",
282
+ "channel_state"."active_next_at",
283
+ "channel_state"."active_prev_at",
284
+ "channel_state"."current_concurrency"
285
+ FROM ${s(e.schema)}."channel_state"
286
+ WHERE "message_id" IS NOT NULL
287
+ AND ("max_concurrency" IS NULL OR "current_concurrency" < "max_concurrency")
288
+ ORDER BY "active_next_at" ASC
289
+ `,ue=(e)=>a`
290
+ SELECT
291
+ "message"."id",
292
+ "message"."dequeue_at",
293
+ "message"."seq_no"
294
+ FROM ${s(e.schema)}."message"
295
+ WHERE NOT "is_locked"
296
+ AND "channel_name" = ${e.channelName}
297
+ ORDER BY "dequeue_at" ASC, "seq_no" ASC
298
+ `,P={name:_(__filename),sql:(e)=>{let t=oe({now:a`v_now`,schema:e.schema}),n=ue({channelName:a`v_channel_state."name"`,schema:e.schema}),E=ie({schema:e.schema});return[a`
299
+ CREATE FUNCTION ${s(e.schema)}."message_dequeue" ()
257
300
  RETURNS TABLE (
258
301
  result_code INTEGER,
259
302
  content BYTEA,
@@ -269,26 +312,14 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
269
312
  BEGIN
270
313
  v_now := NOW();
271
314
 
272
- SELECT
273
- "message"."id",
274
- "message"."name",
275
- "message"."state",
276
- "message"."content",
277
- "message"."channel_name",
278
- "message"."lock_ms",
279
- "message"."unlock_at",
280
- "message"."num_attempts"
281
- FROM ${n(e.schema)}."message"
282
- WHERE "is_locked"
283
- AND "unlock_at" <= v_now
284
- ORDER BY "unlock_at" ASC
315
+ ${t}
285
316
  FOR UPDATE
286
317
  SKIP LOCKED
287
318
  LIMIT 1
288
319
  INTO v_message_locked;
289
320
 
290
321
  IF v_message_locked."id" IS NOT NULL THEN
291
- UPDATE ${n(e.schema)}."message" SET
322
+ UPDATE ${s(e.schema)}."message" SET
292
323
  "num_attempts" = v_message_locked."num_attempts" + 1,
293
324
  "unlock_at" = v_now + (v_message_locked."lock_ms" * INTERVAL '1 millisecond')
294
325
  WHERE "id" = v_message_locked."id";
@@ -302,23 +333,12 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
302
333
  'is_unlocked', TRUE,
303
334
  'channel_name', v_message_locked.channel_name,
304
335
  'name', v_message_locked.name,
305
- 'num_attempts', v_message_locked.num_attempts
336
+ 'num_attempts', v_message_locked.num_attempts + 1
306
337
  );
307
338
  RETURN;
308
339
  END IF;
309
340
 
310
- SELECT
311
- "channel_state"."id",
312
- "channel_state"."name",
313
- "channel_state"."release_interval_ms",
314
- "channel_state"."message_id",
315
- "channel_state"."active_next_at",
316
- "channel_state"."active_prev_at",
317
- "channel_state"."current_concurrency"
318
- FROM ${n(e.schema)}."channel_state"
319
- WHERE "message_id" IS NOT NULL
320
- AND ("max_concurrency" IS NULL OR "current_concurrency" < "max_concurrency")
321
- ORDER BY "active_next_at" ASC
341
+ ${E}
322
342
  FOR UPDATE
323
343
  SKIP LOCKED
324
344
  LIMIT 1
@@ -352,35 +372,28 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
352
372
  "message"."num_attempts",
353
373
  "message"."state",
354
374
  "message"."lock_ms"
355
- FROM ${n(e.schema)}."message"
375
+ FROM ${s(e.schema)}."message"
356
376
  WHERE "id" = v_channel_state."message_id"
357
377
  INTO v_message_dequeue;
358
378
 
359
- UPDATE ${n(e.schema)}."message" SET
379
+ UPDATE ${s(e.schema)}."message" SET
360
380
  "is_locked" = TRUE,
361
381
  "num_attempts" = v_message_dequeue."num_attempts" + 1,
362
382
  "unlock_at" = v_now + (v_message_dequeue."lock_ms" * INTERVAL '1 millisecond')
363
383
  WHERE "id" = v_message_dequeue."id";
364
384
 
365
- SELECT
366
- "message"."id",
367
- "message"."dequeue_at",
368
- "message"."seq_no"
369
- FROM ${n(e.schema)}."message"
370
- WHERE NOT "is_locked"
371
- AND "channel_name" = v_message_dequeue."channel_name"
372
- ORDER BY "dequeue_at" ASC, "seq_no" ASC
385
+ ${n}
373
386
  LIMIT 1
374
387
  INTO v_message_next;
375
388
 
376
389
  IF v_message_next."id" IS NULL THEN
377
- UPDATE ${n(e.schema)}."channel_state" SET
390
+ UPDATE ${s(e.schema)}."channel_state" SET
378
391
  "current_concurrency" = v_channel_state."current_concurrency" + 1,
379
392
  "active_prev_at" = v_now,
380
393
  "message_id" = NULL
381
394
  WHERE "id" = v_channel_state."id";
382
395
  ELSE
383
- UPDATE ${n(e.schema)}."channel_state" SET
396
+ UPDATE ${s(e.schema)}."channel_state" SET
384
397
  "current_concurrency" = v_channel_state."current_concurrency" + 1,
385
398
  "message_id" = v_message_next."id",
386
399
  "message_dequeue_at" = v_message_next."dequeue_at",
@@ -402,14 +415,15 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
402
415
  'is_unlocked', FALSE,
403
416
  'channel_name', v_message_dequeue.channel_name,
404
417
  'name', v_message_dequeue.name,
405
- 'num_attempts', v_message_dequeue.num_attempts
418
+ 'num_attempts', v_message_dequeue.num_attempts + 1
406
419
  );
407
420
  RETURN;
408
421
  END;
409
422
  $$ LANGUAGE plpgsql;
410
- `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/05-function-message-delete.ts",b={name:_(__filename),sql:(e)=>{return[a`
411
- CREATE FUNCTION ${n(e.schema)}."message_delete" (
412
- p_id UUID
423
+ `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/05-function-message-delete.ts",Q={name:_(__filename),sql:(e)=>{return[a`
424
+ CREATE FUNCTION ${s(e.schema)}."message_delete" (
425
+ p_id UUID,
426
+ p_num_attempts BIGINT
413
427
  )
414
428
  RETURNS TABLE (
415
429
  result_code INTEGER
@@ -422,8 +436,9 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
422
436
  SELECT
423
437
  "message"."id",
424
438
  "message"."channel_name",
439
+ "message"."num_attempts",
425
440
  "message"."is_locked"
426
- FROM ${n(e.schema)}."message"
441
+ FROM ${s(e.schema)}."message"
427
442
  WHERE "id" = p_id
428
443
  FOR UPDATE
429
444
  INTO v_message;
@@ -432,7 +447,7 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
432
447
  RETURN QUERY SELECT
433
448
  ${r(0)};
434
449
  RETURN;
435
- ELSIF NOT v_message."is_locked" THEN
450
+ ELSIF NOT v_message."is_locked" OR v_message."num_attempts" <> p_num_attempts THEN
436
451
  RETURN QUERY SELECT
437
452
  ${r(1)};
438
453
  RETURN;
@@ -440,7 +455,7 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
440
455
 
441
456
  SELECT
442
457
  "channel_policy"."id"
443
- FROM ${n(e.schema)}."channel_policy"
458
+ FROM ${s(e.schema)}."channel_policy"
444
459
  WHERE "name" = v_message."channel_name"
445
460
  FOR SHARE
446
461
  INTO v_channel_policy;
@@ -449,16 +464,16 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
449
464
  "channel_state"."id",
450
465
  "channel_state"."current_size",
451
466
  "channel_state"."current_concurrency"
452
- FROM ${n(e.schema)}."channel_state"
467
+ FROM ${s(e.schema)}."channel_state"
453
468
  WHERE "name" = v_message."channel_name"
454
469
  FOR UPDATE
455
470
  INTO v_channel_state;
456
471
 
457
472
  IF v_channel_policy."id" IS NULL AND v_channel_state."current_size" = 1 THEN
458
- DELETE FROM ${n(e.schema)}."channel_state"
473
+ DELETE FROM ${s(e.schema)}."channel_state"
459
474
  WHERE "id" = v_channel_state."id";
460
475
  ELSE
461
- UPDATE ${n(e.schema)}."channel_state" SET
476
+ UPDATE ${s(e.schema)}."channel_state" SET
462
477
  "current_concurrency" = v_channel_state."current_concurrency" - 1,
463
478
  "current_size" = v_channel_state."current_size" - 1
464
479
  WHERE "id" = v_channel_state."id";
@@ -474,7 +489,7 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
474
489
  );
475
490
  END IF;
476
491
 
477
- DELETE FROM ${n(e.schema)}."message"
492
+ DELETE FROM ${s(e.schema)}."message"
478
493
  WHERE "id" = p_id;
479
494
 
480
495
  RETURN QUERY SELECT
@@ -482,9 +497,10 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
482
497
  RETURN;
483
498
  END;
484
499
  $$ LANGUAGE plpgsql;
485
- `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/06-function-message-defer.ts",Q={name:_(__filename),sql:(e)=>{return[a`
486
- CREATE FUNCTION ${n(e.schema)}."message_defer" (
500
+ `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/06-function-message-defer.ts",w={name:_(__filename),sql:(e)=>{return[a`
501
+ CREATE FUNCTION ${s(e.schema)}."message_defer" (
487
502
  p_id UUID,
503
+ p_num_attempts BIGINT,
488
504
  p_delay_ms BIGINT,
489
505
  p_state BYTEA
490
506
  )
@@ -502,9 +518,10 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
502
518
  SELECT
503
519
  "message"."id",
504
520
  "message"."channel_name",
521
+ "message"."num_attempts",
505
522
  "message"."is_locked",
506
523
  "message"."seq_no"
507
- FROM ${n(e.schema)}."message"
524
+ FROM ${s(e.schema)}."message"
508
525
  WHERE "id" = p_id
509
526
  FOR UPDATE
510
527
  INTO v_message;
@@ -513,7 +530,7 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
513
530
  RETURN QUERY SELECT
514
531
  ${r(0)};
515
532
  RETURN;
516
- ELSIF NOT v_message."is_locked" THEN
533
+ ELSIF NOT v_message."is_locked" OR v_message."num_attempts" <> p_num_attempts THEN
517
534
  RETURN QUERY SELECT
518
535
  ${r(1)};
519
536
  RETURN;
@@ -526,7 +543,7 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
526
543
  "channel_state"."message_dequeue_at",
527
544
  "channel_state"."active_prev_at",
528
545
  "channel_state"."message_seq_no"
529
- FROM ${n(e.schema)}."channel_state"
546
+ FROM ${s(e.schema)}."channel_state"
530
547
  WHERE "name" = v_message."channel_name"
531
548
  FOR UPDATE
532
549
  INTO v_channel_state;
@@ -538,7 +555,7 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
538
555
  v_dequeue_at < v_channel_state."message_dequeue_at" OR
539
556
  v_dequeue_at = v_channel_state."message_dequeue_at" AND v_message."seq_no" < v_channel_state."message_seq_no"
540
557
  THEN
541
- UPDATE ${n(e.schema)}."channel_state" SET
558
+ UPDATE ${s(e.schema)}."channel_state" SET
542
559
  "current_concurrency" = v_channel_state."current_concurrency" - 1,
543
560
  "message_id" = v_message."id",
544
561
  "message_dequeue_at" = v_dequeue_at,
@@ -549,12 +566,12 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
549
566
  )
550
567
  WHERE "name" = v_message."channel_name";
551
568
  ELSE
552
- UPDATE ${n(e.schema)}."channel_state" SET
569
+ UPDATE ${s(e.schema)}."channel_state" SET
553
570
  "current_concurrency" = v_channel_state."current_concurrency" - 1
554
571
  WHERE "name" = v_message."channel_name";
555
572
  END IF;
556
573
 
557
- UPDATE ${n(e.schema)}."message" SET
574
+ UPDATE ${s(e.schema)}."message" SET
558
575
  "state" = p_state,
559
576
  "is_locked" = FALSE,
560
577
  "dequeue_at" = v_dequeue_at
@@ -576,65 +593,72 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
576
593
  RETURN;
577
594
  END;
578
595
  $$ LANGUAGE plpgsql;
579
- `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/07-function-channel-policy-set.ts",k={name:_(__filename),sql:(e)=>{return[a`
580
- CREATE FUNCTION ${n(e.schema)}."channel_policy_set" (
581
- p_name TEXT,
582
- p_max_size INTEGER,
583
- p_max_concurrency INTEGER,
584
- p_release_interval_ms INTEGER
585
- ) RETURNS VOID AS $$
596
+ `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/07-function-message-heartbeat.ts",H={name:_(__filename),sql:(e)=>{return[a`
597
+ CREATE FUNCTION ${s(e.schema)}."message_heartbeat" (
598
+ p_id UUID,
599
+ p_num_attempts BIGINT
600
+ )
601
+ RETURNS TABLE (
602
+ result_code INTEGER
603
+ ) AS $$
586
604
  DECLARE
587
605
  v_now TIMESTAMP;
606
+ v_message RECORD;
588
607
  BEGIN
589
608
  v_now := NOW();
590
609
 
591
- INSERT INTO ${n(e.schema)}."channel_policy" (
592
- "name",
593
- "max_size",
594
- "max_concurrency",
595
- "release_interval_ms",
596
- "created_at"
597
- ) VALUES (
598
- p_name,
599
- p_max_size,
600
- p_max_concurrency,
601
- p_release_interval_ms,
602
- v_now
603
- ) ON CONFLICT ("name") DO UPDATE SET
604
- "max_size" = EXCLUDED."max_size",
605
- "max_concurrency" = EXCLUDED."max_concurrency",
606
- "release_interval_ms" = EXCLUDED."release_interval_ms";
610
+ SELECT
611
+ "message"."id",
612
+ "message"."is_locked",
613
+ "message"."num_attempts",
614
+ "message"."lock_ms"
615
+ FROM ${s(e.schema)}."message"
616
+ WHERE "id" = p_id
617
+ FOR UPDATE
618
+ INTO v_message;
607
619
 
608
- UPDATE ${n(e.schema)}."channel_state" SET
609
- "max_size" = p_max_size,
610
- "max_concurrency" = p_max_concurrency,
611
- "release_interval_ms" = p_release_interval_ms
612
- WHERE "name" = p_name;
620
+ IF v_message."id" IS NULL THEN
621
+ RETURN QUERY SELECT
622
+ ${r(0)};
623
+ RETURN;
624
+ ELSIF NOT v_message."is_locked" OR v_message."num_attempts" <> p_num_attempts THEN
625
+ RETURN QUERY SELECT
626
+ ${r(1)};
627
+ RETURN;
628
+ END IF;
629
+
630
+ UPDATE ${s(e.schema)}."message" SET
631
+ "unlock_at" = v_now + INTERVAL '1 MILLISECOND' * v_message."lock_ms"
632
+ WHERE "id" = p_id;
633
+
634
+ RETURN QUERY SELECT
635
+ ${r(2)};
636
+ RETURN;
613
637
  END;
614
638
  $$ LANGUAGE plpgsql;
615
- `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/08-function-channel-policy-clear.ts",w={name:_(__filename),sql:(e)=>{return[a`
616
- CREATE FUNCTION ${n(e.schema)}."channel_policy_clear" (
639
+ `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/08-function-channel-policy-clear.ts",k={name:_(__filename),sql:(e)=>{return[a`
640
+ CREATE FUNCTION ${s(e.schema)}."channel_policy_clear" (
617
641
  p_name TEXT
618
642
  ) RETURNS VOID AS $$
619
643
  DECLARE
620
644
  v_channel_state RECORD;
621
645
  BEGIN
622
- DELETE FROM ${n(e.schema)}."channel_policy"
646
+ DELETE FROM ${s(e.schema)}."channel_policy"
623
647
  WHERE "name" = p_name;
624
648
 
625
649
  SELECT
626
650
  "channel_state"."id",
627
651
  "channel_state"."current_size"
628
- FROM ${n(e.schema)}."channel_state"
652
+ FROM ${s(e.schema)}."channel_state"
629
653
  WHERE "name" = p_name
630
654
  FOR UPDATE
631
655
  INTO v_channel_state;
632
656
 
633
657
  IF v_channel_state."current_size" = 0 THEN
634
- DELETE FROM ${n(e.schema)}."channel_state"
658
+ DELETE FROM ${s(e.schema)}."channel_state"
635
659
  WHERE "id" = v_channel_state."id";
636
660
  ELSE
637
- UPDATE ${n(e.schema)}."channel_state" SET
661
+ UPDATE ${s(e.schema)}."channel_state" SET
638
662
  "max_size" = NULL,
639
663
  "max_concurrency" = NULL,
640
664
  "release_interval_ms" = NULL
@@ -642,4 +666,40 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
642
666
  END IF;
643
667
  END;
644
668
  $$ LANGUAGE plpgsql;
645
- `]}};class S{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((H)=>E(H))})});return{messageId:t.id,promise:s}}}class D{schema;channelName;registerFn;constructor(e){this.schema=e.schema,this.channelName=e.channelName,this.registerFn=e.registerFn}set(e){let t=new c({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 l({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 A{policy;message;constructor(e){this.message=new S(e),this.policy=new D(e)}}var le=(e,t)=>{return e.sortKey.localeCompare(t.sortKey)};class y{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(le))await t.execute(e.databaseClient)}}class M{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 p{schema;channelName;constructor(e){this.schema=e.schema,this.channelName=e.channelName}set(e){return new c({schema:this.schema,channelName:this.channelName,maxConcurrency:e.maxConcurrency,maxSize:e.maxSize,releaseIntervalMs:e.releaseIntervalMs}).execute(e.databaseClient)}clear(e){return new l({schema:this.schema,channelName:this.channelName}).execute(e.databaseClient)}}class C{policy;message;constructor(e){this.message=new M({schema:e.schema,channelName:e.channelName}),this.policy=new p({schema:e.schema,channelName:e.channelName})}}class v{schema;id;isUnlocked;channelName;name;content;state;numAttempts;constructor(e){this.schema=e.schema,this.id=e.id,this.channelName=e.channelName,this.isUnlocked=e.isUnlocked,this.name=e.name,this.content=e.content,this.state=e.state,this.numAttempts=e.numAttempts}async defer(e){return new u({schema:this.schema,id:this.id,delayMs:e.delayMs,state:e.state}).execute(e.databaseClient)}async delete(e){return new i({schema:this.schema,id:this.id}).execute(e.databaseClient)}}class L{schema;constructor(e){this.schema=e.schema}async dequeue(e){let s=await new m({schema:this.schema}).execute(e.databaseClient);if(s.resultType==="MESSAGE_DEQUEUED")return{resultType:"MESSAGE_DEQUEUED",message:new v({schema:this.schema,id:s.message.id,channelName:s.message.channelName,name:s.message.name,isUnlocked:s.message.isUnlocked,content:s.message.content,state:s.message.state,numAttempts:s.message.numAttempts})};else return s}channel(e){return new C({schema:this.schema,channelName:e})}batch(){return new y({schema:this.schema})}migrations(e={}){return[F,q,$,B,P,b,Q,k,w].sort((t,s)=>t.name.localeCompare(s.name)).flatMap((t)=>t.sql({schema:this.schema,eventChannel:e.eventChannel??null})).map((t)=>G(t.value))}}
669
+ `]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/09-function-channel-policy-set.ts",V={name:_(__filename),sql:(e)=>{return[a`
670
+ CREATE FUNCTION ${s(e.schema)}."channel_policy_set" (
671
+ p_name TEXT,
672
+ p_max_size INTEGER,
673
+ p_max_concurrency INTEGER,
674
+ p_release_interval_ms INTEGER
675
+ ) RETURNS VOID AS $$
676
+ DECLARE
677
+ v_now TIMESTAMP;
678
+ BEGIN
679
+ v_now := NOW();
680
+
681
+ INSERT INTO ${s(e.schema)}."channel_policy" (
682
+ "name",
683
+ "max_size",
684
+ "max_concurrency",
685
+ "release_interval_ms",
686
+ "created_at"
687
+ ) VALUES (
688
+ p_name,
689
+ p_max_size,
690
+ p_max_concurrency,
691
+ p_release_interval_ms,
692
+ v_now
693
+ ) ON CONFLICT ("name") DO UPDATE SET
694
+ "max_size" = EXCLUDED."max_size",
695
+ "max_concurrency" = EXCLUDED."max_concurrency",
696
+ "release_interval_ms" = EXCLUDED."release_interval_ms";
697
+
698
+ UPDATE ${s(e.schema)}."channel_state" SET
699
+ "max_size" = p_max_size,
700
+ "max_concurrency" = p_max_concurrency,
701
+ "release_interval_ms" = p_release_interval_ms
702
+ WHERE "name" = p_name;
703
+ END;
704
+ $$ LANGUAGE plpgsql;
705
+ `]}};class A{schema;channelName;registerFn;constructor(e){this.schema=e.schema,this.channelName=e.channelName,this.registerFn=e.registerFn}create(e){let t=new c({schema:this.schema,channelName:this.channelName,name:e.name,content:e.content,lockMs:e.lockMs,delayMs:e.delayMs}),n=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:n}}}class D{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(n)=>{await t.execute(n)}})}clear(){let e=new l({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 p{policy;message;constructor(e){this.message=new A(e),this.policy=new D(e)}}var de=(e,t)=>{return e.sortKey.localeCompare(t.sortKey)};class M{commands;schema;constructor(e){this.commands=[],this.schema=e.schema}channel(e){return new p({schema:this.schema,channelName:e,registerFn:(t)=>{this.commands.push(t)}})}async execute(e){for(let t of this.commands.sort(de))await t.execute(e.databaseClient)}}class y{schema;channelName;constructor(e){this.schema=e.schema,this.channelName=e.channelName}async create(e){return new c({schema:this.schema,channelName:this.channelName,name:e.name,content:e.content,lockMs:e.lockMs,delayMs:e.delayMs}).execute(e.databaseClient)}}class C{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 l({schema:this.schema,channelName:this.channelName}).execute(e.databaseClient)}}class I{policy;message;constructor(e){this.message=new y({schema:e.schema,channelName:e.channelName}),this.policy=new C({schema:e.schema,channelName:e.channelName})}}class v{schema;id;isUnlocked;channelName;name;content;state;numAttempts;constructor(e){this.schema=e.schema,this.id=e.id,this.channelName=e.channelName,this.isUnlocked=e.isUnlocked,this.name=e.name,this.content=e.content,this.state=e.state,this.numAttempts=e.numAttempts}async defer(e){return new o({schema:this.schema,id:this.id,numAttempts:this.numAttempts,delayMs:e.delayMs,state:e.state}).execute(e.databaseClient)}async delete(e){return new u({schema:this.schema,numAttempts:this.numAttempts,id:this.id}).execute(e.databaseClient)}async heartbeat(e){return new o({schema:this.schema,id:this.id,numAttempts:this.numAttempts,delayMs:e.delayMs}).execute(e.databaseClient)}}class L{schema;constructor(e){this.schema=e.schema}async dequeue(e){let n=await new i({schema:this.schema}).execute(e.databaseClient);if(n.resultType==="MESSAGE_DEQUEUED")return{resultType:"MESSAGE_DEQUEUED",message:new v({schema:this.schema,id:n.message.id,channelName:n.message.channelName,name:n.message.name,isUnlocked:n.message.isUnlocked,content:n.message.content,state:n.message.state,numAttempts:n.message.numAttempts})};else return n}channel(e){return new I({schema:this.schema,channelName:e})}batch(){return new M({schema:this.schema})}migrations(e={}){return[q,$,b,B,P,Q,w,H,V,k].sort((t,n)=>t.name.localeCompare(n.name)).flatMap((t)=>t.sql({schema:this.schema,eventChannel:e.eventChannel??null})).map((t)=>F(t.value))}}