@expressots/adapter-express 1.1.0 → 1.1.1
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/lib/CHANGELOG.md +11 -0
- package/lib/cjs/adapter-express/application-express.js +33 -3
- package/lib/cjs/types/adapter-express/application-base.d.ts +0 -1
- package/lib/cjs/types/adapter-express/application-express.d.ts +20 -2
- package/lib/cjs/types/adapter-express/application-express.interface.d.ts +0 -1
- package/lib/cjs/types/adapter-express/express-utils/base-middleware.d.ts +0 -1
- package/lib/cjs/types/adapter-express/express-utils/constants.d.ts +0 -1
- package/lib/cjs/types/adapter-express/express-utils/content/httpContent.d.ts +0 -1
- package/lib/cjs/types/adapter-express/express-utils/decorators.d.ts +0 -1
- package/lib/cjs/types/adapter-express/express-utils/httpResponseMessage.d.ts +0 -1
- package/lib/cjs/types/adapter-express/express-utils/index.d.ts +0 -1
- package/lib/cjs/types/adapter-express/express-utils/interfaces.d.ts +0 -1
- package/lib/cjs/types/adapter-express/express-utils/inversify-express-server.d.ts +0 -1
- package/lib/cjs/types/adapter-express/express-utils/utils.d.ts +0 -1
- package/lib/cjs/types/adapter-express/index.d.ts +0 -1
- package/lib/cjs/types/index.d.ts +0 -1
- package/lib/package.json +4 -9
- package/package.json +4 -9
- package/lib/cjs/types/adapter-express/application-base.d.ts.map +0 -1
- package/lib/cjs/types/adapter-express/application-express.d.ts.map +0 -1
- package/lib/cjs/types/adapter-express/application-express.interface.d.ts.map +0 -1
- package/lib/cjs/types/adapter-express/express-utils/base-middleware.d.ts.map +0 -1
- package/lib/cjs/types/adapter-express/express-utils/constants.d.ts.map +0 -1
- package/lib/cjs/types/adapter-express/express-utils/content/httpContent.d.ts.map +0 -1
- package/lib/cjs/types/adapter-express/express-utils/decorators.d.ts.map +0 -1
- package/lib/cjs/types/adapter-express/express-utils/httpResponseMessage.d.ts.map +0 -1
- package/lib/cjs/types/adapter-express/express-utils/index.d.ts.map +0 -1
- package/lib/cjs/types/adapter-express/express-utils/interfaces.d.ts.map +0 -1
- package/lib/cjs/types/adapter-express/express-utils/inversify-express-server.d.ts.map +0 -1
- package/lib/cjs/types/adapter-express/express-utils/utils.d.ts.map +0 -1
- package/lib/cjs/types/adapter-express/index.d.ts.map +0 -1
- package/lib/cjs/types/index.d.ts.map +0 -1
- package/lib/esm/adapter-express/application-base.js +0 -36
- package/lib/esm/adapter-express/application-express.interface.js +0 -2
- package/lib/esm/adapter-express/application-express.js +0 -152
- package/lib/esm/adapter-express/express-utils/base-middleware.js +0 -22
- package/lib/esm/adapter-express/express-utils/constants.js +0 -46
- package/lib/esm/adapter-express/express-utils/content/httpContent.js +0 -10
- package/lib/esm/adapter-express/express-utils/decorators.js +0 -110
- package/lib/esm/adapter-express/express-utils/httpResponseMessage.js +0 -33
- package/lib/esm/adapter-express/express-utils/index.js +0 -17
- package/lib/esm/adapter-express/express-utils/interfaces.js +0 -2
- package/lib/esm/adapter-express/express-utils/inversify-express-server.js +0 -293
- package/lib/esm/adapter-express/express-utils/utils.js +0 -58
- package/lib/esm/adapter-express/index.js +0 -21
- package/lib/esm/index.mjs +0 -17
- package/lib/esm/types/adapter-express/application-base.d.ts +0 -55
- package/lib/esm/types/adapter-express/application-base.d.ts.map +0 -1
- package/lib/esm/types/adapter-express/application-express.d.ts +0 -71
- package/lib/esm/types/adapter-express/application-express.d.ts.map +0 -1
- package/lib/esm/types/adapter-express/application-express.interface.d.ts +0 -29
- package/lib/esm/types/adapter-express/application-express.interface.d.ts.map +0 -1
- package/lib/esm/types/adapter-express/express-utils/base-middleware.d.ts +0 -9
- package/lib/esm/types/adapter-express/express-utils/base-middleware.d.ts.map +0 -1
- package/lib/esm/types/adapter-express/express-utils/constants.d.ts +0 -39
- package/lib/esm/types/adapter-express/express-utils/constants.d.ts.map +0 -1
- package/lib/esm/types/adapter-express/express-utils/content/httpContent.d.ts +0 -8
- package/lib/esm/types/adapter-express/express-utils/content/httpContent.d.ts.map +0 -1
- package/lib/esm/types/adapter-express/express-utils/decorators.d.ts +0 -24
- package/lib/esm/types/adapter-express/express-utils/decorators.d.ts.map +0 -1
- package/lib/esm/types/adapter-express/express-utils/httpResponseMessage.d.ts +0 -16
- package/lib/esm/types/adapter-express/express-utils/httpResponseMessage.d.ts.map +0 -1
- package/lib/esm/types/adapter-express/express-utils/index.d.ts +0 -3
- package/lib/esm/types/adapter-express/express-utils/index.d.ts.map +0 -1
- package/lib/esm/types/adapter-express/express-utils/interfaces.d.ts +0 -76
- package/lib/esm/types/adapter-express/express-utils/interfaces.d.ts.map +0 -1
- package/lib/esm/types/adapter-express/express-utils/inversify-express-server.d.ts +0 -60
- package/lib/esm/types/adapter-express/express-utils/inversify-express-server.d.ts.map +0 -1
- package/lib/esm/types/adapter-express/express-utils/utils.d.ts +0 -10
- package/lib/esm/types/adapter-express/express-utils/utils.d.ts.map +0 -1
- package/lib/esm/types/adapter-express/index.d.ts +0 -4
- package/lib/esm/types/adapter-express/index.d.ts.map +0 -1
- package/lib/esm/types/index.d.ts +0 -2
- package/lib/esm/types/index.d.ts.map +0 -1
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.params = exports.Principal = exports.next = exports.cookies = exports.headers = exports.body = exports.query = exports.param = exports.response = exports.request = exports.httpMethod = exports.Delete = exports.Head = exports.Patch = exports.Put = exports.Post = exports.Get = exports.all = exports.controller = exports.injectHttpContext = void 0;
|
|
4
|
-
require("reflect-metadata");
|
|
5
|
-
const inversify_1 = require("inversify");
|
|
6
|
-
const constants_1 = require("./constants");
|
|
7
|
-
exports.injectHttpContext = (0, inversify_1.inject)(constants_1.TYPE.HttpContext);
|
|
8
|
-
function controller(path, ...middleware) {
|
|
9
|
-
return (target) => {
|
|
10
|
-
const currentMetadata = {
|
|
11
|
-
middleware,
|
|
12
|
-
path,
|
|
13
|
-
target,
|
|
14
|
-
};
|
|
15
|
-
(0, inversify_1.decorate)((0, inversify_1.injectable)(), target);
|
|
16
|
-
Reflect.defineMetadata(constants_1.METADATA_KEY.controller, currentMetadata, target);
|
|
17
|
-
const previousMetadata = Reflect.getMetadata(constants_1.METADATA_KEY.controller, Reflect) || [];
|
|
18
|
-
const newMetadata = [currentMetadata, ...previousMetadata];
|
|
19
|
-
Reflect.defineMetadata(constants_1.METADATA_KEY.controller, newMetadata, Reflect);
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
exports.controller = controller;
|
|
23
|
-
function all(path, ...middleware) {
|
|
24
|
-
return httpMethod("all", path, ...middleware);
|
|
25
|
-
}
|
|
26
|
-
exports.all = all;
|
|
27
|
-
function Get(path, ...middleware) {
|
|
28
|
-
return httpMethod("get", path, ...middleware);
|
|
29
|
-
}
|
|
30
|
-
exports.Get = Get;
|
|
31
|
-
function Post(path, ...middleware) {
|
|
32
|
-
return httpMethod("post", path, ...middleware);
|
|
33
|
-
}
|
|
34
|
-
exports.Post = Post;
|
|
35
|
-
function Put(path, ...middleware) {
|
|
36
|
-
return httpMethod("put", path, ...middleware);
|
|
37
|
-
}
|
|
38
|
-
exports.Put = Put;
|
|
39
|
-
function Patch(path, ...middleware) {
|
|
40
|
-
return httpMethod("patch", path, ...middleware);
|
|
41
|
-
}
|
|
42
|
-
exports.Patch = Patch;
|
|
43
|
-
function Head(path, ...middleware) {
|
|
44
|
-
return httpMethod("head", path, ...middleware);
|
|
45
|
-
}
|
|
46
|
-
exports.Head = Head;
|
|
47
|
-
function Delete(path, ...middleware) {
|
|
48
|
-
return httpMethod("delete", path, ...middleware);
|
|
49
|
-
}
|
|
50
|
-
exports.Delete = Delete;
|
|
51
|
-
function httpMethod(method, path, ...middleware) {
|
|
52
|
-
return (target, key) => {
|
|
53
|
-
const metadata = {
|
|
54
|
-
key,
|
|
55
|
-
method,
|
|
56
|
-
middleware,
|
|
57
|
-
path,
|
|
58
|
-
target,
|
|
59
|
-
};
|
|
60
|
-
let metadataList = [];
|
|
61
|
-
if (!Reflect.hasOwnMetadata(constants_1.METADATA_KEY.controllerMethod, target.constructor)) {
|
|
62
|
-
Reflect.defineMetadata(constants_1.METADATA_KEY.controllerMethod, metadataList, target.constructor);
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
metadataList = Reflect.getOwnMetadata(constants_1.METADATA_KEY.controllerMethod, target.constructor);
|
|
66
|
-
}
|
|
67
|
-
metadataList.push(metadata);
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
exports.httpMethod = httpMethod;
|
|
71
|
-
/*
|
|
72
|
-
* Parameter Decorators
|
|
73
|
-
*/
|
|
74
|
-
exports.request = paramDecoratorFactory(constants_1.PARAMETER_TYPE.REQUEST);
|
|
75
|
-
exports.response = paramDecoratorFactory(constants_1.PARAMETER_TYPE.RESPONSE);
|
|
76
|
-
exports.param = paramDecoratorFactory(constants_1.PARAMETER_TYPE.PARAMS);
|
|
77
|
-
exports.query = paramDecoratorFactory(constants_1.PARAMETER_TYPE.QUERY);
|
|
78
|
-
exports.body = paramDecoratorFactory(constants_1.PARAMETER_TYPE.BODY);
|
|
79
|
-
exports.headers = paramDecoratorFactory(constants_1.PARAMETER_TYPE.HEADERS);
|
|
80
|
-
exports.cookies = paramDecoratorFactory(constants_1.PARAMETER_TYPE.COOKIES);
|
|
81
|
-
exports.next = paramDecoratorFactory(constants_1.PARAMETER_TYPE.NEXT);
|
|
82
|
-
exports.Principal = paramDecoratorFactory(constants_1.PARAMETER_TYPE.PRINCIPAL);
|
|
83
|
-
function paramDecoratorFactory(parameterType) {
|
|
84
|
-
return (name) => params(parameterType, name);
|
|
85
|
-
}
|
|
86
|
-
function params(type, parameterName) {
|
|
87
|
-
return (target, methodName, index) => {
|
|
88
|
-
let metadataList = {};
|
|
89
|
-
let parameterMetadataList = [];
|
|
90
|
-
const parameterMetadata = {
|
|
91
|
-
index,
|
|
92
|
-
injectRoot: parameterName === undefined,
|
|
93
|
-
parameterName,
|
|
94
|
-
type,
|
|
95
|
-
};
|
|
96
|
-
if (!Reflect.hasOwnMetadata(constants_1.METADATA_KEY.controllerParameter, target.constructor)) {
|
|
97
|
-
parameterMetadataList.unshift(parameterMetadata);
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
metadataList = Reflect.getOwnMetadata(constants_1.METADATA_KEY.controllerParameter, target.constructor);
|
|
101
|
-
if (metadataList[methodName]) {
|
|
102
|
-
parameterMetadataList = metadataList[methodName] || [];
|
|
103
|
-
}
|
|
104
|
-
parameterMetadataList.unshift(parameterMetadata);
|
|
105
|
-
}
|
|
106
|
-
metadataList[methodName] = parameterMetadataList;
|
|
107
|
-
Reflect.defineMetadata(constants_1.METADATA_KEY.controllerParameter, metadataList, target.constructor);
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
exports.params = params;
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.HttpResponseMessage = void 0;
|
|
4
|
-
class HttpResponseMessage {
|
|
5
|
-
_content;
|
|
6
|
-
_headers = {};
|
|
7
|
-
get headers() {
|
|
8
|
-
return this._headers;
|
|
9
|
-
}
|
|
10
|
-
set headers(headers) {
|
|
11
|
-
this._headers = headers;
|
|
12
|
-
}
|
|
13
|
-
get content() {
|
|
14
|
-
return this._content;
|
|
15
|
-
}
|
|
16
|
-
set content(value) {
|
|
17
|
-
this._content = value;
|
|
18
|
-
}
|
|
19
|
-
_statusCode;
|
|
20
|
-
get statusCode() {
|
|
21
|
-
return this._statusCode;
|
|
22
|
-
}
|
|
23
|
-
set statusCode(code) {
|
|
24
|
-
if (code < 0 || code > 999) {
|
|
25
|
-
throw new Error(`${code} is not a valid status code`);
|
|
26
|
-
}
|
|
27
|
-
this._statusCode = code;
|
|
28
|
-
}
|
|
29
|
-
constructor(statusCode = 200) {
|
|
30
|
-
this.statusCode = statusCode;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
exports.HttpResponseMessage = HttpResponseMessage;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./decorators"), exports);
|
|
@@ -1,293 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.InversifyExpressServer = void 0;
|
|
27
|
-
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
28
|
-
const express_1 = __importStar(require("express"));
|
|
29
|
-
const base_middleware_1 = require("./base-middleware");
|
|
30
|
-
const utils_1 = require("./utils");
|
|
31
|
-
const constants_1 = require("./constants");
|
|
32
|
-
const httpResponseMessage_1 = require("./httpResponseMessage");
|
|
33
|
-
class InversifyExpressServer {
|
|
34
|
-
_router;
|
|
35
|
-
_container;
|
|
36
|
-
_app;
|
|
37
|
-
_configFn;
|
|
38
|
-
_errorConfigFn;
|
|
39
|
-
_routingConfig;
|
|
40
|
-
_AuthProvider;
|
|
41
|
-
_forceControllers;
|
|
42
|
-
/**
|
|
43
|
-
* Wrapper for the express server.
|
|
44
|
-
*
|
|
45
|
-
* @param container Container loaded with all controllers and their dependencies.
|
|
46
|
-
* @param customRouter optional express.Router custom router
|
|
47
|
-
* @param routingConfig optional interfaces.RoutingConfig routing config
|
|
48
|
-
* @param customApp optional express.Application custom app
|
|
49
|
-
* @param authProvider optional interfaces.AuthProvider auth provider
|
|
50
|
-
* @param forceControllers optional boolean setting to force controllers (defaults do true)
|
|
51
|
-
*/
|
|
52
|
-
constructor(container, customRouter, routingConfig, customApp, authProvider, forceControllers = true) {
|
|
53
|
-
this._container = container;
|
|
54
|
-
this._forceControllers = forceControllers;
|
|
55
|
-
this._router = customRouter || (0, express_1.Router)();
|
|
56
|
-
this._routingConfig = routingConfig || {
|
|
57
|
-
rootPath: constants_1.DEFAULT_ROUTING_ROOT_PATH,
|
|
58
|
-
};
|
|
59
|
-
this._app = customApp || (0, express_1.default)();
|
|
60
|
-
if (authProvider) {
|
|
61
|
-
this._AuthProvider = authProvider;
|
|
62
|
-
container.bind(constants_1.TYPE.AuthProvider).to(this._AuthProvider);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Sets the configuration function to be applied to the application.
|
|
67
|
-
* Note that the config function is not actually executed until a call to
|
|
68
|
-
* InversifyExpresServer.build().
|
|
69
|
-
*
|
|
70
|
-
* This method is chainable.
|
|
71
|
-
*
|
|
72
|
-
* @param fn Function in which app-level middleware can be registered.
|
|
73
|
-
*/
|
|
74
|
-
setConfig(fn) {
|
|
75
|
-
this._configFn = fn;
|
|
76
|
-
return this;
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Sets the error handler configuration function to be applied to the application.
|
|
80
|
-
* Note that the error config function is not actually executed until a call to
|
|
81
|
-
* InversifyExpressServer.build().
|
|
82
|
-
*
|
|
83
|
-
* This method is chainable.
|
|
84
|
-
*
|
|
85
|
-
* @param fn Function in which app-level error handlers can be registered.
|
|
86
|
-
*/
|
|
87
|
-
setErrorConfig(fn) {
|
|
88
|
-
this._errorConfigFn = fn;
|
|
89
|
-
return this;
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Applies all routes and configuration to the server, returning the express application.
|
|
93
|
-
*/
|
|
94
|
-
build() {
|
|
95
|
-
// The very first middleware to be invoked
|
|
96
|
-
// it creates a new httpContext and attaches it to the
|
|
97
|
-
// current request as metadata using Reflect
|
|
98
|
-
this._app.all("*", (req, res, next) => {
|
|
99
|
-
void (async () => {
|
|
100
|
-
const httpContext = await this._createHttpContext(req, res, next);
|
|
101
|
-
Reflect.defineMetadata(constants_1.METADATA_KEY.httpContext, httpContext, req);
|
|
102
|
-
next();
|
|
103
|
-
})();
|
|
104
|
-
});
|
|
105
|
-
// register server-level middleware before anything else
|
|
106
|
-
if (this._configFn) {
|
|
107
|
-
this._configFn.apply(undefined, [this._app]);
|
|
108
|
-
}
|
|
109
|
-
this.registerControllers();
|
|
110
|
-
// register error handlers after controllers
|
|
111
|
-
if (this._errorConfigFn) {
|
|
112
|
-
this._errorConfigFn.apply(undefined, [this._app]);
|
|
113
|
-
}
|
|
114
|
-
return this._app;
|
|
115
|
-
}
|
|
116
|
-
registerControllers() {
|
|
117
|
-
// Fake HttpContext is needed during registration
|
|
118
|
-
this._container.bind(constants_1.TYPE.HttpContext).toConstantValue({});
|
|
119
|
-
const constructors = (0, utils_1.getControllersFromMetadata)();
|
|
120
|
-
constructors.forEach((constructor) => {
|
|
121
|
-
const { name } = constructor;
|
|
122
|
-
if (this._container.isBoundNamed(constants_1.TYPE.Controller, name)) {
|
|
123
|
-
throw new Error((0, constants_1.DUPLICATED_CONTROLLER_NAME)(name));
|
|
124
|
-
}
|
|
125
|
-
this._container
|
|
126
|
-
.bind(constants_1.TYPE.Controller)
|
|
127
|
-
.to(constructor)
|
|
128
|
-
.whenTargetNamed(name);
|
|
129
|
-
});
|
|
130
|
-
const controllers = (0, utils_1.getControllersFromContainer)(this._container, this._forceControllers);
|
|
131
|
-
controllers.forEach((controller) => {
|
|
132
|
-
const controllerMetadata = (0, utils_1.getControllerMetadata)(controller.constructor);
|
|
133
|
-
const methodMetadata = (0, utils_1.getControllerMethodMetadata)(controller.constructor);
|
|
134
|
-
const parameterMetadata = (0, utils_1.getControllerParameterMetadata)(controller.constructor);
|
|
135
|
-
if (controllerMetadata && methodMetadata) {
|
|
136
|
-
const controllerMiddleware = this.resolveMidleware(...controllerMetadata.middleware);
|
|
137
|
-
methodMetadata.forEach((metadata) => {
|
|
138
|
-
let paramList = [];
|
|
139
|
-
if (parameterMetadata) {
|
|
140
|
-
paramList = parameterMetadata[metadata.key] || [];
|
|
141
|
-
}
|
|
142
|
-
const handler = this.handlerFactory(controllerMetadata.target.name, metadata.key, paramList);
|
|
143
|
-
const routeMiddleware = this.resolveMidleware(...metadata.middleware);
|
|
144
|
-
this._router[metadata.method](`${controllerMetadata.path}${metadata.path}`, ...controllerMiddleware, ...routeMiddleware, handler);
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
});
|
|
148
|
-
this._app.use(this._routingConfig.rootPath, this._router);
|
|
149
|
-
}
|
|
150
|
-
resolveMidleware(...middleware) {
|
|
151
|
-
return middleware.map((middlewareItem) => {
|
|
152
|
-
if (!this._container.isBound(middlewareItem)) {
|
|
153
|
-
return middlewareItem;
|
|
154
|
-
}
|
|
155
|
-
const middlewareInstance = this._container.get(middlewareItem);
|
|
156
|
-
if (middlewareInstance instanceof base_middleware_1.BaseMiddleware) {
|
|
157
|
-
return (req, res, next) => {
|
|
158
|
-
const mReq = this._container.get(middlewareItem);
|
|
159
|
-
mReq.httpContext = this._getHttpContext(req);
|
|
160
|
-
mReq.handler(req, res, next);
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
return middlewareInstance;
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
copyHeadersTo(headers, target) {
|
|
167
|
-
for (const name of Object.keys(headers)) {
|
|
168
|
-
const headerValue = headers[name];
|
|
169
|
-
target.append(name, typeof headerValue === "number" ? headerValue.toString() : headerValue);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
async handleHttpResponseMessage(message, res) {
|
|
173
|
-
this.copyHeadersTo(message.headers, res);
|
|
174
|
-
if (message.content !== undefined) {
|
|
175
|
-
this.copyHeadersTo(message.content.headers, res);
|
|
176
|
-
res
|
|
177
|
-
.status(message.statusCode)
|
|
178
|
-
// If the content is a number, ensure we change it to a string, else our content is
|
|
179
|
-
// treated as a statusCode rather than as the content of the Response
|
|
180
|
-
.send(await message.content.readAsync());
|
|
181
|
-
}
|
|
182
|
-
else {
|
|
183
|
-
res.sendStatus(message.statusCode);
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
handlerFactory(controllerName, key, parameterMetadata) {
|
|
187
|
-
return async (req, res, next) => {
|
|
188
|
-
try {
|
|
189
|
-
const args = this.extractParameters(req, res, next, parameterMetadata);
|
|
190
|
-
const httpContext = this._getHttpContext(req);
|
|
191
|
-
httpContext.container.bind(constants_1.TYPE.HttpContext).toConstantValue(httpContext);
|
|
192
|
-
// invoke controller's action
|
|
193
|
-
const value = await httpContext.container.getNamed(constants_1.TYPE.Controller, controllerName)[key](...args);
|
|
194
|
-
if (value instanceof httpResponseMessage_1.HttpResponseMessage) {
|
|
195
|
-
await this.handleHttpResponseMessage(value, res);
|
|
196
|
-
}
|
|
197
|
-
else if ((0, utils_1.instanceOfIHttpActionResult)(value)) {
|
|
198
|
-
const httpResponseMessage = await value.executeAsync();
|
|
199
|
-
await this.handleHttpResponseMessage(httpResponseMessage, res);
|
|
200
|
-
}
|
|
201
|
-
else if (value instanceof Function) {
|
|
202
|
-
value();
|
|
203
|
-
}
|
|
204
|
-
else if (!res.headersSent) {
|
|
205
|
-
if (value === undefined) {
|
|
206
|
-
res.status(204);
|
|
207
|
-
}
|
|
208
|
-
res.send(value);
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
catch (err) {
|
|
212
|
-
next(err);
|
|
213
|
-
}
|
|
214
|
-
};
|
|
215
|
-
}
|
|
216
|
-
_getHttpContext(req) {
|
|
217
|
-
return Reflect.getMetadata(constants_1.METADATA_KEY.httpContext, req);
|
|
218
|
-
}
|
|
219
|
-
async _createHttpContext(req, res, next) {
|
|
220
|
-
const principal = await this._getCurrentUser(req, res, next);
|
|
221
|
-
return {
|
|
222
|
-
// We use a childContainer for each request so we can be
|
|
223
|
-
// sure that the binding is unique for each HTTP request
|
|
224
|
-
container: this._container.createChild(),
|
|
225
|
-
request: req,
|
|
226
|
-
response: res,
|
|
227
|
-
user: principal,
|
|
228
|
-
};
|
|
229
|
-
}
|
|
230
|
-
async _getCurrentUser(req, res, next) {
|
|
231
|
-
if (this._AuthProvider !== undefined) {
|
|
232
|
-
const authProvider = this._container.get(constants_1.TYPE.AuthProvider);
|
|
233
|
-
return authProvider.getUser(req, res, next);
|
|
234
|
-
}
|
|
235
|
-
return Promise.resolve({
|
|
236
|
-
details: null,
|
|
237
|
-
isAuthenticated: () => Promise.resolve(false),
|
|
238
|
-
isInRole: (_role) => Promise.resolve(false),
|
|
239
|
-
isResourceOwner: (_resourceId) => Promise.resolve(false),
|
|
240
|
-
});
|
|
241
|
-
}
|
|
242
|
-
extractParameters(req, res, next, params) {
|
|
243
|
-
const args = [];
|
|
244
|
-
if (!params || !params.length) {
|
|
245
|
-
return [req, res, next];
|
|
246
|
-
}
|
|
247
|
-
params.forEach(({ type, index, parameterName, injectRoot }) => {
|
|
248
|
-
switch (type) {
|
|
249
|
-
case constants_1.PARAMETER_TYPE.REQUEST:
|
|
250
|
-
args[index] = req;
|
|
251
|
-
break;
|
|
252
|
-
case constants_1.PARAMETER_TYPE.NEXT:
|
|
253
|
-
args[index] = next;
|
|
254
|
-
break;
|
|
255
|
-
case constants_1.PARAMETER_TYPE.PARAMS:
|
|
256
|
-
args[index] = this.getParam(req, "params", injectRoot, parameterName);
|
|
257
|
-
break;
|
|
258
|
-
case constants_1.PARAMETER_TYPE.QUERY:
|
|
259
|
-
args[index] = this.getParam(req, "query", injectRoot, parameterName);
|
|
260
|
-
break;
|
|
261
|
-
case constants_1.PARAMETER_TYPE.BODY:
|
|
262
|
-
args[index] = req.body;
|
|
263
|
-
break;
|
|
264
|
-
case constants_1.PARAMETER_TYPE.HEADERS:
|
|
265
|
-
args[index] = this.getParam(req, "headers", injectRoot, parameterName);
|
|
266
|
-
break;
|
|
267
|
-
case constants_1.PARAMETER_TYPE.COOKIES:
|
|
268
|
-
args[index] = this.getParam(req, "cookies", injectRoot, parameterName);
|
|
269
|
-
break;
|
|
270
|
-
case constants_1.PARAMETER_TYPE.PRINCIPAL:
|
|
271
|
-
args[index] = this._getPrincipal(req);
|
|
272
|
-
break;
|
|
273
|
-
default:
|
|
274
|
-
args[index] = res;
|
|
275
|
-
break; // response
|
|
276
|
-
}
|
|
277
|
-
});
|
|
278
|
-
args.push(req, res, next);
|
|
279
|
-
return args;
|
|
280
|
-
}
|
|
281
|
-
getParam(source, paramType, injectRoot, name) {
|
|
282
|
-
const key = paramType === "headers" ? name?.toLowerCase() : name;
|
|
283
|
-
const param = source[paramType];
|
|
284
|
-
if (injectRoot) {
|
|
285
|
-
return param;
|
|
286
|
-
}
|
|
287
|
-
return param && key ? param[key] : undefined;
|
|
288
|
-
}
|
|
289
|
-
_getPrincipal(req) {
|
|
290
|
-
return this._getHttpContext(req).user;
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
exports.InversifyExpressServer = InversifyExpressServer;
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.instanceOfIHttpActionResult = exports.cleanUpMetadata = exports.getControllerParameterMetadata = exports.getControllerMethodMetadata = exports.getControllerMetadata = exports.getControllersFromMetadata = exports.getControllersFromContainer = void 0;
|
|
4
|
-
const constants_1 = require("./constants");
|
|
5
|
-
function getControllersFromContainer(container, forceControllers) {
|
|
6
|
-
if (container.isBound(constants_1.TYPE.Controller)) {
|
|
7
|
-
return container.getAll(constants_1.TYPE.Controller);
|
|
8
|
-
}
|
|
9
|
-
if (forceControllers) {
|
|
10
|
-
throw new Error(constants_1.NO_CONTROLLERS_FOUND);
|
|
11
|
-
}
|
|
12
|
-
else {
|
|
13
|
-
return [];
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
exports.getControllersFromContainer = getControllersFromContainer;
|
|
17
|
-
function getControllersFromMetadata() {
|
|
18
|
-
const arrayOfControllerMetadata = Reflect.getMetadata(constants_1.METADATA_KEY.controller, Reflect) || [];
|
|
19
|
-
return arrayOfControllerMetadata.map((metadata) => metadata.target);
|
|
20
|
-
}
|
|
21
|
-
exports.getControllersFromMetadata = getControllersFromMetadata;
|
|
22
|
-
function getControllerMetadata(constructor) {
|
|
23
|
-
const controllerMetadata = Reflect.getOwnMetadata(constants_1.METADATA_KEY.controller, constructor);
|
|
24
|
-
return controllerMetadata;
|
|
25
|
-
}
|
|
26
|
-
exports.getControllerMetadata = getControllerMetadata;
|
|
27
|
-
function getControllerMethodMetadata(constructor) {
|
|
28
|
-
const methodMetadata = Reflect.getOwnMetadata(constants_1.METADATA_KEY.controllerMethod, constructor);
|
|
29
|
-
const genericMetadata = Reflect.getMetadata(constants_1.METADATA_KEY.controllerMethod, Reflect.getPrototypeOf(constructor));
|
|
30
|
-
if (genericMetadata !== undefined && methodMetadata !== undefined) {
|
|
31
|
-
return methodMetadata.concat(genericMetadata);
|
|
32
|
-
}
|
|
33
|
-
if (genericMetadata !== undefined) {
|
|
34
|
-
return genericMetadata;
|
|
35
|
-
}
|
|
36
|
-
return methodMetadata;
|
|
37
|
-
}
|
|
38
|
-
exports.getControllerMethodMetadata = getControllerMethodMetadata;
|
|
39
|
-
function getControllerParameterMetadata(constructor) {
|
|
40
|
-
const parameterMetadata = Reflect.getOwnMetadata(constants_1.METADATA_KEY.controllerParameter, constructor);
|
|
41
|
-
const genericMetadata = Reflect.getMetadata(constants_1.METADATA_KEY.controllerParameter, Reflect.getPrototypeOf(constructor));
|
|
42
|
-
if (genericMetadata !== undefined && parameterMetadata !== undefined) {
|
|
43
|
-
return { ...parameterMetadata, ...genericMetadata };
|
|
44
|
-
}
|
|
45
|
-
if (genericMetadata !== undefined) {
|
|
46
|
-
return genericMetadata;
|
|
47
|
-
}
|
|
48
|
-
return parameterMetadata;
|
|
49
|
-
}
|
|
50
|
-
exports.getControllerParameterMetadata = getControllerParameterMetadata;
|
|
51
|
-
function cleanUpMetadata() {
|
|
52
|
-
Reflect.defineMetadata(constants_1.METADATA_KEY.controller, [], Reflect);
|
|
53
|
-
}
|
|
54
|
-
exports.cleanUpMetadata = cleanUpMetadata;
|
|
55
|
-
function instanceOfIHttpActionResult(value) {
|
|
56
|
-
return value != null && typeof value.executeAsync === "function";
|
|
57
|
-
}
|
|
58
|
-
exports.instanceOfIHttpActionResult = instanceOfIHttpActionResult;
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.ServerEnvironment = exports.AppExpress = void 0;
|
|
18
|
-
__exportStar(require("./express-utils"), exports);
|
|
19
|
-
var application_express_1 = require("./application-express");
|
|
20
|
-
Object.defineProperty(exports, "AppExpress", { enumerable: true, get: function () { return application_express_1.AppExpress; } });
|
|
21
|
-
Object.defineProperty(exports, "ServerEnvironment", { enumerable: true, get: function () { return application_express_1.ServerEnvironment; } });
|
package/lib/esm/index.mjs
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./adapter-express"), exports);
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Abstract class ApplicationBase.
|
|
3
|
-
*
|
|
4
|
-
* ApplicationBase serves as the foundational structure for building
|
|
5
|
-
* server applications. It declares the lifecycle hooks that allow
|
|
6
|
-
* subclasses to configure services, handle post-server initialization,
|
|
7
|
-
* and perform cleanup when the server is shutting down. Extending
|
|
8
|
-
* classes are required to provide implementations for these methods
|
|
9
|
-
* to define specific behaviors for their particular use cases.
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* class Application extends ApplicationBase {
|
|
13
|
-
* protected configureServices() { //... }
|
|
14
|
-
* protected postServerInitialization() { //... }
|
|
15
|
-
* protected serverShutdown() { //... }
|
|
16
|
-
* }
|
|
17
|
-
*
|
|
18
|
-
* @export
|
|
19
|
-
* @abstract
|
|
20
|
-
*/
|
|
21
|
-
declare abstract class ApplicationBase {
|
|
22
|
-
/**
|
|
23
|
-
* Method to configure services that should be initialized
|
|
24
|
-
* before the server starts. It must be implemented by the
|
|
25
|
-
* extending class to set up necessary services or configurations.
|
|
26
|
-
* Can return a Promise for async configuration.
|
|
27
|
-
*
|
|
28
|
-
* @abstract
|
|
29
|
-
* @returns {void | Promise<void>}
|
|
30
|
-
*/
|
|
31
|
-
protected abstract configureServices(): void | Promise<void>;
|
|
32
|
-
/**
|
|
33
|
-
* Method to configure services or actions that should be executed
|
|
34
|
-
* after the server starts. It allows the extending class to perform
|
|
35
|
-
* any necessary operations once the server is up and running.
|
|
36
|
-
* Can return a Promise for async execution.
|
|
37
|
-
*
|
|
38
|
-
* @abstract
|
|
39
|
-
* @returns {void | Promise<void>}
|
|
40
|
-
*/
|
|
41
|
-
protected abstract postServerInitialization(): void | Promise<void>;
|
|
42
|
-
/**
|
|
43
|
-
* Method to perform any necessary actions or cleanup after the server
|
|
44
|
-
* is shutting down. This might include closing database connections,
|
|
45
|
-
* stopping background tasks, or other cleanup activities. It provides
|
|
46
|
-
* a clean exit point for the server.
|
|
47
|
-
* Can return a Promise for async cleanup.
|
|
48
|
-
*
|
|
49
|
-
* @abstract
|
|
50
|
-
* @returns {void | Promise<void>}
|
|
51
|
-
*/
|
|
52
|
-
protected abstract serverShutdown(): void | Promise<void>;
|
|
53
|
-
}
|
|
54
|
-
export { ApplicationBase };
|
|
55
|
-
//# sourceMappingURL=application-base.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"application-base.d.ts","sourceRoot":"","sources":["../../../../src/adapter-express/application-base.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,uBACe,eAAe;IAC5B;;;;;;;;OAQG;IACH,SAAS,CAAC,QAAQ,CAAC,iBAAiB,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE5D;;;;;;;;OAQG;IACH,SAAS,CAAC,QAAQ,CAAC,wBAAwB,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAEnE;;;;;;;;;OASG;IACH,SAAS,CAAC,QAAQ,CAAC,cAAc,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAC1D;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
|