@message-queue-toolkit/core 1.2.0 → 3.0.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.
package/dist/index.d.ts CHANGED
@@ -1,6 +1,11 @@
1
- export type { QueueConsumer, AsyncPublisher, SyncPublisher, TransactionObservabilityManager, Logger, } from './lib/types/MessageQueueTypes';
1
+ export type { QueueConsumer, AsyncPublisher, SyncPublisher, TransactionObservabilityManager, Logger, SchemaMap, } from './lib/types/MessageQueueTypes';
2
2
  export { AbstractQueueService } from './lib/queues/AbstractQueueService';
3
- export type { QueueOptions, QueueDependencies, QueueConsumerDependencies, Deserializer, CommonQueueLocator, } from './lib/queues/AbstractQueueService';
3
+ export type { NewQueueOptions, ExistingQueueOptions, NewQueueOptionsMultiSchema, ExistingQueueOptionsMultiSchema, MonoSchemaQueueOptions, MultiSchemaConsumerOptions, QueueDependencies, QueueConsumerDependencies, Deserializer, CommonQueueLocator, } from './lib/queues/AbstractQueueService';
4
4
  export { isMessageError, MessageValidationError, MessageInvalidFormatError, } from './lib/errors/Errors';
5
+ export { HandlerContainer, MessageHandlerConfig, MessageHandlerConfigBuilder, } from './lib/queues/HandlerContainer';
6
+ export type { HandlerContainerOptions, Handler } from './lib/queues/HandlerContainer';
7
+ export { MessageSchemaContainer } from './lib/queues/MessageSchemaContainer';
8
+ export type { MessageSchemaContainerOptions } from './lib/queues/MessageSchemaContainer';
5
9
  export { objectToBuffer } from './lib/utils/queueUtils';
6
10
  export { waitAndRetry } from './lib/utils/waitUtils';
11
+ export { parseMessage } from './lib/utils/parseUtils';
package/dist/index.js CHANGED
@@ -1,14 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.waitAndRetry = exports.objectToBuffer = exports.MessageInvalidFormatError = exports.MessageValidationError = exports.isMessageError = exports.AbstractQueueService = void 0;
3
+ exports.parseMessage = exports.waitAndRetry = exports.objectToBuffer = exports.MessageSchemaContainer = exports.MessageHandlerConfigBuilder = exports.MessageHandlerConfig = exports.HandlerContainer = exports.MessageInvalidFormatError = exports.MessageValidationError = exports.isMessageError = exports.AbstractQueueService = void 0;
4
4
  var AbstractQueueService_1 = require("./lib/queues/AbstractQueueService");
5
5
  Object.defineProperty(exports, "AbstractQueueService", { enumerable: true, get: function () { return AbstractQueueService_1.AbstractQueueService; } });
6
6
  var Errors_1 = require("./lib/errors/Errors");
7
7
  Object.defineProperty(exports, "isMessageError", { enumerable: true, get: function () { return Errors_1.isMessageError; } });
8
8
  Object.defineProperty(exports, "MessageValidationError", { enumerable: true, get: function () { return Errors_1.MessageValidationError; } });
9
9
  Object.defineProperty(exports, "MessageInvalidFormatError", { enumerable: true, get: function () { return Errors_1.MessageInvalidFormatError; } });
10
+ var HandlerContainer_1 = require("./lib/queues/HandlerContainer");
11
+ Object.defineProperty(exports, "HandlerContainer", { enumerable: true, get: function () { return HandlerContainer_1.HandlerContainer; } });
12
+ Object.defineProperty(exports, "MessageHandlerConfig", { enumerable: true, get: function () { return HandlerContainer_1.MessageHandlerConfig; } });
13
+ Object.defineProperty(exports, "MessageHandlerConfigBuilder", { enumerable: true, get: function () { return HandlerContainer_1.MessageHandlerConfigBuilder; } });
14
+ var MessageSchemaContainer_1 = require("./lib/queues/MessageSchemaContainer");
15
+ Object.defineProperty(exports, "MessageSchemaContainer", { enumerable: true, get: function () { return MessageSchemaContainer_1.MessageSchemaContainer; } });
10
16
  var queueUtils_1 = require("./lib/utils/queueUtils");
11
17
  Object.defineProperty(exports, "objectToBuffer", { enumerable: true, get: function () { return queueUtils_1.objectToBuffer; } });
12
18
  var waitUtils_1 = require("./lib/utils/waitUtils");
13
19
  Object.defineProperty(exports, "waitAndRetry", { enumerable: true, get: function () { return waitUtils_1.waitAndRetry; } });
20
+ var parseUtils_1 = require("./lib/utils/parseUtils");
21
+ Object.defineProperty(exports, "parseMessage", { enumerable: true, get: function () { return parseUtils_1.parseMessage; } });
14
22
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAQA,0EAAwE;AAA/D,4HAAA,oBAAoB,OAAA;AAS7B,8CAI4B;AAH1B,wGAAA,cAAc,OAAA;AACd,gHAAA,sBAAsB,OAAA;AACtB,mHAAA,yBAAyB,OAAA;AAG3B,qDAAuD;AAA9C,4GAAA,cAAc,OAAA;AACvB,mDAAoD;AAA3C,yGAAA,YAAY,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AASA,0EAAwE;AAA/D,4HAAA,oBAAoB,OAAA;AAc7B,8CAI4B;AAH1B,wGAAA,cAAc,OAAA;AACd,gHAAA,sBAAsB,OAAA;AACtB,mHAAA,yBAAyB,OAAA;AAG3B,kEAIsC;AAHpC,oHAAA,gBAAgB,OAAA;AAChB,wHAAA,oBAAoB,OAAA;AACpB,+HAAA,2BAA2B,OAAA;AAI7B,8EAA4E;AAAnE,gIAAA,sBAAsB,OAAA;AAG/B,qDAAuD;AAA9C,4GAAA,cAAc,OAAA;AACvB,mDAAoD;AAA3C,yGAAA,YAAY,OAAA;AACrB,qDAAqD;AAA5C,0GAAA,YAAY,OAAA"}
@@ -2,6 +2,7 @@ import type { ErrorReporter, ErrorResolver, Either } from '@lokalise/node-core';
2
2
  import type { ZodSchema, ZodType } from 'zod';
3
3
  import type { MessageInvalidFormatError, MessageValidationError } from '../errors/Errors';
4
4
  import type { Logger, TransactionObservabilityManager } from '../types/MessageQueueTypes';
5
+ import type { MessageHandlerConfig } from './HandlerContainer';
5
6
  export type QueueDependencies = {
6
7
  errorReporter: ErrorReporter;
7
8
  logger: Logger;
@@ -10,26 +11,37 @@ export type QueueConsumerDependencies = {
10
11
  consumerErrorResolver: ErrorResolver;
11
12
  transactionObservabilityManager: TransactionObservabilityManager;
12
13
  };
13
- export type Deserializer<MessagePayloadType extends object, QueueEngineMessageType extends object> = (message: QueueEngineMessageType, type: ZodType<MessagePayloadType>, errorProcessor: ErrorResolver) => Either<MessageInvalidFormatError | MessageValidationError, MessagePayloadType>;
14
- export type QueueOptions<MessagePayloadType extends object, QueueConfiguration extends object, QueueLocatorType extends object> = {
15
- messageSchema: ZodSchema<MessagePayloadType>;
14
+ export type Deserializer<MessagePayloadType extends object> = (message: unknown, type: ZodType<MessagePayloadType>, errorProcessor: ErrorResolver) => Either<MessageInvalidFormatError | MessageValidationError, MessagePayloadType>;
15
+ export type NewQueueOptionsMultiSchema<MessagePayloadSchemas extends object, CreationConfigType extends object, ExecutionContext> = NewQueueOptions<CreationConfigType> & MultiSchemaConsumerOptions<MessagePayloadSchemas, ExecutionContext>;
16
+ export type ExistingQueueOptionsMultiSchema<MessagePayloadSchemas extends object, QueueLocatorType extends object, ExecutionContext> = ExistingQueueOptions<QueueLocatorType> & MultiSchemaConsumerOptions<MessagePayloadSchemas, ExecutionContext>;
17
+ export type NewQueueOptions<CreationConfigType extends object> = {
16
18
  messageTypeField: string;
17
- queueName: string;
18
- queueLocator?: QueueLocatorType;
19
- queueConfiguration?: QueueConfiguration;
19
+ locatorConfig?: never;
20
+ creationConfig: CreationConfigType;
21
+ };
22
+ export type ExistingQueueOptions<QueueLocatorType extends object> = {
23
+ messageTypeField: string;
24
+ locatorConfig: QueueLocatorType;
25
+ creationConfig?: never;
26
+ };
27
+ export type MultiSchemaConsumerOptions<MessagePayloadSchemas extends object, ExecutionContext> = {
28
+ handlers: MessageHandlerConfig<MessagePayloadSchemas, ExecutionContext>[];
29
+ };
30
+ export type MonoSchemaQueueOptions<MessagePayloadType extends object> = {
31
+ messageSchema: ZodSchema<MessagePayloadType>;
20
32
  };
21
33
  export type CommonQueueLocator = {
22
34
  queueName: string;
23
35
  };
24
- export declare abstract class AbstractQueueService<MessagePayloadType extends object, DependenciesType extends QueueDependencies, QueueConfiguration extends object, QueueLocatorType extends object = CommonQueueLocator, OptionsType extends QueueOptions<MessagePayloadType, QueueConfiguration, QueueLocatorType> = QueueOptions<MessagePayloadType, QueueConfiguration, QueueLocatorType>> {
25
- protected readonly queueName: string;
36
+ export declare abstract class AbstractQueueService<MessagePayloadSchemas extends object, MessageEnvelopeType extends object, DependenciesType extends QueueDependencies, QueueConfiguration extends object, QueueLocatorType extends object = CommonQueueLocator, OptionsType extends NewQueueOptions<QueueConfiguration> | ExistingQueueOptions<QueueLocatorType> = NewQueueOptions<QueueConfiguration> | ExistingQueueOptions<QueueLocatorType>> {
26
37
  protected readonly errorReporter: ErrorReporter;
27
- protected readonly messageSchema: ZodSchema<MessagePayloadType>;
28
38
  protected readonly logger: Logger;
29
39
  protected readonly messageTypeField: string;
30
- protected readonly queueConfiguration?: QueueConfiguration;
31
- protected readonly queueLocator?: QueueLocatorType;
32
- constructor({ errorReporter, logger }: DependenciesType, { messageSchema, messageTypeField, queueName, queueConfiguration, queueLocator }: OptionsType);
40
+ protected readonly creationConfig?: QueueConfiguration;
41
+ protected readonly locatorConfig?: QueueLocatorType;
42
+ constructor({ errorReporter, logger }: DependenciesType, { messageTypeField, creationConfig, locatorConfig }: OptionsType);
43
+ protected abstract resolveSchema(message: MessagePayloadSchemas): Either<Error, ZodSchema<MessagePayloadSchemas>>;
44
+ protected abstract resolveMessage(message: MessageEnvelopeType): Either<MessageInvalidFormatError | MessageValidationError, unknown>;
33
45
  protected handleError(err: unknown): void;
34
46
  abstract close(): Promise<unknown>;
35
47
  }
@@ -4,21 +4,17 @@ exports.AbstractQueueService = void 0;
4
4
  const node_util_1 = require("node:util");
5
5
  const node_core_1 = require("@lokalise/node-core");
6
6
  class AbstractQueueService {
7
- queueName;
8
7
  errorReporter;
9
- messageSchema;
10
8
  logger;
11
9
  messageTypeField;
12
- queueConfiguration;
13
- queueLocator;
14
- constructor({ errorReporter, logger }, { messageSchema, messageTypeField, queueName, queueConfiguration, queueLocator }) {
10
+ creationConfig;
11
+ locatorConfig;
12
+ constructor({ errorReporter, logger }, { messageTypeField, creationConfig, locatorConfig }) {
15
13
  this.errorReporter = errorReporter;
16
14
  this.logger = logger;
17
- this.queueName = queueName;
18
- this.messageSchema = messageSchema;
19
15
  this.messageTypeField = messageTypeField;
20
- this.queueConfiguration = queueConfiguration;
21
- this.queueLocator = queueLocator;
16
+ this.creationConfig = creationConfig;
17
+ this.locatorConfig = locatorConfig;
22
18
  }
23
19
  handleError(err) {
24
20
  const logObject = (0, node_core_1.resolveGlobalErrorLogObject)(err);
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractQueueService.js","sourceRoot":"","sources":["../../../lib/queues/AbstractQueueService.ts"],"names":[],"mappings":";;;AAAA,yCAAiC;AAGjC,mDAAiE;AAyCjE,MAAsB,oBAAoB;IAWrB,SAAS,CAAQ;IACjB,aAAa,CAAe;IAC5B,aAAa,CAA+B;IAC5C,MAAM,CAAQ;IACd,gBAAgB,CAAQ;IACxB,kBAAkB,CAAqB;IACvC,YAAY,CAAmB;IAElD,YACE,EAAE,aAAa,EAAE,MAAM,EAAoB,EAC3C,EAAE,aAAa,EAAE,gBAAgB,EAAE,SAAS,EAAE,kBAAkB,EAAE,YAAY,EAAe;QAE7F,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QAEpB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;QAClC,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAA;QACxC,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAA;QAC5C,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IAClC,CAAC;IAES,WAAW,CAAC,GAAY;QAChC,MAAM,SAAS,GAAG,IAAA,uCAA2B,EAAC,GAAG,CAAC,CAAA;QAClD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAC5B,IAAI,iBAAK,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;YAC5B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;SAC1C;IACH,CAAC;CAGF;AA1CD,oDA0CC"}
1
+ {"version":3,"file":"AbstractQueueService.js","sourceRoot":"","sources":["../../../lib/queues/AbstractQueueService.ts"],"names":[],"mappings":";;;AAAA,yCAAiC;AAGjC,mDAAiE;AA8DjE,MAAsB,oBAAoB;IAYrB,aAAa,CAAe;IAC5B,MAAM,CAAQ;IACd,gBAAgB,CAAQ;IACxB,cAAc,CAAqB;IACnC,aAAa,CAAmB;IAEnD,YACE,EAAE,aAAa,EAAE,MAAM,EAAoB,EAC3C,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAe;QAEhE,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QAEpB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAA;QACxC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;QACpC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;IACpC,CAAC;IASS,WAAW,CAAC,GAAY;QAChC,MAAM,SAAS,GAAG,IAAA,uCAA2B,EAAC,GAAG,CAAC,CAAA;QAClD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAC5B,IAAI,iBAAK,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;YAC5B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;SAC1C;IACH,CAAC;CAGF;AA9CD,oDA8CC"}
@@ -0,0 +1,25 @@
1
+ import type { Either } from '@lokalise/node-core';
2
+ import type { ZodSchema } from 'zod';
3
+ export declare class MessageHandlerConfig<const MessagePayloadSchemas, const ExecutionContext> {
4
+ readonly schema: ZodSchema<MessagePayloadSchemas>;
5
+ readonly handler: Handler<MessagePayloadSchemas, ExecutionContext>;
6
+ constructor(schema: ZodSchema<MessagePayloadSchemas>, handler: Handler<MessagePayloadSchemas, ExecutionContext>);
7
+ }
8
+ export declare class MessageHandlerConfigBuilder<MessagePayloadSchemas, ExecutionContext> {
9
+ private readonly configs;
10
+ constructor();
11
+ addConfig<MessagePayloadSchema extends MessagePayloadSchemas>(schema: ZodSchema<MessagePayloadSchema>, handler: Handler<MessagePayloadSchema, ExecutionContext>): this;
12
+ build(): MessageHandlerConfig<MessagePayloadSchemas, ExecutionContext>[];
13
+ }
14
+ export type Handler<MessagePayloadSchemas, ExecutionContext> = (message: MessagePayloadSchemas, context: ExecutionContext) => Promise<Either<'retryLater', 'success'>>;
15
+ export type HandlerContainerOptions<MessagePayloadSchemas extends object, ExecutionContext> = {
16
+ messageHandlers: MessageHandlerConfig<MessagePayloadSchemas, ExecutionContext>[];
17
+ messageTypeField: string;
18
+ };
19
+ export declare class HandlerContainer<MessagePayloadSchemas extends object, ExecutionContext> {
20
+ private readonly messageHandlers;
21
+ private readonly messageTypeField;
22
+ constructor(options: HandlerContainerOptions<MessagePayloadSchemas, ExecutionContext>);
23
+ resolveHandler(messageType: string): Handler<MessagePayloadSchemas, ExecutionContext>;
24
+ private resolveHandlerMap;
25
+ }
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HandlerContainer = exports.MessageHandlerConfigBuilder = exports.MessageHandlerConfig = void 0;
4
+ class MessageHandlerConfig {
5
+ schema;
6
+ handler;
7
+ constructor(schema, handler) {
8
+ this.schema = schema;
9
+ this.handler = handler;
10
+ }
11
+ }
12
+ exports.MessageHandlerConfig = MessageHandlerConfig;
13
+ class MessageHandlerConfigBuilder {
14
+ configs;
15
+ constructor() {
16
+ this.configs = [];
17
+ }
18
+ addConfig(schema, handler) {
19
+ // @ts-ignore
20
+ this.configs.push(new MessageHandlerConfig(schema, handler));
21
+ return this;
22
+ }
23
+ build() {
24
+ return this.configs;
25
+ }
26
+ }
27
+ exports.MessageHandlerConfigBuilder = MessageHandlerConfigBuilder;
28
+ class HandlerContainer {
29
+ messageHandlers;
30
+ messageTypeField;
31
+ constructor(options) {
32
+ this.messageTypeField = options.messageTypeField;
33
+ this.messageHandlers = this.resolveHandlerMap(options.messageHandlers);
34
+ }
35
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
36
+ resolveHandler(messageType) {
37
+ const handler = this.messageHandlers[messageType];
38
+ if (!handler) {
39
+ throw new Error(`Unsupported message type: ${messageType}`);
40
+ }
41
+ return handler;
42
+ }
43
+ resolveHandlerMap(supportedHandlers) {
44
+ return supportedHandlers.reduce((acc, entry) => {
45
+ // @ts-ignore
46
+ const messageType = entry.schema.shape[this.messageTypeField].value;
47
+ acc[messageType] = entry.handler;
48
+ return acc;
49
+ }, {});
50
+ }
51
+ }
52
+ exports.HandlerContainer = HandlerContainer;
53
+ //# sourceMappingURL=HandlerContainer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HandlerContainer.js","sourceRoot":"","sources":["../../../lib/queues/HandlerContainer.ts"],"names":[],"mappings":";;;AAGA,MAAa,oBAAoB;IACf,MAAM,CAAkC;IACxC,OAAO,CAAkD;IAEzE,YACE,MAAwC,EACxC,OAAyD;QAEzD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;CACF;AAXD,oDAWC;AAED,MAAa,2BAA2B;IACrB,OAAO,CAAiE;IAEzF;QACE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;IACnB,CAAC;IAED,SAAS,CACP,MAAuC,EACvC,OAAwD;QAExD,aAAa;QACb,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;QAC5D,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;CACF;AAnBD,kEAmBC;AAYD,MAAa,gBAAgB;IACV,eAAe,CAAkE;IACjF,gBAAgB,CAAQ;IAEzC,YAAY,OAAyE;QACnF,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAA;QAChD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;IACxE,CAAC;IAED,8DAA8D;IACvD,cAAc,CAAC,WAAmB;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAA;QACjD,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,6BAA6B,WAAW,EAAE,CAAC,CAAA;SAC5D;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAEO,iBAAiB,CACvB,iBAAkF;QAElF,OAAO,iBAAiB,CAAC,MAAM,CAC7B,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YACb,aAAa;YACb,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAA;YACnE,GAAG,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,OAAO,CAAA;YAChC,OAAO,GAAG,CAAA;QACZ,CAAC,EACD,EAAsE,CACvE,CAAA;IACH,CAAC;CACF;AA/BD,4CA+BC"}
@@ -0,0 +1,13 @@
1
+ import type { Either } from '@lokalise/node-core';
2
+ import type { ZodSchema } from 'zod';
3
+ export type MessageSchemaContainerOptions<MessagePayloadSchemas extends object> = {
4
+ messageSchemas: readonly ZodSchema<MessagePayloadSchemas>[];
5
+ messageTypeField: string;
6
+ };
7
+ export declare class MessageSchemaContainer<MessagePayloadSchemas extends object> {
8
+ private readonly messageSchemas;
9
+ private readonly messageTypeField;
10
+ constructor(options: MessageSchemaContainerOptions<MessagePayloadSchemas>);
11
+ resolveSchema(message: Record<string, any>): Either<Error, ZodSchema<MessagePayloadSchemas>>;
12
+ private resolveSchemaMap;
13
+ }
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MessageSchemaContainer = void 0;
4
+ class MessageSchemaContainer {
5
+ messageSchemas;
6
+ messageTypeField;
7
+ constructor(options) {
8
+ this.messageTypeField = options.messageTypeField;
9
+ this.messageSchemas = this.resolveSchemaMap(options.messageSchemas);
10
+ }
11
+ resolveSchema(
12
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
13
+ message) {
14
+ const schema = this.messageSchemas[message[this.messageTypeField]];
15
+ if (!schema) {
16
+ return {
17
+ error: new Error(`Unsupported message type: ${message[this.messageTypeField]}`),
18
+ };
19
+ }
20
+ return {
21
+ result: schema,
22
+ };
23
+ }
24
+ resolveSchemaMap(supportedSchemas) {
25
+ return supportedSchemas.reduce((acc, schema) => {
26
+ // @ts-ignore
27
+ acc[schema.shape[this.messageTypeField].value] = schema;
28
+ return acc;
29
+ }, {});
30
+ }
31
+ }
32
+ exports.MessageSchemaContainer = MessageSchemaContainer;
33
+ //# sourceMappingURL=MessageSchemaContainer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageSchemaContainer.js","sourceRoot":"","sources":["../../../lib/queues/MessageSchemaContainer.ts"],"names":[],"mappings":";;;AAQA,MAAa,sBAAsB;IAChB,cAAc,CAAkD;IAChE,gBAAgB,CAAQ;IAEzC,YAAY,OAA6D;QACvE,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAA;QAChD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IACrE,CAAC;IAEM,aAAa;IAClB,8DAA8D;IAC9D,OAA4B;QAE5B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAA;QAClE,IAAI,CAAC,MAAM,EAAE;YACX,OAAO;gBACL,KAAK,EAAE,IAAI,KAAK,CAAC,6BAA6B,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;aAChF,CAAA;SACF;QACD,OAAO;YACL,MAAM,EAAE,MAAM;SACf,CAAA;IACH,CAAC;IAEO,gBAAgB,CACtB,gBAA6D;QAE7D,OAAO,gBAAgB,CAAC,MAAM,CAC5B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;YACd,aAAa;YACb,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,GAAG,MAAM,CAAA;YACvD,OAAO,GAAG,CAAA;QACZ,CAAC,EACD,EAAsD,CACvD,CAAA;IACH,CAAC;CACF;AApCD,wDAoCC"}
@@ -1,3 +1,4 @@
1
+ import type { ZodSchema } from 'zod';
1
2
  export interface QueueConsumer {
2
3
  start(): Promise<unknown>;
3
4
  close(): Promise<unknown>;
@@ -25,3 +26,4 @@ export type Logger = {
25
26
  trace: LogFn;
26
27
  fatal: LogFn;
27
28
  };
29
+ export type SchemaMap<SupportedMessageTypes extends string> = Record<SupportedMessageTypes, ZodSchema<any>>;
@@ -0,0 +1,4 @@
1
+ import type { Either, ErrorResolver } from '@lokalise/node-core';
2
+ import type { ZodSchema } from 'zod';
3
+ import type { MessageInvalidFormatError, MessageValidationError } from '../errors/Errors';
4
+ export declare function parseMessage<T extends object>(messagePayload: unknown, schema: ZodSchema<T>, errorProcessor: ErrorResolver): Either<MessageInvalidFormatError | MessageValidationError, T>;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseMessage = void 0;
4
+ function parseMessage(messagePayload, schema, errorProcessor) {
5
+ try {
6
+ return {
7
+ result: schema.parse(messagePayload),
8
+ };
9
+ }
10
+ catch (exception) {
11
+ return {
12
+ error: errorProcessor.processError(exception),
13
+ };
14
+ }
15
+ }
16
+ exports.parseMessage = parseMessage;
17
+ //# sourceMappingURL=parseUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseUtils.js","sourceRoot":"","sources":["../../../lib/utils/parseUtils.ts"],"names":[],"mappings":";;;AAKA,SAAgB,YAAY,CAC1B,cAAuB,EACvB,MAAoB,EACpB,cAA6B;IAE7B,IAAI;QACF,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC;SACrC,CAAA;KACF;IAAC,OAAO,SAAS,EAAE;QAClB,OAAO;YACL,KAAK,EAAE,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC;SAC9C,CAAA;KACF;AACH,CAAC;AAdD,oCAcC"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.waitAndRetry = void 0;
4
- const waitAndRetry = async (predicateFn, sleepTime = 100, maxRetryCount = 0) => {
4
+ const waitAndRetry = async (predicateFn, sleepTime = 20, maxRetryCount = 15) => {
5
5
  return new Promise((resolve, reject) => {
6
6
  let retryCount = 0;
7
7
  function performCheck() {
@@ -1 +1 @@
1
- {"version":3,"file":"waitUtils.js","sourceRoot":"","sources":["../../../lib/utils/waitUtils.ts"],"names":[],"mappings":";;;AAAO,MAAM,YAAY,GAAG,KAAK,EAC/B,WAAoB,EACpB,SAAS,GAAG,GAAG,EACf,aAAa,GAAG,CAAC,EACL,EAAE;IACd,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,UAAU,GAAG,CAAC,CAAA;QAClB,SAAS,YAAY;YACnB,IAAI,aAAa,KAAK,CAAC,IAAI,UAAU,GAAG,aAAa,EAAE;gBACrD,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;aACvB;YACD,OAAO,CAAC,OAAO,EAAE;iBACd,IAAI,CAAC,GAAG,EAAE;gBACT,OAAO,WAAW,EAAE,CAAA;YACtB,CAAC,CAAC;iBACD,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;gBACf,IAAI,MAAM,EAAE;oBACV,OAAO,CAAC,MAAM,CAAC,CAAA;iBAChB;qBAAM;oBACL,UAAU,EAAE,CAAA;oBACZ,UAAU,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;iBACpC;YACH,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACb,MAAM,CAAC,GAAG,CAAC,CAAA;YACb,CAAC,CAAC,CAAA;QACN,CAAC;QAED,YAAY,EAAE,CAAA;IAChB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AA9BY,QAAA,YAAY,gBA8BxB"}
1
+ {"version":3,"file":"waitUtils.js","sourceRoot":"","sources":["../../../lib/utils/waitUtils.ts"],"names":[],"mappings":";;;AAAO,MAAM,YAAY,GAAG,KAAK,EAC/B,WAAoB,EACpB,SAAS,GAAG,EAAE,EACd,aAAa,GAAG,EAAE,EACN,EAAE;IACd,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,UAAU,GAAG,CAAC,CAAA;QAClB,SAAS,YAAY;YACnB,IAAI,aAAa,KAAK,CAAC,IAAI,UAAU,GAAG,aAAa,EAAE;gBACrD,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;aACvB;YACD,OAAO,CAAC,OAAO,EAAE;iBACd,IAAI,CAAC,GAAG,EAAE;gBACT,OAAO,WAAW,EAAE,CAAA;YACtB,CAAC,CAAC;iBACD,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;gBACf,IAAI,MAAM,EAAE;oBACV,OAAO,CAAC,MAAM,CAAC,CAAA;iBAChB;qBAAM;oBACL,UAAU,EAAE,CAAA;oBACZ,UAAU,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;iBACpC;YACH,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACb,MAAM,CAAC,GAAG,CAAC,CAAA;YACb,CAAC,CAAC,CAAA;QACN,CAAC;QAED,YAAY,EAAE,CAAA;IAChB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AA9BY,QAAA,YAAY,gBA8BxB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@message-queue-toolkit/core",
3
- "version": "1.2.0",
3
+ "version": "3.0.0",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "description": "Useful utilities, interfaces and base classes for message queue handling. Supports AMQP and SQS with a common abstraction on top currently",
@@ -27,14 +27,14 @@
27
27
  "dependencies": {},
28
28
  "devDependencies": {
29
29
  "@types/node": "^20.4.1",
30
- "@typescript-eslint/eslint-plugin": "^5.62.0",
31
- "@typescript-eslint/parser": "^5.62.0",
30
+ "@typescript-eslint/eslint-plugin": "^6.2.1",
31
+ "@typescript-eslint/parser": "^6.2.1",
32
32
  "del-cli": "^5.0.0",
33
33
  "eslint": "^8.44.0",
34
34
  "eslint-config-prettier": "^8.8.0",
35
35
  "eslint-plugin-import": "^2.27.5",
36
- "eslint-plugin-prettier": "^4.2.1",
37
- "prettier": "^2.8.8",
36
+ "eslint-plugin-prettier": "^5.0.0",
37
+ "prettier": "^3.0.0",
38
38
  "typescript": "^5.1.6"
39
39
  },
40
40
  "homepage": "https://github.com/kibertoad/message-queue-toolkit",