@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/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
  }
@@ -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) || [];
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -163,3 +163,4 @@ export declare function descriptorOf(target: any, propertyKey: string): Property
163
163
  * @ignore
164
164
  */
165
165
  export declare function prototypeOf(target: any): any;
166
+ export declare function isAsyncFunction(fn: () => any): boolean;
@@ -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) {
@@ -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 = {}));
@@ -1,5 +1,6 @@
1
1
  /// <reference types="node" />
2
- import { Express, Router } from 'express';
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';