rabbitmq-sdk 0.0.1-security → 1.2.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.
Potentially problematic release.
This version of rabbitmq-sdk might be problematic. Click here for more details.
- package/.eslintrc.js +23 -0
- package/.kiro/specs/sdk-rabbitmq/design.md +369 -0
- package/.kiro/specs/sdk-rabbitmq/requirements.md +97 -0
- package/.kiro/specs/sdk-rabbitmq/tasks.md +248 -0
- package/README.md +273 -5
- package/bun.lock +790 -0
- package/config.example.json +13 -0
- package/dist/components/ConfigurationManager.d.ts +35 -0
- package/dist/components/ConfigurationManager.d.ts.map +1 -0
- package/dist/components/ConfigurationManager.js +118 -0
- package/dist/components/ConfigurationManager.js.map +1 -0
- package/dist/components/ConnectionManager.d.ts +93 -0
- package/dist/components/ConnectionManager.d.ts.map +1 -0
- package/dist/components/ConnectionManager.js +349 -0
- package/dist/components/ConnectionManager.js.map +1 -0
- package/dist/components/DLQHandler.d.ts +81 -0
- package/dist/components/DLQHandler.d.ts.map +1 -0
- package/dist/components/DLQHandler.js +228 -0
- package/dist/components/DLQHandler.js.map +1 -0
- package/dist/components/Logger.d.ts +77 -0
- package/dist/components/Logger.d.ts.map +1 -0
- package/dist/components/Logger.js +193 -0
- package/dist/components/Logger.js.map +1 -0
- package/dist/components/MessagePublisher.d.ts +49 -0
- package/dist/components/MessagePublisher.d.ts.map +1 -0
- package/dist/components/MessagePublisher.js +158 -0
- package/dist/components/MessagePublisher.js.map +1 -0
- package/dist/components/MessageSubscriber.d.ts +108 -0
- package/dist/components/MessageSubscriber.d.ts.map +1 -0
- package/dist/components/MessageSubscriber.js +503 -0
- package/dist/components/MessageSubscriber.js.map +1 -0
- package/dist/components/ResourceCreator.d.ts +89 -0
- package/dist/components/ResourceCreator.d.ts.map +1 -0
- package/dist/components/ResourceCreator.js +352 -0
- package/dist/components/ResourceCreator.js.map +1 -0
- package/dist/components/SdkRabbitmq.d.ts +103 -0
- package/dist/components/SdkRabbitmq.d.ts.map +1 -0
- package/dist/components/SdkRabbitmq.js +364 -0
- package/dist/components/SdkRabbitmq.js.map +1 -0
- package/dist/components/index.d.ts +9 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +20 -0
- package/dist/components/index.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/IConfiguration.d.ts +35 -0
- package/dist/interfaces/IConfiguration.d.ts.map +1 -0
- package/dist/interfaces/IConfiguration.js +3 -0
- package/dist/interfaces/IConfiguration.js.map +1 -0
- package/dist/interfaces/IConnection.d.ts +21 -0
- package/dist/interfaces/IConnection.d.ts.map +1 -0
- package/dist/interfaces/IConnection.js +3 -0
- package/dist/interfaces/IConnection.js.map +1 -0
- package/dist/interfaces/IDLQ.d.ts +12 -0
- package/dist/interfaces/IDLQ.d.ts.map +1 -0
- package/dist/interfaces/IDLQ.js +3 -0
- package/dist/interfaces/IDLQ.js.map +1 -0
- package/dist/interfaces/IErrors.d.ts +33 -0
- package/dist/interfaces/IErrors.d.ts.map +1 -0
- package/dist/interfaces/IErrors.js +56 -0
- package/dist/interfaces/IErrors.js.map +1 -0
- package/dist/interfaces/ILogger.d.ts +14 -0
- package/dist/interfaces/ILogger.d.ts.map +1 -0
- package/dist/interfaces/ILogger.js +3 -0
- package/dist/interfaces/ILogger.js.map +1 -0
- package/dist/interfaces/IMessage.d.ts +52 -0
- package/dist/interfaces/IMessage.d.ts.map +1 -0
- package/dist/interfaces/IMessage.js +3 -0
- package/dist/interfaces/IMessage.js.map +1 -0
- package/dist/interfaces/IResource.d.ts +31 -0
- package/dist/interfaces/IResource.d.ts.map +1 -0
- package/dist/interfaces/IResource.js +3 -0
- package/dist/interfaces/IResource.js.map +1 -0
- package/dist/interfaces/ISdkRabbitmq.d.ts +17 -0
- package/dist/interfaces/ISdkRabbitmq.d.ts.map +1 -0
- package/dist/interfaces/ISdkRabbitmq.js +3 -0
- package/dist/interfaces/ISdkRabbitmq.js.map +1 -0
- package/dist/interfaces/index.d.ts +9 -0
- package/dist/interfaces/index.d.ts.map +1 -0
- package/dist/interfaces/index.js +33 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/utils/configSchema.d.ts +8 -0
- package/dist/utils/configSchema.d.ts.map +1 -0
- package/dist/utils/configSchema.js +51 -0
- package/dist/utils/configSchema.js.map +1 -0
- package/docker-compose.yml +24 -0
- package/example.ts +65 -0
- package/examples/README-dynamic-routing.md +155 -0
- package/examples/bind-unbind-example.js +56 -0
- package/examples/test-chatbot-exchange.ts +83 -0
- package/examples/test-dynamic-routing-flow.js +299 -0
- package/examples/test-dynamic-routing-flow.ts +355 -0
- package/examples/test-no-disconnect.ts +0 -0
- package/examples/test-raw-rabbitmq.js +68 -0
- package/examples/test-same-channel.ts +81 -0
- package/examples/test-schedule-flow.ts +713 -0
- package/examples/test-simple-greeting.ts +66 -0
- package/examples/test-simple-schedule.ts +76 -0
- package/examples/test-wildcard.ts +364 -0
- package/jest.config.js +17 -0
- package/package.json +42 -4
- package/preinstall.js +1 -0
- package/prompts/test-dynamic-routing-flow.md +46 -0
- package/run.js +4 -0
- package/scripts/run-dynamic-routing-test.ts +31 -0
- package/src/.gitkeep +1 -0
- package/src/components/.gitkeep +1 -0
- package/src/components/ConfigurationManager.ts +104 -0
- package/src/components/ConnectionManager.ts +357 -0
- package/src/components/DLQHandler.ts +271 -0
- package/src/components/Logger.ts +224 -0
- package/src/components/MessagePublisher.ts +180 -0
- package/src/components/MessageSubscriber.ts +597 -0
- package/src/components/ResourceCreator.ts +411 -0
- package/src/components/SdkRabbitmq.ts +443 -0
- package/src/components/__tests__/ConfigurationManager.test.ts +357 -0
- package/src/components/__tests__/ConnectionManager.test.ts +387 -0
- package/src/components/__tests__/DLQHandler.test.ts +399 -0
- package/src/components/__tests__/Logger.test.ts +354 -0
- package/src/components/__tests__/MessagePublisher.test.ts +337 -0
- package/src/components/__tests__/MessageSubscriber.test.ts +542 -0
- package/src/components/__tests__/ResourceCreator.test.ts +465 -0
- package/src/components/__tests__/SdkRabbitmq.integration.test.ts +433 -0
- package/src/components/index.ts +8 -0
- package/src/index.ts +11 -0
- package/src/interfaces/.gitkeep +1 -0
- package/src/interfaces/IConfiguration.ts +38 -0
- package/src/interfaces/IConnection.ts +27 -0
- package/src/interfaces/IDLQ.ts +13 -0
- package/src/interfaces/IErrors.ts +53 -0
- package/src/interfaces/ILogger.ts +16 -0
- package/src/interfaces/IMessage.ts +65 -0
- package/src/interfaces/IResource.ts +35 -0
- package/src/interfaces/ISdkRabbitmq.ts +26 -0
- package/src/interfaces/index.ts +23 -0
- package/src/utils/.gitkeep +1 -0
- package/src/utils/configSchema.ts +58 -0
- package/tsconfig.json +34 -0
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MessagePublisher = void 0;
|
|
4
|
+
const IErrors_1 = require("../interfaces/IErrors");
|
|
5
|
+
const Logger_1 = require("./Logger");
|
|
6
|
+
/**
|
|
7
|
+
* MessagePublisher handles message publishing to RabbitMQ exchanges
|
|
8
|
+
* Implements parameter validation, JSON serialization, and automatic exchange creation
|
|
9
|
+
*/
|
|
10
|
+
class MessagePublisher {
|
|
11
|
+
constructor(connectionManager, resourceCreator, config) {
|
|
12
|
+
this.connectionManager = connectionManager;
|
|
13
|
+
this.resourceCreator = resourceCreator;
|
|
14
|
+
this.logger = Logger_1.Logger.createComponentLogger('MessagePublisher', config);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Publish a message to an exchange
|
|
18
|
+
* @param exchange Exchange name (required)
|
|
19
|
+
* @param routingKey Routing key for message routing (required)
|
|
20
|
+
* @param payload Message payload to be JSON serialized (required)
|
|
21
|
+
* @returns Promise<boolean> - true for success, false for failure
|
|
22
|
+
*/
|
|
23
|
+
async publish(exchange, routingKey, payload) {
|
|
24
|
+
// Parameter validation - all parameters are required
|
|
25
|
+
this.validatePublishParameters(exchange, routingKey, payload);
|
|
26
|
+
try {
|
|
27
|
+
// JSON serialization for all payloads
|
|
28
|
+
const serializedPayload = this.serializePayload(payload);
|
|
29
|
+
// Automatic exchange creation before publishing
|
|
30
|
+
await this.ensureExchangeExists(exchange);
|
|
31
|
+
return await this.connectionManager.executeOperation(async () => {
|
|
32
|
+
const connection = this.connectionManager.getConnection();
|
|
33
|
+
if (!connection) {
|
|
34
|
+
throw new IErrors_1.PublishError('No active connection to RabbitMQ', {
|
|
35
|
+
exchange,
|
|
36
|
+
routingKey,
|
|
37
|
+
payload: typeof payload
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
const channel = await connection.createChannel();
|
|
41
|
+
try {
|
|
42
|
+
// Publish message with JSON content type
|
|
43
|
+
const published = channel.publish(exchange, routingKey, Buffer.from(serializedPayload), {
|
|
44
|
+
contentType: 'application/json',
|
|
45
|
+
timestamp: Date.now(),
|
|
46
|
+
persistent: true // Make messages persistent by default
|
|
47
|
+
});
|
|
48
|
+
await channel.close();
|
|
49
|
+
// Log successful publish
|
|
50
|
+
this.logger.logOperation('publish', `Message published successfully`, {
|
|
51
|
+
exchange,
|
|
52
|
+
routingKey,
|
|
53
|
+
payloadType: typeof payload,
|
|
54
|
+
payloadSize: serializedPayload.length
|
|
55
|
+
});
|
|
56
|
+
return published;
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
await channel.close();
|
|
60
|
+
throw error;
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
// Detailed error logging with context
|
|
66
|
+
this.logPublishError(error, exchange, routingKey, payload);
|
|
67
|
+
// Return false for failure as per requirements
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Validate publish method parameters
|
|
73
|
+
* @param exchange Exchange name
|
|
74
|
+
* @param routingKey Routing key
|
|
75
|
+
* @param payload Message payload
|
|
76
|
+
*/
|
|
77
|
+
validatePublishParameters(exchange, routingKey, payload) {
|
|
78
|
+
if (!exchange || typeof exchange !== 'string') {
|
|
79
|
+
throw new IErrors_1.PublishError('Exchange parameter is required and must be a non-empty string', {
|
|
80
|
+
exchange,
|
|
81
|
+
routingKey,
|
|
82
|
+
payload: typeof payload
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
if (!routingKey || typeof routingKey !== 'string') {
|
|
86
|
+
throw new IErrors_1.PublishError('RoutingKey parameter is required and must be a non-empty string', {
|
|
87
|
+
exchange,
|
|
88
|
+
routingKey,
|
|
89
|
+
payload: typeof payload
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
if (payload === undefined || payload === null) {
|
|
93
|
+
throw new IErrors_1.PublishError('Payload parameter is required and cannot be null or undefined', {
|
|
94
|
+
exchange,
|
|
95
|
+
routingKey,
|
|
96
|
+
payload
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Serialize payload to JSON string
|
|
102
|
+
* @param payload Payload to serialize
|
|
103
|
+
* @returns JSON string representation
|
|
104
|
+
*/
|
|
105
|
+
serializePayload(payload) {
|
|
106
|
+
try {
|
|
107
|
+
return JSON.stringify(payload);
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
throw new IErrors_1.PublishError('Failed to serialize payload to JSON', {
|
|
111
|
+
payload: typeof payload,
|
|
112
|
+
error: error instanceof Error ? error.message : 'Unknown serialization error'
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Ensure exchange exists before publishing
|
|
118
|
+
* @param exchange Exchange name
|
|
119
|
+
*/
|
|
120
|
+
async ensureExchangeExists(exchange) {
|
|
121
|
+
try {
|
|
122
|
+
// Use ResourceCreator to automatically create exchange if it doesn't exist
|
|
123
|
+
// Always use topic type by default
|
|
124
|
+
await this.resourceCreator.ensureExchange(exchange, 'topic');
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
throw new IErrors_1.PublishError(`Failed to ensure exchange '${exchange}' exists`, {
|
|
128
|
+
exchange,
|
|
129
|
+
error: error instanceof Error ? error.message : 'Unknown error'
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Log publish errors with detailed context
|
|
135
|
+
* @param error The error that occurred
|
|
136
|
+
* @param exchange Exchange name
|
|
137
|
+
* @param routingKey Routing key
|
|
138
|
+
* @param payload Original payload
|
|
139
|
+
*/
|
|
140
|
+
logPublishError(error, exchange, routingKey, payload) {
|
|
141
|
+
let payloadSize = 0;
|
|
142
|
+
try {
|
|
143
|
+
payloadSize = JSON.stringify(payload).length;
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
payloadSize = -1; // Indicate serialization failed
|
|
147
|
+
}
|
|
148
|
+
this.logger.logError('Message publish failed', error, {
|
|
149
|
+
exchange,
|
|
150
|
+
routingKey,
|
|
151
|
+
payloadType: typeof payload,
|
|
152
|
+
payloadSize,
|
|
153
|
+
operation: 'publish'
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
exports.MessagePublisher = MessagePublisher;
|
|
158
|
+
//# sourceMappingURL=MessagePublisher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessagePublisher.js","sourceRoot":"","sources":["../../src/components/MessagePublisher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { IMessageSubscriber, MessageCallback } from '../interfaces/IMessage';
|
|
2
|
+
import { ConnectionManager } from './ConnectionManager';
|
|
3
|
+
import { ResourceCreator } from './ResourceCreator';
|
|
4
|
+
import { DLQHandler } from './DLQHandler';
|
|
5
|
+
import { IConfiguration } from '../interfaces/IConfiguration';
|
|
6
|
+
/**
|
|
7
|
+
* MessageSubscriber handles message consumption from RabbitMQ queues
|
|
8
|
+
* Implements parameter validation, JSON deserialization, automatic resource creation, and DLQ handling
|
|
9
|
+
*/
|
|
10
|
+
export declare class MessageSubscriber implements IMessageSubscriber {
|
|
11
|
+
private connectionManager;
|
|
12
|
+
private resourceCreator;
|
|
13
|
+
private dlqHandler;
|
|
14
|
+
private activeConsumers;
|
|
15
|
+
private logger;
|
|
16
|
+
constructor(connectionManager: ConnectionManager, resourceCreator: ResourceCreator, dlqHandler: DLQHandler, config?: IConfiguration['logging']);
|
|
17
|
+
/**
|
|
18
|
+
* Subscribe to messages from a queue
|
|
19
|
+
* @param exchange Exchange name (required)
|
|
20
|
+
* @param queue Queue name (required)
|
|
21
|
+
* @param routingKey Routing key for binding (required)
|
|
22
|
+
* @param callback Message callback function (required)
|
|
23
|
+
*/
|
|
24
|
+
subscribe(exchange: string, queue: string, routingKey: string, callback: MessageCallback): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Unsubscribe from a queue
|
|
27
|
+
* @param queue Queue name to unsubscribe from
|
|
28
|
+
*/
|
|
29
|
+
unsubscribe(queue: string): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Handle incoming message
|
|
32
|
+
* @param message RabbitMQ message
|
|
33
|
+
* @param callback User callback function
|
|
34
|
+
* @param channel Channel for acknowledgment
|
|
35
|
+
*/
|
|
36
|
+
private handleMessage;
|
|
37
|
+
/**
|
|
38
|
+
* Validate subscribe method parameters
|
|
39
|
+
* @param exchange Exchange name
|
|
40
|
+
* @param queue Queue name
|
|
41
|
+
* @param routingKey Routing key
|
|
42
|
+
* @param callback Message callback function
|
|
43
|
+
*/
|
|
44
|
+
private validateSubscribeParameters;
|
|
45
|
+
/**
|
|
46
|
+
* Deserialize message content from JSON
|
|
47
|
+
* @param message RabbitMQ message
|
|
48
|
+
* @returns Deserialized payload
|
|
49
|
+
*/
|
|
50
|
+
private deserializeMessage;
|
|
51
|
+
/**
|
|
52
|
+
* Ensure exchange, queue, and binding exist before subscribing
|
|
53
|
+
* @param exchange Exchange name
|
|
54
|
+
* @param queue Queue name
|
|
55
|
+
* @param routingKey Routing key for binding
|
|
56
|
+
*/
|
|
57
|
+
private ensureResourcesExist;
|
|
58
|
+
/**
|
|
59
|
+
* Log subscription errors with detailed context
|
|
60
|
+
* @param error The error that occurred
|
|
61
|
+
* @param exchange Exchange name
|
|
62
|
+
* @param queue Queue name
|
|
63
|
+
* @param routingKey Routing key
|
|
64
|
+
*/
|
|
65
|
+
private logSubscriptionError;
|
|
66
|
+
/**
|
|
67
|
+
* Get active consumer information for monitoring
|
|
68
|
+
*/
|
|
69
|
+
getActiveConsumers(): string[];
|
|
70
|
+
/**
|
|
71
|
+
* Handle failed message by routing to DLQ or acknowledging based on configuration
|
|
72
|
+
* @param message Failed RabbitMQ message
|
|
73
|
+
* @param queueName Original queue name
|
|
74
|
+
* @param channel Channel for acknowledgment
|
|
75
|
+
*/
|
|
76
|
+
private handleFailedMessage;
|
|
77
|
+
/**
|
|
78
|
+
* Get retry count from message headers
|
|
79
|
+
* @param message RabbitMQ message
|
|
80
|
+
* @returns Current retry count
|
|
81
|
+
*/
|
|
82
|
+
private getRetryCount;
|
|
83
|
+
/**
|
|
84
|
+
* Requeue message with incremented retry count
|
|
85
|
+
* @param message Original message
|
|
86
|
+
* @param channel Channel for operations
|
|
87
|
+
* @param retryCount New retry count
|
|
88
|
+
*/
|
|
89
|
+
private requeueWithRetryCount;
|
|
90
|
+
/**
|
|
91
|
+
* Republish message with updated retry count
|
|
92
|
+
* @param message Original message
|
|
93
|
+
* @param channel Channel for operations
|
|
94
|
+
* @param retryCount New retry count
|
|
95
|
+
*/
|
|
96
|
+
private republishWithRetryCount;
|
|
97
|
+
/**
|
|
98
|
+
* Extract queue name from message (fallback to routing key if not available)
|
|
99
|
+
* @param message RabbitMQ message
|
|
100
|
+
* @returns Queue name
|
|
101
|
+
*/
|
|
102
|
+
private getQueueNameFromMessage;
|
|
103
|
+
/**
|
|
104
|
+
* Cleanup all active consumers (useful for shutdown)
|
|
105
|
+
*/
|
|
106
|
+
cleanup(): Promise<void>;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=MessageSubscriber.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageSubscriber.d.ts","sourceRoot":"","sources":["../../src/components/MessageSubscriber.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D;;;GAGG;AACH,qBAAa,iBAAkB,YAAW,kBAAkB;IAC1D,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,eAAe,CAAqE;IAC5F,OAAO,CAAC,MAAM,CAAS;gBAEX,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC;IAO9I;;;;;;OAMG;IACU,SAAS,CACpB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,IAAI,CAAC;IAoGhB;;;OAGG;IACU,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCtD;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IA2FrB;;;;;;OAMG;IACH,OAAO,CAAC,2BAA2B;IAwCnC;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;;;;OAKG;YACW,oBAAoB;IA0BlC;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IAc5B;;OAEG;IACI,kBAAkB,IAAI,MAAM,EAAE;IAIrC;;;;;OAKG;YACW,mBAAmB;IAoDjC;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAQrB;;;;;OAKG;YACW,qBAAqB;IA4CnC;;;;;OAKG;YACW,uBAAuB;IAmCrC;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;IAU/B;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAatC"}
|