@lad-tech/nsc-toolkit 1.15.5 → 1.17.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/CHANGELOG.md +3 -3
- package/README.md +1 -0
- package/dist/Root.js +4 -1
- package/dist/Service.js +10 -1
- package/dist/StreamOptions/BufferToJsonTransform.js +32 -0
- package/dist/StreamOptions/JsonToBufferTransform.js +11 -0
- package/dist/StreamOptions/index.js +19 -0
- package/dist/index.js +1 -0
- package/dist/types/Root.d.ts +1 -1
- package/dist/types/Service.d.ts +4 -0
- package/dist/types/StreamOptions/BufferToJsonTransform.d.ts +13 -0
- package/dist/types/StreamOptions/JsonToBufferTransform.d.ts +6 -0
- package/dist/types/StreamOptions/index.d.ts +2 -0
- package/dist/types/index.d.ts +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
# [1.17.0](https://github.com/lad-tech/nsc-toolkit/compare/v1.16.0...v1.17.0) (2023-11-09)
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
###
|
|
4
|
+
### Features
|
|
5
5
|
|
|
6
|
-
*
|
|
6
|
+
* Передача и парсинг json в потоках ([8c40d92](https://github.com/lad-tech/nsc-toolkit/commit/8c40d9211055ea40668f33711f9cec5e4e0064d3)), closes [#85](https://github.com/lad-tech/nsc-toolkit/issues/85)
|
package/README.md
CHANGED
|
@@ -316,6 +316,7 @@ npm i
|
|
|
316
316
|
- Инъекция через декоратор `@service` позволяет использовать функциональность сборки приложения в монолит.
|
|
317
317
|
* `@instance`:
|
|
318
318
|
- Используется для инъекции других зависимостей, например, объектов репозиториев. В него можно передать готовый объект с набором асинхронных методов. При вызове этих методов из его логики они будут видны в трассировках. Для получения таких зависимостей рекомендуется использовать DI-контейнеры.
|
|
319
|
+
5. Для передачи объектов в поток можно использовать встроенные классы `JsonToBufferTransform` и `BufferToJsonTransform`, с помощью которых склейка буфера при передаче и парсинг произойдет в автоматическом режиме
|
|
319
320
|
|
|
320
321
|
## Рекомендации
|
|
321
322
|
|
package/dist/Root.js
CHANGED
|
@@ -57,9 +57,12 @@ class Root {
|
|
|
57
57
|
if (error instanceof Error) {
|
|
58
58
|
message = error.message;
|
|
59
59
|
}
|
|
60
|
-
else {
|
|
60
|
+
else if (typeof error === 'string') {
|
|
61
61
|
message = error;
|
|
62
62
|
}
|
|
63
|
+
else {
|
|
64
|
+
message = JSON.stringify(error);
|
|
65
|
+
}
|
|
63
66
|
return {
|
|
64
67
|
payload: null,
|
|
65
68
|
error: {
|
package/dist/Service.js
CHANGED
|
@@ -348,11 +348,20 @@ class Service extends Root_1.Root {
|
|
|
348
348
|
}
|
|
349
349
|
catch (error) {
|
|
350
350
|
logger.debug({ request: payload });
|
|
351
|
-
logger.error(error);
|
|
351
|
+
logger.error(this.createErrorMessageForLogger(error));
|
|
352
352
|
this.finishSpan(span, error);
|
|
353
353
|
return this.buildErrorMessage(error);
|
|
354
354
|
}
|
|
355
355
|
}
|
|
356
|
+
/**
|
|
357
|
+
* Make error object if error instance of Error object for logger
|
|
358
|
+
*/
|
|
359
|
+
createErrorMessageForLogger(error) {
|
|
360
|
+
if (error instanceof Error) {
|
|
361
|
+
return { name: error.name, message: error.message, stack: error.stack };
|
|
362
|
+
}
|
|
363
|
+
return { message: JSON.stringify(error) };
|
|
364
|
+
}
|
|
356
365
|
/**
|
|
357
366
|
* Start service. Subscribe for subject and up http server
|
|
358
367
|
*/
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BufferToJsonTransform = void 0;
|
|
4
|
+
const stream_1 = require("stream");
|
|
5
|
+
class BufferToJsonTransform extends stream_1.Transform {
|
|
6
|
+
constructor(options) {
|
|
7
|
+
super({ objectMode: true, highWaterMark: 10, ...options });
|
|
8
|
+
this.head = Buffer.from('');
|
|
9
|
+
this.logger = options.logger;
|
|
10
|
+
}
|
|
11
|
+
async _transform(tail, _, cb) {
|
|
12
|
+
try {
|
|
13
|
+
tail = Buffer.concat([this.head, Buffer.from(tail)]);
|
|
14
|
+
const jsonData = JSON.parse(tail.toString());
|
|
15
|
+
cb(null, jsonData);
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
if (error instanceof SyntaxError) {
|
|
19
|
+
this.head = Buffer.from(tail);
|
|
20
|
+
this.logger.error(BufferToJsonTransform.errors.CONVERSION_ERROR, tail.toString());
|
|
21
|
+
cb();
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
cb(error);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.BufferToJsonTransform = BufferToJsonTransform;
|
|
29
|
+
BufferToJsonTransform.errors = {
|
|
30
|
+
CONVERSION_ERROR: 'Не удалось преобразовать данные',
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=BufferToJsonTransform.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JsonToBufferTransform = void 0;
|
|
4
|
+
const stream_1 = require("stream");
|
|
5
|
+
class JsonToBufferTransform extends stream_1.Transform {
|
|
6
|
+
transform(chunk, encoding, cb) {
|
|
7
|
+
cb(null, Buffer.from(JSON.stringify(chunk)));
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.JsonToBufferTransform = JsonToBufferTransform;
|
|
11
|
+
//# sourceMappingURL=JsonToBufferTransform.js.map
|
|
@@ -0,0 +1,19 @@
|
|
|
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("./JsonToBufferTransform"), exports);
|
|
18
|
+
__exportStar(require("./BufferToJsonTransform"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
package/dist/index.js
CHANGED
|
@@ -20,4 +20,5 @@ __exportStar(require("./Method"), exports);
|
|
|
20
20
|
__exportStar(require("./injector"), exports);
|
|
21
21
|
__exportStar(require("./Container"), exports);
|
|
22
22
|
__exportStar(require("./interfaces"), exports);
|
|
23
|
+
__exportStar(require("./StreamOptions"), exports);
|
|
23
24
|
//# sourceMappingURL=index.js.map
|
package/dist/types/Root.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ export declare class Root {
|
|
|
17
17
|
*/
|
|
18
18
|
protected getContext(baggage?: Baggage): opentelemetry.Context | undefined;
|
|
19
19
|
protected getExpired(expired?: number, ownTimeout?: number): number;
|
|
20
|
-
protected buildErrorMessage(error: string | Error, code?: number): {
|
|
20
|
+
protected buildErrorMessage(error: string | Error | Record<any, any>, code?: number): {
|
|
21
21
|
payload: null;
|
|
22
22
|
error: {
|
|
23
23
|
message: string;
|
package/dist/types/Service.d.ts
CHANGED
|
@@ -69,6 +69,10 @@ export declare class Service<E extends Emitter = Emitter> extends Root {
|
|
|
69
69
|
* Run business logic for request
|
|
70
70
|
*/
|
|
71
71
|
private handled;
|
|
72
|
+
/**
|
|
73
|
+
* Make error object if error instance of Error object for logger
|
|
74
|
+
*/
|
|
75
|
+
private createErrorMessageForLogger;
|
|
72
76
|
/**
|
|
73
77
|
* Start service. Subscribe for subject and up http server
|
|
74
78
|
*/
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
import { Logs } from '@lad-tech/toolbelt';
|
|
4
|
+
import { Transform, TransformCallback, TransformOptions } from 'stream';
|
|
5
|
+
export declare class BufferToJsonTransform<T = any> extends Transform {
|
|
6
|
+
private head;
|
|
7
|
+
private static errors;
|
|
8
|
+
private logger;
|
|
9
|
+
constructor(options: TransformOptions & {
|
|
10
|
+
logger: Logs.Logger;
|
|
11
|
+
});
|
|
12
|
+
_transform(tail: Buffer, _: BufferEncoding, cb: TransformCallback): Promise<void>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
import { Transform, TransformCallback } from 'stream';
|
|
4
|
+
export declare class JsonToBufferTransform<T> extends Transform {
|
|
5
|
+
transform(chunk: T, encoding: BufferEncoding, cb: TransformCallback): void;
|
|
6
|
+
}
|
package/dist/types/index.d.ts
CHANGED