Skip to content

Commit da3395c

Browse files
committed
Switch to awilix 13 and amqp 1.x
1 parent c98a004 commit da3395c

9 files changed

Lines changed: 57 additions & 25 deletions

File tree

packages/amqp/lib/AbstractAmqpConsumer.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ export abstract class AbstractAmqpConsumer<
306306
}
307307

308308
// Empty content for whatever reason
309-
if (!resolveMessageResult.result || !resolveMessageResult.result.body) {
309+
if (!resolveMessageResult.result?.body) {
310310
return ABORT_EARLY_EITHER
311311
}
312312

@@ -347,7 +347,7 @@ export abstract class AbstractAmqpConsumer<
347347
const resolvedMessage = resolveMessageResult.result
348348

349349
// Empty content for whatever reason
350-
if (!resolvedMessage || !resolvedMessage.body) return ABORT_EARLY_EITHER
350+
if (!resolvedMessage?.body) return ABORT_EARLY_EITHER
351351

352352
// @ts-expect-error
353353
if (this.messageIdField in resolvedMessage.body) {

packages/amqp/package.json

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,24 +33,24 @@
3333
"peerDependencies": {
3434
"@message-queue-toolkit/core": ">=25.0.0",
3535
"@message-queue-toolkit/schemas": ">=7.0.0",
36-
"amqplib": "^0.10.8",
36+
"amqplib": "^1.0.3",
3737
"zod": ">=3.25.76 <5.0.0"
3838
},
3939
"devDependencies": {
40-
"@biomejs/biome": "^2.3.8",
40+
"@biomejs/biome": "^2.3.15",
4141
"@lokalise/biome-config": "^3.1.0",
4242
"@lokalise/tsconfig": "^3.0.0",
4343
"@message-queue-toolkit/core": "*",
44-
"@types/amqplib": "0.10.8",
45-
"@types/node": "^25.0.2",
46-
"@vitest/coverage-v8": "^4.0.15",
47-
"amqplib": "^0.10.8",
48-
"awilix": "^12.0.5",
49-
"awilix-manager": "^6.1.0",
50-
"rimraf": "^6.0.1",
51-
"typescript": "^5.9.3",
52-
"vitest": "^4.0.15",
53-
"zod": "^4.1.13"
44+
"@types/node": "^25.5.0",
45+
"@types/amqplib": "^0.10.8",
46+
"@vitest/coverage-v8": "^4.0.18",
47+
"amqplib": "^1.0.3",
48+
"awilix": "^13.0.3",
49+
"awilix-manager": "^6.4.0",
50+
"rimraf": "^6.1.3",
51+
"typescript": "^6.0.2",
52+
"vitest": "^4.0.18",
53+
"zod": "^4.3.6"
5454
},
5555
"homepage": "https://github.com/kibertoad/message-queue-toolkit",
5656
"repository": {

packages/amqp/test/utils/testContext.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ export async function registerDependencies(
9494
dependencyOverrides: DependencyOverrides = {},
9595
queuesEnabled = true,
9696
) {
97-
const diContainer = createContainer({
97+
const diContainer = createContainer<Dependencies>({
9898
injectionMode: 'PROXY',
9999
})
100100
const awilixManager = new AwilixManager({
@@ -104,7 +104,7 @@ export async function registerDependencies(
104104
eagerInject: true,
105105
})
106106

107-
const diConfig: DiConfig = {
107+
const diConfig = {
108108
logger: asFunction(() => {
109109
return TestLogger
110110
}, SINGLETON_CONFIG),
@@ -116,7 +116,6 @@ export async function registerDependencies(
116116
return new AmqpConnectionManager(config, logger)
117117
},
118118
{
119-
lifetime: Lifetime.SINGLETON,
120119
asyncInit: 'init',
121120
asyncDispose: 'close',
122121
asyncDisposePriority: 1,
@@ -217,7 +216,7 @@ export async function registerDependencies(
217216
report: () => {},
218217
} satisfies ErrorReporter
219218
}, SINGLETON_CONFIG),
220-
}
219+
} satisfies DiConfig
221220
diContainer.register(diConfig)
222221

223222
for (const [dependencyKey, dependencyValue] of Object.entries(dependencyOverrides)) {

packages/core/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
"@types/node": "^25.0.2",
4545
"@types/tmp": "^0.2.6",
4646
"@vitest/coverage-v8": "^4.0.15",
47-
"awilix": "^12.0.5",
47+
"awilix": "^13.0.3",
4848
"awilix-manager": "^6.1.0",
4949
"rimraf": "^6.0.1",
5050
"typescript": "^5.9.2",

packages/gcp-pubsub/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
"@message-queue-toolkit/schemas": "*",
4747
"@types/node": "^25.0.2",
4848
"@vitest/coverage-v8": "^4.0.15",
49-
"awilix": "^12.0.5",
49+
"awilix": "^13.0.3",
5050
"awilix-manager": "^6.1.0",
5151
"ioredis": "^5.7.0",
5252
"rimraf": "^6.0.1",

packages/kafka/lib/utils/KafkaMessageBatchStream.ts

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,19 @@ export class KafkaMessageBatchStream<TMessage extends MessageWithTopicAndPartiti
6161
private pendingCallback: CallbackFunction | undefined
6262
private isBackPressured: boolean
6363

64+
// Debug counters for diagnosing flow issues
65+
public readonly debug = {
66+
writeCalls: 0,
67+
readCalls: 0,
68+
flushCalls: 0,
69+
pushCalls: 0,
70+
pushBackpressured: 0,
71+
callbacksHeld: 0,
72+
callbacksReleased: 0,
73+
flushDeferredByBackpressure: 0,
74+
finalCalled: false,
75+
}
76+
6477
constructor(options: KafkaMessageBatchOptions) {
6578
super({ objectMode: true, readableHighWaterMark: options.readableHighWaterMark })
6679
this.batchSize = options.batchSize
@@ -75,9 +88,11 @@ export class KafkaMessageBatchStream<TMessage extends MessageWithTopicAndPartiti
7588
* by calling the pending callback that was held during backpressure.
7689
*/
7790
override _read() {
91+
this.debug.readCalls++
7892
this.isBackPressured = false
7993
if (!this.pendingCallback) return
8094

95+
this.debug.callbacksReleased++
8196
const cb = this.pendingCallback
8297
this.pendingCallback = undefined
8398
cb() // Resume the writable side
@@ -89,6 +104,7 @@ export class KafkaMessageBatchStream<TMessage extends MessageWithTopicAndPartiti
89104
* Implements backpressure by holding the callback when downstream cannot consume.
90105
*/
91106
override _write(message: TMessage, _encoding: BufferEncoding, callback: CallbackFunction) {
107+
this.debug.writeCalls++
92108
let canContinue = true
93109

94110
try {
@@ -104,12 +120,17 @@ export class KafkaMessageBatchStream<TMessage extends MessageWithTopicAndPartiti
104120
}
105121
} finally {
106122
// Backpressure handling: hold the callback if push() returned false
107-
if (!canContinue) this.pendingCallback = callback
108-
else callback()
123+
if (!canContinue) {
124+
this.debug.callbacksHeld++
125+
this.pendingCallback = callback
126+
} else {
127+
callback()
128+
}
109129
}
110130
}
111131

112132
override _final(callback: CallbackFunction) {
133+
this.debug.finalCalled = true
113134
// Clean timeout
114135
clearTimeout(this.existingTimeout)
115136
this.existingTimeout = undefined
@@ -120,11 +141,21 @@ export class KafkaMessageBatchStream<TMessage extends MessageWithTopicAndPartiti
120141
callback()
121142
}
122143

144+
public getPendingCount(): number {
145+
return this.messages.length
146+
}
147+
148+
public hasPendingCallback(): boolean {
149+
return this.pendingCallback !== undefined
150+
}
151+
123152
private flushMessages(): boolean {
124153
clearTimeout(this.existingTimeout)
125154
this.existingTimeout = undefined
155+
this.debug.flushCalls++
126156

127157
if (this.isBackPressured) {
158+
this.debug.flushDeferredByBackpressure++
128159
this.existingTimeout = setTimeout(() => this.flushMessages(), this.timeout)
129160
return false
130161
}
@@ -146,7 +177,9 @@ export class KafkaMessageBatchStream<TMessage extends MessageWithTopicAndPartiti
146177
// same tick also return false, so the last value correctly reflects backpressure.
147178
let canContinue = true
148179
for (const messagesForKey of Object.values(messagesByTopicPartition)) {
180+
this.debug.pushCalls++
149181
canContinue = this.push(messagesForKey)
182+
if (!canContinue) this.debug.pushBackpressured++
150183
}
151184

152185
if (!canContinue) this.isBackPressured = true

packages/kafka/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@
6868
"@message-queue-toolkit/schemas": ">=7.0.0",
6969
"@types/node": "^25.0.2",
7070
"@vitest/coverage-v8": "^4.0.15",
71-
"awilix": "^12.0.1",
71+
"awilix": "^13.0.3",
7272
"awilix-manager": "^6.0.0",
7373
"rimraf": "^6.0.1",
7474
"typescript": "^5.9.2",

packages/sns/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
"@message-queue-toolkit/sqs": "*",
5454
"@types/node": "^25.0.2",
5555
"@vitest/coverage-v8": "^4.0.15",
56-
"awilix": "^12.1.1",
56+
"awilix": "^13.0.3",
5757
"awilix-manager": "^6.1.0",
5858
"fauxqs": "^2.0.0",
5959
"ioredis": "^5.7.0",

packages/sqs/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
"@message-queue-toolkit/schemas": "*",
4949
"@types/node": "^25.0.2",
5050
"@vitest/coverage-v8": "^4.0.15",
51-
"awilix": "^12.0.5",
51+
"awilix": "^13.0.3",
5252
"awilix-manager": "^6.1.0",
5353
"fauxqs": "^2.0.0",
5454
"ioredis": "^5.6.1",

0 commit comments

Comments
 (0)