lonnymq 0.0.11 → 0.0.13
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 +19 -15
- package/dist/index.d.ts +2 -0
- package/dist/index.js +37 -33
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -15,8 +15,8 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
|
|
|
15
15
|
$2,
|
|
16
16
|
$3,
|
|
17
17
|
$4,
|
|
18
|
-
$5::
|
|
19
|
-
$6::
|
|
18
|
+
$5::BIGINT,
|
|
19
|
+
$6::BIGINT
|
|
20
20
|
)
|
|
21
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`
|
|
22
22
|
SELECT
|
|
@@ -32,7 +32,7 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
|
|
|
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
33
|
SELECT * FROM ${n(this.schema)}."message_defer"(
|
|
34
34
|
$1,
|
|
35
|
-
$2,
|
|
35
|
+
$2::BIGINT,
|
|
36
36
|
$3
|
|
37
37
|
)
|
|
38
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(`
|
|
@@ -84,9 +84,9 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
|
|
|
84
84
|
"name" TEXT,
|
|
85
85
|
"content" BYTEA NOT NULL,
|
|
86
86
|
"state" BYTEA,
|
|
87
|
-
"lock_ms"
|
|
88
|
-
"is_locked" BOOLEAN NOT NULL
|
|
89
|
-
"num_attempts"
|
|
87
|
+
"lock_ms" BIGINT NOT NULL,
|
|
88
|
+
"is_locked" BOOLEAN NOT NULL,
|
|
89
|
+
"num_attempts" BIGINT NOT NULL,
|
|
90
90
|
"dequeue_at" TIMESTAMP NOT NULL,
|
|
91
91
|
"unlock_at" TIMESTAMP,
|
|
92
92
|
"created_at" TIMESTAMP NOT NULL,
|
|
@@ -110,14 +110,14 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
|
|
|
110
110
|
ON ${n(e.schema)}."message" (
|
|
111
111
|
"unlock_at" ASC
|
|
112
112
|
) WHERE "is_locked";
|
|
113
|
-
`]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/03-function-message-create.ts",
|
|
113
|
+
`]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/03-function-message-create.ts",B={name:_(__filename),sql:(e)=>{return[a`
|
|
114
114
|
CREATE FUNCTION ${n(e.schema)}."message_create" (
|
|
115
115
|
p_id UUID,
|
|
116
116
|
p_channel_name TEXT,
|
|
117
117
|
p_name TEXT,
|
|
118
118
|
p_content BYTEA,
|
|
119
|
-
p_lock_ms
|
|
120
|
-
p_delay_ms
|
|
119
|
+
p_lock_ms BIGINT,
|
|
120
|
+
p_delay_ms BIGINT
|
|
121
121
|
) RETURNS TABLE (
|
|
122
122
|
result_code INTEGER
|
|
123
123
|
) AS $$
|
|
@@ -184,6 +184,8 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
|
|
|
184
184
|
"name",
|
|
185
185
|
"content",
|
|
186
186
|
"lock_ms",
|
|
187
|
+
"is_locked",
|
|
188
|
+
"num_attempts",
|
|
187
189
|
"dequeue_at",
|
|
188
190
|
"created_at"
|
|
189
191
|
) VALUES (
|
|
@@ -192,6 +194,8 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
|
|
|
192
194
|
p_name,
|
|
193
195
|
p_content,
|
|
194
196
|
p_lock_ms,
|
|
197
|
+
FALSE,
|
|
198
|
+
0,
|
|
195
199
|
v_now + INTERVAL '1 MILLISECOND' * p_delay_ms,
|
|
196
200
|
v_now
|
|
197
201
|
) ON CONFLICT ("channel_name", "name")
|
|
@@ -248,7 +252,7 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
|
|
|
248
252
|
RETURN;
|
|
249
253
|
END;
|
|
250
254
|
$$ LANGUAGE plpgsql;
|
|
251
|
-
`]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/04-function-message-dequeue.ts",
|
|
255
|
+
`]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/04-function-message-dequeue.ts",P={name:_(__filename),sql:(e)=>{return[a`
|
|
252
256
|
CREATE FUNCTION ${n(e.schema)}."message_dequeue" ()
|
|
253
257
|
RETURNS TABLE (
|
|
254
258
|
result_code INTEGER,
|
|
@@ -403,7 +407,7 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
|
|
|
403
407
|
RETURN;
|
|
404
408
|
END;
|
|
405
409
|
$$ LANGUAGE plpgsql;
|
|
406
|
-
`]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/05-function-message-delete.ts",
|
|
410
|
+
`]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/05-function-message-delete.ts",b={name:_(__filename),sql:(e)=>{return[a`
|
|
407
411
|
CREATE FUNCTION ${n(e.schema)}."message_delete" (
|
|
408
412
|
p_id UUID
|
|
409
413
|
)
|
|
@@ -481,7 +485,7 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
|
|
|
481
485
|
`]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/06-function-message-defer.ts",Q={name:_(__filename),sql:(e)=>{return[a`
|
|
482
486
|
CREATE FUNCTION ${n(e.schema)}."message_defer" (
|
|
483
487
|
p_id UUID,
|
|
484
|
-
p_delay_ms
|
|
488
|
+
p_delay_ms BIGINT,
|
|
485
489
|
p_state BYTEA
|
|
486
490
|
)
|
|
487
491
|
RETURNS TABLE (
|
|
@@ -572,7 +576,7 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
|
|
|
572
576
|
RETURN;
|
|
573
577
|
END;
|
|
574
578
|
$$ LANGUAGE plpgsql;
|
|
575
|
-
`]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/07-function-channel-policy-set.ts",
|
|
579
|
+
`]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/07-function-channel-policy-set.ts",k={name:_(__filename),sql:(e)=>{return[a`
|
|
576
580
|
CREATE FUNCTION ${n(e.schema)}."channel_policy_set" (
|
|
577
581
|
p_name TEXT,
|
|
578
582
|
p_max_size INTEGER,
|
|
@@ -608,7 +612,7 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
|
|
|
608
612
|
WHERE "name" = p_name;
|
|
609
613
|
END;
|
|
610
614
|
$$ LANGUAGE plpgsql;
|
|
611
|
-
`]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/08-function-channel-policy-clear.ts",
|
|
615
|
+
`]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/08-function-channel-policy-clear.ts",w={name:_(__filename),sql:(e)=>{return[a`
|
|
612
616
|
CREATE FUNCTION ${n(e.schema)}."channel_policy_clear" (
|
|
613
617
|
p_name TEXT
|
|
614
618
|
) RETURNS VOID AS $$
|
|
@@ -638,4 +642,4 @@ var{defineProperty:h,getOwnPropertyNames:z,getOwnPropertyDescriptor:V}=Object,W=
|
|
|
638
642
|
END IF;
|
|
639
643
|
END;
|
|
640
644
|
$$ LANGUAGE plpgsql;
|
|
641
|
-
`]}};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;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 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,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,$,P,b,
|
|
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))}}
|
package/dist/index.d.ts
CHANGED
|
@@ -254,6 +254,7 @@ export declare class QueueChannel {
|
|
|
254
254
|
export declare class QueueMessage {
|
|
255
255
|
private readonly schema;
|
|
256
256
|
readonly id: string;
|
|
257
|
+
readonly isUnlocked: boolean;
|
|
257
258
|
readonly channelName: string;
|
|
258
259
|
readonly name: string | null;
|
|
259
260
|
readonly content: Buffer;
|
|
@@ -263,6 +264,7 @@ export declare class QueueMessage {
|
|
|
263
264
|
schema: string;
|
|
264
265
|
id: string;
|
|
265
266
|
channelName: string;
|
|
267
|
+
isUnlocked: boolean;
|
|
266
268
|
name: string | null;
|
|
267
269
|
content: Buffer;
|
|
268
270
|
state: Buffer | null;
|
package/dist/index.js
CHANGED
|
@@ -1,43 +1,43 @@
|
|
|
1
|
-
var r=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),Q=(e)=>({nodeType:"RAW",value:e}),
|
|
1
|
+
var r=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),Q=(e)=>({nodeType:"RAW",value:e}),k=(e)=>{return`'${e.replace(/'/g,"''")}'`},w=(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}`)},H=(e)=>{return`"${e.replace(/"/g,'""')}"`},z=(e)=>{if(e.nodeType==="VALUE")return w(e.value);else if(e.nodeType==="REF")return H(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 _=0;_<e.length;_+=1)if(s.push(e[_]),_<t.length)s.push(z(t[_]));return Q(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
2
|
SELECT 1 FROM ${n(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
|
|
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.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(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 h=(e)=>{return e*1000},V=(e)=>{return h(e*60)},C=(e)=>{return V(e*60)};var m=h(0),v=C(1);var W=(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")};import{randomUUID as X}from"node:crypto";class o{schema;channelName;name;content;lockMs;id;delayMs;createdAt;constructor(e){let t=e.name??null,
|
|
12
|
+
`.value,[this.channelName,this.maxSize,this.maxConcurrency,this.releaseIntervalMs])}}var h=(e)=>{return e*1000},V=(e)=>{return h(e*60)},C=(e)=>{return V(e*60)};var m=h(0),v=C(1);var W=(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")};import{randomUUID as X}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?v:Math.max(0,e.lockMs),_=e.delayMs===void 0?m:e.delayMs;this.id=X(),this.schema=e.schema,this.channelName=e.channelName,this.content=e.content,this.name=t,this.lockMs=s,this.delayMs=_,this.createdAt=new Date}async execute(e){let t=await e.query(a`
|
|
13
13
|
SELECT * FROM ${n(this.schema)}."message_create"(
|
|
14
14
|
$1,
|
|
15
15
|
$2,
|
|
16
16
|
$3,
|
|
17
17
|
$4,
|
|
18
|
-
$5::
|
|
19
|
-
$6::
|
|
18
|
+
$5::BIGINT,
|
|
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((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 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
27
|
FROM ${n(this.schema)}."message_dequeue"()
|
|
28
|
-
`.value,[]).then((
|
|
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 u{schema;id;constructor(e){this.schema=e.schema,this.id=e.id}async execute(e){let t=await e.query(a`
|
|
29
29
|
SELECT * FROM ${n(this.schema)}."message_delete"(
|
|
30
30
|
$1
|
|
31
31
|
)
|
|
32
|
-
`.value,[this.id]).then((
|
|
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 d{schema;id;delayMs;state;constructor(e){let t=e.delayMs===void 0?m: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
33
|
SELECT * FROM ${n(this.schema)}."message_defer"(
|
|
34
34
|
$1,
|
|
35
|
-
$2,
|
|
35
|
+
$2::BIGINT,
|
|
36
36
|
$3
|
|
37
37
|
)
|
|
38
|
-
`.value,[this.id,this.delayMs,this.state]).then((
|
|
39
|
-
`),
|
|
40
|
-
`).trim()};import{dirname as I}from"path";var __filename="/home/runner/work/lonnymq/lonnymq/src/core/path.ts",Z=I(I(__filename)),ee=new RegExp(`^${Z}/`),E=(e)=>{return e.replace(ee,"")};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/00-table-channel-policy.ts",U={name:E(__filename),sql:(e)=>{return[
|
|
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 L=(e)=>{let t=e.split(`
|
|
39
|
+
`),s=Number.MAX_SAFE_INTEGER;for(let _ of t){if(_.trim().length===0)continue;let T=_.search(/\S/);s=Math.min(s,T)}return t.map((_)=>_.slice(s)).join(`
|
|
40
|
+
`).trim()};import{dirname as I}from"path";var __filename="/home/runner/work/lonnymq/lonnymq/src/core/path.ts",Z=I(I(__filename)),ee=new RegExp(`^${Z}/`),E=(e)=>{return e.replace(ee,"")};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/00-table-channel-policy.ts",U={name:E(__filename),sql:(e)=>{return[a`
|
|
41
41
|
CREATE TABLE ${n(e.schema)}."channel_policy" (
|
|
42
42
|
"id" UUID NOT NULL DEFAULT GEN_RANDOM_UUID(),
|
|
43
43
|
"name" TEXT NOT NULL,
|
|
@@ -47,10 +47,10 @@ var r=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),Q=(e)=
|
|
|
47
47
|
"created_at" TIMESTAMP NOT NULL,
|
|
48
48
|
PRIMARY KEY ("id")
|
|
49
49
|
);
|
|
50
|
-
`,
|
|
50
|
+
`,a`
|
|
51
51
|
CREATE UNIQUE INDEX "channel_policy_name_ux"
|
|
52
52
|
ON ${n(e.schema)}."channel_policy" ("name");
|
|
53
|
-
`]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/01-table-channel-state.ts",O={name:E(__filename),sql:(e)=>{return[
|
|
53
|
+
`]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/01-table-channel-state.ts",O={name:E(__filename),sql:(e)=>{return[a`
|
|
54
54
|
CREATE TABLE ${n(e.schema)}."channel_state" (
|
|
55
55
|
"id" UUID NOT NULL DEFAULT GEN_RANDOM_UUID(),
|
|
56
56
|
"name" TEXT NOT NULL,
|
|
@@ -67,16 +67,16 @@ var r=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),Q=(e)=
|
|
|
67
67
|
"created_at" TIMESTAMP NOT NULL,
|
|
68
68
|
PRIMARY KEY ("id")
|
|
69
69
|
);
|
|
70
|
-
`,
|
|
70
|
+
`,a`
|
|
71
71
|
CREATE UNIQUE INDEX "channel_state_name_ux"
|
|
72
72
|
ON ${n(e.schema)}."channel_state" ("name");
|
|
73
|
-
`,
|
|
73
|
+
`,a`
|
|
74
74
|
CREATE INDEX "channel_state_dequeue_ix"
|
|
75
75
|
ON ${n(e.schema)}."channel_state" (
|
|
76
76
|
"active_next_at" ASC
|
|
77
77
|
) WHERE "message_id" IS NOT NULL
|
|
78
78
|
AND ("max_concurrency" IS NULL OR "current_concurrency" < "max_concurrency");
|
|
79
|
-
`]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/02-table-message.ts",f={name:E(__filename),sql:(e)=>{return[
|
|
79
|
+
`]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/02-table-message.ts",f={name:E(__filename),sql:(e)=>{return[a`
|
|
80
80
|
CREATE TABLE ${n(e.schema)}."message" (
|
|
81
81
|
"id" UUID NOT NULL,
|
|
82
82
|
"channel_name" TEXT NOT NULL,
|
|
@@ -84,40 +84,40 @@ var r=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),Q=(e)=
|
|
|
84
84
|
"name" TEXT,
|
|
85
85
|
"content" BYTEA NOT NULL,
|
|
86
86
|
"state" BYTEA,
|
|
87
|
-
"lock_ms"
|
|
88
|
-
"is_locked" BOOLEAN NOT NULL
|
|
89
|
-
"num_attempts"
|
|
87
|
+
"lock_ms" BIGINT NOT NULL,
|
|
88
|
+
"is_locked" BOOLEAN NOT NULL,
|
|
89
|
+
"num_attempts" BIGINT NOT NULL,
|
|
90
90
|
"dequeue_at" TIMESTAMP NOT NULL,
|
|
91
91
|
"unlock_at" TIMESTAMP,
|
|
92
92
|
"created_at" TIMESTAMP NOT NULL,
|
|
93
93
|
PRIMARY KEY ("id")
|
|
94
94
|
);
|
|
95
|
-
`,
|
|
95
|
+
`,a`
|
|
96
96
|
CREATE UNIQUE INDEX "message_name_ux"
|
|
97
97
|
ON ${n(e.schema)}."message" (
|
|
98
98
|
"channel_name",
|
|
99
99
|
"name"
|
|
100
100
|
) WHERE "num_attempts" = 0
|
|
101
|
-
`,
|
|
101
|
+
`,a`
|
|
102
102
|
CREATE INDEX "message_dequeue_ix"
|
|
103
103
|
ON ${n(e.schema)}."message" (
|
|
104
104
|
"channel_name",
|
|
105
105
|
"dequeue_at" ASC,
|
|
106
106
|
"seq_no" ASC
|
|
107
107
|
) WHERE NOT "is_locked";
|
|
108
|
-
`,
|
|
108
|
+
`,a`
|
|
109
109
|
CREATE INDEX "message_locked_dequeue_ix"
|
|
110
110
|
ON ${n(e.schema)}."message" (
|
|
111
111
|
"unlock_at" ASC
|
|
112
112
|
) WHERE "is_locked";
|
|
113
|
-
`]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/03-function-message-create.ts",x={name:E(__filename),sql:(e)=>{return[
|
|
113
|
+
`]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/03-function-message-create.ts",x={name:E(__filename),sql:(e)=>{return[a`
|
|
114
114
|
CREATE FUNCTION ${n(e.schema)}."message_create" (
|
|
115
115
|
p_id UUID,
|
|
116
116
|
p_channel_name TEXT,
|
|
117
117
|
p_name TEXT,
|
|
118
118
|
p_content BYTEA,
|
|
119
|
-
p_lock_ms
|
|
120
|
-
p_delay_ms
|
|
119
|
+
p_lock_ms BIGINT,
|
|
120
|
+
p_delay_ms BIGINT
|
|
121
121
|
) RETURNS TABLE (
|
|
122
122
|
result_code INTEGER
|
|
123
123
|
) AS $$
|
|
@@ -184,6 +184,8 @@ var r=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),Q=(e)=
|
|
|
184
184
|
"name",
|
|
185
185
|
"content",
|
|
186
186
|
"lock_ms",
|
|
187
|
+
"is_locked",
|
|
188
|
+
"num_attempts",
|
|
187
189
|
"dequeue_at",
|
|
188
190
|
"created_at"
|
|
189
191
|
) VALUES (
|
|
@@ -192,6 +194,8 @@ var r=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),Q=(e)=
|
|
|
192
194
|
p_name,
|
|
193
195
|
p_content,
|
|
194
196
|
p_lock_ms,
|
|
197
|
+
FALSE,
|
|
198
|
+
0,
|
|
195
199
|
v_now + INTERVAL '1 MILLISECOND' * p_delay_ms,
|
|
196
200
|
v_now
|
|
197
201
|
) ON CONFLICT ("channel_name", "name")
|
|
@@ -248,7 +252,7 @@ var r=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),Q=(e)=
|
|
|
248
252
|
RETURN;
|
|
249
253
|
END;
|
|
250
254
|
$$ LANGUAGE plpgsql;
|
|
251
|
-
`]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/04-function-message-dequeue.ts",G={name:E(__filename),sql:(e)=>{return[
|
|
255
|
+
`]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/04-function-message-dequeue.ts",G={name:E(__filename),sql:(e)=>{return[a`
|
|
252
256
|
CREATE FUNCTION ${n(e.schema)}."message_dequeue" ()
|
|
253
257
|
RETURNS TABLE (
|
|
254
258
|
result_code INTEGER,
|
|
@@ -403,7 +407,7 @@ var r=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),Q=(e)=
|
|
|
403
407
|
RETURN;
|
|
404
408
|
END;
|
|
405
409
|
$$ LANGUAGE plpgsql;
|
|
406
|
-
`]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/05-function-message-delete.ts",F={name:E(__filename),sql:(e)=>{return[
|
|
410
|
+
`]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/05-function-message-delete.ts",F={name:E(__filename),sql:(e)=>{return[a`
|
|
407
411
|
CREATE FUNCTION ${n(e.schema)}."message_delete" (
|
|
408
412
|
p_id UUID
|
|
409
413
|
)
|
|
@@ -478,10 +482,10 @@ var r=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),Q=(e)=
|
|
|
478
482
|
RETURN;
|
|
479
483
|
END;
|
|
480
484
|
$$ LANGUAGE plpgsql;
|
|
481
|
-
`]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/06-function-message-defer.ts",q={name:E(__filename),sql:(e)=>{return[
|
|
485
|
+
`]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/06-function-message-defer.ts",q={name:E(__filename),sql:(e)=>{return[a`
|
|
482
486
|
CREATE FUNCTION ${n(e.schema)}."message_defer" (
|
|
483
487
|
p_id UUID,
|
|
484
|
-
p_delay_ms
|
|
488
|
+
p_delay_ms BIGINT,
|
|
485
489
|
p_state BYTEA
|
|
486
490
|
)
|
|
487
491
|
RETURNS TABLE (
|
|
@@ -572,7 +576,7 @@ var r=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),Q=(e)=
|
|
|
572
576
|
RETURN;
|
|
573
577
|
END;
|
|
574
578
|
$$ LANGUAGE plpgsql;
|
|
575
|
-
`]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/07-function-channel-policy-set.ts",$={name:E(__filename),sql:(e)=>{return[
|
|
579
|
+
`]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/07-function-channel-policy-set.ts",$={name:E(__filename),sql:(e)=>{return[a`
|
|
576
580
|
CREATE FUNCTION ${n(e.schema)}."channel_policy_set" (
|
|
577
581
|
p_name TEXT,
|
|
578
582
|
p_max_size INTEGER,
|
|
@@ -608,7 +612,7 @@ var r=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),Q=(e)=
|
|
|
608
612
|
WHERE "name" = p_name;
|
|
609
613
|
END;
|
|
610
614
|
$$ LANGUAGE plpgsql;
|
|
611
|
-
`]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/08-function-channel-policy-clear.ts",
|
|
615
|
+
`]}};var __filename="/home/runner/work/lonnymq/lonnymq/src/migration/08-function-channel-policy-clear.ts",B={name:E(__filename),sql:(e)=>{return[a`
|
|
612
616
|
CREATE FUNCTION ${n(e.schema)}."channel_policy_clear" (
|
|
613
617
|
p_name TEXT
|
|
614
618
|
) RETURNS VOID AS $$
|
|
@@ -638,4 +642,4 @@ var r=(e)=>({nodeType:"VALUE",value:e}),n=(e)=>({nodeType:"REF",value:e}),Q=(e)=
|
|
|
638
642
|
END IF;
|
|
639
643
|
END;
|
|
640
644
|
$$ LANGUAGE plpgsql;
|
|
641
|
-
`]}};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}),
|
|
645
|
+
`]}};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((_)=>{this.registerFn({sortKey:JSON.stringify([t.channelName,t.name,t.createdAt.toISOString()]),execute:(T)=>t.execute(T).then((b)=>_(b))})});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 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 S{policy;message;constructor(e){this.message=new R(e),this.policy=new g(e)}}var te=(e,t)=>{return e.sortKey.localeCompare(t.sortKey)};class D{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(te))await t.execute(e.databaseClient)}}class A{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 y{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 M{policy;message;constructor(e){this.message=new A({schema:e.schema,channelName:e.channelName}),this.policy=new y({schema:e.schema,channelName:e.channelName})}}class p{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 d({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 P{schema;constructor(e){this.schema=e.schema}async dequeue(e){let s=await new i({schema:this.schema}).execute(e.databaseClient);if(s.resultType==="MESSAGE_DEQUEUED")return{resultType:"MESSAGE_DEQUEUED",message:new p({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 M({schema:this.schema,channelName:e})}batch(){return new D({schema:this.schema})}migrations(e={}){return[U,O,f,x,G,F,q,$,B].sort((t,s)=>t.name.localeCompare(s.name)).flatMap((t)=>t.sql({schema:this.schema,eventChannel:e.eventChannel??null})).map((t)=>L(t.value))}}export{W as queueEventDecode,P as Queue,i as MessageDequeueCommand,u as MessageDeleteCommand,d as MessageDeferCommand,o as MessageCreateCommand,c as ChannelPolicySetCommand,l as ChannelPolicyClearCommand};
|