@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.
- package/.ci/runChecks.sh +7 -0
- package/.eslintrc.js +226 -0
- package/.github/dependabot.yml +27 -0
- package/.github/workflows/publish.yml +33 -0
- package/.github/workflows/test.yml +31 -0
- package/.prettierrc +27 -0
- package/.vscode/settings.json +31 -0
- package/LICENSE +22 -0
- package/README.md +128 -0
- package/dist/decorators/methods.d.ts +165 -0
- package/dist/decorators/methods.js +263 -0
- package/dist/decorators/methods.js.map +1 -0
- package/dist/decorators/parameters.d.ts +295 -0
- package/dist/decorators/parameters.js +423 -0
- package/dist/decorators/parameters.js.map +1 -0
- package/dist/decorators/services.d.ts +199 -0
- package/dist/decorators/services.js +367 -0
- package/dist/decorators/services.js.map +1 -0
- package/dist/server/config.d.ts +4 -0
- package/dist/server/config.js +43 -0
- package/dist/server/config.js.map +1 -0
- package/dist/server/model/errors.d.ts +111 -0
- package/dist/server/model/errors.js +178 -0
- package/dist/server/model/errors.js.map +1 -0
- package/dist/server/model/metadata.d.ts +91 -0
- package/dist/server/model/metadata.js +80 -0
- package/dist/server/model/metadata.js.map +1 -0
- package/dist/server/model/return-types.d.ts +86 -0
- package/dist/server/model/return-types.js +110 -0
- package/dist/server/model/return-types.js.map +1 -0
- package/dist/server/model/server-types.d.ts +118 -0
- package/dist/server/model/server-types.js +47 -0
- package/dist/server/model/server-types.js.map +1 -0
- package/dist/server/parameter-processor.d.ts +13 -0
- package/dist/server/parameter-processor.js +84 -0
- package/dist/server/parameter-processor.js.map +1 -0
- package/dist/server/server-container.d.ts +55 -0
- package/dist/server/server-container.js +432 -0
- package/dist/server/server-container.js.map +1 -0
- package/dist/server/server.d.ts +136 -0
- package/dist/server/server.js +278 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/service-invoker.d.ts +28 -0
- package/dist/server/service-invoker.js +270 -0
- package/dist/server/service-invoker.js.map +1 -0
- package/dist/typescript-rest.d.ts +9 -0
- package/dist/typescript-rest.js +31 -0
- package/dist/typescript-rest.js.map +1 -0
- package/package.json +113 -0
- package/src/decorators/methods.ts +279 -0
- package/src/decorators/parameters.ts +442 -0
- package/src/decorators/services.ts +390 -0
- package/src/server/config.ts +40 -0
- package/src/server/model/errors.ts +178 -0
- package/src/server/model/metadata.ts +118 -0
- package/src/server/model/return-types.ts +109 -0
- package/src/server/model/server-types.ts +130 -0
- package/src/server/parameter-processor.ts +105 -0
- package/src/server/server-container.ts +504 -0
- package/src/server/server.ts +340 -0
- package/src/server/service-invoker.ts +266 -0
- 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
|
+
}
|