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 +189 -129
- package/dist/index.d.ts +29 -0
- package/dist/index.js +196 -136
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
var{defineProperty:h,getOwnPropertyNames:
|
|
2
|
-
SELECT 1 FROM ${
|
|
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
|
|
6
|
-
SELECT 1 FROM ${
|
|
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},
|
|
13
|
-
SELECT * FROM ${
|
|
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((
|
|
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 ${
|
|
28
|
-
`.value,[]).then((
|
|
29
|
-
SELECT * FROM ${
|
|
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((
|
|
33
|
-
SELECT * FROM ${
|
|
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.
|
|
39
|
-
`),
|
|
40
|
-
`).trim()};var g=require("path"),__filename="/home/runner/work/lonnymq/lonnymq/src/core/path.ts",
|
|
41
|
-
CREATE TABLE ${
|
|
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 ${
|
|
53
|
-
`]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/01-table-channel-state.ts"
|
|
54
|
-
CREATE TABLE ${
|
|
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 ${
|
|
79
|
+
ON ${s(e.schema)}."channel_state" ("name");
|
|
73
80
|
`,a`
|
|
74
81
|
CREATE INDEX "channel_state_dequeue_ix"
|
|
75
|
-
ON ${
|
|
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"
|
|
80
|
-
CREATE TABLE ${
|
|
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 ${
|
|
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 ${
|
|
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 ${
|
|
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 ${
|
|
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 ${
|
|
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 ${
|
|
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 ${
|
|
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 ${
|
|
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 ${
|
|
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",
|
|
256
|
-
|
|
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
|
-
|
|
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 ${
|
|
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
|
-
|
|
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 ${
|
|
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 ${
|
|
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
|
-
|
|
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 ${
|
|
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 ${
|
|
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",
|
|
411
|
-
CREATE FUNCTION ${
|
|
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 ${
|
|
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 ${
|
|
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 ${
|
|
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 ${
|
|
473
|
+
DELETE FROM ${s(e.schema)}."channel_state"
|
|
459
474
|
WHERE "id" = v_channel_state."id";
|
|
460
475
|
ELSE
|
|
461
|
-
UPDATE ${
|
|
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 ${
|
|
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",
|
|
486
|
-
CREATE FUNCTION ${
|
|
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 ${
|
|
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 ${
|
|
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 ${
|
|
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 ${
|
|
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 ${
|
|
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-
|
|
580
|
-
CREATE FUNCTION ${
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
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
|
-
|
|
592
|
-
"
|
|
593
|
-
"
|
|
594
|
-
"
|
|
595
|
-
"
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
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
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
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",
|
|
616
|
-
CREATE FUNCTION ${
|
|
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 ${
|
|
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 ${
|
|
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 ${
|
|
658
|
+
DELETE FROM ${s(e.schema)}."channel_state"
|
|
635
659
|
WHERE "id" = v_channel_state."id";
|
|
636
660
|
ELSE
|
|
637
|
-
UPDATE ${
|
|
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
|
-
`]}};
|
|
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))}}
|