From 97665fed4a579af444c46e01a6b05f9adb12e888 Mon Sep 17 00:00:00 2001 From: Weyoss Date: Tue, 2 Jan 2024 21:04:48 +0100 Subject: [PATCH] refactor(exchanges): improve typings --- src/lib/exchange/_from-json.ts | 6 +-- types/exchange/common.ts | 35 ++++++++++++++++++ types/exchange/exchange.ts | 67 ++++------------------------------ types/exchange/index.ts | 1 + 4 files changed, 45 insertions(+), 64 deletions(-) create mode 100644 types/exchange/common.ts diff --git a/src/lib/exchange/_from-json.ts b/src/lib/exchange/_from-json.ts index 9d69af70..5b48e25e 100644 --- a/src/lib/exchange/_from-json.ts +++ b/src/lib/exchange/_from-json.ts @@ -7,15 +7,13 @@ * in the root directory of this source tree. */ -import { EExchangeType, TExchangeSerialized } from '../../../types'; +import { EExchangeType, TExchange, TExchangeSerialized } from '../../../types'; import { ExchangeInvalidDataError } from './errors'; import { ExchangeFanOut } from './exchange-fan-out'; import { ExchangeTopic } from './exchange-topic'; import { ExchangeDirect } from './exchange-direct'; -export function _fromJSON( - json: Partial, -): ExchangeFanOut | ExchangeTopic | ExchangeDirect { +export function _fromJSON(json: Partial): TExchange { if (!json.bindingParams || json.type === undefined) throw new ExchangeInvalidDataError(); if (json.type === EExchangeType.FANOUT) { diff --git a/types/exchange/common.ts b/types/exchange/common.ts new file mode 100644 index 00000000..695c994a --- /dev/null +++ b/types/exchange/common.ts @@ -0,0 +1,35 @@ +/* + * Copyright (c) + * Weyoss + * https://github.com/weyoss + * + * This source code is licensed under the MIT license found in the LICENSE file + * in the root directory of this source tree. + */ + +import { ExchangeDirect } from '../../src/lib/exchange/exchange-direct'; +import { ExchangeTopic } from '../../src/lib/exchange/exchange-topic'; +import { ExchangeFanOut } from '../../src/lib/exchange/exchange-fan-out'; +import { IQueueParams } from '../queue'; + +export enum EExchangeType { + DIRECT, + FANOUT, + TOPIC, +} + +export type TTopicParams = { + topic: string; + ns: string; +}; + +export type TExchangeDirectBindingParams = IQueueParams | string; +export type TExchangeTopicBindingParams = TTopicParams | string; +export type TExchangeFanOutBindingParams = string; + +export type TExchange = ExchangeDirect | ExchangeTopic | ExchangeFanOut; + +export type TExchangeSerialized = + | ReturnType + | ReturnType + | ReturnType; diff --git a/types/exchange/exchange.ts b/types/exchange/exchange.ts index 55fa0bc3..bf567a42 100644 --- a/types/exchange/exchange.ts +++ b/types/exchange/exchange.ts @@ -9,30 +9,7 @@ import { IQueueParams } from '../queue'; import { ICallback } from 'redis-smq-common'; - -export type TTopicParams = { - topic: string; - ns: string; -}; - -export enum EExchangeType { - DIRECT, - FANOUT, - TOPIC, -} - -export type TExchangeDirectBindingParams = IQueueParams | string; - -export type TExchangeFanOutBindingParams = string; - -export type TExchangeTopicBindingParams = TTopicParams | string; - -export interface IExchange - extends IExchangeSerialized { - toJSON(): IExchangeSerialized; - getQueues(cb: ICallback): void; - getBindingParams(): BindingParams; -} +import { EExchangeType } from './common'; export interface IExchangeSerialized< BindingParams, @@ -43,39 +20,9 @@ export interface IExchangeSerialized< readonly exchangeTag: string; } -export type TExchangeDirectSerialized = IExchangeSerialized< - TExchangeDirectBindingParams, - EExchangeType.DIRECT ->; - -export type TExchangeTopicSerialized = IExchangeSerialized< - TExchangeTopicBindingParams, - EExchangeType.TOPIC ->; - -export type TExchangeFanOutSerialized = IExchangeSerialized< - TExchangeFanOutBindingParams, - EExchangeType.FANOUT ->; - -export type TExchangeDirect = IExchange< - TExchangeDirectBindingParams, - EExchangeType.DIRECT ->; - -export type TExchangeTopic = IExchange< - TExchangeTopicBindingParams, - EExchangeType.TOPIC ->; - -export type TExchangeFanOut = IExchange< - TExchangeFanOutBindingParams, - EExchangeType.FANOUT ->; - -export type TExchange = TExchangeDirect | TExchangeTopic | TExchangeFanOut; - -export type TExchangeSerialized = - | TExchangeDirectSerialized - | TExchangeTopicSerialized - | TExchangeFanOutSerialized; +export interface IExchange + extends IExchangeSerialized { + toJSON(): IExchangeSerialized; + getQueues(cb: ICallback): void; + getBindingParams(): BindingParams; +} diff --git a/types/exchange/index.ts b/types/exchange/index.ts index bcf487bf..b50c9906 100644 --- a/types/exchange/index.ts +++ b/types/exchange/index.ts @@ -8,3 +8,4 @@ */ export * from './exchange'; +export * from './common';