Skip to content

Commit 37f6efe

Browse files
committed
fix: possible duplicate injection, use common-errors and common-services lib. DRY :)
1 parent 8f1e0e0 commit 37f6efe

15 files changed

+86
-1331
lines changed

index.ts

-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,5 @@ export {
99
ErrorHandlerService,
1010
ErrorHandlerServiceInstance,
1111
} from "./src/services/ErrorHandlerService";
12-
export * from "./src/models/Errors";
1312
export { Config } from "./src/CommonResponse.config";
1413
export { ResponseSchemas } from "@lst97/common-response-structure";

package-lock.json

+24-6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@lst97/common_response",
3-
"version": "0.2.0-alpha.4",
3+
"version": "0.2.0-alpha.5",
44
"description": "This is a DEVELOPMENT package, not for production use. A common response structure for all the API's. Included basic error handling.",
55
"main": "lib/cjs/index.js",
66
"types": "lib/esm/index.d.ts",
@@ -9,7 +9,7 @@
99
"lib"
1010
],
1111
"scripts": {
12-
"build": "rm -rf lib/ && npx prettier --write src/ && npm run build:cjs && npm run build:esm && cp src/models/MessageCodes.json lib/cjs/src/models/MessageCodes.json && cp src/models/MessageCodes.json lib/esm/src/models/MessageCodes.json",
12+
"build": "rm -rf lib/ && npx prettier --write src/ && npm run build:cjs && npm run build:esm",
1313
"build:cjs": "tsc --module commonjs --outDir lib/cjs",
1414
"build:esm": "tsc --module esnext --outDir lib/esm",
1515
"test": "jest",
@@ -19,7 +19,9 @@
1919
"author": "lst97",
2020
"license": "ISC",
2121
"devDependencies": {
22-
"@lst97/common-response-structure": "0.2.0-alpha.6",
22+
"@lst97/common-response-structure": "0.2.0-alpha.7",
23+
"@lst97/common-services": "0.1.0-alpha.5",
24+
"@lst97/common-errors": "0.1.0-alpha.5",
2325
"@types/express": "^4.17.21",
2426
"@types/jest": "^29.5.12",
2527
"@types/uuid": "^9.0.8",

src/CommonResponse.config.ts

+29-3
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,33 @@
1+
import { DefinedBaseError } from "@lst97/common-errors";
12
import { Config as ResponseStructureConfig } from "@lst97/common-response-structure";
3+
import { Config as CommonErrorsConfig } from "@lst97/common-errors";
4+
import { Containers } from "./inversify.config";
25

6+
const SERVICE_NAME = "@lst97/common_response";
37
export class Config {
48
private static _instance: Config;
5-
private _idIdentifier: string = "unknown";
9+
private _idIdentifier: string = SERVICE_NAME;
610
private _requestIdName: string = "requestId";
711
private _traceIdName: string = "traceId";
12+
private _errorCallback: (error: DefinedBaseError) => void = (
13+
_error: DefinedBaseError,
14+
) => {};
815

916
private constructor() {}
1017

1118
public static get instance() {
1219
if (!Config._instance) {
1320
// Set for Schemas rules
14-
ResponseStructureConfig.instance.requestIdName = "requestId";
15-
ResponseStructureConfig.instance.traceIdName = "traceId";
21+
ResponseStructureConfig.instance.idIdentifier = SERVICE_NAME;
22+
CommonErrorsConfig.instance.idIdentifier = SERVICE_NAME;
1623
Config._instance = new Config();
1724
}
1825
return Config._instance;
1926
}
2027

2128
public set idIdentifier(value: string) {
2229
ResponseStructureConfig.instance.idIdentifier = value;
30+
CommonErrorsConfig.instance.idIdentifier = value;
2331
this._idIdentifier = value;
2432
}
2533

@@ -29,6 +37,8 @@ export class Config {
2937

3038
public set requestIdName(value: string) {
3139
ResponseStructureConfig.instance.requestIdName = value;
40+
41+
CommonErrorsConfig.instance.requestIdName = value;
3242
this._requestIdName = value;
3343
}
3444

@@ -38,10 +48,26 @@ export class Config {
3848

3949
public set traceIdName(value: string) {
4050
ResponseStructureConfig.instance.traceIdName = value;
51+
CommonErrorsConfig.instance.traceIdName = value;
4152
this._traceIdName = value;
4253
}
4354

4455
public get traceIdName() {
4556
return this._traceIdName;
4657
}
58+
59+
public set errorCallback(value: (error: DefinedBaseError) => void) {
60+
this._errorCallback = value;
61+
62+
if (Containers.instance.inversifyContainer.isBound("ErrorCallback")) {
63+
Containers.instance.inversifyContainer.unbind("ErrorCallback");
64+
}
65+
Containers.instance.inversifyContainer
66+
.bind<(error: DefinedBaseError) => void>("ErrorCallback")
67+
.toConstantValue(value);
68+
}
69+
70+
public get errorCallback() {
71+
return this._errorCallback;
72+
}
4773
}

src/inversify.config.ts

+17-63
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,12 @@ import {
44
IErrorHandlerService,
55
} from "./services/ErrorHandlerService";
66
import { IResponseService, ResponseService } from "./services/ResponseService";
7-
import { ILogService, LogService } from "./services/LogService";
87
import {
9-
IMessageCodeService,
10-
MessageCodeService,
11-
} from "./services/MessageCodeService";
12-
import { DefinedBaseError } from "./models/Errors";
13-
import pino, { Logger } from "pino";
14-
8+
DefinedBaseError,
9+
useInversify as useCommonErrorsInversify,
10+
} from "@lst97/common-errors";
11+
import { useInversify as useCommonServicesInversify } from "@lst97/common-services";
12+
import { Config } from "./CommonResponse.config";
1513
/**
1614
* For the user to get the singleton instance of the services,
1715
* Support to use the provided container to build the services.
@@ -21,21 +19,11 @@ import pino, { Logger } from "pino";
2119
*/
2220
export class Containers {
2321
private static _instance: Containers;
24-
private _idIdentifier: string;
2522
private container: Container;
2623

2724
private constructor() {
2825
this.container = new Container();
2926
this.buildContainers();
30-
this._idIdentifier = "unknown";
31-
}
32-
33-
public set idIdentifier(value: string) {
34-
this._idIdentifier = value;
35-
}
36-
37-
public get idIdentifier() {
38-
return this._idIdentifier;
3927
}
4028

4129
public static get instance() {
@@ -51,68 +39,34 @@ export class Containers {
5139

5240
private buildContainers() {
5341
this.buildConstantsContainer();
42+
this.buildLibContainers();
5443
this.buildServiceContainer();
5544
}
5645

46+
private buildLibContainers() {
47+
useCommonServicesInversify(this.container);
48+
useCommonErrorsInversify(this.container);
49+
}
50+
5751
// Arguments that required for the services
5852
private buildConstantsContainer() {
59-
// using pino for logging with pretty print by default
60-
const logger = pino({
61-
level: process.env.LOG_LEVEL || "info",
62-
formatters: {
63-
level: (label) => {
64-
return { level: label };
65-
},
66-
},
67-
transport: {
68-
target: "pino-pretty",
69-
options: {
70-
colorize: true,
71-
translateTime: "SYS:dd-mm-yyyy HH:MM:ss o",
72-
},
73-
},
74-
});
75-
this.container.bind<Logger<never>>("Logger").toConstantValue(logger);
76-
77-
// TODO: user can provide the values
78-
// path to the message codes json file
79-
this.container
80-
.bind<string>("MessageCodesJsonPath")
81-
.toConstantValue("src/models/MessageCodes.json");
82-
8353
// error callback for ErrorHandlerService
54+
if (this.container.isBound("ErrorCallback")) {
55+
this.container.unbind("ErrorCallback");
56+
}
8457
this.container
8558
.bind<(error: DefinedBaseError) => void>("ErrorCallback")
86-
.toConstantValue((_error: DefinedBaseError) => {});
59+
.toConstantValue(Config.instance.errorCallback);
8760
}
8861
private buildServiceContainer() {
89-
try {
90-
this.container.get<ILogService>(LogService);
91-
} catch (e) {
92-
this.container.bind<ILogService>(LogService).toSelf().inSingletonScope();
93-
}
94-
95-
try {
96-
this.container.get<IMessageCodeService>(MessageCodeService);
97-
} catch (e) {
98-
this.container
99-
.bind<IMessageCodeService>(MessageCodeService)
100-
.toSelf()
101-
.inSingletonScope();
102-
}
103-
104-
try {
105-
this.container.get<IErrorHandlerService>(ErrorHandlerService);
106-
} catch (e) {
62+
if (!this.container.isBound(ErrorHandlerService)) {
10763
this.container
10864
.bind<IErrorHandlerService>(ErrorHandlerService)
10965
.toSelf()
11066
.inSingletonScope();
11167
}
11268

113-
try {
114-
this.container.get<IResponseService>(ResponseService);
115-
} catch (e) {
69+
if (!this.container.isBound(ResponseService)) {
11670
this.container
11771
.bind<IResponseService>(ResponseService)
11872
.toSelf()

0 commit comments

Comments
 (0)