Skip to content

Commit 0b3b4d2

Browse files
mciuchituruscon
authored andcommitted
fix: use optional access to message headers
1 parent 9a20fc9 commit 0b3b4d2

File tree

7 files changed

+22
-13
lines changed

7 files changed

+22
-13
lines changed

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,13 @@
9090
"@nestjs/cqrs": "^9.0.1",
9191
"@nestjs/testing": "^9.0.4",
9292
"@release-it/conventional-changelog": "^5.0.0",
93-
"@types/amqplib": "0.8.2",
93+
"@types/amqplib": "^0.8.2",
9494
"@types/jest": "^28.1.6",
9595
"@types/lodash": "^4.14.182",
9696
"@types/minimist": "^1.2.2",
9797
"@types/semver": "^7.3.10",
98-
"amqp-connection-manager": "^4.1.3",
99-
"amqplib": "^0.10.0",
98+
"amqp-connection-manager": "^4.1.6",
99+
"amqplib": "^0.10.2",
100100
"commitizen": "^4.2.5",
101101
"cz-conventional-changelog": "^3.3.0",
102102
"eslint-plugin-jest": "^26.6.0",

src/interface/AbstractSubscriptionEvent.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ export abstract class AbstractSubscriptionEvent<T extends Record<string, any> |
1616
};
1717

1818
get retryCount(): number {
19-
return this.#message?.properties.headers[RETRY_COUNT_HEADER] ?? 0;
19+
// incorrect typing from @types/amqplib
20+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
21+
return this.#message?.properties.headers?.[RETRY_COUNT_HEADER] ?? 0;
2022
}
2123
}

src/service/PubSubEventBinder.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@ import type { IPubsubEventOptions } from '../decorator';
66
import { PubsubEvent, PubsubEventHandler } from '../decorator';
77
import type { AbstractPubsubAnyEventHandler, AbstractSubscriptionEvent, IEventWrapper, IHandlerWrapper, IPubsubEventHandlerMetadata } from '../interface';
88
import { LoggerProvider } from '../provider';
9-
import { generateQueueName, toEventName } from '../utils';
9+
import { generateQueueName, getMessageExchange, toEventName } from '../utils';
1010
import { FAN_OUT_BINDING } from '../utils/configuration';
11-
import { ORIGIN_EXCHANGE_HEADER } from '../utils/retry-constants';
1211
import { Consumer } from './Consumer';
1312
import { EventBus } from './EventBus';
1413
import { PubSubReflector } from './PubSubReflector';
@@ -58,7 +57,7 @@ export class PubSubEventBinder {
5857
this.consumer.ack(message);
5958
return;
6059
}
61-
const messageExchange = message.properties.headers[ORIGIN_EXCHANGE_HEADER] ?? message.fields.exchange;
60+
const messageExchange = getMessageExchange(message);
6261

6362
// try exact match at first
6463
let matchedEventWrappers: IEventWrapper[] = eventWrappers.filter(

src/service/retry-strategy/DeadLetterTtlRetryStrategy.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import {
1414
ORIGIN_EXCHANGE_HEADER,
1515
RETRY_COUNT_HEADER,
1616
} from '../../utils/retry-constants';
17-
import { calculateDelay } from '../../utils';
17+
import { calculateDelay, getMessageExchange } from '../../utils';
1818
import type { IRetryStrategy } from './IRetryStrategy';
1919

2020
@Injectable()
@@ -94,7 +94,7 @@ export class DeadLetterTtlRetryStrategy implements IRetryStrategy {
9494
headers: {
9595
...message.properties.headers,
9696
[RETRY_COUNT_HEADER]: retryCount,
97-
[ORIGIN_EXCHANGE_HEADER]: message.properties.headers[ORIGIN_EXCHANGE_HEADER] ?? message.fields.exchange,
97+
[ORIGIN_EXCHANGE_HEADER]: getMessageExchange(message),
9898
},
9999
});
100100

src/service/retry-strategy/DelayedMessageExchangeRetryStrategy.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { DefaultedRetryOptions, ExchangeOptions, RetryStrategyEnum } from '../..
77
import { LoggerProvider } from '../../provider';
88
import { CQRS_EXCHANGE_CONFIG, CQRS_RETRY_OPTIONS } from '../../utils/configuration';
99
import { DEFAULT_RETRY_DELAYED_MESSAGE_EXCHANGE_NAME, ORIGIN_EXCHANGE_HEADER, RETRY_COUNT_HEADER } from '../../utils/retry-constants';
10-
import { calculateDelay } from '../../utils';
10+
import { calculateDelay, getMessageExchange } from '../../utils';
1111
import type { IRetryStrategy } from './IRetryStrategy';
1212

1313
@Injectable()
@@ -66,7 +66,7 @@ export class DelayedMessageExchangeRetryStrategy implements IRetryStrategy {
6666
...message.properties.headers,
6767
'x-delay': delayValue,
6868
[RETRY_COUNT_HEADER]: retryCount,
69-
[ORIGIN_EXCHANGE_HEADER]: message.properties.headers[ORIGIN_EXCHANGE_HEADER] ?? message.fields.exchange,
69+
[ORIGIN_EXCHANGE_HEADER]: getMessageExchange(message),
7070
},
7171
});
7272

src/utils/helpers.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import type { Type } from '@nestjs/common';
22
import snakeCase from 'lodash/snakeCase';
33
import startCase from 'lodash/startCase';
4+
import type { Message } from 'amqplib';
45
import type { AbstractPubsubAnyEventHandler, DelayType } from '../interface';
6+
import { ORIGIN_EXCHANGE_HEADER } from './retry-constants';
57

68
/**
79
* Transform an event string (event class name) to a RabbitMQ event.
@@ -53,3 +55,9 @@ export function generateQueueName(handler: Type<AbstractPubsubAnyEventHandler>):
5355

5456
return [platform, toSnakeCase(handler.name)].join(':');
5557
}
58+
59+
export function getMessageExchange(message: Message): string {
60+
// incorrect typing from @types/amqplib
61+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
62+
return message.properties.headers?.[ORIGIN_EXCHANGE_HEADER] ?? message.fields.exchange;
63+
}

tsconfig.build-cjs.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
22
"extends": "./tsconfig.build.json",
33
"compilerOptions": {
4-
"target": "ES2018",
5-
"lib": ["ES2018"],
4+
"target": "ES2019",
5+
"lib": ["ES2019"],
66
"module": "commonjs",
77
"outDir": "dist/cjs"
88
}

0 commit comments

Comments
 (0)