@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.
@@ -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;
@@ -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
  };
@@ -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("__bool:injectable__")) {
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bool-ts/core",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -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__";
@@ -2,7 +2,7 @@ import "reflect-metadata";
2
2
  import "colors";
3
3
 
4
4
  import * as Qs from "qs";
5
- import * as ResponseTime from "response-time";
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;
@@ -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("__bool:injectable__")) {
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
  }
@@ -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
- }
@@ -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
@@ -1,7 +0,0 @@
1
- import "reflect-metadata";
2
- import { BoolFactory } from "../src";
3
- import { TestModule } from "./module";
4
- const app = BoolFactory(TestModule);
5
- app.listen(3000, () => {
6
- console.log(`Listening on port ${3000}...`);
7
- });
@@ -1,6 +0,0 @@
1
- export interface IRepository {
2
- exec(): void;
3
- }
4
- export interface IService {
5
- exec(): void;
6
- }
File without changes
@@ -1,3 +0,0 @@
1
- export declare class TestModule {
2
- }
3
- export default TestModule;
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;
@@ -1,8 +0,0 @@
1
- import type { IRepository } from "./interfaces";
2
- export declare class TestRepository implements IRepository {
3
- /**
4
- *
5
- */
6
- exec(): void;
7
- }
8
- export default TestRepository;
@@ -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;
File without changes
package/__test/router.js DELETED
@@ -1 +0,0 @@
1
- "use strict";
@@ -1,9 +0,0 @@
1
- import type { IService, IRepository } from "./interfaces";
2
- export declare class TestService implements IService {
3
- private readonly testRepository;
4
- constructor(testRepository: IRepository);
5
- /**
6
- *
7
- */
8
- exec(): void;
9
- }
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 };