@linagora/rabbitmq-client 0.1.0

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.
@@ -0,0 +1,198 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/testing/index.ts
21
+ var testing_exports = {};
22
+ __export(testing_exports, {
23
+ MockRabbitMQChannel: () => MockRabbitMQChannel,
24
+ MockRabbitMQConnection: () => MockRabbitMQConnection,
25
+ createMockAmqplib: () => createMockAmqplib
26
+ });
27
+ module.exports = __toCommonJS(testing_exports);
28
+ var import_events = require("events");
29
+ function mockFn() {
30
+ let impl = null;
31
+ const calls = [];
32
+ const fn = ((...args) => {
33
+ calls.push(args);
34
+ return impl ? impl(...args) : void 0;
35
+ });
36
+ fn.mock = { calls };
37
+ fn.mockResolvedValue = (val) => {
38
+ impl = () => Promise.resolve(val);
39
+ return fn;
40
+ };
41
+ fn.mockImplementation = (newImpl) => {
42
+ impl = newImpl;
43
+ return fn;
44
+ };
45
+ return fn;
46
+ }
47
+ var MockRabbitMQChannel = class extends import_events.EventEmitter {
48
+ _publishedMessages = [];
49
+ _consumeCallback = null;
50
+ isClosed = false;
51
+ // Stubs
52
+ assertExchange = mockFn().mockResolvedValue({});
53
+ assertQueue = mockFn().mockResolvedValue({ queue: "" });
54
+ bindQueue = mockFn().mockResolvedValue({});
55
+ ack = mockFn();
56
+ nack = mockFn();
57
+ close = mockFn().mockResolvedValue(void 0);
58
+ waitForConfirms = mockFn().mockResolvedValue(void 0);
59
+ prefetch = mockFn().mockResolvedValue(void 0);
60
+ deleteQueue = mockFn().mockResolvedValue({});
61
+ cancel = mockFn().mockResolvedValue(void 0);
62
+ /**
63
+ * Tracks all published messages and stores them for later inspection.
64
+ */
65
+ publish(exchange, routingKey, content, options) {
66
+ let message;
67
+ try {
68
+ message = JSON.parse(content.toString());
69
+ } catch {
70
+ message = content.toString();
71
+ }
72
+ this._publishedMessages.push({ exchange, routingKey, message, options });
73
+ return true;
74
+ }
75
+ _consumerCounter = 0;
76
+ /**
77
+ * Stores the consumer callback for use with simulateMessage.
78
+ * Returns a unique consumer tag per call.
79
+ */
80
+ consume(_queue, callback) {
81
+ this._consumeCallback = callback;
82
+ const consumerTag = `mock-consumer-${++this._consumerCounter}`;
83
+ return Promise.resolve({ consumerTag });
84
+ }
85
+ // ---------------------------------------------------------------------------
86
+ // Simulation helpers
87
+ // ---------------------------------------------------------------------------
88
+ /**
89
+ * Delivers a valid JSON message to the registered consume callback.
90
+ */
91
+ simulateMessage(content) {
92
+ this._deliver(Buffer.from(JSON.stringify(content)));
93
+ }
94
+ /**
95
+ * Delivers a message with content that is not valid JSON.
96
+ */
97
+ simulateInvalidJsonMessage() {
98
+ this._deliver(Buffer.from("not valid json {"));
99
+ }
100
+ _deliver(content) {
101
+ if (!this._consumeCallback) return;
102
+ this._consumeCallback({
103
+ content,
104
+ fields: { deliveryTag: 1, redelivered: false, exchange: "", routingKey: "", consumerTag: "mock-consumer" },
105
+ properties: { headers: {} }
106
+ });
107
+ }
108
+ /** Emits a close event and marks the channel as closed. */
109
+ simulateClose() {
110
+ this.isClosed = true;
111
+ this.emit("close");
112
+ }
113
+ /** Emits an error event. */
114
+ simulateError(error) {
115
+ this.emit("error", error);
116
+ }
117
+ // ---------------------------------------------------------------------------
118
+ // Inspection helpers
119
+ // ---------------------------------------------------------------------------
120
+ getPublishedMessages() {
121
+ return [...this._publishedMessages];
122
+ }
123
+ clearMessages() {
124
+ this._publishedMessages = [];
125
+ }
126
+ /** Resets all state back to initial values. */
127
+ reset() {
128
+ this._publishedMessages = [];
129
+ this._consumeCallback = null;
130
+ this._consumerCounter = 0;
131
+ this.isClosed = false;
132
+ this.removeAllListeners();
133
+ }
134
+ };
135
+ var MockRabbitMQConnection = class extends import_events.EventEmitter {
136
+ _channels = [];
137
+ isConnected = true;
138
+ constructor() {
139
+ super();
140
+ this._channels.push(new MockRabbitMQChannel());
141
+ }
142
+ /**
143
+ * Returns the most recently created channel.
144
+ */
145
+ get channel() {
146
+ return this._channels[this._channels.length - 1];
147
+ }
148
+ /**
149
+ * Returns all channels created so far (including the initial one).
150
+ */
151
+ get channels() {
152
+ return [...this._channels];
153
+ }
154
+ get channelCount() {
155
+ return this._channels.length;
156
+ }
157
+ /**
158
+ * Creates a new channel (simulates a reconnection / new confirm-channel).
159
+ */
160
+ createConfirmChannel() {
161
+ const ch = new MockRabbitMQChannel();
162
+ this._channels.push(ch);
163
+ return Promise.resolve(ch);
164
+ }
165
+ close() {
166
+ this.isConnected = false;
167
+ return Promise.resolve();
168
+ }
169
+ /** Emits a close event and marks the connection as disconnected. */
170
+ simulateClose() {
171
+ this.isConnected = false;
172
+ this.emit("close");
173
+ }
174
+ /** Emits an error event. */
175
+ simulateError(error) {
176
+ this.emit("error", error);
177
+ }
178
+ /** Resets to the initial connected state with a single fresh channel. */
179
+ reset() {
180
+ this._channels = [new MockRabbitMQChannel()];
181
+ this.isConnected = true;
182
+ this.removeAllListeners();
183
+ }
184
+ };
185
+ function createMockAmqplib() {
186
+ const mockConnection = new MockRabbitMQConnection();
187
+ const amqpMock = {
188
+ connect: mockFn().mockResolvedValue(mockConnection)
189
+ };
190
+ return { mockConnection, amqpMock };
191
+ }
192
+ // Annotate the CommonJS export names for ESM import in node:
193
+ 0 && (module.exports = {
194
+ MockRabbitMQChannel,
195
+ MockRabbitMQConnection,
196
+ createMockAmqplib
197
+ });
198
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/testing/index.ts"],"sourcesContent":["import { EventEmitter } from 'events'\n\n// ---------------------------------------------------------------------------\n// Framework-agnostic mock function factory\n// ---------------------------------------------------------------------------\n\ninterface MockFn {\n (...args: unknown[]): unknown\n mock: { calls: unknown[][] }\n mockResolvedValue: (val: unknown) => MockFn\n mockImplementation: (fn: (...args: unknown[]) => unknown) => MockFn\n}\n\nfunction mockFn(): MockFn {\n let impl: ((...args: unknown[]) => unknown) | null = null\n const calls: unknown[][] = []\n\n const fn = ((...args: unknown[]) => {\n calls.push(args)\n return impl ? impl(...args) : undefined\n }) as MockFn\n\n fn.mock = { calls }\n\n fn.mockResolvedValue = (val: unknown) => {\n impl = () => Promise.resolve(val)\n return fn\n }\n\n fn.mockImplementation = (newImpl: (...args: unknown[]) => unknown) => {\n impl = newImpl\n return fn\n }\n\n return fn\n}\n\n// ---------------------------------------------------------------------------\n// Published message record\n// ---------------------------------------------------------------------------\n\nexport interface PublishedMessage {\n exchange: string\n routingKey: string\n message: unknown\n options: unknown\n}\n\n// ---------------------------------------------------------------------------\n// MockRabbitMQChannel\n// ---------------------------------------------------------------------------\n\nexport class MockRabbitMQChannel extends EventEmitter {\n private _publishedMessages: PublishedMessage[] = []\n private _consumeCallback: ((msg: unknown) => void) | null = null\n\n isClosed = false\n\n // Stubs\n readonly assertExchange = mockFn().mockResolvedValue({})\n readonly assertQueue = mockFn().mockResolvedValue({ queue: '' })\n readonly bindQueue = mockFn().mockResolvedValue({})\n readonly ack = mockFn()\n readonly nack = mockFn()\n readonly close = mockFn().mockResolvedValue(undefined)\n readonly waitForConfirms = mockFn().mockResolvedValue(undefined)\n readonly prefetch = mockFn().mockResolvedValue(undefined)\n readonly deleteQueue = mockFn().mockResolvedValue({})\n readonly cancel = mockFn().mockResolvedValue(undefined)\n\n /**\n * Tracks all published messages and stores them for later inspection.\n */\n publish(exchange: string, routingKey: string, content: Buffer, options?: unknown): boolean {\n let message: unknown\n try {\n message = JSON.parse(content.toString())\n } catch {\n message = content.toString()\n }\n this._publishedMessages.push({ exchange, routingKey, message, options })\n return true\n }\n\n private _consumerCounter = 0\n\n /**\n * Stores the consumer callback for use with simulateMessage.\n * Returns a unique consumer tag per call.\n */\n consume(_queue: string, callback: (msg: unknown) => void): Promise<{ consumerTag: string }> {\n this._consumeCallback = callback\n const consumerTag = `mock-consumer-${++this._consumerCounter}`\n return Promise.resolve({ consumerTag })\n }\n\n // ---------------------------------------------------------------------------\n // Simulation helpers\n // ---------------------------------------------------------------------------\n\n /**\n * Delivers a valid JSON message to the registered consume callback.\n */\n simulateMessage(content: unknown): void {\n this._deliver(Buffer.from(JSON.stringify(content)))\n }\n\n /**\n * Delivers a message with content that is not valid JSON.\n */\n simulateInvalidJsonMessage(): void {\n this._deliver(Buffer.from('not valid json {'))\n }\n\n private _deliver(content: Buffer): void {\n if (!this._consumeCallback) return\n this._consumeCallback({\n content,\n fields: { deliveryTag: 1, redelivered: false, exchange: '', routingKey: '', consumerTag: 'mock-consumer' },\n properties: { headers: {} },\n })\n }\n\n /** Emits a close event and marks the channel as closed. */\n simulateClose(): void {\n this.isClosed = true\n this.emit('close')\n }\n\n /** Emits an error event. */\n simulateError(error: Error): void {\n this.emit('error', error)\n }\n\n // ---------------------------------------------------------------------------\n // Inspection helpers\n // ---------------------------------------------------------------------------\n\n getPublishedMessages(): PublishedMessage[] {\n return [...this._publishedMessages]\n }\n\n clearMessages(): void {\n this._publishedMessages = []\n }\n\n /** Resets all state back to initial values. */\n reset(): void {\n this._publishedMessages = []\n this._consumeCallback = null\n this._consumerCounter = 0\n this.isClosed = false\n this.removeAllListeners()\n }\n}\n\n// ---------------------------------------------------------------------------\n// MockRabbitMQConnection\n// ---------------------------------------------------------------------------\n\nexport class MockRabbitMQConnection extends EventEmitter {\n private _channels: MockRabbitMQChannel[] = []\n\n isConnected = true\n\n constructor() {\n super()\n // Create the initial channel eagerly so `conn.channel` is defined\n // before the first createConfirmChannel call.\n this._channels.push(new MockRabbitMQChannel())\n }\n\n /**\n * Returns the most recently created channel.\n */\n get channel(): MockRabbitMQChannel {\n return this._channels[this._channels.length - 1]\n }\n\n /**\n * Returns all channels created so far (including the initial one).\n */\n get channels(): MockRabbitMQChannel[] {\n return [...this._channels]\n }\n\n get channelCount(): number {\n return this._channels.length\n }\n\n /**\n * Creates a new channel (simulates a reconnection / new confirm-channel).\n */\n createConfirmChannel(): Promise<MockRabbitMQChannel> {\n const ch = new MockRabbitMQChannel()\n this._channels.push(ch)\n return Promise.resolve(ch)\n }\n\n close(): Promise<void> {\n this.isConnected = false\n return Promise.resolve()\n }\n\n /** Emits a close event and marks the connection as disconnected. */\n simulateClose(): void {\n this.isConnected = false\n this.emit('close')\n }\n\n /** Emits an error event. */\n simulateError(error: Error): void {\n this.emit('error', error)\n }\n\n /** Resets to the initial connected state with a single fresh channel. */\n reset(): void {\n this._channels = [new MockRabbitMQChannel()]\n this.isConnected = true\n this.removeAllListeners()\n }\n}\n\n// ---------------------------------------------------------------------------\n// createMockAmqplib\n// ---------------------------------------------------------------------------\n\nexport interface AmqpMock {\n connect: MockFn\n}\n\nexport interface MockAmqplibResult {\n mockConnection: MockRabbitMQConnection\n amqpMock: AmqpMock\n}\n\n/**\n * Returns a pre-wired { mockConnection, amqpMock } pair that can be used as\n * a drop-in replacement for amqplib in tests (e.g. via vi.mock or jest.mock).\n */\nexport function createMockAmqplib(): MockAmqplibResult {\n const mockConnection = new MockRabbitMQConnection()\n const amqpMock: AmqpMock = {\n connect: mockFn().mockResolvedValue(mockConnection),\n }\n return { mockConnection, amqpMock }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,99 @@
1
+ import { EventEmitter } from 'events';
2
+
3
+ interface MockFn {
4
+ (...args: unknown[]): unknown;
5
+ mock: {
6
+ calls: unknown[][];
7
+ };
8
+ mockResolvedValue: (val: unknown) => MockFn;
9
+ mockImplementation: (fn: (...args: unknown[]) => unknown) => MockFn;
10
+ }
11
+ interface PublishedMessage {
12
+ exchange: string;
13
+ routingKey: string;
14
+ message: unknown;
15
+ options: unknown;
16
+ }
17
+ declare class MockRabbitMQChannel extends EventEmitter {
18
+ private _publishedMessages;
19
+ private _consumeCallback;
20
+ isClosed: boolean;
21
+ readonly assertExchange: MockFn;
22
+ readonly assertQueue: MockFn;
23
+ readonly bindQueue: MockFn;
24
+ readonly ack: MockFn;
25
+ readonly nack: MockFn;
26
+ readonly close: MockFn;
27
+ readonly waitForConfirms: MockFn;
28
+ readonly prefetch: MockFn;
29
+ readonly deleteQueue: MockFn;
30
+ readonly cancel: MockFn;
31
+ /**
32
+ * Tracks all published messages and stores them for later inspection.
33
+ */
34
+ publish(exchange: string, routingKey: string, content: Buffer, options?: unknown): boolean;
35
+ private _consumerCounter;
36
+ /**
37
+ * Stores the consumer callback for use with simulateMessage.
38
+ * Returns a unique consumer tag per call.
39
+ */
40
+ consume(_queue: string, callback: (msg: unknown) => void): Promise<{
41
+ consumerTag: string;
42
+ }>;
43
+ /**
44
+ * Delivers a valid JSON message to the registered consume callback.
45
+ */
46
+ simulateMessage(content: unknown): void;
47
+ /**
48
+ * Delivers a message with content that is not valid JSON.
49
+ */
50
+ simulateInvalidJsonMessage(): void;
51
+ private _deliver;
52
+ /** Emits a close event and marks the channel as closed. */
53
+ simulateClose(): void;
54
+ /** Emits an error event. */
55
+ simulateError(error: Error): void;
56
+ getPublishedMessages(): PublishedMessage[];
57
+ clearMessages(): void;
58
+ /** Resets all state back to initial values. */
59
+ reset(): void;
60
+ }
61
+ declare class MockRabbitMQConnection extends EventEmitter {
62
+ private _channels;
63
+ isConnected: boolean;
64
+ constructor();
65
+ /**
66
+ * Returns the most recently created channel.
67
+ */
68
+ get channel(): MockRabbitMQChannel;
69
+ /**
70
+ * Returns all channels created so far (including the initial one).
71
+ */
72
+ get channels(): MockRabbitMQChannel[];
73
+ get channelCount(): number;
74
+ /**
75
+ * Creates a new channel (simulates a reconnection / new confirm-channel).
76
+ */
77
+ createConfirmChannel(): Promise<MockRabbitMQChannel>;
78
+ close(): Promise<void>;
79
+ /** Emits a close event and marks the connection as disconnected. */
80
+ simulateClose(): void;
81
+ /** Emits an error event. */
82
+ simulateError(error: Error): void;
83
+ /** Resets to the initial connected state with a single fresh channel. */
84
+ reset(): void;
85
+ }
86
+ interface AmqpMock {
87
+ connect: MockFn;
88
+ }
89
+ interface MockAmqplibResult {
90
+ mockConnection: MockRabbitMQConnection;
91
+ amqpMock: AmqpMock;
92
+ }
93
+ /**
94
+ * Returns a pre-wired { mockConnection, amqpMock } pair that can be used as
95
+ * a drop-in replacement for amqplib in tests (e.g. via vi.mock or jest.mock).
96
+ */
97
+ declare function createMockAmqplib(): MockAmqplibResult;
98
+
99
+ export { type AmqpMock, type MockAmqplibResult, MockRabbitMQChannel, MockRabbitMQConnection, type PublishedMessage, createMockAmqplib };
@@ -0,0 +1,99 @@
1
+ import { EventEmitter } from 'events';
2
+
3
+ interface MockFn {
4
+ (...args: unknown[]): unknown;
5
+ mock: {
6
+ calls: unknown[][];
7
+ };
8
+ mockResolvedValue: (val: unknown) => MockFn;
9
+ mockImplementation: (fn: (...args: unknown[]) => unknown) => MockFn;
10
+ }
11
+ interface PublishedMessage {
12
+ exchange: string;
13
+ routingKey: string;
14
+ message: unknown;
15
+ options: unknown;
16
+ }
17
+ declare class MockRabbitMQChannel extends EventEmitter {
18
+ private _publishedMessages;
19
+ private _consumeCallback;
20
+ isClosed: boolean;
21
+ readonly assertExchange: MockFn;
22
+ readonly assertQueue: MockFn;
23
+ readonly bindQueue: MockFn;
24
+ readonly ack: MockFn;
25
+ readonly nack: MockFn;
26
+ readonly close: MockFn;
27
+ readonly waitForConfirms: MockFn;
28
+ readonly prefetch: MockFn;
29
+ readonly deleteQueue: MockFn;
30
+ readonly cancel: MockFn;
31
+ /**
32
+ * Tracks all published messages and stores them for later inspection.
33
+ */
34
+ publish(exchange: string, routingKey: string, content: Buffer, options?: unknown): boolean;
35
+ private _consumerCounter;
36
+ /**
37
+ * Stores the consumer callback for use with simulateMessage.
38
+ * Returns a unique consumer tag per call.
39
+ */
40
+ consume(_queue: string, callback: (msg: unknown) => void): Promise<{
41
+ consumerTag: string;
42
+ }>;
43
+ /**
44
+ * Delivers a valid JSON message to the registered consume callback.
45
+ */
46
+ simulateMessage(content: unknown): void;
47
+ /**
48
+ * Delivers a message with content that is not valid JSON.
49
+ */
50
+ simulateInvalidJsonMessage(): void;
51
+ private _deliver;
52
+ /** Emits a close event and marks the channel as closed. */
53
+ simulateClose(): void;
54
+ /** Emits an error event. */
55
+ simulateError(error: Error): void;
56
+ getPublishedMessages(): PublishedMessage[];
57
+ clearMessages(): void;
58
+ /** Resets all state back to initial values. */
59
+ reset(): void;
60
+ }
61
+ declare class MockRabbitMQConnection extends EventEmitter {
62
+ private _channels;
63
+ isConnected: boolean;
64
+ constructor();
65
+ /**
66
+ * Returns the most recently created channel.
67
+ */
68
+ get channel(): MockRabbitMQChannel;
69
+ /**
70
+ * Returns all channels created so far (including the initial one).
71
+ */
72
+ get channels(): MockRabbitMQChannel[];
73
+ get channelCount(): number;
74
+ /**
75
+ * Creates a new channel (simulates a reconnection / new confirm-channel).
76
+ */
77
+ createConfirmChannel(): Promise<MockRabbitMQChannel>;
78
+ close(): Promise<void>;
79
+ /** Emits a close event and marks the connection as disconnected. */
80
+ simulateClose(): void;
81
+ /** Emits an error event. */
82
+ simulateError(error: Error): void;
83
+ /** Resets to the initial connected state with a single fresh channel. */
84
+ reset(): void;
85
+ }
86
+ interface AmqpMock {
87
+ connect: MockFn;
88
+ }
89
+ interface MockAmqplibResult {
90
+ mockConnection: MockRabbitMQConnection;
91
+ amqpMock: AmqpMock;
92
+ }
93
+ /**
94
+ * Returns a pre-wired { mockConnection, amqpMock } pair that can be used as
95
+ * a drop-in replacement for amqplib in tests (e.g. via vi.mock or jest.mock).
96
+ */
97
+ declare function createMockAmqplib(): MockAmqplibResult;
98
+
99
+ export { type AmqpMock, type MockAmqplibResult, MockRabbitMQChannel, MockRabbitMQConnection, type PublishedMessage, createMockAmqplib };
@@ -0,0 +1,171 @@
1
+ // src/testing/index.ts
2
+ import { EventEmitter } from "events";
3
+ function mockFn() {
4
+ let impl = null;
5
+ const calls = [];
6
+ const fn = ((...args) => {
7
+ calls.push(args);
8
+ return impl ? impl(...args) : void 0;
9
+ });
10
+ fn.mock = { calls };
11
+ fn.mockResolvedValue = (val) => {
12
+ impl = () => Promise.resolve(val);
13
+ return fn;
14
+ };
15
+ fn.mockImplementation = (newImpl) => {
16
+ impl = newImpl;
17
+ return fn;
18
+ };
19
+ return fn;
20
+ }
21
+ var MockRabbitMQChannel = class extends EventEmitter {
22
+ _publishedMessages = [];
23
+ _consumeCallback = null;
24
+ isClosed = false;
25
+ // Stubs
26
+ assertExchange = mockFn().mockResolvedValue({});
27
+ assertQueue = mockFn().mockResolvedValue({ queue: "" });
28
+ bindQueue = mockFn().mockResolvedValue({});
29
+ ack = mockFn();
30
+ nack = mockFn();
31
+ close = mockFn().mockResolvedValue(void 0);
32
+ waitForConfirms = mockFn().mockResolvedValue(void 0);
33
+ prefetch = mockFn().mockResolvedValue(void 0);
34
+ deleteQueue = mockFn().mockResolvedValue({});
35
+ cancel = mockFn().mockResolvedValue(void 0);
36
+ /**
37
+ * Tracks all published messages and stores them for later inspection.
38
+ */
39
+ publish(exchange, routingKey, content, options) {
40
+ let message;
41
+ try {
42
+ message = JSON.parse(content.toString());
43
+ } catch {
44
+ message = content.toString();
45
+ }
46
+ this._publishedMessages.push({ exchange, routingKey, message, options });
47
+ return true;
48
+ }
49
+ _consumerCounter = 0;
50
+ /**
51
+ * Stores the consumer callback for use with simulateMessage.
52
+ * Returns a unique consumer tag per call.
53
+ */
54
+ consume(_queue, callback) {
55
+ this._consumeCallback = callback;
56
+ const consumerTag = `mock-consumer-${++this._consumerCounter}`;
57
+ return Promise.resolve({ consumerTag });
58
+ }
59
+ // ---------------------------------------------------------------------------
60
+ // Simulation helpers
61
+ // ---------------------------------------------------------------------------
62
+ /**
63
+ * Delivers a valid JSON message to the registered consume callback.
64
+ */
65
+ simulateMessage(content) {
66
+ this._deliver(Buffer.from(JSON.stringify(content)));
67
+ }
68
+ /**
69
+ * Delivers a message with content that is not valid JSON.
70
+ */
71
+ simulateInvalidJsonMessage() {
72
+ this._deliver(Buffer.from("not valid json {"));
73
+ }
74
+ _deliver(content) {
75
+ if (!this._consumeCallback) return;
76
+ this._consumeCallback({
77
+ content,
78
+ fields: { deliveryTag: 1, redelivered: false, exchange: "", routingKey: "", consumerTag: "mock-consumer" },
79
+ properties: { headers: {} }
80
+ });
81
+ }
82
+ /** Emits a close event and marks the channel as closed. */
83
+ simulateClose() {
84
+ this.isClosed = true;
85
+ this.emit("close");
86
+ }
87
+ /** Emits an error event. */
88
+ simulateError(error) {
89
+ this.emit("error", error);
90
+ }
91
+ // ---------------------------------------------------------------------------
92
+ // Inspection helpers
93
+ // ---------------------------------------------------------------------------
94
+ getPublishedMessages() {
95
+ return [...this._publishedMessages];
96
+ }
97
+ clearMessages() {
98
+ this._publishedMessages = [];
99
+ }
100
+ /** Resets all state back to initial values. */
101
+ reset() {
102
+ this._publishedMessages = [];
103
+ this._consumeCallback = null;
104
+ this._consumerCounter = 0;
105
+ this.isClosed = false;
106
+ this.removeAllListeners();
107
+ }
108
+ };
109
+ var MockRabbitMQConnection = class extends EventEmitter {
110
+ _channels = [];
111
+ isConnected = true;
112
+ constructor() {
113
+ super();
114
+ this._channels.push(new MockRabbitMQChannel());
115
+ }
116
+ /**
117
+ * Returns the most recently created channel.
118
+ */
119
+ get channel() {
120
+ return this._channels[this._channels.length - 1];
121
+ }
122
+ /**
123
+ * Returns all channels created so far (including the initial one).
124
+ */
125
+ get channels() {
126
+ return [...this._channels];
127
+ }
128
+ get channelCount() {
129
+ return this._channels.length;
130
+ }
131
+ /**
132
+ * Creates a new channel (simulates a reconnection / new confirm-channel).
133
+ */
134
+ createConfirmChannel() {
135
+ const ch = new MockRabbitMQChannel();
136
+ this._channels.push(ch);
137
+ return Promise.resolve(ch);
138
+ }
139
+ close() {
140
+ this.isConnected = false;
141
+ return Promise.resolve();
142
+ }
143
+ /** Emits a close event and marks the connection as disconnected. */
144
+ simulateClose() {
145
+ this.isConnected = false;
146
+ this.emit("close");
147
+ }
148
+ /** Emits an error event. */
149
+ simulateError(error) {
150
+ this.emit("error", error);
151
+ }
152
+ /** Resets to the initial connected state with a single fresh channel. */
153
+ reset() {
154
+ this._channels = [new MockRabbitMQChannel()];
155
+ this.isConnected = true;
156
+ this.removeAllListeners();
157
+ }
158
+ };
159
+ function createMockAmqplib() {
160
+ const mockConnection = new MockRabbitMQConnection();
161
+ const amqpMock = {
162
+ connect: mockFn().mockResolvedValue(mockConnection)
163
+ };
164
+ return { mockConnection, amqpMock };
165
+ }
166
+ export {
167
+ MockRabbitMQChannel,
168
+ MockRabbitMQConnection,
169
+ createMockAmqplib
170
+ };
171
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/testing/index.ts"],"sourcesContent":["import { EventEmitter } from 'events'\n\n// ---------------------------------------------------------------------------\n// Framework-agnostic mock function factory\n// ---------------------------------------------------------------------------\n\ninterface MockFn {\n (...args: unknown[]): unknown\n mock: { calls: unknown[][] }\n mockResolvedValue: (val: unknown) => MockFn\n mockImplementation: (fn: (...args: unknown[]) => unknown) => MockFn\n}\n\nfunction mockFn(): MockFn {\n let impl: ((...args: unknown[]) => unknown) | null = null\n const calls: unknown[][] = []\n\n const fn = ((...args: unknown[]) => {\n calls.push(args)\n return impl ? impl(...args) : undefined\n }) as MockFn\n\n fn.mock = { calls }\n\n fn.mockResolvedValue = (val: unknown) => {\n impl = () => Promise.resolve(val)\n return fn\n }\n\n fn.mockImplementation = (newImpl: (...args: unknown[]) => unknown) => {\n impl = newImpl\n return fn\n }\n\n return fn\n}\n\n// ---------------------------------------------------------------------------\n// Published message record\n// ---------------------------------------------------------------------------\n\nexport interface PublishedMessage {\n exchange: string\n routingKey: string\n message: unknown\n options: unknown\n}\n\n// ---------------------------------------------------------------------------\n// MockRabbitMQChannel\n// ---------------------------------------------------------------------------\n\nexport class MockRabbitMQChannel extends EventEmitter {\n private _publishedMessages: PublishedMessage[] = []\n private _consumeCallback: ((msg: unknown) => void) | null = null\n\n isClosed = false\n\n // Stubs\n readonly assertExchange = mockFn().mockResolvedValue({})\n readonly assertQueue = mockFn().mockResolvedValue({ queue: '' })\n readonly bindQueue = mockFn().mockResolvedValue({})\n readonly ack = mockFn()\n readonly nack = mockFn()\n readonly close = mockFn().mockResolvedValue(undefined)\n readonly waitForConfirms = mockFn().mockResolvedValue(undefined)\n readonly prefetch = mockFn().mockResolvedValue(undefined)\n readonly deleteQueue = mockFn().mockResolvedValue({})\n readonly cancel = mockFn().mockResolvedValue(undefined)\n\n /**\n * Tracks all published messages and stores them for later inspection.\n */\n publish(exchange: string, routingKey: string, content: Buffer, options?: unknown): boolean {\n let message: unknown\n try {\n message = JSON.parse(content.toString())\n } catch {\n message = content.toString()\n }\n this._publishedMessages.push({ exchange, routingKey, message, options })\n return true\n }\n\n private _consumerCounter = 0\n\n /**\n * Stores the consumer callback for use with simulateMessage.\n * Returns a unique consumer tag per call.\n */\n consume(_queue: string, callback: (msg: unknown) => void): Promise<{ consumerTag: string }> {\n this._consumeCallback = callback\n const consumerTag = `mock-consumer-${++this._consumerCounter}`\n return Promise.resolve({ consumerTag })\n }\n\n // ---------------------------------------------------------------------------\n // Simulation helpers\n // ---------------------------------------------------------------------------\n\n /**\n * Delivers a valid JSON message to the registered consume callback.\n */\n simulateMessage(content: unknown): void {\n this._deliver(Buffer.from(JSON.stringify(content)))\n }\n\n /**\n * Delivers a message with content that is not valid JSON.\n */\n simulateInvalidJsonMessage(): void {\n this._deliver(Buffer.from('not valid json {'))\n }\n\n private _deliver(content: Buffer): void {\n if (!this._consumeCallback) return\n this._consumeCallback({\n content,\n fields: { deliveryTag: 1, redelivered: false, exchange: '', routingKey: '', consumerTag: 'mock-consumer' },\n properties: { headers: {} },\n })\n }\n\n /** Emits a close event and marks the channel as closed. */\n simulateClose(): void {\n this.isClosed = true\n this.emit('close')\n }\n\n /** Emits an error event. */\n simulateError(error: Error): void {\n this.emit('error', error)\n }\n\n // ---------------------------------------------------------------------------\n // Inspection helpers\n // ---------------------------------------------------------------------------\n\n getPublishedMessages(): PublishedMessage[] {\n return [...this._publishedMessages]\n }\n\n clearMessages(): void {\n this._publishedMessages = []\n }\n\n /** Resets all state back to initial values. */\n reset(): void {\n this._publishedMessages = []\n this._consumeCallback = null\n this._consumerCounter = 0\n this.isClosed = false\n this.removeAllListeners()\n }\n}\n\n// ---------------------------------------------------------------------------\n// MockRabbitMQConnection\n// ---------------------------------------------------------------------------\n\nexport class MockRabbitMQConnection extends EventEmitter {\n private _channels: MockRabbitMQChannel[] = []\n\n isConnected = true\n\n constructor() {\n super()\n // Create the initial channel eagerly so `conn.channel` is defined\n // before the first createConfirmChannel call.\n this._channels.push(new MockRabbitMQChannel())\n }\n\n /**\n * Returns the most recently created channel.\n */\n get channel(): MockRabbitMQChannel {\n return this._channels[this._channels.length - 1]\n }\n\n /**\n * Returns all channels created so far (including the initial one).\n */\n get channels(): MockRabbitMQChannel[] {\n return [...this._channels]\n }\n\n get channelCount(): number {\n return this._channels.length\n }\n\n /**\n * Creates a new channel (simulates a reconnection / new confirm-channel).\n */\n createConfirmChannel(): Promise<MockRabbitMQChannel> {\n const ch = new MockRabbitMQChannel()\n this._channels.push(ch)\n return Promise.resolve(ch)\n }\n\n close(): Promise<void> {\n this.isConnected = false\n return Promise.resolve()\n }\n\n /** Emits a close event and marks the connection as disconnected. */\n simulateClose(): void {\n this.isConnected = false\n this.emit('close')\n }\n\n /** Emits an error event. */\n simulateError(error: Error): void {\n this.emit('error', error)\n }\n\n /** Resets to the initial connected state with a single fresh channel. */\n reset(): void {\n this._channels = [new MockRabbitMQChannel()]\n this.isConnected = true\n this.removeAllListeners()\n }\n}\n\n// ---------------------------------------------------------------------------\n// createMockAmqplib\n// ---------------------------------------------------------------------------\n\nexport interface AmqpMock {\n connect: MockFn\n}\n\nexport interface MockAmqplibResult {\n mockConnection: MockRabbitMQConnection\n amqpMock: AmqpMock\n}\n\n/**\n * Returns a pre-wired { mockConnection, amqpMock } pair that can be used as\n * a drop-in replacement for amqplib in tests (e.g. via vi.mock or jest.mock).\n */\nexport function createMockAmqplib(): MockAmqplibResult {\n const mockConnection = new MockRabbitMQConnection()\n const amqpMock: AmqpMock = {\n connect: mockFn().mockResolvedValue(mockConnection),\n }\n return { mockConnection, amqpMock }\n}\n"],"mappings":"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","names":[]}
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "@linagora/rabbitmq-client",
3
+ "version": "0.1.0",
4
+ "description": "Production-grade RabbitMQ client with confirm channels, DLQ infrastructure, auto-reconnection, exponential backoff, graceful shutdown, and observability hooks",
5
+ "type": "module",
6
+ "exports": {
7
+ ".": {
8
+ "import": {
9
+ "types": "./dist/index.d.ts",
10
+ "default": "./dist/index.js"
11
+ },
12
+ "require": {
13
+ "types": "./dist/index.d.cts",
14
+ "default": "./dist/index.cjs"
15
+ }
16
+ },
17
+ "./testing": {
18
+ "import": {
19
+ "types": "./dist/testing/index.d.ts",
20
+ "default": "./dist/testing/index.js"
21
+ },
22
+ "require": {
23
+ "types": "./dist/testing/index.d.cts",
24
+ "default": "./dist/testing/index.cjs"
25
+ }
26
+ }
27
+ },
28
+ "main": "./dist/index.cjs",
29
+ "module": "./dist/index.js",
30
+ "types": "./dist/index.d.ts",
31
+ "files": [
32
+ "dist"
33
+ ],
34
+ "scripts": {
35
+ "build": "tsup",
36
+ "test": "vitest run",
37
+ "test:watch": "vitest",
38
+ "typecheck": "tsc --noEmit",
39
+ "prepublishOnly": "npm run build"
40
+ },
41
+ "dependencies": {
42
+ "amqplib": "^0.10.7",
43
+ "pino": "^9.6.0"
44
+ },
45
+ "devDependencies": {
46
+ "@types/amqplib": "^0.10.7",
47
+ "typescript": "^5.7.3",
48
+ "tsup": "^8.4.0",
49
+ "vitest": "^3.1.1"
50
+ },
51
+ "engines": {
52
+ "node": ">=18"
53
+ },
54
+ "license": "AGPL-3.0",
55
+ "repository": {
56
+ "type": "git",
57
+ "url": "https://github.com/linagora/rabbitmq-client.git"
58
+ },
59
+ "keywords": [
60
+ "rabbitmq",
61
+ "amqp",
62
+ "message-queue",
63
+ "pino"
64
+ ]
65
+ }