@rsdk/events.common 5.4.0-next.2
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/CHANGELOG.md +10 -0
- package/dist/event.codec.d.ts +21 -0
- package/dist/event.codec.js +32 -0
- package/dist/event.codec.js.map +1 -0
- package/dist/event.type.d.ts +19 -0
- package/dist/event.type.js +11 -0
- package/dist/event.type.js.map +1 -0
- package/dist/exceptions/payload-format.exception.d.ts +5 -0
- package/dist/exceptions/payload-format.exception.js +11 -0
- package/dist/exceptions/payload-format.exception.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/payload.format.d.ts +30 -0
- package/dist/payload.format.js +45 -0
- package/dist/payload.format.js.map +1 -0
- package/jest.config.e2e.js +1 -0
- package/jest.config.js +1 -0
- package/jest.config.unit.js +1 -0
- package/package.json +24 -0
- package/src/event.codec.ts +35 -0
- package/src/event.type.ts +28 -0
- package/src/exceptions/payload-format.exception.ts +10 -0
- package/src/index.ts +4 -0
- package/src/payload.format.ts +50 -0
- package/tsconfig.build.json +12 -0
- package/tsconfig.json +7 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Change Log
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
|
+
|
|
6
|
+
## [5.4.0-next.2](https://github.com/R-Vision/rsdk/compare/v5.4.0-next.1...v5.4.0-next.2) (2024-11-25)
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* **nats:** nats transport/kv/os + examples + docs ([#306](https://github.com/R-Vision/rsdk/issues/306)) ([de67eed](https://github.com/R-Vision/rsdk/commit/de67eed8b4cb17ec9d359067eae1e0c35d6cc736))
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { EventPayload, EventType } from './event.type';
|
|
2
|
+
export interface EventCodec<E extends EventType> {
|
|
3
|
+
decode<P extends EventPayload<E> = EventPayload<E>>(buffer: Buffer): P;
|
|
4
|
+
encode<P extends EventPayload<E> = EventPayload<E>>(payload: P): Buffer;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Protobuf-encoding strategy
|
|
8
|
+
*/
|
|
9
|
+
export declare class ProtoEventCodec<E extends EventType> implements EventCodec<E> {
|
|
10
|
+
readonly eventType: E;
|
|
11
|
+
constructor(eventType: E);
|
|
12
|
+
decode<P extends EventPayload<E>>(buffer: Buffer): P;
|
|
13
|
+
encode<P extends EventPayload<E>>(payload: P): Buffer;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* JSON-encoding strategy
|
|
17
|
+
*/
|
|
18
|
+
export declare class JSONEventCodec<E extends EventType> implements EventCodec<E> {
|
|
19
|
+
decode<P extends EventPayload<E>>(buffer: Buffer): P;
|
|
20
|
+
encode<P extends EventPayload<E>>(payload: P): Buffer;
|
|
21
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JSONEventCodec = exports.ProtoEventCodec = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Protobuf-encoding strategy
|
|
6
|
+
*/
|
|
7
|
+
class ProtoEventCodec {
|
|
8
|
+
eventType;
|
|
9
|
+
constructor(eventType) {
|
|
10
|
+
this.eventType = eventType;
|
|
11
|
+
}
|
|
12
|
+
decode(buffer) {
|
|
13
|
+
return this.eventType.decode(buffer);
|
|
14
|
+
}
|
|
15
|
+
encode(payload) {
|
|
16
|
+
return Buffer.from(this.eventType.encode(payload).finish());
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.ProtoEventCodec = ProtoEventCodec;
|
|
20
|
+
/**
|
|
21
|
+
* JSON-encoding strategy
|
|
22
|
+
*/
|
|
23
|
+
class JSONEventCodec {
|
|
24
|
+
decode(buffer) {
|
|
25
|
+
return JSON.parse(buffer.toString());
|
|
26
|
+
}
|
|
27
|
+
encode(payload) {
|
|
28
|
+
return Buffer.from(JSON.stringify(payload));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.JSONEventCodec = JSONEventCodec;
|
|
32
|
+
//# sourceMappingURL=event.codec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event.codec.js","sourceRoot":"","sources":["../src/event.codec.ts"],"names":[],"mappings":";;;AAQA;;GAEG;AACH,MAAa,eAAe;IACL;IAArB,YAAqB,SAAY;QAAZ,cAAS,GAAT,SAAS,CAAG;IAAG,CAAC;IAErC,MAAM,CAA4B,MAAc;QAC9C,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,CAA4B,OAAU;QAC1C,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9D,CAAC;CACF;AAVD,0CAUC;AAED;;GAEG;AACH,MAAa,cAAc;IACzB,MAAM,CAA4B,MAAc;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,CAA4B,OAAU;QAC1C,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9C,CAAC;CACF;AARD,wCAQC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Reader, Writer } from 'protobufjs/minimal';
|
|
2
|
+
/**
|
|
3
|
+
* Генерируется при компиляции proto-файлов
|
|
4
|
+
*/
|
|
5
|
+
export interface EventType<T = any> {
|
|
6
|
+
$group: string;
|
|
7
|
+
$partitionKeyField: string | null;
|
|
8
|
+
$type: string;
|
|
9
|
+
encode(message: T): Writer;
|
|
10
|
+
decode(data: Uint8Array | Reader): T;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Выводит тип payload из EventType
|
|
14
|
+
*/
|
|
15
|
+
export type EventPayload<E extends EventType> = E extends EventType<infer P> ? P : never;
|
|
16
|
+
/**
|
|
17
|
+
* Проверяет, является ли переданный тип EventType
|
|
18
|
+
*/
|
|
19
|
+
export declare const isEventType: <T = any>(x: any) => x is EventType<T>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isEventType = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Проверяет, является ли переданный тип EventType
|
|
6
|
+
*/
|
|
7
|
+
const isEventType = (x) => typeof x === 'object' &&
|
|
8
|
+
typeof x.$type === 'string' &&
|
|
9
|
+
typeof x.$group === 'string';
|
|
10
|
+
exports.isEventType = isEventType;
|
|
11
|
+
//# sourceMappingURL=event.type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event.type.js","sourceRoot":"","sources":["../src/event.type.ts"],"names":[],"mappings":";;;AAqBA;;GAEG;AACI,MAAM,WAAW,GAAG,CAAU,CAAM,EAAqB,EAAE,CAChE,OAAO,CAAC,KAAK,QAAQ;IACrB,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ;IAC3B,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC;AAHlB,QAAA,WAAW,eAGO"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PayloadFormatException = void 0;
|
|
4
|
+
const core_1 = require("@rsdk/core");
|
|
5
|
+
class PayloadFormatException extends core_1.BootstrapException {
|
|
6
|
+
constructor(value, allowed) {
|
|
7
|
+
super(`PayloadFormat has wrong value: ${value}, allowed: ${allowed.join(',')}`);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.PayloadFormatException = PayloadFormatException;
|
|
11
|
+
//# sourceMappingURL=payload-format.exception.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload-format.exception.js","sourceRoot":"","sources":["../../src/exceptions/payload-format.exception.ts"],"names":[],"mappings":";;;AACA,qCAAgD;AAEhD,MAAa,sBAAuB,SAAQ,yBAAkB;IAC5D,YAAY,KAAa,EAAE,OAAoB;QAC7C,KAAK,CACH,kCAAkC,KAAK,cAAc,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CACzE,CAAC;IACJ,CAAC;CACF;AAND,wDAMC"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./event.type"), exports);
|
|
18
|
+
__exportStar(require("./event.codec"), exports);
|
|
19
|
+
__exportStar(require("./exceptions/payload-format.exception"), exports);
|
|
20
|
+
__exportStar(require("./payload.format"), exports);
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,gDAA8B;AAC9B,wEAAsD;AACtD,mDAAiC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Способ сериализации данных события
|
|
3
|
+
*/
|
|
4
|
+
export declare enum PayloadFormat {
|
|
5
|
+
PROTOBUF = "protobuf",
|
|
6
|
+
JSON = "json"
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Проверяет, является ли переданная строка - одним
|
|
10
|
+
* из значений перечисления PayloadFormat
|
|
11
|
+
*/
|
|
12
|
+
export declare const isPayloadFormat: (value: string) => value is PayloadFormat;
|
|
13
|
+
/**
|
|
14
|
+
* Проверяет, является ли переданная строка - одним
|
|
15
|
+
* из значений перечисления PayloadFormat. В случае,
|
|
16
|
+
* если передано неверное значение - бросает ошибку
|
|
17
|
+
*/
|
|
18
|
+
export declare const assertIsPayloadFormat: (value: string) => asserts value is PayloadFormat;
|
|
19
|
+
/**
|
|
20
|
+
* Заголовок, через который передаётся способ сериализации
|
|
21
|
+
*/
|
|
22
|
+
export declare const X_FORMAT_HEADER = "X-Format";
|
|
23
|
+
/**
|
|
24
|
+
* Сериализация по умолчанию (protobuf)
|
|
25
|
+
*/
|
|
26
|
+
export declare const DEFAULT_PAYLOAD_FORMAT = PayloadFormat.PROTOBUF;
|
|
27
|
+
/**
|
|
28
|
+
* Заголовок, через который передаётся тип сообщения
|
|
29
|
+
*/
|
|
30
|
+
export declare const X_TYPE_HEADER = "X-Type";
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.X_TYPE_HEADER = exports.DEFAULT_PAYLOAD_FORMAT = exports.X_FORMAT_HEADER = exports.assertIsPayloadFormat = exports.isPayloadFormat = exports.PayloadFormat = void 0;
|
|
4
|
+
const common_1 = require("@rsdk/common");
|
|
5
|
+
const payload_format_exception_1 = require("./exceptions/payload-format.exception");
|
|
6
|
+
/**
|
|
7
|
+
* Способ сериализации данных события
|
|
8
|
+
*/
|
|
9
|
+
var PayloadFormat;
|
|
10
|
+
(function (PayloadFormat) {
|
|
11
|
+
PayloadFormat["PROTOBUF"] = "protobuf";
|
|
12
|
+
PayloadFormat["JSON"] = "json";
|
|
13
|
+
})(PayloadFormat || (exports.PayloadFormat = PayloadFormat = {}));
|
|
14
|
+
const allowed = common_1.Enum.values(PayloadFormat);
|
|
15
|
+
/**
|
|
16
|
+
* Проверяет, является ли переданная строка - одним
|
|
17
|
+
* из значений перечисления PayloadFormat
|
|
18
|
+
*/
|
|
19
|
+
const isPayloadFormat = (value) => allowed.includes(value);
|
|
20
|
+
exports.isPayloadFormat = isPayloadFormat;
|
|
21
|
+
/**
|
|
22
|
+
* Проверяет, является ли переданная строка - одним
|
|
23
|
+
* из значений перечисления PayloadFormat. В случае,
|
|
24
|
+
* если передано неверное значение - бросает ошибку
|
|
25
|
+
*/
|
|
26
|
+
const assertIsPayloadFormat = (value) => {
|
|
27
|
+
if ((0, exports.isPayloadFormat)(value)) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
throw new payload_format_exception_1.PayloadFormatException(value, allowed);
|
|
31
|
+
};
|
|
32
|
+
exports.assertIsPayloadFormat = assertIsPayloadFormat;
|
|
33
|
+
/**
|
|
34
|
+
* Заголовок, через который передаётся способ сериализации
|
|
35
|
+
*/
|
|
36
|
+
exports.X_FORMAT_HEADER = 'X-Format';
|
|
37
|
+
/**
|
|
38
|
+
* Сериализация по умолчанию (protobuf)
|
|
39
|
+
*/
|
|
40
|
+
exports.DEFAULT_PAYLOAD_FORMAT = PayloadFormat.PROTOBUF;
|
|
41
|
+
/**
|
|
42
|
+
* Заголовок, через который передаётся тип сообщения
|
|
43
|
+
*/
|
|
44
|
+
exports.X_TYPE_HEADER = 'X-Type';
|
|
45
|
+
//# sourceMappingURL=payload.format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload.format.js","sourceRoot":"","sources":["../src/payload.format.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AAEpC,oFAA+E;AAE/E;;GAEG;AACH,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,sCAAqB,CAAA;IACrB,8BAAa,CAAA;AACf,CAAC,EAHW,aAAa,6BAAb,aAAa,QAGxB;AAED,MAAM,OAAO,GAAG,aAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AAE3C;;;GAGG;AACI,MAAM,eAAe,GAAG,CAAC,KAAa,EAA0B,EAAE,CACvE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AADb,QAAA,eAAe,mBACF;AAE1B;;;;GAIG;AACI,MAAM,qBAAqB,GAAG,CACnC,KAAa,EACmB,EAAE;IAClC,IAAI,IAAA,uBAAe,EAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,MAAM,IAAI,iDAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC,CAAC;AARW,QAAA,qBAAqB,yBAQhC;AAEF;;GAEG;AACU,QAAA,eAAe,GAAG,UAAU,CAAC;AAE1C;;GAEG;AACU,QAAA,sBAAsB,GAAG,aAAa,CAAC,QAAQ,CAAC;AAE7D;;GAEG;AACU,QAAA,aAAa,GAAG,QAAQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = require('@rsdk/jest/jest.config.e2e');
|
package/jest.config.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = require('@rsdk/jest/jest.config');
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = require('@rsdk/jest/jest.config.unit');
|
package/package.json
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@rsdk/events.common",
|
|
3
|
+
"version": "5.4.0-next.2",
|
|
4
|
+
"description": "Useful common classes, functions and types",
|
|
5
|
+
"license": "Apache License 2.0",
|
|
6
|
+
"publishConfig": {
|
|
7
|
+
"access": "public"
|
|
8
|
+
},
|
|
9
|
+
"repository": {
|
|
10
|
+
"url": "https://github.com/R-Vision/rsdk"
|
|
11
|
+
},
|
|
12
|
+
"main": "dist/index.js",
|
|
13
|
+
"scripts": {
|
|
14
|
+
"prepublishOnly": "npm run build"
|
|
15
|
+
},
|
|
16
|
+
"peerDependencies": {
|
|
17
|
+
"@rsdk/common": "*",
|
|
18
|
+
"@rsdk/core": "*"
|
|
19
|
+
},
|
|
20
|
+
"gitHead": "be4deac03b38b3f923a08116e1dc2b55838905b0",
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"protobufjs": "^7.4.0"
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { EventPayload, EventType } from './event.type';
|
|
2
|
+
|
|
3
|
+
export interface EventCodec<E extends EventType> {
|
|
4
|
+
decode<P extends EventPayload<E> = EventPayload<E>>(buffer: Buffer): P;
|
|
5
|
+
|
|
6
|
+
encode<P extends EventPayload<E> = EventPayload<E>>(payload: P): Buffer;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Protobuf-encoding strategy
|
|
11
|
+
*/
|
|
12
|
+
export class ProtoEventCodec<E extends EventType> implements EventCodec<E> {
|
|
13
|
+
constructor(readonly eventType: E) {}
|
|
14
|
+
|
|
15
|
+
decode<P extends EventPayload<E>>(buffer: Buffer): P {
|
|
16
|
+
return this.eventType.decode(buffer);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
encode<P extends EventPayload<E>>(payload: P): Buffer {
|
|
20
|
+
return Buffer.from(this.eventType.encode(payload).finish());
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* JSON-encoding strategy
|
|
26
|
+
*/
|
|
27
|
+
export class JSONEventCodec<E extends EventType> implements EventCodec<E> {
|
|
28
|
+
decode<P extends EventPayload<E>>(buffer: Buffer): P {
|
|
29
|
+
return JSON.parse(buffer.toString());
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
encode<P extends EventPayload<E>>(payload: P): Buffer {
|
|
33
|
+
return Buffer.from(JSON.stringify(payload));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Reader, Writer } from 'protobufjs/minimal';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Генерируется при компиляции proto-файлов
|
|
5
|
+
*/
|
|
6
|
+
export interface EventType<T = any> {
|
|
7
|
+
$group: string;
|
|
8
|
+
$partitionKeyField: string | null;
|
|
9
|
+
$type: string;
|
|
10
|
+
|
|
11
|
+
encode(message: T): Writer;
|
|
12
|
+
|
|
13
|
+
decode(data: Uint8Array | Reader): T;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Выводит тип payload из EventType
|
|
18
|
+
*/
|
|
19
|
+
export type EventPayload<E extends EventType> =
|
|
20
|
+
E extends EventType<infer P> ? P : never;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Проверяет, является ли переданный тип EventType
|
|
24
|
+
*/
|
|
25
|
+
export const isEventType = <T = any>(x: any): x is EventType<T> =>
|
|
26
|
+
typeof x === 'object' &&
|
|
27
|
+
typeof x.$type === 'string' &&
|
|
28
|
+
typeof x.$group === 'string';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { EnumValue } from '@rsdk/common';
|
|
2
|
+
import { BootstrapException } from '@rsdk/core';
|
|
3
|
+
|
|
4
|
+
export class PayloadFormatException extends BootstrapException {
|
|
5
|
+
constructor(value: string, allowed: EnumValue[]) {
|
|
6
|
+
super(
|
|
7
|
+
`PayloadFormat has wrong value: ${value}, allowed: ${allowed.join(',')}`,
|
|
8
|
+
);
|
|
9
|
+
}
|
|
10
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Enum } from '@rsdk/common';
|
|
2
|
+
|
|
3
|
+
import { PayloadFormatException } from './exceptions/payload-format.exception';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Способ сериализации данных события
|
|
7
|
+
*/
|
|
8
|
+
export enum PayloadFormat {
|
|
9
|
+
PROTOBUF = 'protobuf',
|
|
10
|
+
JSON = 'json',
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const allowed = Enum.values(PayloadFormat);
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Проверяет, является ли переданная строка - одним
|
|
17
|
+
* из значений перечисления PayloadFormat
|
|
18
|
+
*/
|
|
19
|
+
export const isPayloadFormat = (value: string): value is PayloadFormat =>
|
|
20
|
+
allowed.includes(value);
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Проверяет, является ли переданная строка - одним
|
|
24
|
+
* из значений перечисления PayloadFormat. В случае,
|
|
25
|
+
* если передано неверное значение - бросает ошибку
|
|
26
|
+
*/
|
|
27
|
+
export const assertIsPayloadFormat = (
|
|
28
|
+
value: string,
|
|
29
|
+
): asserts value is PayloadFormat => {
|
|
30
|
+
if (isPayloadFormat(value)) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
throw new PayloadFormatException(value, allowed);
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Заголовок, через который передаётся способ сериализации
|
|
39
|
+
*/
|
|
40
|
+
export const X_FORMAT_HEADER = 'X-Format';
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Сериализация по умолчанию (protobuf)
|
|
44
|
+
*/
|
|
45
|
+
export const DEFAULT_PAYLOAD_FORMAT = PayloadFormat.PROTOBUF;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Заголовок, через который передаётся тип сообщения
|
|
49
|
+
*/
|
|
50
|
+
export const X_TYPE_HEADER = 'X-Type';
|