@bool-ts/core 1.0.0 → 1.0.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/dist/decorators/module.d.ts +2 -0
- package/dist/hooks/factory.js +26 -0
- package/dist/hooks/injector.js +2 -1
- package/package.json +1 -1
- package/src/decorators/module.ts +2 -0
- package/src/hooks/factory.ts +33 -1
- package/src/hooks/injector.ts +3 -1
- package/tsconfig.json +4 -1
- package/__test/controller.d.ts +0 -11
- package/__test/controller.js +0 -59
- package/__test/index.d.ts +0 -1
- package/__test/index.js +0 -7
- package/__test/interfaces.d.ts +0 -6
- package/__test/interfaces.js +0 -0
- package/__test/module.d.ts +0 -3
- package/__test/module.js +0 -24
- package/__test/repository.d.ts +0 -8
- package/__test/repository.js +0 -20
- package/__test/router.d.ts +0 -0
- package/__test/router.js +0 -1
- package/__test/service.d.ts +0 -9
- package/__test/service.js +0 -29
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export type TModuleOptions = Partial<{
|
|
2
2
|
controllers: Array<new (...args: any[]) => unknown>;
|
|
3
3
|
dependencies: Array<new (...args: any[]) => unknown>;
|
|
4
|
+
allowOrigins: string | Array<string>;
|
|
5
|
+
allowMethods: Array<"GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "OPTIONS">;
|
|
4
6
|
}> | undefined;
|
|
5
7
|
export declare const moduleKey = "__bool:module__";
|
|
6
8
|
export declare const Module: (args?: TModuleOptions) => <T extends new (...args: any[]) => {}>(target: T, context?: ClassDecoratorContext) => T;
|
package/dist/hooks/factory.js
CHANGED
|
@@ -113,6 +113,32 @@ export const BoolFactory = (target) => {
|
|
|
113
113
|
const convertedTime = `${Math.round((time + Number.EPSILON) * 10 ** 2) / 10 ** 2}ms`.yellow;
|
|
114
114
|
console.info(`PID: ${convertedPID} - Method: ${convertedMethod} - IP: ${convertedReqIp} - ${req.originalUrl.blue} - Time: ${convertedTime}`);
|
|
115
115
|
}));
|
|
116
|
+
const allowOrigins = !metadata?.allowOrigins ?
|
|
117
|
+
["*"] : typeof metadata.allowOrigins !== "string" ?
|
|
118
|
+
metadata.allowOrigins : [metadata.allowOrigins];
|
|
119
|
+
const allowMethods = !metadata?.allowMethods ?
|
|
120
|
+
["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"] : metadata.allowMethods;
|
|
121
|
+
app.use((req, res, next) => {
|
|
122
|
+
if (!req.headers.origin) {
|
|
123
|
+
return res.status(403).json({
|
|
124
|
+
["httpCode"]: 403,
|
|
125
|
+
["data"]: "CORS Origin - Not found."
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
if (!allowOrigins.includes("*")) {
|
|
129
|
+
if (!allowOrigins.includes(req.headers.origin)) {
|
|
130
|
+
return res.status(403).json({
|
|
131
|
+
["httpCode"]: 403,
|
|
132
|
+
["data"]: "Invalid origin."
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
res.header("Access-Control-Allow-Origin", req.headers.origin);
|
|
137
|
+
res.header("Access-Control-Allow-Headers", "*");
|
|
138
|
+
res.header("Access-Control-Allow-Credentials", "true");
|
|
139
|
+
res.header("Access-Control-Allow-Methods", allowMethods.join(", "));
|
|
140
|
+
next();
|
|
141
|
+
});
|
|
116
142
|
app.use(routers);
|
|
117
143
|
return app;
|
|
118
144
|
};
|
package/dist/hooks/injector.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import "reflect-metadata";
|
|
2
|
+
import { injectableKey } from "../decorators";
|
|
2
3
|
export const Injector = new class {
|
|
3
4
|
_mapper = new Map();
|
|
4
5
|
/**
|
|
@@ -9,7 +10,7 @@ export const Injector = new class {
|
|
|
9
10
|
if (this._mapper.has(target)) {
|
|
10
11
|
return this._mapper.get(target);
|
|
11
12
|
}
|
|
12
|
-
if (!Reflect.getOwnMetadataKeys(target).includes(
|
|
13
|
+
if (!Reflect.getOwnMetadataKeys(target).includes(injectableKey)) {
|
|
13
14
|
throw Error("Missing dependency declaration, please check @Injectable() used on dependency(ies).");
|
|
14
15
|
}
|
|
15
16
|
// Initialize dependencies injection
|
package/package.json
CHANGED
package/src/decorators/module.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export type TModuleOptions = Partial<{
|
|
2
2
|
controllers: Array<new (...args: any[]) => unknown>;
|
|
3
3
|
dependencies: Array<new (...args: any[]) => unknown>;
|
|
4
|
+
allowOrigins: string | Array<string>;
|
|
5
|
+
allowMethods: Array<"GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "OPTIONS">;
|
|
4
6
|
}> | undefined;
|
|
5
7
|
|
|
6
8
|
export const moduleKey = "__bool:module__";
|
package/src/hooks/factory.ts
CHANGED
|
@@ -2,7 +2,7 @@ import "reflect-metadata";
|
|
|
2
2
|
import "colors";
|
|
3
3
|
|
|
4
4
|
import * as Qs from "qs";
|
|
5
|
-
import * as
|
|
5
|
+
import * as ResponseTime from "response-time";
|
|
6
6
|
|
|
7
7
|
import { type IControllerRoute, type TModuleOptions, controllerKey, controllerRoutesKey, moduleKey } from "../decorators";
|
|
8
8
|
import { default as ExpressApp, Router, json, urlencoded, Request, Response, NextFunction, Errback } from "express";
|
|
@@ -143,6 +143,38 @@ export const BoolFactory = (
|
|
|
143
143
|
})
|
|
144
144
|
);
|
|
145
145
|
|
|
146
|
+
const allowOrigins = !metadata?.allowOrigins ?
|
|
147
|
+
["*"] : typeof metadata.allowOrigins !== "string" ?
|
|
148
|
+
metadata.allowOrigins : [metadata.allowOrigins];
|
|
149
|
+
|
|
150
|
+
const allowMethods = !metadata?.allowMethods ?
|
|
151
|
+
["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"] : metadata.allowMethods;
|
|
152
|
+
|
|
153
|
+
app.use((req: Request, res: Response, next: NextFunction) => {
|
|
154
|
+
if (!req.headers.origin) {
|
|
155
|
+
return res.status(403).json({
|
|
156
|
+
["httpCode"]: 403,
|
|
157
|
+
["data"]: "CORS Origin - Not found."
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
if (!allowOrigins.includes("*")) {
|
|
162
|
+
if (!allowOrigins.includes(req.headers.origin)) {
|
|
163
|
+
return res.status(403).json({
|
|
164
|
+
["httpCode"]: 403,
|
|
165
|
+
["data"]: "Invalid origin."
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
res.header("Access-Control-Allow-Origin", req.headers.origin);
|
|
171
|
+
res.header("Access-Control-Allow-Headers", "*");
|
|
172
|
+
res.header("Access-Control-Allow-Credentials", "true");
|
|
173
|
+
res.header("Access-Control-Allow-Methods", allowMethods.join(", "));
|
|
174
|
+
|
|
175
|
+
next();
|
|
176
|
+
});
|
|
177
|
+
|
|
146
178
|
app.use(routers);
|
|
147
179
|
|
|
148
180
|
return app;
|
package/src/hooks/injector.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import "reflect-metadata";
|
|
2
2
|
|
|
3
|
+
import { injectableKey } from "../decorators";
|
|
4
|
+
|
|
3
5
|
|
|
4
6
|
interface IInjector {
|
|
5
7
|
get<T>(target: new (...args: any[]) => T): T
|
|
@@ -20,7 +22,7 @@ export const Injector: IInjector = new class {
|
|
|
20
22
|
return this._mapper.get(target) as T;
|
|
21
23
|
}
|
|
22
24
|
|
|
23
|
-
if (!Reflect.getOwnMetadataKeys(target).includes(
|
|
25
|
+
if (!Reflect.getOwnMetadataKeys(target).includes(injectableKey)) {
|
|
24
26
|
throw Error("Missing dependency declaration, please check @Injectable() used on dependency(ies).");
|
|
25
27
|
}
|
|
26
28
|
|
package/tsconfig.json
CHANGED
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
// "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
|
|
76
76
|
"esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
|
|
77
77
|
// "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
|
|
78
|
-
"forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
|
|
78
|
+
// "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
|
|
79
79
|
/* Type Checking */
|
|
80
80
|
"strict": true, /* Enable all strict type-checking options. */
|
|
81
81
|
// "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
|
|
@@ -102,5 +102,8 @@
|
|
|
102
102
|
},
|
|
103
103
|
"include": [
|
|
104
104
|
"./src/**/*.ts"
|
|
105
|
+
],
|
|
106
|
+
"exclude": [
|
|
107
|
+
"./__test/**/*.ts"
|
|
105
108
|
]
|
|
106
109
|
}
|
package/__test/controller.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { IService } from "./interfaces";
|
|
2
|
-
export declare class TestController {
|
|
3
|
-
private readonly testService;
|
|
4
|
-
constructor(testService: IService);
|
|
5
|
-
private _get;
|
|
6
|
-
private _post;
|
|
7
|
-
private _put;
|
|
8
|
-
private _patch;
|
|
9
|
-
private _delete;
|
|
10
|
-
private _options;
|
|
11
|
-
}
|
package/__test/controller.js
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
8
|
-
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
|
-
};
|
|
10
|
-
import { Controller, Delete, Get, Inject, Options, Patch, Post, Put } from "../src";
|
|
11
|
-
import { TestService } from "./service";
|
|
12
|
-
let TestController = class TestController {
|
|
13
|
-
testService;
|
|
14
|
-
constructor(testService) {
|
|
15
|
-
this.testService = testService;
|
|
16
|
-
}
|
|
17
|
-
_get(req, res) {
|
|
18
|
-
res.json({ test: "success" }).send();
|
|
19
|
-
}
|
|
20
|
-
_post(req, res) {
|
|
21
|
-
console.log("req.body", req.body);
|
|
22
|
-
res.json({ test: "success" }).send();
|
|
23
|
-
}
|
|
24
|
-
_put(req, res) {
|
|
25
|
-
res.json({ test: "success" }).send();
|
|
26
|
-
}
|
|
27
|
-
_patch(req, res) {
|
|
28
|
-
res.json({ test: "success" }).send();
|
|
29
|
-
}
|
|
30
|
-
_delete(req, res) {
|
|
31
|
-
res.json({ test: "success" }).send();
|
|
32
|
-
}
|
|
33
|
-
_options(req, res) {
|
|
34
|
-
res.json({ test: "success" }).send();
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
__decorate([
|
|
38
|
-
Get()
|
|
39
|
-
], TestController.prototype, "_get", null);
|
|
40
|
-
__decorate([
|
|
41
|
-
Post()
|
|
42
|
-
], TestController.prototype, "_post", null);
|
|
43
|
-
__decorate([
|
|
44
|
-
Put()
|
|
45
|
-
], TestController.prototype, "_put", null);
|
|
46
|
-
__decorate([
|
|
47
|
-
Patch()
|
|
48
|
-
], TestController.prototype, "_patch", null);
|
|
49
|
-
__decorate([
|
|
50
|
-
Delete()
|
|
51
|
-
], TestController.prototype, "_delete", null);
|
|
52
|
-
__decorate([
|
|
53
|
-
Options()
|
|
54
|
-
], TestController.prototype, "_options", null);
|
|
55
|
-
TestController = __decorate([
|
|
56
|
-
Controller("test"),
|
|
57
|
-
__param(0, Inject(TestService))
|
|
58
|
-
], TestController);
|
|
59
|
-
export { TestController };
|
package/__test/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import "reflect-metadata";
|
package/__test/index.js
DELETED
package/__test/interfaces.d.ts
DELETED
package/__test/interfaces.js
DELETED
|
File without changes
|
package/__test/module.d.ts
DELETED
package/__test/module.js
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
import { Module } from "../src";
|
|
8
|
-
import { TestController } from "./controller";
|
|
9
|
-
import { TestService } from "./service";
|
|
10
|
-
let TestModule = class TestModule {
|
|
11
|
-
};
|
|
12
|
-
TestModule = __decorate([
|
|
13
|
-
Module({
|
|
14
|
-
controllers: [
|
|
15
|
-
TestController
|
|
16
|
-
],
|
|
17
|
-
dependencies: [
|
|
18
|
-
TestService,
|
|
19
|
-
// TestRepository
|
|
20
|
-
]
|
|
21
|
-
})
|
|
22
|
-
], TestModule);
|
|
23
|
-
export { TestModule };
|
|
24
|
-
export default TestModule;
|
package/__test/repository.d.ts
DELETED
package/__test/repository.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
import { Injectable } from "../src";
|
|
8
|
-
let TestRepository = class TestRepository {
|
|
9
|
-
/**
|
|
10
|
-
*
|
|
11
|
-
*/
|
|
12
|
-
exec() {
|
|
13
|
-
console.log("This is test repository.");
|
|
14
|
-
}
|
|
15
|
-
};
|
|
16
|
-
TestRepository = __decorate([
|
|
17
|
-
Injectable()
|
|
18
|
-
], TestRepository);
|
|
19
|
-
export { TestRepository };
|
|
20
|
-
export default TestRepository;
|
package/__test/router.d.ts
DELETED
|
File without changes
|
package/__test/router.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";
|
package/__test/service.d.ts
DELETED
package/__test/service.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
8
|
-
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
|
-
};
|
|
10
|
-
import { Inject, Injectable } from "../src";
|
|
11
|
-
import { TestRepository } from "./repository";
|
|
12
|
-
let TestService = class TestService {
|
|
13
|
-
testRepository;
|
|
14
|
-
constructor(testRepository) {
|
|
15
|
-
this.testRepository = testRepository;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
*
|
|
19
|
-
*/
|
|
20
|
-
exec() {
|
|
21
|
-
console.log("This is test service.", this.testRepository);
|
|
22
|
-
this.testRepository.exec();
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
TestService = __decorate([
|
|
26
|
-
Injectable(),
|
|
27
|
-
__param(0, Inject(TestRepository))
|
|
28
|
-
], TestService);
|
|
29
|
-
export { TestService };
|