@nmshd/typescript-rest 3.0.5

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.
Files changed (62) hide show
  1. package/.ci/runChecks.sh +7 -0
  2. package/.eslintrc.js +226 -0
  3. package/.github/dependabot.yml +27 -0
  4. package/.github/workflows/publish.yml +33 -0
  5. package/.github/workflows/test.yml +31 -0
  6. package/.prettierrc +27 -0
  7. package/.vscode/settings.json +31 -0
  8. package/LICENSE +22 -0
  9. package/README.md +128 -0
  10. package/dist/decorators/methods.d.ts +165 -0
  11. package/dist/decorators/methods.js +263 -0
  12. package/dist/decorators/methods.js.map +1 -0
  13. package/dist/decorators/parameters.d.ts +295 -0
  14. package/dist/decorators/parameters.js +423 -0
  15. package/dist/decorators/parameters.js.map +1 -0
  16. package/dist/decorators/services.d.ts +199 -0
  17. package/dist/decorators/services.js +367 -0
  18. package/dist/decorators/services.js.map +1 -0
  19. package/dist/server/config.d.ts +4 -0
  20. package/dist/server/config.js +43 -0
  21. package/dist/server/config.js.map +1 -0
  22. package/dist/server/model/errors.d.ts +111 -0
  23. package/dist/server/model/errors.js +178 -0
  24. package/dist/server/model/errors.js.map +1 -0
  25. package/dist/server/model/metadata.d.ts +91 -0
  26. package/dist/server/model/metadata.js +80 -0
  27. package/dist/server/model/metadata.js.map +1 -0
  28. package/dist/server/model/return-types.d.ts +86 -0
  29. package/dist/server/model/return-types.js +110 -0
  30. package/dist/server/model/return-types.js.map +1 -0
  31. package/dist/server/model/server-types.d.ts +118 -0
  32. package/dist/server/model/server-types.js +47 -0
  33. package/dist/server/model/server-types.js.map +1 -0
  34. package/dist/server/parameter-processor.d.ts +13 -0
  35. package/dist/server/parameter-processor.js +84 -0
  36. package/dist/server/parameter-processor.js.map +1 -0
  37. package/dist/server/server-container.d.ts +55 -0
  38. package/dist/server/server-container.js +432 -0
  39. package/dist/server/server-container.js.map +1 -0
  40. package/dist/server/server.d.ts +136 -0
  41. package/dist/server/server.js +278 -0
  42. package/dist/server/server.js.map +1 -0
  43. package/dist/server/service-invoker.d.ts +28 -0
  44. package/dist/server/service-invoker.js +270 -0
  45. package/dist/server/service-invoker.js.map +1 -0
  46. package/dist/typescript-rest.d.ts +9 -0
  47. package/dist/typescript-rest.js +31 -0
  48. package/dist/typescript-rest.js.map +1 -0
  49. package/package.json +113 -0
  50. package/src/decorators/methods.ts +279 -0
  51. package/src/decorators/parameters.ts +442 -0
  52. package/src/decorators/services.ts +390 -0
  53. package/src/server/config.ts +40 -0
  54. package/src/server/model/errors.ts +178 -0
  55. package/src/server/model/metadata.ts +118 -0
  56. package/src/server/model/return-types.ts +109 -0
  57. package/src/server/model/server-types.ts +130 -0
  58. package/src/server/parameter-processor.ts +105 -0
  59. package/src/server/server-container.ts +504 -0
  60. package/src/server/server.ts +340 -0
  61. package/src/server/service-invoker.ts +266 -0
  62. package/src/typescript-rest.ts +16 -0
@@ -0,0 +1,270 @@
1
+ 'use strict';
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ServiceInvoker = void 0;
13
+ const debug = require("debug");
14
+ const _ = require("lodash");
15
+ const typescript_rest_1 = require("../typescript-rest");
16
+ const return_types_1 = require("./model/return-types");
17
+ const server_types_1 = require("./model/server-types");
18
+ const parameter_processor_1 = require("./parameter-processor");
19
+ const server_container_1 = require("./server-container");
20
+ class ServiceInvoker {
21
+ constructor(serviceClass, serviceMethod) {
22
+ this.debugger = debug('typescript-rest:service-invoker:runtime');
23
+ this.serviceClass = serviceClass;
24
+ this.serviceMethod = serviceMethod;
25
+ this.preProcessors = _.union(serviceMethod.preProcessors, serviceClass.preProcessors);
26
+ this.postProcessors = _.union(serviceMethod.postProcessors, serviceClass.postProcessors);
27
+ }
28
+ callService(context) {
29
+ return __awaiter(this, void 0, void 0, function* () {
30
+ try {
31
+ yield this.callTargetEndPoint(context);
32
+ if (this.mustCallNext()) {
33
+ context.next();
34
+ }
35
+ else if (this.debugger.enabled) {
36
+ this.debugger('Ignoring next middlewares');
37
+ }
38
+ }
39
+ catch (err) {
40
+ context.next(err);
41
+ }
42
+ });
43
+ }
44
+ mustCallNext() {
45
+ return (!server_container_1.ServerContainer.get().ignoreNextMiddlewares &&
46
+ !this.serviceMethod.ignoreNextMiddlewares &&
47
+ !this.serviceClass.ignoreNextMiddlewares);
48
+ }
49
+ runPreProcessors(context) {
50
+ return __awaiter(this, void 0, void 0, function* () {
51
+ this.debugger('Running preprocessors');
52
+ for (const processor of this.preProcessors) {
53
+ yield Promise.resolve(processor(context.request, context.response));
54
+ }
55
+ });
56
+ }
57
+ runPostProcessors(context) {
58
+ return __awaiter(this, void 0, void 0, function* () {
59
+ this.debugger('Running postprocessors');
60
+ for (const processor of this.postProcessors) {
61
+ yield Promise.resolve(processor(context.request, context.response));
62
+ }
63
+ });
64
+ }
65
+ callTargetEndPoint(context) {
66
+ return __awaiter(this, void 0, void 0, function* () {
67
+ this.debugger('Calling targetEndpoint %s', this.serviceMethod.resolvedPath);
68
+ this.checkAcceptance(context);
69
+ if (this.preProcessors.length) {
70
+ yield this.runPreProcessors(context);
71
+ }
72
+ const serviceObject = this.createService(context);
73
+ const args = this.buildArgumentsList(context);
74
+ const toCall = this.getMethodToCall();
75
+ if (this.debugger.enabled) {
76
+ this.debugger('Invoking service method <%s> with params: %j', this.serviceMethod.name, args);
77
+ }
78
+ const result = yield toCall.apply(serviceObject, args);
79
+ if (this.postProcessors.length) {
80
+ yield this.runPostProcessors(context);
81
+ }
82
+ this.processResponseHeaders(context);
83
+ yield this.sendValue(result, context);
84
+ });
85
+ }
86
+ getMethodToCall() {
87
+ return (this.serviceClass.targetClass.prototype[this.serviceMethod.name] ||
88
+ this.serviceClass.targetClass[this.serviceMethod.name]);
89
+ }
90
+ checkAcceptance(context) {
91
+ this.debugger('Verifying accept headers');
92
+ this.identifyAcceptedLanguage(context);
93
+ this.identifyAcceptedType(context);
94
+ if (!context.accept) {
95
+ throw new typescript_rest_1.Errors.NotAcceptableError('Accept');
96
+ }
97
+ if (!context.language) {
98
+ throw new typescript_rest_1.Errors.NotAcceptableError('Accept-Language');
99
+ }
100
+ }
101
+ identifyAcceptedLanguage(context) {
102
+ if (this.serviceMethod.resolvedLanguages) {
103
+ const lang = context.request.acceptsLanguages(this.serviceMethod.resolvedLanguages);
104
+ if (lang) {
105
+ context.language = lang;
106
+ }
107
+ }
108
+ else {
109
+ const languages = context.request.acceptsLanguages();
110
+ if (languages && languages.length > 0) {
111
+ context.language = languages[0];
112
+ }
113
+ }
114
+ this.debugger('Identified the preferable language accepted by server: %s', context.language);
115
+ }
116
+ identifyAcceptedType(context) {
117
+ if (this.serviceMethod.resolvedAccepts) {
118
+ context.accept = context.request.accepts(this.serviceMethod.resolvedAccepts);
119
+ }
120
+ else {
121
+ const accepts = context.request.accepts();
122
+ if (accepts && accepts.length > 0) {
123
+ context.accept = accepts[0];
124
+ }
125
+ }
126
+ this.debugger('Identified the preferable media type accepted by server: %s', context.accept);
127
+ }
128
+ createService(context) {
129
+ const serviceObject = server_container_1.ServerContainer.get().serviceFactory.create(this.serviceClass.targetClass, context);
130
+ this.debugger('Creating service object');
131
+ if (this.serviceClass.hasProperties()) {
132
+ this.serviceClass.properties.forEach((property, key) => {
133
+ this.debugger('Setting service property %s', key);
134
+ serviceObject[key] = this.processParameter(context, property);
135
+ });
136
+ }
137
+ return serviceObject;
138
+ }
139
+ buildArgumentsList(context) {
140
+ const result = new Array();
141
+ this.serviceMethod.parameters.forEach((param) => {
142
+ this.debugger('Processing service parameter [%s]', param.name || 'body');
143
+ result.push(this.processParameter(context, {
144
+ name: param.name,
145
+ propertyType: param.type,
146
+ type: param.paramType
147
+ }));
148
+ });
149
+ return result;
150
+ }
151
+ processParameter(context, property) {
152
+ return parameter_processor_1.ParameterProcessor.get().processParameter(context, property);
153
+ }
154
+ processResponseHeaders(context) {
155
+ if (this.serviceMethod.resolvedLanguages) {
156
+ if (this.serviceMethod.httpMethod === server_types_1.HttpMethod.GET) {
157
+ this.debugger('Adding response header vary: Accept-Language');
158
+ context.response.vary('Accept-Language');
159
+ }
160
+ this.debugger('Adding response header Content-Language: %s', context.language);
161
+ context.response.set('Content-Language', context.language);
162
+ }
163
+ if (this.serviceMethod.resolvedAccepts) {
164
+ if (this.serviceMethod.httpMethod === server_types_1.HttpMethod.GET) {
165
+ this.debugger('Adding response header vary: Accept');
166
+ context.response.vary('Accept');
167
+ }
168
+ }
169
+ }
170
+ sendValue(value, context) {
171
+ return __awaiter(this, void 0, void 0, function* () {
172
+ if (value !== return_types_1.NoResponse) {
173
+ this.debugger('Sending response value: %o', value);
174
+ switch (typeof value) {
175
+ case 'number':
176
+ context.response.send(value.toString());
177
+ break;
178
+ case 'string':
179
+ context.response.send(value);
180
+ break;
181
+ case 'boolean':
182
+ context.response.send(value.toString());
183
+ break;
184
+ case 'undefined':
185
+ if (!context.response.headersSent) {
186
+ context.response.sendStatus(204);
187
+ }
188
+ break;
189
+ default:
190
+ if (value === null) {
191
+ context.response.send(value);
192
+ }
193
+ else {
194
+ yield this.sendComplexValue(context, value);
195
+ }
196
+ }
197
+ }
198
+ else {
199
+ this.debugger('Do not send any response value');
200
+ }
201
+ });
202
+ }
203
+ sendComplexValue(context, value) {
204
+ return __awaiter(this, void 0, void 0, function* () {
205
+ if (value.filePath && value instanceof return_types_1.DownloadResource) {
206
+ yield this.downloadResToPromise(context.response, value);
207
+ }
208
+ else if (value instanceof return_types_1.DownloadBinaryData) {
209
+ this.sendFile(context, value);
210
+ }
211
+ else if (value.location && value instanceof server_types_1.ReferencedResource) {
212
+ yield this.sendReferencedResource(context, value);
213
+ }
214
+ else if (value.then && value.catch) {
215
+ const val = yield value;
216
+ yield this.sendValue(val, context);
217
+ }
218
+ else {
219
+ this.debugger('Sending a json value: %j', value);
220
+ context.response.json(value);
221
+ }
222
+ });
223
+ }
224
+ sendReferencedResource(context, value) {
225
+ return __awaiter(this, void 0, void 0, function* () {
226
+ this.debugger('Setting the header Location: %s', value.location);
227
+ this.debugger('Sendinf status code: %d', value.statusCode);
228
+ context.response.set('Location', value.location);
229
+ if (value.body) {
230
+ context.response.status(value.statusCode);
231
+ yield this.sendValue(value.body, context);
232
+ }
233
+ else {
234
+ context.response.sendStatus(value.statusCode);
235
+ }
236
+ });
237
+ }
238
+ sendFile(context, value) {
239
+ this.debugger('Sending file as response');
240
+ if (value.fileName) {
241
+ context.response.writeHead(200, {
242
+ 'Content-Length': value.content.length,
243
+ 'Content-Type': value.mimeType,
244
+ 'Content-disposition': 'attachment;filename=' + value.fileName
245
+ });
246
+ }
247
+ else {
248
+ context.response.writeHead(200, {
249
+ 'Content-Length': value.content.length,
250
+ 'Content-Type': value.mimeType
251
+ });
252
+ }
253
+ context.response.end(value.content);
254
+ }
255
+ downloadResToPromise(res, value) {
256
+ this.debugger('Sending a resource to download. Path: %s', value.filePath);
257
+ return new Promise((resolve, reject) => {
258
+ res.download(value.filePath, value.fileName || value.filePath, (err) => {
259
+ if (err) {
260
+ reject(err);
261
+ }
262
+ else {
263
+ resolve(undefined);
264
+ }
265
+ });
266
+ });
267
+ }
268
+ }
269
+ exports.ServiceInvoker = ServiceInvoker;
270
+ //# sourceMappingURL=service-invoker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-invoker.js","sourceRoot":"","sources":["../../src/server/service-invoker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import * as Errors from './server/model/errors';
2
+ import * as Return from './server/model/return-types';
3
+ export * from './decorators/methods';
4
+ export * from './decorators/parameters';
5
+ export * from './decorators/services';
6
+ export * from './server/model/server-types';
7
+ export * from './server/server';
8
+ export { DefaultServiceFactory } from './server/server-container';
9
+ export { Errors, Return };
@@ -0,0 +1,31 @@
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.Return = exports.Errors = exports.DefaultServiceFactory = void 0;
18
+ const config_1 = require("./server/config");
19
+ const Errors = require("./server/model/errors");
20
+ exports.Errors = Errors;
21
+ const Return = require("./server/model/return-types");
22
+ exports.Return = Return;
23
+ __exportStar(require("./decorators/methods"), exports);
24
+ __exportStar(require("./decorators/parameters"), exports);
25
+ __exportStar(require("./decorators/services"), exports);
26
+ __exportStar(require("./server/model/server-types"), exports);
27
+ __exportStar(require("./server/server"), exports);
28
+ var server_container_1 = require("./server/server-container");
29
+ Object.defineProperty(exports, "DefaultServiceFactory", { enumerable: true, get: function () { return server_container_1.DefaultServiceFactory; } });
30
+ config_1.ServerConfig.configure();
31
+ //# sourceMappingURL=typescript-rest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript-rest.js","sourceRoot":"","sources":["../src/typescript-rest.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;;;;;;;;;;;;;AAEb,4CAA+C;AAC/C,gDAAgD;AAUvC,wBAAM;AATf,sDAAsD;AASrC,wBAAM;AAPvB,uDAAqC;AACrC,0DAAwC;AACxC,wDAAsC;AACtC,8DAA4C;AAC5C,kDAAgC;AAEhC,8DAAkE;AAAzD,yHAAA,qBAAqB,OAAA;AAG9B,qBAAY,CAAC,SAAS,EAAE,CAAC"}
package/package.json ADDED
@@ -0,0 +1,113 @@
1
+ {
2
+ "name": "@nmshd/typescript-rest",
3
+ "version": "3.0.5",
4
+ "description": "A Library to create RESTFul APIs with Typescript",
5
+ "keywords": [
6
+ "API",
7
+ "REST",
8
+ "RESTFul",
9
+ "service",
10
+ "microservice",
11
+ "typescript",
12
+ "node server"
13
+ ],
14
+ "bugs": {
15
+ "url": "https://github.com/@nmshd/typescript-rest/issues"
16
+ },
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "https://github.com/@nmshd/typescript-rest.git"
20
+ },
21
+ "license": "MIT",
22
+ "main": "./dist/typescript-rest.js",
23
+ "typings": "./dist/typescript-rest.d.ts",
24
+ "directories": {
25
+ "lib": "dist",
26
+ "doc": "doc"
27
+ },
28
+ "scripts": {
29
+ "build": "npm run clean && tsc",
30
+ "clean": "rimraf dist",
31
+ "lint": "npm run lint:eslint && npm run lint:prettier && npm run lint:tsc",
32
+ "lint:eslint": "eslint ./src/**/*.ts ./test/**/*.ts",
33
+ "lint:eslint:fix": "eslint --fix ./src/**/*.ts ./test/**/*.ts -t verbose",
34
+ "lint:prettier": "prettier --check .",
35
+ "lint:tsc": "tsc --noEmit",
36
+ "start": "tsc -w",
37
+ "pretest": "cross-env NODE_ENV=test npm run build && npm run lint",
38
+ "test": "cross-env NODE_ENV=test jest --config ./test/jest.config.js --coverage --runInBand",
39
+ "test:integration": "cross-env NODE_ENV=test jest --config ./test/jest.config-integration.js --runInBand",
40
+ "test:unit": "cross-env NODE_ENV=test jest --config ./test/jest.config-unit.js",
41
+ "tsc": "tsc"
42
+ },
43
+ "nyc": {
44
+ "extension": [
45
+ ".ts"
46
+ ],
47
+ "include": [
48
+ "src/**/*.ts"
49
+ ],
50
+ "instrument": true,
51
+ "report-dir": "./reports/coverage",
52
+ "reporter": [
53
+ "text-summary",
54
+ "json",
55
+ "html"
56
+ ],
57
+ "require": [
58
+ "ts-node/register"
59
+ ],
60
+ "sourceMap": true
61
+ },
62
+ "dependencies": {
63
+ "@types/body-parser": "1.19.5",
64
+ "@types/cookie-parser": "^1.4.7",
65
+ "@types/express": "^5.0.0",
66
+ "@types/multer": "1.4.12",
67
+ "body-parser": "^1.20.3",
68
+ "cookie-parser": "^1.4.7",
69
+ "express": "^4.21.1",
70
+ "fs-extra": "^11.2.0",
71
+ "lodash": "^4.17.21",
72
+ "multer": "^1.4.5-lts.1",
73
+ "reflect-metadata": "^0.2.2",
74
+ "require-glob": "^4.1.0",
75
+ "swagger-ui-express": "^5.0.1",
76
+ "yamljs": "^0.3.0"
77
+ },
78
+ "devDependencies": {
79
+ "@js-soft/license-check": "^1.0.9",
80
+ "@nmshd/typescript-ioc": "^3.2.4",
81
+ "@types/debug": "^4.1.12",
82
+ "@types/fs-extra": "^11.0.4",
83
+ "@types/jest": "^29.5.13",
84
+ "@types/lodash": "^4.17.10",
85
+ "@types/node": "^22.7.5",
86
+ "@types/request": "^2.48.12",
87
+ "@types/yamljs": "^0.2.34",
88
+ "@typescript-eslint/eslint-plugin": "^6.20.0",
89
+ "@typescript-eslint/parser": "^6.20.0",
90
+ "cross-env": "^7.0.3",
91
+ "eslint": "^8.56.0",
92
+ "eslint-config-prettier": "^9.1.0",
93
+ "eslint-plugin-jsdoc": "^48.0.4",
94
+ "eslint-plugin-prefer-arrow": "^1.2.3",
95
+ "jest": "^29.7.0",
96
+ "prettier": "^3.3.3",
97
+ "request": "^2.88.2",
98
+ "rimraf": "^6.0.1",
99
+ "ts-jest": "^29.2.5",
100
+ "typescript": "^5.6.3"
101
+ },
102
+ "engines": {
103
+ "node": ">=6.0.0"
104
+ },
105
+ "engineStrict": true,
106
+ "authors": [
107
+ "Thiago da Rosa de Bustamante <thiago@cruxframework.org>",
108
+ "js-soft GmbH"
109
+ ],
110
+ "publishConfig": {
111
+ "access": "public"
112
+ }
113
+ }