@zerooneit/expressive-tea 1.2.2 → 1.2.4
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/.yarn/install-state.gz +0 -0
- package/.yarn/releases/yarn-4.1.1.cjs +893 -0
- package/classes/Boot.d.ts +2 -0
- package/classes/Boot.js +16 -3
- package/classes/MetaData.js +9 -9
- package/decorators/module.js +4 -4
- package/decorators/proxy.d.ts +13 -0
- package/decorators/proxy.js +70 -0
- package/decorators/router.js +12 -12
- package/decorators/server.d.ts +9 -0
- package/decorators/server.js +30 -3
- package/helpers/object-helper.d.ts +1 -0
- package/helpers/object-helper.js +6 -2
- package/helpers/server.js +6 -6
- package/libs/constants.d.ts +23 -0
- package/libs/constants.js +26 -1
- package/libs/interfaces.d.ts +13 -1
- package/libs/types.d.ts +2 -0
- package/package.json +26 -30
- package/reports/junit.xml +285 -0
- package/services/DependencyInjection.js +1 -1
- package/services/WebsocketService.d.ts +1 -0
- package/tslint-to-eslint-config.log +12 -0
package/classes/Boot.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Express } from 'express';
|
|
1
2
|
import Settings from '../classes/Settings';
|
|
2
3
|
import { ExpressiveTeaApplication } from '../libs/interfaces';
|
|
3
4
|
/**
|
|
@@ -44,4 +45,5 @@ declare abstract class Boot {
|
|
|
44
45
|
*/
|
|
45
46
|
start(): Promise<ExpressiveTeaApplication>;
|
|
46
47
|
}
|
|
48
|
+
export declare function resolveProxy(ProxyContainer: any, server: Express): Promise<void>;
|
|
47
49
|
export default Boot;
|
package/classes/Boot.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveProxy = void 0;
|
|
3
4
|
const $P = require("bluebird");
|
|
4
5
|
// tslint:disable-next-line:no-duplicate-imports
|
|
5
6
|
const express = require("express");
|
|
@@ -81,6 +82,7 @@ class Boot {
|
|
|
81
82
|
WebsocketService_1.default.getInstance().setHttpServer(server);
|
|
82
83
|
WebsocketService_1.default.getInstance().setHttpServer(secureServer);
|
|
83
84
|
}
|
|
85
|
+
await resolveProxyContainers(this);
|
|
84
86
|
await resolveDirectives(this, this.server);
|
|
85
87
|
await resolveStatic(this, this.server);
|
|
86
88
|
for (const stage of constants_1.BOOT_ORDER) {
|
|
@@ -125,13 +127,13 @@ async function resolveStage(stage, ctx, server, ...extraArgs) {
|
|
|
125
127
|
}
|
|
126
128
|
}
|
|
127
129
|
async function resolveDirectives(instance, server) {
|
|
128
|
-
const registeredDirectives = MetaData_1.default.get(constants_1.REGISTERED_DIRECTIVES_KEY, object_helper_1.getClass(instance)) || [];
|
|
130
|
+
const registeredDirectives = MetaData_1.default.get(constants_1.REGISTERED_DIRECTIVES_KEY, (0, object_helper_1.getClass)(instance)) || [];
|
|
129
131
|
registeredDirectives.forEach((options) => {
|
|
130
132
|
server.set.call(server, options.name, ...options.settings);
|
|
131
133
|
});
|
|
132
134
|
}
|
|
133
135
|
async function resolveStatic(instance, server) {
|
|
134
|
-
const registeredStatic = MetaData_1.default.get(constants_1.REGISTERED_STATIC_KEY, object_helper_1.getClass(instance)) || [];
|
|
136
|
+
const registeredStatic = MetaData_1.default.get(constants_1.REGISTERED_STATIC_KEY, (0, object_helper_1.getClass)(instance)) || [];
|
|
135
137
|
registeredStatic.forEach((staticOptions) => {
|
|
136
138
|
if (staticOptions.virtual) {
|
|
137
139
|
server.use(staticOptions.virtual, express.static(staticOptions.root, staticOptions.options));
|
|
@@ -149,7 +151,7 @@ async function resolveModules(instance, server) {
|
|
|
149
151
|
});
|
|
150
152
|
}
|
|
151
153
|
async function bootloaderResolve(STAGE, server, instance, ...args) {
|
|
152
|
-
const bootLoader = MetaData_1.default.get(constants_1.BOOT_STAGES_KEY, object_helper_1.getClass(instance)) || constants_1.STAGES_INIT;
|
|
154
|
+
const bootLoader = MetaData_1.default.get(constants_1.BOOT_STAGES_KEY, (0, object_helper_1.getClass)(instance)) || constants_1.STAGES_INIT;
|
|
153
155
|
for (const loader of bootLoader[STAGE] || []) {
|
|
154
156
|
try {
|
|
155
157
|
await selectLoaderType(loader, server, ...args);
|
|
@@ -159,6 +161,17 @@ async function bootloaderResolve(STAGE, server, instance, ...args) {
|
|
|
159
161
|
}
|
|
160
162
|
}
|
|
161
163
|
}
|
|
164
|
+
async function resolveProxyContainers(context) {
|
|
165
|
+
const ProxyContainers = MetaData_1.default.get(constants_1.ROUTER_PROXIES_KEY, (0, object_helper_1.getClass)(context)) || [];
|
|
166
|
+
for (const Container of ProxyContainers) {
|
|
167
|
+
resolveProxy(Container, context.server);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
async function resolveProxy(ProxyContainer, server) {
|
|
171
|
+
const proxyContainer = new ProxyContainer();
|
|
172
|
+
proxyContainer.__register(server);
|
|
173
|
+
}
|
|
174
|
+
exports.resolveProxy = resolveProxy;
|
|
162
175
|
async function selectLoaderType(loader, server, ...args) {
|
|
163
176
|
return loader.method(server, ...args);
|
|
164
177
|
}
|
package/classes/MetaData.js
CHANGED
|
@@ -5,15 +5,15 @@ require("reflect-metadata");
|
|
|
5
5
|
const object_helper_1 = require("../helpers/object-helper");
|
|
6
6
|
function get(key, target, propertyKey, own = false) {
|
|
7
7
|
return own ?
|
|
8
|
-
Reflect.getOwnMetadata(key, object_helper_1.getClass(target), propertyKey) :
|
|
9
|
-
Reflect.getMetadata(key, object_helper_1.getClass(target), propertyKey);
|
|
8
|
+
Reflect.getOwnMetadata(key, (0, object_helper_1.getClass)(target), propertyKey) :
|
|
9
|
+
Reflect.getMetadata(key, (0, object_helper_1.getClass)(target), propertyKey);
|
|
10
10
|
}
|
|
11
11
|
class Metadata {
|
|
12
12
|
static get(key, target, propertyKey) {
|
|
13
|
-
return get(key, object_helper_1.getClass(target), propertyKey);
|
|
13
|
+
return get(key, (0, object_helper_1.getClass)(target), propertyKey);
|
|
14
14
|
}
|
|
15
15
|
static getOwn(key, target, propertyKey) {
|
|
16
|
-
return get(key, object_helper_1.getClass(target), propertyKey, true);
|
|
16
|
+
return get(key, (0, object_helper_1.getClass)(target), propertyKey, true);
|
|
17
17
|
}
|
|
18
18
|
static getType(target, propertyKey) {
|
|
19
19
|
return Reflect.getMetadata(DESIGN_TYPE, target, propertyKey);
|
|
@@ -29,29 +29,29 @@ class Metadata {
|
|
|
29
29
|
}
|
|
30
30
|
static has(key, target, propertyKey) {
|
|
31
31
|
try {
|
|
32
|
-
return Reflect.hasMetadata(key, object_helper_1.getClass(target), propertyKey);
|
|
32
|
+
return Reflect.hasMetadata(key, (0, object_helper_1.getClass)(target), propertyKey);
|
|
33
33
|
}
|
|
34
34
|
catch (er) {
|
|
35
35
|
}
|
|
36
36
|
return false;
|
|
37
37
|
}
|
|
38
38
|
static hasOwn(key, target, propertyKey) {
|
|
39
|
-
return Reflect.hasOwnMetadata(key, object_helper_1.getClass(target), propertyKey);
|
|
39
|
+
return Reflect.hasOwnMetadata(key, (0, object_helper_1.getClass)(target), propertyKey);
|
|
40
40
|
}
|
|
41
41
|
static setParamTypes(target, propertyKey, value) {
|
|
42
42
|
return this.set(DESIGN_PARAM_TYPES, value, target.prototype, propertyKey);
|
|
43
43
|
}
|
|
44
44
|
static delete(key, target, propertyKey) {
|
|
45
|
-
return Reflect.deleteMetadata(key, object_helper_1.getClass(target), propertyKey);
|
|
45
|
+
return Reflect.deleteMetadata(key, (0, object_helper_1.getClass)(target), propertyKey);
|
|
46
46
|
}
|
|
47
47
|
static set(key, value, target, propertyKey) {
|
|
48
48
|
const targets = PROPERTIES.has(key) ? PROPERTIES.get(key) || [] : [];
|
|
49
|
-
const classConstructor = object_helper_1.getClass(target);
|
|
49
|
+
const classConstructor = (0, object_helper_1.getClass)(target);
|
|
50
50
|
if (targets.indexOf(classConstructor) === -1) {
|
|
51
51
|
targets.push(classConstructor);
|
|
52
52
|
PROPERTIES.set(key, targets);
|
|
53
53
|
}
|
|
54
|
-
Reflect.defineMetadata(key, value, object_helper_1.getClass(target), propertyKey);
|
|
54
|
+
Reflect.defineMetadata(key, value, (0, object_helper_1.getClass)(target), propertyKey);
|
|
55
55
|
}
|
|
56
56
|
static getParamTypes(targetPrototype, propertyKey) {
|
|
57
57
|
return get(DESIGN_PARAM_TYPES, targetPrototype, propertyKey) || [];
|
package/decorators/module.js
CHANGED
|
@@ -33,13 +33,13 @@ function Module(options) {
|
|
|
33
33
|
return class extends Module {
|
|
34
34
|
constructor(...args) {
|
|
35
35
|
super(...args);
|
|
36
|
-
this.router = express_1.Router();
|
|
36
|
+
this.router = (0, express_1.Router)();
|
|
37
37
|
this.settings = options;
|
|
38
|
-
lodash_1.each(this.settings.providers, P => DependencyInjection_1.default.setProvider(P));
|
|
39
|
-
this.controllers = lodash_1.map(this.settings.controllers, C => new C());
|
|
38
|
+
(0, lodash_1.each)(this.settings.providers, P => DependencyInjection_1.default.setProvider(P));
|
|
39
|
+
this.controllers = (0, lodash_1.map)(this.settings.controllers, C => new C());
|
|
40
40
|
}
|
|
41
41
|
__register(server) {
|
|
42
|
-
lodash_1.each(this.controllers, c => c.__mount(this.router));
|
|
42
|
+
(0, lodash_1.each)(this.controllers, c => c.__mount(this.router));
|
|
43
43
|
server.use(this.settings.mountpoint, this.router);
|
|
44
44
|
}
|
|
45
45
|
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ExpressiveTeaProxyOptions, ExpressiveTeaProxyProperty, MethodDecorator } from '../libs/types';
|
|
2
|
+
import { Express, RequestHandler } from 'express';
|
|
3
|
+
export declare function ProxyContainer(source: string, targetUrl: string): <T extends new (...args: any[]) => any>(ProxyContainerClass: T) => {
|
|
4
|
+
new (...args: any[]): {
|
|
5
|
+
[x: string]: any;
|
|
6
|
+
readonly source: string;
|
|
7
|
+
readonly target: string;
|
|
8
|
+
readonly proxyHandler: RequestHandler;
|
|
9
|
+
__register(server: Express): void;
|
|
10
|
+
};
|
|
11
|
+
} & T;
|
|
12
|
+
export declare function ProxyOption(option: ExpressiveTeaProxyOptions): MethodDecorator;
|
|
13
|
+
export declare function ProxyProperty(option: ExpressiveTeaProxyProperty, value: any): PropertyDecorator;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ProxyProperty = exports.ProxyOption = exports.ProxyContainer = void 0;
|
|
4
|
+
const MetaData_1 = require("../classes/MetaData");
|
|
5
|
+
const httpProxy = require("express-http-proxy");
|
|
6
|
+
const object_helper_1 = require("../helpers/object-helper");
|
|
7
|
+
const lodash_1 = require("lodash");
|
|
8
|
+
const RequestExceptions_1 = require("../exceptions/RequestExceptions");
|
|
9
|
+
const constants_1 = require("../libs/constants");
|
|
10
|
+
const NON_ASYNC_METHODS = ['host'];
|
|
11
|
+
function ProxyContainer(source, targetUrl) {
|
|
12
|
+
return (ProxyContainerClass) => {
|
|
13
|
+
class ExpressiveTeaProxy extends ProxyContainerClass {
|
|
14
|
+
constructor(...args) {
|
|
15
|
+
super(...args);
|
|
16
|
+
this.source = source;
|
|
17
|
+
this.target = targetUrl;
|
|
18
|
+
const options = {};
|
|
19
|
+
const host = MetaData_1.default.get(constants_1.PROXY_SETTING_KEY, this, constants_1.PROXY_METHODS.HOST);
|
|
20
|
+
for (const value of Object.values(constants_1.PROXY_METHODS)) {
|
|
21
|
+
if (value !== constants_1.PROXY_METHODS.HOST) {
|
|
22
|
+
options[value] = MetaData_1.default.get(constants_1.PROXY_SETTING_KEY, this, value);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
for (const value of Object.values(constants_1.PROXY_PROPERTIES)) {
|
|
26
|
+
const key = MetaData_1.default.get(constants_1.PROXY_SETTING_KEY, this, value);
|
|
27
|
+
if (!(0, lodash_1.isUndefined)(key)) {
|
|
28
|
+
// @ts-ignore:next-line
|
|
29
|
+
options[value] = this[key];
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
this.proxyHandler = httpProxy(host ? host.value.bind(this) : this.target);
|
|
33
|
+
}
|
|
34
|
+
__register(server) {
|
|
35
|
+
const proxyMetadata = MetaData_1.default.get(constants_1.PROXY_SETTING_KEY, (0, object_helper_1.getClass)(this));
|
|
36
|
+
console.info(`[PROXY - ${proxyMetadata.name}] ${this.source} -> ${this.target}`);
|
|
37
|
+
server.use(this.source, this.proxyHandler);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
;
|
|
41
|
+
const settings = {
|
|
42
|
+
source,
|
|
43
|
+
targetUrl,
|
|
44
|
+
name: ProxyContainerClass.name
|
|
45
|
+
};
|
|
46
|
+
MetaData_1.default.set(constants_1.PROXY_SETTING_KEY, settings, ProxyContainerClass);
|
|
47
|
+
return ExpressiveTeaProxy;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
exports.ProxyContainer = ProxyContainer;
|
|
51
|
+
function ProxyOption(option) {
|
|
52
|
+
return (target, propertyKey, descriptor) => {
|
|
53
|
+
if (NON_ASYNC_METHODS.includes(option) && (0, object_helper_1.isAsyncFunction)(descriptor.value)) {
|
|
54
|
+
throw new RequestExceptions_1.GenericRequestException(`${String(propertyKey)} must not be declared as Async Function.`);
|
|
55
|
+
}
|
|
56
|
+
MetaData_1.default.set(constants_1.PROXY_SETTING_KEY, descriptor, target, option);
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
exports.ProxyOption = ProxyOption;
|
|
60
|
+
function ProxyProperty(option, value) {
|
|
61
|
+
return (target, propertyKey) => {
|
|
62
|
+
MetaData_1.default.set(constants_1.PROXY_SETTING_KEY, propertyKey, target, option);
|
|
63
|
+
let currentValue = target[propertyKey];
|
|
64
|
+
Object.defineProperty(target, propertyKey, {
|
|
65
|
+
get: () => value,
|
|
66
|
+
set: () => { currentValue = value; }
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
exports.ProxyProperty = ProxyProperty;
|
package/decorators/router.js
CHANGED
|
@@ -30,9 +30,9 @@ function Route(mountpoint = '/') {
|
|
|
30
30
|
constructor(...args) {
|
|
31
31
|
super(...args);
|
|
32
32
|
const handlers = MetaData_1.default.get(constants_1.ROUTER_HANDLERS_KEY, this) || [];
|
|
33
|
-
this.router = express_1.Router();
|
|
33
|
+
this.router = (0, express_1.Router)();
|
|
34
34
|
this.mountpoint = mountpoint;
|
|
35
|
-
lodash_1.each(handlers, h => {
|
|
35
|
+
(0, lodash_1.each)(handlers, h => {
|
|
36
36
|
const middlewares = h.handler.$middlewares || [];
|
|
37
37
|
this.router[h.verb](h.route, ...middlewares, this.__registerHandler(h));
|
|
38
38
|
});
|
|
@@ -54,9 +54,9 @@ function Route(mountpoint = '/') {
|
|
|
54
54
|
isNextUsed = true;
|
|
55
55
|
};
|
|
56
56
|
// TODO: Must be Depecrated in prior version.
|
|
57
|
-
const result = await options.handler.apply(self, server_1.mapArguments(decoratedArguments, request, response, nextWrapper()));
|
|
57
|
+
const result = await options.handler.apply(self, (0, server_1.mapArguments)(decoratedArguments, request, response, nextWrapper()));
|
|
58
58
|
if (!response.headersSent && !isNextUsed) {
|
|
59
|
-
server_1.autoResponse(request, response, annotations, result);
|
|
59
|
+
(0, server_1.autoResponse)(request, response, annotations, result);
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
catch (e) {
|
|
@@ -89,7 +89,7 @@ exports.Route = Route;
|
|
|
89
89
|
*
|
|
90
90
|
*/
|
|
91
91
|
function Get(route = '*') {
|
|
92
|
-
return server_1.generateRoute(route, 'get');
|
|
92
|
+
return (0, server_1.generateRoute)(route, 'get');
|
|
93
93
|
}
|
|
94
94
|
exports.Get = Get;
|
|
95
95
|
/**
|
|
@@ -110,7 +110,7 @@ exports.Get = Get;
|
|
|
110
110
|
*
|
|
111
111
|
*/
|
|
112
112
|
function Post(route = '*') {
|
|
113
|
-
return server_1.generateRoute(route, 'post');
|
|
113
|
+
return (0, server_1.generateRoute)(route, 'post');
|
|
114
114
|
}
|
|
115
115
|
exports.Post = Post;
|
|
116
116
|
/**
|
|
@@ -131,7 +131,7 @@ exports.Post = Post;
|
|
|
131
131
|
*
|
|
132
132
|
*/
|
|
133
133
|
function Put(route = '*') {
|
|
134
|
-
return server_1.generateRoute(route, 'put');
|
|
134
|
+
return (0, server_1.generateRoute)(route, 'put');
|
|
135
135
|
}
|
|
136
136
|
exports.Put = Put;
|
|
137
137
|
/**
|
|
@@ -152,7 +152,7 @@ exports.Put = Put;
|
|
|
152
152
|
*
|
|
153
153
|
*/
|
|
154
154
|
function Patch(route = '*') {
|
|
155
|
-
return server_1.generateRoute(route, 'patch');
|
|
155
|
+
return (0, server_1.generateRoute)(route, 'patch');
|
|
156
156
|
}
|
|
157
157
|
exports.Patch = Patch;
|
|
158
158
|
/**
|
|
@@ -173,7 +173,7 @@ exports.Patch = Patch;
|
|
|
173
173
|
*
|
|
174
174
|
*/
|
|
175
175
|
function Delete(route = '*') {
|
|
176
|
-
return server_1.generateRoute(route, 'delete');
|
|
176
|
+
return (0, server_1.generateRoute)(route, 'delete');
|
|
177
177
|
}
|
|
178
178
|
exports.Delete = Delete;
|
|
179
179
|
/**
|
|
@@ -210,7 +210,7 @@ exports.Delete = Delete;
|
|
|
210
210
|
*
|
|
211
211
|
*/
|
|
212
212
|
function Param(route = '*') {
|
|
213
|
-
return server_1.generateRoute(route, 'param');
|
|
213
|
+
return (0, server_1.generateRoute)(route, 'param');
|
|
214
214
|
}
|
|
215
215
|
exports.Param = Param;
|
|
216
216
|
/**
|
|
@@ -271,8 +271,8 @@ exports.Middleware = Middleware;
|
|
|
271
271
|
function View(viewName, route) {
|
|
272
272
|
route = route || `/${viewName}`;
|
|
273
273
|
return (target, propertyKey, descriptor) => {
|
|
274
|
-
decorators_1.addAnnotation('view', target, propertyKey, viewName);
|
|
275
|
-
server_1.router('get', route, target, descriptor.value, propertyKey);
|
|
274
|
+
(0, decorators_1.addAnnotation)('view', target, propertyKey, viewName);
|
|
275
|
+
(0, server_1.router)('get', route, target, descriptor.value, propertyKey);
|
|
276
276
|
};
|
|
277
277
|
}
|
|
278
278
|
exports.View = View;
|
package/decorators/server.d.ts
CHANGED
|
@@ -79,3 +79,12 @@ export declare function Setting(settingName: string): (target: any, propertyName
|
|
|
79
79
|
* @param {Class} Module
|
|
80
80
|
*/
|
|
81
81
|
export declare function RegisterModule(Module: any): (target: any, property: any) => void;
|
|
82
|
+
export declare function Proxies(proxyContainers: any[]): (target: any) => void;
|
|
83
|
+
/**
|
|
84
|
+
* Register Modules Method Decorator this Method Decorator is used at bootstrap level and should decorate bootstrap class
|
|
85
|
+
* and register modules.
|
|
86
|
+
* @decorator {MethodDecorator} RegisterModule - Register a Expressive Tea module to application.
|
|
87
|
+
* @summary This register the Module Classes created by the user.
|
|
88
|
+
* @param Modules
|
|
89
|
+
*/
|
|
90
|
+
export declare function Modules(Modules: any[]): (target: any) => void;
|
package/decorators/server.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RegisterModule = exports.Setting = exports.ExpressDirecive = exports.Static = exports.ServerSettings = exports.Pour = exports.Plug = void 0;
|
|
3
|
+
exports.Modules = exports.Proxies = exports.RegisterModule = exports.Setting = exports.ExpressDirecive = exports.Static = exports.ServerSettings = exports.Pour = exports.Plug = void 0;
|
|
4
4
|
const lodash_1 = require("lodash");
|
|
5
5
|
const MetaData_1 = require("../classes/MetaData");
|
|
6
6
|
const Settings_1 = require("../classes/Settings");
|
|
@@ -109,7 +109,7 @@ function Pour(Plugin, ...pluginArgs) {
|
|
|
109
109
|
constants_1.BOOT_STAGES_LIST.forEach(STAGE => {
|
|
110
110
|
setStage(STAGE, (stages[STAGE] || []).concat(instance.getRegisteredStage(STAGE)), target);
|
|
111
111
|
});
|
|
112
|
-
setPlugins(lodash_1.orderBy(plugins, ['priority'], ['asc']), target);
|
|
112
|
+
setPlugins((0, lodash_1.orderBy)(plugins, ['priority'], ['asc']), target);
|
|
113
113
|
};
|
|
114
114
|
}
|
|
115
115
|
exports.Pour = Pour;
|
|
@@ -144,7 +144,7 @@ exports.ServerSettings = ServerSettings;
|
|
|
144
144
|
*/
|
|
145
145
|
function Static(root, virtual = null, options = {}) {
|
|
146
146
|
return target => {
|
|
147
|
-
if (lodash_1.isNil(root)) {
|
|
147
|
+
if ((0, lodash_1.isNil)(root)) {
|
|
148
148
|
throw new Error('Root must be defined');
|
|
149
149
|
}
|
|
150
150
|
const registeredStatics = MetaData_1.default.get(constants_1.REGISTERED_STATIC_KEY, target) || [];
|
|
@@ -207,3 +207,30 @@ function RegisterModule(Module) {
|
|
|
207
207
|
};
|
|
208
208
|
}
|
|
209
209
|
exports.RegisterModule = RegisterModule;
|
|
210
|
+
function Proxies(proxyContainers) {
|
|
211
|
+
return target => {
|
|
212
|
+
for (const proxyContainer of proxyContainers) {
|
|
213
|
+
const registeredProxyContainers = MetaData_1.default.get(constants_1.ROUTER_PROXIES_KEY, target) || [];
|
|
214
|
+
registeredProxyContainers.unshift(proxyContainer);
|
|
215
|
+
MetaData_1.default.set(constants_1.ROUTER_PROXIES_KEY, registeredProxyContainers, target);
|
|
216
|
+
}
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
exports.Proxies = Proxies;
|
|
220
|
+
/**
|
|
221
|
+
* Register Modules Method Decorator this Method Decorator is used at bootstrap level and should decorate bootstrap class
|
|
222
|
+
* and register modules.
|
|
223
|
+
* @decorator {MethodDecorator} RegisterModule - Register a Expressive Tea module to application.
|
|
224
|
+
* @summary This register the Module Classes created by the user.
|
|
225
|
+
* @param Modules
|
|
226
|
+
*/
|
|
227
|
+
function Modules(Modules) {
|
|
228
|
+
return target => {
|
|
229
|
+
for (const Module of Modules) {
|
|
230
|
+
const registeredModules = MetaData_1.default.get(constants_1.REGISTERED_MODULE_KEY, target, 'start') || [];
|
|
231
|
+
registeredModules.unshift(Module);
|
|
232
|
+
MetaData_1.default.set(constants_1.REGISTERED_MODULE_KEY, registeredModules, target, 'start');
|
|
233
|
+
}
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
exports.Modules = Modules;
|
package/helpers/object-helper.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.prototypeOf = exports.descriptorOf = exports.nameOfSymbol = exports.nameOfClass = exports.nameOf = exports.ancestorsOf = exports.getInheritedClass = exports.isPromise = exports.isEmpty = exports.isClass = exports.isObject = exports.isDate = exports.isCollection = exports.isArrayOrArrayClass = exports.isArray = exports.isBoolean = exports.isNumber = exports.isString = exports.primitiveOf = exports.isPrimitiveOrPrimitiveClass = exports.getClassOrSymbol = exports.classOf = exports.getClass = exports.getConstructor = void 0;
|
|
3
|
+
exports.isAsyncFunction = exports.prototypeOf = exports.descriptorOf = exports.nameOfSymbol = exports.nameOfClass = exports.nameOf = exports.ancestorsOf = exports.getInheritedClass = exports.isPromise = exports.isEmpty = exports.isClass = exports.isObject = exports.isDate = exports.isCollection = exports.isArrayOrArrayClass = exports.isArray = exports.isBoolean = exports.isNumber = exports.isString = exports.primitiveOf = exports.isPrimitiveOrPrimitiveClass = exports.getClassOrSymbol = exports.classOf = exports.getClass = exports.getConstructor = void 0;
|
|
4
4
|
/* istanbul ignore file */
|
|
5
5
|
/**
|
|
6
6
|
* Get the provide constructor.
|
|
@@ -232,7 +232,7 @@ function nameOf(obj) {
|
|
|
232
232
|
default:
|
|
233
233
|
return '' + obj;
|
|
234
234
|
case 'symbol':
|
|
235
|
-
return exports.nameOfSymbol(obj);
|
|
235
|
+
return (0, exports.nameOfSymbol)(obj);
|
|
236
236
|
case 'function':
|
|
237
237
|
return nameOfClass(obj);
|
|
238
238
|
}
|
|
@@ -278,3 +278,7 @@ function prototypeOf(target) {
|
|
|
278
278
|
return classOf(target) === target ? target.prototype : target;
|
|
279
279
|
}
|
|
280
280
|
exports.prototypeOf = prototypeOf;
|
|
281
|
+
function isAsyncFunction(fn) {
|
|
282
|
+
return fn.constructor.name === 'AsyncFunction' || fn.constructor.name.includes('__awaiter');
|
|
283
|
+
}
|
|
284
|
+
exports.isAsyncFunction = isAsyncFunction;
|
package/helpers/server.js
CHANGED
|
@@ -5,15 +5,15 @@ const lodash_1 = require("lodash");
|
|
|
5
5
|
const MetaData_1 = require("../classes/MetaData");
|
|
6
6
|
const constants_1 = require("../libs/constants");
|
|
7
7
|
function autoResponse(request, response, annotations, responseResult) {
|
|
8
|
-
const view = lodash_1.find(annotations, { type: 'view' });
|
|
8
|
+
const view = (0, lodash_1.find)(annotations, { type: 'view' });
|
|
9
9
|
if (view) {
|
|
10
10
|
return response.render(view.arguments[0], responseResult);
|
|
11
11
|
}
|
|
12
|
-
response.send(lodash_1.isNumber(responseResult) ? responseResult.toString() : responseResult);
|
|
12
|
+
response.send((0, lodash_1.isNumber)(responseResult) ? responseResult.toString() : responseResult);
|
|
13
13
|
}
|
|
14
14
|
exports.autoResponse = autoResponse;
|
|
15
15
|
function mapArguments(decoratedArguments, request, response, next) {
|
|
16
|
-
return lodash_1.chain(decoratedArguments)
|
|
16
|
+
return (0, lodash_1.chain)(decoratedArguments)
|
|
17
17
|
.sortBy('index')
|
|
18
18
|
.map((argument) => {
|
|
19
19
|
switch (argument.type) {
|
|
@@ -33,7 +33,7 @@ function mapArguments(decoratedArguments, request, response, next) {
|
|
|
33
33
|
return;
|
|
34
34
|
}
|
|
35
35
|
})
|
|
36
|
-
.thru((args) => lodash_1.size(args) ? args : [request, response, next])
|
|
36
|
+
.thru((args) => (0, lodash_1.size)(args) ? args : [request, response, next])
|
|
37
37
|
.value();
|
|
38
38
|
}
|
|
39
39
|
exports.mapArguments = mapArguments;
|
|
@@ -45,9 +45,9 @@ function extractParameters(target, args) {
|
|
|
45
45
|
return target;
|
|
46
46
|
}
|
|
47
47
|
if (Array.isArray(args)) {
|
|
48
|
-
return lodash_1.pick(target, args);
|
|
48
|
+
return (0, lodash_1.pick)(target, args);
|
|
49
49
|
}
|
|
50
|
-
return lodash_1.get(target, args);
|
|
50
|
+
return (0, lodash_1.get)(target, args);
|
|
51
51
|
}
|
|
52
52
|
exports.extractParameters = extractParameters;
|
|
53
53
|
function generateRoute(route, verb) {
|
package/libs/constants.d.ts
CHANGED
|
@@ -57,6 +57,8 @@ export declare const REGISTERED_STATIC_KEY = "app:statics";
|
|
|
57
57
|
export declare const REGISTERED_DIRECTIVES_KEY = "app:directives";
|
|
58
58
|
export declare const ARGUMENTS_KEY = "app:routes:arguments";
|
|
59
59
|
export declare const ROUTER_ANNOTATIONS_KEY = "app:routes:annotations";
|
|
60
|
+
export declare const ROUTER_PROXIES_KEY = "app:routes:proxies";
|
|
61
|
+
export declare const PROXY_SETTING_KEY = "app:proxy:settings";
|
|
60
62
|
export declare const ARGUMENT_TYPES: {
|
|
61
63
|
BODY: symbol;
|
|
62
64
|
GET_PARAM: symbol;
|
|
@@ -65,3 +67,24 @@ export declare const ARGUMENT_TYPES: {
|
|
|
65
67
|
REQUEST: symbol;
|
|
66
68
|
RESPONSE: symbol;
|
|
67
69
|
};
|
|
70
|
+
export declare enum PROXY_METHODS {
|
|
71
|
+
HOST = "host",
|
|
72
|
+
PROXY_REQ_PATH_RESOLVER = "proxyReqPathResolver",
|
|
73
|
+
FILTER = "filter",
|
|
74
|
+
USER_RES_DECORATOR = "userResDecorator",
|
|
75
|
+
USER_RES_HEADER_DECORATOR = "userResHeaderDecorator",
|
|
76
|
+
SKIP_TO_NEXT_HANDLER_FILTER = "skipToNextHandlerFilter",
|
|
77
|
+
PROXY_ERROR_HANDLER = "proxyErrorHandler",
|
|
78
|
+
PROXY_REQ_OPT_DECORATOR = "proxyReqOptDecorator",
|
|
79
|
+
PROXY_REQ_BODY_DECORATOR = "proxyReqBodyDecorator"
|
|
80
|
+
}
|
|
81
|
+
export declare enum PROXY_PROPERTIES {
|
|
82
|
+
LIMIT = "limit",
|
|
83
|
+
MEMOIZE_HOST = "memoizeHost",
|
|
84
|
+
HTTPS = "https",
|
|
85
|
+
PRESERVE_HOST_HDR = "preserveHostHdr",
|
|
86
|
+
PARSE_REQ_BODY = "parseReqBody",
|
|
87
|
+
REQ_AS_BUFFER = "reqAsBuffer",
|
|
88
|
+
REQ_BODY_ENCODING = "reqBodyEncoding",
|
|
89
|
+
TIMEOUT = "timeout"
|
|
90
|
+
}
|
package/libs/constants.js
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* @summary Available Boot Stages
|
|
22
22
|
*/
|
|
23
23
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
-
exports.ARGUMENT_TYPES = exports.ROUTER_ANNOTATIONS_KEY = exports.ARGUMENTS_KEY = exports.REGISTERED_DIRECTIVES_KEY = exports.REGISTERED_STATIC_KEY = exports.PLUGINS_KEY = exports.REGISTERED_MODULE_KEY = exports.REGISTERED_MODEL_KEY = exports.ROUTER_MIDDLEWARES_KEY = exports.ROUTER_HANDLERS_KEY = exports.BOOT_STAGES_KEY = exports.EXPRESS_DIRECTIVES = exports.STAGES_INIT = exports.BOOT_STAGES_LIST = exports.BOOT_ORDER = exports.BOOT_STAGES = void 0;
|
|
24
|
+
exports.PROXY_PROPERTIES = exports.PROXY_METHODS = exports.ARGUMENT_TYPES = exports.PROXY_SETTING_KEY = exports.ROUTER_PROXIES_KEY = exports.ROUTER_ANNOTATIONS_KEY = exports.ARGUMENTS_KEY = exports.REGISTERED_DIRECTIVES_KEY = exports.REGISTERED_STATIC_KEY = exports.PLUGINS_KEY = exports.REGISTERED_MODULE_KEY = exports.REGISTERED_MODEL_KEY = exports.ROUTER_MIDDLEWARES_KEY = exports.ROUTER_HANDLERS_KEY = exports.BOOT_STAGES_KEY = exports.EXPRESS_DIRECTIVES = exports.STAGES_INIT = exports.BOOT_STAGES_LIST = exports.BOOT_ORDER = exports.BOOT_STAGES = void 0;
|
|
25
25
|
// tslint:enable:max-line-length
|
|
26
26
|
var BOOT_STAGES;
|
|
27
27
|
(function (BOOT_STAGES) {
|
|
@@ -91,6 +91,8 @@ exports.REGISTERED_STATIC_KEY = 'app:statics';
|
|
|
91
91
|
exports.REGISTERED_DIRECTIVES_KEY = 'app:directives';
|
|
92
92
|
exports.ARGUMENTS_KEY = 'app:routes:arguments';
|
|
93
93
|
exports.ROUTER_ANNOTATIONS_KEY = 'app:routes:annotations';
|
|
94
|
+
exports.ROUTER_PROXIES_KEY = 'app:routes:proxies';
|
|
95
|
+
exports.PROXY_SETTING_KEY = 'app:proxy:settings';
|
|
94
96
|
exports.ARGUMENT_TYPES = {
|
|
95
97
|
BODY: Symbol('BODY'),
|
|
96
98
|
GET_PARAM: Symbol('GET_PARAM'),
|
|
@@ -99,3 +101,26 @@ exports.ARGUMENT_TYPES = {
|
|
|
99
101
|
REQUEST: Symbol('REQUEST'),
|
|
100
102
|
RESPONSE: Symbol('RESPONSE')
|
|
101
103
|
};
|
|
104
|
+
var PROXY_METHODS;
|
|
105
|
+
(function (PROXY_METHODS) {
|
|
106
|
+
PROXY_METHODS["HOST"] = "host";
|
|
107
|
+
PROXY_METHODS["PROXY_REQ_PATH_RESOLVER"] = "proxyReqPathResolver";
|
|
108
|
+
PROXY_METHODS["FILTER"] = "filter";
|
|
109
|
+
PROXY_METHODS["USER_RES_DECORATOR"] = "userResDecorator";
|
|
110
|
+
PROXY_METHODS["USER_RES_HEADER_DECORATOR"] = "userResHeaderDecorator";
|
|
111
|
+
PROXY_METHODS["SKIP_TO_NEXT_HANDLER_FILTER"] = "skipToNextHandlerFilter";
|
|
112
|
+
PROXY_METHODS["PROXY_ERROR_HANDLER"] = "proxyErrorHandler";
|
|
113
|
+
PROXY_METHODS["PROXY_REQ_OPT_DECORATOR"] = "proxyReqOptDecorator";
|
|
114
|
+
PROXY_METHODS["PROXY_REQ_BODY_DECORATOR"] = "proxyReqBodyDecorator";
|
|
115
|
+
})(PROXY_METHODS = exports.PROXY_METHODS || (exports.PROXY_METHODS = {}));
|
|
116
|
+
var PROXY_PROPERTIES;
|
|
117
|
+
(function (PROXY_PROPERTIES) {
|
|
118
|
+
PROXY_PROPERTIES["LIMIT"] = "limit";
|
|
119
|
+
PROXY_PROPERTIES["MEMOIZE_HOST"] = "memoizeHost";
|
|
120
|
+
PROXY_PROPERTIES["HTTPS"] = "https";
|
|
121
|
+
PROXY_PROPERTIES["PRESERVE_HOST_HDR"] = "preserveHostHdr";
|
|
122
|
+
PROXY_PROPERTIES["PARSE_REQ_BODY"] = "parseReqBody";
|
|
123
|
+
PROXY_PROPERTIES["REQ_AS_BUFFER"] = "reqAsBuffer";
|
|
124
|
+
PROXY_PROPERTIES["REQ_BODY_ENCODING"] = "reqBodyEncoding";
|
|
125
|
+
PROXY_PROPERTIES["TIMEOUT"] = "timeout";
|
|
126
|
+
})(PROXY_PROPERTIES = exports.PROXY_PROPERTIES || (exports.PROXY_PROPERTIES = {}));
|
package/libs/interfaces.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
import { Express, Router, RequestHandler } from 'express';
|
|
3
4
|
import * as http from 'http';
|
|
4
5
|
import * as https from 'https';
|
|
5
6
|
import { ExpressiveTeaMiddleware, ExpressMiddlewareHandler } from './types';
|
|
@@ -114,3 +115,14 @@ export interface ExpressiveTeaAnnotations {
|
|
|
114
115
|
export interface ExpressiveTeaMiddlewareExtends {
|
|
115
116
|
$middlewares?: ExpressMiddlewareHandler[];
|
|
116
117
|
}
|
|
118
|
+
export interface IExpressiveTeaProxySettings {
|
|
119
|
+
name: string;
|
|
120
|
+
source: string;
|
|
121
|
+
targetUrl: string;
|
|
122
|
+
}
|
|
123
|
+
export interface IExpressiveTeaProxy {
|
|
124
|
+
readonly source: string;
|
|
125
|
+
readonly target: string;
|
|
126
|
+
readonly proxyHandler: RequestHandler;
|
|
127
|
+
__register(server: Express): void;
|
|
128
|
+
}
|
package/libs/types.d.ts
CHANGED
|
@@ -10,3 +10,5 @@ export declare type ClassDecorator = <TFunction extends Function>(target: TFunct
|
|
|
10
10
|
export declare type PropertyDecorator = (target: Object, propertyKey: string | symbol) => void;
|
|
11
11
|
export declare type MethodDecorator = (target: Object, propertyKey: string | symbol, descriptor: PropertyDescriptor) => PropertyDescriptor | void;
|
|
12
12
|
export declare type ParameterDecorator = (target: Object, propertyKey: string | symbol, parameterIndex: number) => void;
|
|
13
|
+
export declare type ExpressiveTeaProxyOptions = 'proxyReqPathResolver' | 'host' | 'filter' | 'userResDecorator' | 'userResHeaderDecorator' | 'skipToNextHandlerFilter' | 'proxyErrorHandler' | 'proxyReqOptDecorator' | 'proxyReqBodyDecorator';
|
|
14
|
+
export declare type ExpressiveTeaProxyProperty = 'limit' | 'memoizeHost' | 'https' | 'preserveHostHdr' | 'parseReqBody' | 'reqAsBuffer' | 'reqBodyEncoding' | 'timeout';
|