@mini2/core 1.0.2 → 1.0.6

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 (92) hide show
  1. package/Readme.MD +75 -2
  2. package/dist/app.d.ts +14 -0
  3. package/dist/app.d.ts.map +1 -0
  4. package/dist/app.js +65 -0
  5. package/dist/app.js.map +1 -0
  6. package/dist/container.d.ts +4 -0
  7. package/dist/container.d.ts.map +1 -0
  8. package/dist/container.js +11 -0
  9. package/dist/container.js.map +1 -0
  10. package/dist/expections/http.expection.d.ts +79 -0
  11. package/dist/expections/http.expection.d.ts.map +1 -0
  12. package/dist/expections/http.expection.js +140 -0
  13. package/dist/expections/http.expection.js.map +1 -0
  14. package/dist/index.d.ts +20 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +54 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/interfaces/app.interface.d.ts +6 -0
  19. package/dist/interfaces/app.interface.d.ts.map +1 -0
  20. package/dist/interfaces/app.interface.js +3 -0
  21. package/dist/interfaces/app.interface.js.map +1 -0
  22. package/dist/interfaces/authenticated.interface.d.ts +5 -0
  23. package/dist/interfaces/authenticated.interface.d.ts.map +1 -0
  24. package/dist/interfaces/authenticated.interface.js +3 -0
  25. package/dist/interfaces/authenticated.interface.js.map +1 -0
  26. package/dist/interfaces/config.interface.d.ts +6 -0
  27. package/dist/interfaces/config.interface.d.ts.map +1 -0
  28. package/dist/interfaces/config.interface.js +3 -0
  29. package/dist/interfaces/config.interface.js.map +1 -0
  30. package/dist/interfaces/queue.interface.d.ts +6 -0
  31. package/dist/interfaces/queue.interface.d.ts.map +1 -0
  32. package/dist/interfaces/queue.interface.js +3 -0
  33. package/dist/interfaces/queue.interface.js.map +1 -0
  34. package/dist/interfaces/repository.interface.d.ts +34 -0
  35. package/dist/interfaces/repository.interface.d.ts.map +1 -0
  36. package/dist/interfaces/repository.interface.js +3 -0
  37. package/dist/interfaces/repository.interface.js.map +1 -0
  38. package/dist/middlewares/authenticated.middleware.d.ts +4 -0
  39. package/dist/middlewares/authenticated.middleware.d.ts.map +1 -0
  40. package/dist/middlewares/authenticated.middleware.js +14 -0
  41. package/dist/middlewares/authenticated.middleware.js.map +1 -0
  42. package/dist/middlewares/authorized.middleware.d.ts +7 -0
  43. package/dist/middlewares/authorized.middleware.d.ts.map +1 -0
  44. package/dist/middlewares/authorized.middleware.js +16 -0
  45. package/dist/middlewares/authorized.middleware.js.map +1 -0
  46. package/dist/middlewares/validation.middleware.d.ts +4 -0
  47. package/dist/middlewares/validation.middleware.d.ts.map +1 -0
  48. package/dist/middlewares/validation.middleware.js +65 -0
  49. package/dist/middlewares/validation.middleware.js.map +1 -0
  50. package/dist/response-builder.d.ts +26 -0
  51. package/dist/response-builder.d.ts.map +1 -0
  52. package/dist/response-builder.js +45 -0
  53. package/dist/response-builder.js.map +1 -0
  54. package/dist/rest.d.ts +43 -0
  55. package/dist/rest.d.ts.map +1 -0
  56. package/dist/rest.js +213 -0
  57. package/dist/rest.js.map +1 -0
  58. package/dist/swagger.d.ts +30 -0
  59. package/dist/swagger.d.ts.map +1 -0
  60. package/dist/swagger.js +214 -0
  61. package/dist/swagger.js.map +1 -0
  62. package/dist/types.d.ts +4 -0
  63. package/dist/types.d.ts.map +1 -0
  64. package/dist/types.js +7 -0
  65. package/dist/types.js.map +1 -0
  66. package/dist/utils/array-unify.d.ts +2 -0
  67. package/dist/utils/array-unify.d.ts.map +1 -0
  68. package/dist/utils/array-unify.js +8 -0
  69. package/dist/utils/array-unify.js.map +1 -0
  70. package/dist/utils/math.d.ts +2 -0
  71. package/dist/utils/math.d.ts.map +1 -0
  72. package/dist/utils/math.js +7 -0
  73. package/dist/utils/math.js.map +1 -0
  74. package/package.json +38 -6
  75. package/__tests__/controller.test.ts +0 -349
  76. package/app.ts +0 -51
  77. package/container.ts +0 -7
  78. package/expections/http.expection.ts +0 -147
  79. package/interfaces/app.interface.ts +0 -6
  80. package/interfaces/authenticated.interface.ts +0 -3
  81. package/interfaces/config.interface.ts +0 -5
  82. package/interfaces/queue.interface.ts +0 -5
  83. package/interfaces/repository.interface.ts +0 -32
  84. package/middlewares/authenticated.middleware.ts +0 -15
  85. package/middlewares/authorized.middleware.ts +0 -19
  86. package/middlewares/validation.middleware.ts +0 -76
  87. package/response-builder.ts +0 -61
  88. package/rest.ts +0 -254
  89. package/swagger.ts +0 -265
  90. package/types.ts +0 -3
  91. package/utils/array-unify.ts +0 -4
  92. package/utils/math.ts +0 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authenticated.middleware.d.ts","sourceRoot":"","sources":["../../middlewares/authenticated.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAE9E,eAAO,MAAM,uBAAuB,GACnC,KAAK,qBAAqB,EAC1B,MAAM,QAAQ,EACd,MAAM,YAAY,SAOlB,CAAC"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.authenticatedMiddleware = void 0;
4
+ const http_expection_1 = require("../expections/http.expection");
5
+ const authenticatedMiddleware = (req, _res, next) => {
6
+ if (req.authenticated)
7
+ next();
8
+ else
9
+ throw new http_expection_1.UnauthorizedException({
10
+ message: 'Unauthorized',
11
+ });
12
+ };
13
+ exports.authenticatedMiddleware = authenticatedMiddleware;
14
+ //# sourceMappingURL=authenticated.middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authenticated.middleware.js","sourceRoot":"","sources":["../../middlewares/authenticated.middleware.ts"],"names":[],"mappings":";;;AACA,iEAAqE;AAG9D,MAAM,uBAAuB,GAAG,CACtC,GAA0B,EAC1B,IAAc,EACd,IAAkB,EACjB,EAAE;IACH,IAAI,GAAG,CAAC,aAAa;QAAE,IAAI,EAAE,CAAC;;QAE7B,MAAM,IAAI,sCAAqB,CAAC;YAC/B,OAAO,EAAE,cAAc;SACvB,CAAC,CAAC;AACL,CAAC,CAAC;AAVW,QAAA,uBAAuB,2BAUlC"}
@@ -0,0 +1,7 @@
1
+ import { NextFunction, Request, Response } from 'express';
2
+ export declare const authorizedMiddleware: (permissions: string[]) => (req: Request & {
3
+ user: {
4
+ permissions: string[];
5
+ };
6
+ }, _res: Response, next: NextFunction) => void;
7
+ //# sourceMappingURL=authorized.middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorized.middleware.d.ts","sourceRoot":"","sources":["../../middlewares/authorized.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAG1D,eAAO,MAAM,oBAAoB,GAAI,aAAa,MAAM,EAAE,MAExD,KAAK,OAAO,GAAG;IAAE,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;CAAE,EAClD,MAAM,QAAQ,EACd,MAAM,YAAY,SAWnB,CAAC"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.authorizedMiddleware = void 0;
4
+ const http_expection_1 = require("../expections/http.expection");
5
+ const authorizedMiddleware = (permissions) => {
6
+ return (req, _res, next) => {
7
+ if (permissions.some((permission) => req.user.permissions.includes(permission)))
8
+ next();
9
+ else
10
+ throw new http_expection_1.ForbiddenException({
11
+ message: 'Forbidden',
12
+ });
13
+ };
14
+ };
15
+ exports.authorizedMiddleware = authorizedMiddleware;
16
+ //# sourceMappingURL=authorized.middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorized.middleware.js","sourceRoot":"","sources":["../../middlewares/authorized.middleware.ts"],"names":[],"mappings":";;;AACA,iEAAkE;AAE3D,MAAM,oBAAoB,GAAG,CAAC,WAAqB,EAAE,EAAE;IAC7D,OAAO,CACN,GAAkD,EAClD,IAAc,EACd,IAAkB,EACjB,EAAE;QACH,IACC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAE3E,IAAI,EAAE,CAAC;;YAEP,MAAM,IAAI,mCAAkB,CAAC;gBAC5B,OAAO,EAAE,WAAW;aACpB,CAAC,CAAC;IACL,CAAC,CAAC;AACH,CAAC,CAAC;AAfW,QAAA,oBAAoB,wBAe/B"}
@@ -0,0 +1,4 @@
1
+ import type { RequestHandler } from 'express';
2
+ declare const validationMiddleware: <T extends object>(type: new () => T, value: "body" | "query" | "params", skipMissingProperties?: boolean, whitelist?: boolean, forbidNonWhitelisted?: boolean) => RequestHandler;
3
+ export default validationMiddleware;
4
+ //# sourceMappingURL=validation.middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.middleware.d.ts","sourceRoot":"","sources":["../../middlewares/validation.middleware.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAmC,MAAM,SAAS,CAAC;AAI/E,QAAA,MAAM,oBAAoB,GAAI,CAAC,SAAS,MAAM,EAC7C,MAAM,UAAU,CAAC,EACjB,OAAO,MAAM,GAAG,OAAO,GAAG,QAAQ,EAClC,+BAA6B,EAC7B,mBAAgB,EAChB,8BAA2B,KACzB,cA6DF,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const class_transformer_1 = require("class-transformer");
7
+ const class_validator_1 = require("class-validator");
8
+ const http_expection_1 = __importDefault(require("../expections/http.expection"));
9
+ const validationMiddleware = (type, value, skipMissingProperties = false, whitelist = true, forbidNonWhitelisted = true) => {
10
+ return (req, _res, next) => {
11
+ // Query parametrelerinde boolean değerleri düzgün işle
12
+ if (value === 'query' && req.query) {
13
+ Object.keys(req.query).forEach((key) => {
14
+ if (req.query[key] === 'true')
15
+ req.query[key] = true;
16
+ if (req.query[key] === 'false')
17
+ req.query[key] = false;
18
+ });
19
+ }
20
+ // 🔽 Eğer dosya alanları varsa, req.body'ye dahil et
21
+ if (value === 'body' && req.files) {
22
+ const files = req.files;
23
+ for (const field in files) {
24
+ if (Array.isArray(files[field]) && files[field].length > 0) {
25
+ req.body[field] = files[field][0]; // sadece ilk dosyayı al
26
+ }
27
+ }
28
+ }
29
+ const data = (0, class_transformer_1.plainToInstance)(type, req[value], {
30
+ enableImplicitConversion: true, // Otomatik tip dönüşümü için
31
+ exposeDefaultValues: true,
32
+ });
33
+ (0, class_validator_1.validate)(data, {
34
+ skipMissingProperties,
35
+ whitelist,
36
+ forbidNonWhitelisted,
37
+ }).then((errors) => {
38
+ if (errors.length > 0) {
39
+ const messages = errors.map((error) => {
40
+ const error1 = {
41
+ field: error.property,
42
+ errors: [],
43
+ };
44
+ for (const key of Object.keys(error?.constraints || {})) {
45
+ if (error.constraints?.[key]) {
46
+ error1.errors.push(error.constraints[key]);
47
+ }
48
+ }
49
+ return error1;
50
+ });
51
+ next(new http_expection_1.default({
52
+ errorId: 1,
53
+ message: 'Validation error',
54
+ validationErrors: messages,
55
+ }, 400));
56
+ }
57
+ else {
58
+ req[value] = data;
59
+ next();
60
+ }
61
+ });
62
+ };
63
+ };
64
+ exports.default = validationMiddleware;
65
+ //# sourceMappingURL=validation.middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.middleware.js","sourceRoot":"","sources":["../../middlewares/validation.middleware.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { Response } from 'express';
2
+ export interface IResponseBuilder<T = any> {
3
+ status: number;
4
+ data: T;
5
+ headers: Record<string, string>;
6
+ isFile: boolean;
7
+ ok(data: T): IResponseBuilder<T>;
8
+ created(data: T): IResponseBuilder<T>;
9
+ setHeader(key: string, value: string): IResponseBuilder<T>;
10
+ setHeaders(headers: Record<string, string>): IResponseBuilder<T>;
11
+ asFile(): IResponseBuilder<T>;
12
+ build(res: Response): void;
13
+ }
14
+ export declare class ResponseBuilder<T> implements IResponseBuilder<T> {
15
+ status: number;
16
+ data: T;
17
+ headers: Record<string, string>;
18
+ isFile: boolean;
19
+ ok(data: T): ResponseBuilder<T>;
20
+ created(data: T): ResponseBuilder<T>;
21
+ setHeader(key: string, value: string): ResponseBuilder<T>;
22
+ setHeaders(headers: Record<string, string>): ResponseBuilder<T>;
23
+ asFile(): ResponseBuilder<T>;
24
+ build(res: Response): void;
25
+ }
26
+ //# sourceMappingURL=response-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-builder.d.ts","sourceRoot":"","sources":["../response-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,MAAM,WAAW,gBAAgB,CAAC,CAAC,GAAG,GAAG;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,CAAC;IACR,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,MAAM,EAAE,OAAO,CAAC;IAEhB,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACjC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACtC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC3D,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACjE,MAAM,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC9B,KAAK,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC3B;AAED,qBAAa,eAAe,CAAC,CAAC,CAAE,YAAW,gBAAgB,CAAC,CAAC,CAAC;IACtD,MAAM,EAAE,MAAM,CAAO;IACrB,IAAI,EAAG,CAAC,CAAC;IACT,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM;IACrC,MAAM,EAAE,OAAO,CAAS;IAE/B,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;IAM/B,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;IAMpC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC;IAKzD,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;IAK/D,MAAM,IAAI,eAAe,CAAC,CAAC,CAAC;IAK5B,KAAK,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI;CAW1B"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResponseBuilder = void 0;
4
+ class ResponseBuilder {
5
+ constructor() {
6
+ this.status = 200;
7
+ this.headers = {};
8
+ this.isFile = false;
9
+ }
10
+ ok(data) {
11
+ this.status = 200;
12
+ this.data = data;
13
+ return this;
14
+ }
15
+ created(data) {
16
+ this.status = 201;
17
+ this.data = data;
18
+ return this;
19
+ }
20
+ setHeader(key, value) {
21
+ this.headers[key] = value;
22
+ return this;
23
+ }
24
+ setHeaders(headers) {
25
+ this.headers = { ...this.headers, ...headers };
26
+ return this;
27
+ }
28
+ asFile() {
29
+ this.isFile = true;
30
+ return this;
31
+ }
32
+ build(res) {
33
+ Object.entries(this.headers).forEach(([key, value]) => {
34
+ res.setHeader(key, value);
35
+ });
36
+ if (this.isFile && this.data) {
37
+ res.status(this.status).send(this.data);
38
+ }
39
+ else {
40
+ res.status(this.status).json(this.data);
41
+ }
42
+ }
43
+ }
44
+ exports.ResponseBuilder = ResponseBuilder;
45
+ //# sourceMappingURL=response-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-builder.js","sourceRoot":"","sources":["../response-builder.ts"],"names":[],"mappings":";;;AAgBA,MAAa,eAAe;IAA5B;QACQ,WAAM,GAAW,GAAG,CAAC;QAErB,YAAO,GAA2B,EAAE,CAAC;QACrC,WAAM,GAAY,KAAK,CAAC;IAwChC,CAAC;IAtCA,EAAE,CAAC,IAAO;QACT,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,OAAO,CAAC,IAAO;QACd,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,SAAS,CAAC,GAAW,EAAE,KAAa;QACnC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC1B,OAAO,IAAI,CAAC;IACb,CAAC;IAED,UAAU,CAAC,OAA+B;QACzC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM;QACL,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,KAAK,CAAC,GAAa;QAClB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YACrD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC9B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACP,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;IACF,CAAC;CACD;AA5CD,0CA4CC"}
package/dist/rest.d.ts ADDED
@@ -0,0 +1,43 @@
1
+ import 'reflect-metadata';
2
+ import express, { type Express } from 'express';
3
+ import type { Request, Response, NextFunction, IRouter, RequestHandler } from 'express';
4
+ import { IResponseBuilder } from './response-builder';
5
+ export type Method = 'get' | 'post' | 'put' | 'delete' | 'patch';
6
+ export declare const keyOfPath: unique symbol;
7
+ export declare const keyOfRouteOptions: unique symbol;
8
+ export declare const keyOfReq: unique symbol;
9
+ export declare const keyOfRes: unique symbol;
10
+ export declare const keyOfNext: unique symbol;
11
+ export type ControllerMethodSignature = (...args: (Request | Response | NextFunction)[]) => IResponseBuilder | Promise<IResponseBuilder>;
12
+ export type IValidation = {
13
+ body?: any;
14
+ params?: any;
15
+ query?: any;
16
+ };
17
+ export interface RouteOptions {
18
+ method?: Method;
19
+ path?: string;
20
+ validations?: IValidation[];
21
+ permissions?: string[];
22
+ authenticated?: boolean;
23
+ otherHttpMiddlewares?: RequestHandler[];
24
+ }
25
+ export declare function controller(path: string): <T extends {
26
+ new (...args: any[]): {};
27
+ }>(constructor: T) => T;
28
+ export declare function httpMethod(newOptions: RouteOptions): (target: any, propertyKey: string, _descriptor: PropertyDescriptor) => void;
29
+ export declare function get(path: string): (target: any, propertyKey: string, _descriptor: PropertyDescriptor) => void;
30
+ export declare function post(path: string): (target: any, propertyKey: string, _descriptor: PropertyDescriptor) => void;
31
+ export declare function put(path: string): (target: any, propertyKey: string, _descriptor: PropertyDescriptor) => void;
32
+ export declare function del(path: string): (target: any, propertyKey: string, _descriptor: PropertyDescriptor) => void;
33
+ export declare function patch(path: string): (target: any, propertyKey: string, _descriptor: PropertyDescriptor) => void;
34
+ export declare function validate(options: IValidation | IValidation[]): (target: any, propertyKey: string, _descriptor: PropertyDescriptor) => void;
35
+ export declare function authenticated(value?: boolean): (target: any, propertyKey: string, _descriptor: PropertyDescriptor) => void;
36
+ export declare function authorized(value: string | string[]): (target: any, propertyKey: string, _descriptor: PropertyDescriptor) => void;
37
+ export declare function middleware(middlewares: RequestHandler): (target: any, propertyKey: string, _descriptor: PropertyDescriptor) => void;
38
+ export declare function req(): (target: any, propertyKey: string, parameterIndex: number) => void;
39
+ export declare function res(): (target: any, propertyKey: string, parameterIndex: number) => void;
40
+ export declare function next(): (target: any, propertyKey: string, parameterIndex: number) => void;
41
+ export declare function buildRouterFromController(controllerClass: any): IRouter;
42
+ export declare function buildApp(app: Express, controllers: any[]): express.Express;
43
+ //# sourceMappingURL=rest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rest.d.ts","sourceRoot":"","sources":["../rest.ts"],"names":[],"mappings":"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"}
package/dist/rest.js ADDED
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.keyOfNext = exports.keyOfRes = exports.keyOfReq = exports.keyOfRouteOptions = exports.keyOfPath = void 0;
7
+ exports.controller = controller;
8
+ exports.httpMethod = httpMethod;
9
+ exports.get = get;
10
+ exports.post = post;
11
+ exports.put = put;
12
+ exports.del = del;
13
+ exports.patch = patch;
14
+ exports.validate = validate;
15
+ exports.authenticated = authenticated;
16
+ exports.authorized = authorized;
17
+ exports.middleware = middleware;
18
+ exports.req = req;
19
+ exports.res = res;
20
+ exports.next = next;
21
+ exports.buildRouterFromController = buildRouterFromController;
22
+ exports.buildApp = buildApp;
23
+ require("reflect-metadata");
24
+ const express_1 = __importDefault(require("express"));
25
+ const array_unify_1 = require("./utils/array-unify");
26
+ const validation_middleware_1 = __importDefault(require("./middlewares/validation.middleware"));
27
+ const authenticated_middleware_1 = require("./middlewares/authenticated.middleware");
28
+ const authorized_middleware_1 = require("./middlewares/authorized.middleware");
29
+ exports.keyOfPath = Symbol('path');
30
+ exports.keyOfRouteOptions = Symbol('routeOptions');
31
+ exports.keyOfReq = Symbol('req');
32
+ exports.keyOfRes = Symbol('res');
33
+ exports.keyOfNext = Symbol('next');
34
+ function controller(path) {
35
+ return function (constructor) {
36
+ Reflect.defineMetadata(exports.keyOfPath, path, constructor);
37
+ return constructor;
38
+ };
39
+ }
40
+ function httpMethod(newOptions) {
41
+ return function (target, propertyKey, _descriptor) {
42
+ const existingOptions = Reflect.getMetadata(exports.keyOfRouteOptions, target, propertyKey) || {};
43
+ const method = newOptions.method || existingOptions.method;
44
+ const path = newOptions.path || existingOptions.path;
45
+ const validations = (0, array_unify_1.arrayUnify)((newOptions.validations || []).concat(existingOptions.validations || []));
46
+ const permissions = (0, array_unify_1.arrayUnify)((newOptions.permissions || []).concat(existingOptions.permissions || []));
47
+ const authenticated = newOptions.authenticated || existingOptions.authenticated;
48
+ const otherHttpMiddlewares = (0, array_unify_1.arrayUnify)((newOptions.otherHttpMiddlewares || []).concat(existingOptions.otherHttpMiddlewares || []));
49
+ const mergedOptions = {
50
+ method,
51
+ path,
52
+ validations,
53
+ permissions,
54
+ authenticated,
55
+ otherHttpMiddlewares,
56
+ };
57
+ Reflect.defineMetadata(exports.keyOfRouteOptions, mergedOptions, target, propertyKey);
58
+ };
59
+ }
60
+ function get(path) {
61
+ return httpMethod({ path, method: 'get' });
62
+ }
63
+ function post(path) {
64
+ return httpMethod({ path, method: 'post' });
65
+ }
66
+ function put(path) {
67
+ return httpMethod({ path, method: 'put' });
68
+ }
69
+ function del(path) {
70
+ return httpMethod({ path, method: 'delete' });
71
+ }
72
+ function patch(path) {
73
+ return httpMethod({ path, method: 'patch' });
74
+ }
75
+ function validate(options) {
76
+ return httpMethod({
77
+ validations: Array.isArray(options) ? options : [options],
78
+ });
79
+ }
80
+ function authenticated(value = true) {
81
+ return httpMethod({ authenticated: value });
82
+ }
83
+ function authorized(value) {
84
+ return httpMethod({
85
+ permissions: Array.isArray(value) ? value : [value],
86
+ });
87
+ }
88
+ function middleware(middlewares) {
89
+ return httpMethod({ otherHttpMiddlewares: [middlewares] });
90
+ }
91
+ // Param decorator'ları
92
+ function req() {
93
+ return function (target, propertyKey, parameterIndex) {
94
+ Reflect.defineMetadata(exports.keyOfReq, parameterIndex, target, propertyKey);
95
+ };
96
+ }
97
+ function res() {
98
+ return function (target, propertyKey, parameterIndex) {
99
+ Reflect.defineMetadata(exports.keyOfRes, parameterIndex, target, propertyKey);
100
+ };
101
+ }
102
+ function next() {
103
+ return function (target, propertyKey, parameterIndex) {
104
+ Reflect.defineMetadata(exports.keyOfNext, parameterIndex, target, propertyKey);
105
+ };
106
+ }
107
+ function buildRouterFromController(controllerClass) {
108
+ const path = Reflect.getMetadata(exports.keyOfPath, controllerClass.constructor);
109
+ if (!path) {
110
+ throw new Error('Controller class must have a path property');
111
+ }
112
+ const allProperties = Object.getOwnPropertyNames(Object.getPrototypeOf(controllerClass));
113
+ const router = express_1.default.Router();
114
+ for (const property of allProperties) {
115
+ const routeOptions = Reflect.getMetadata(exports.keyOfRouteOptions, controllerClass, property);
116
+ if (!routeOptions) {
117
+ continue;
118
+ }
119
+ if (!routeOptions.path) {
120
+ throw new Error('Route path is required');
121
+ }
122
+ if (!routeOptions.method) {
123
+ throw new Error('Route method is required');
124
+ }
125
+ const validations = routeOptions.validations;
126
+ const permissions = routeOptions.permissions;
127
+ const authenticated = routeOptions.authenticated;
128
+ const otherHttpMiddlewares = routeOptions.otherHttpMiddlewares;
129
+ const handler = controllerClass[property];
130
+ const validationMiddlewares = [];
131
+ if (validations) {
132
+ for (const validation of validations) {
133
+ if (validation.body) {
134
+ validationMiddlewares.push((0, validation_middleware_1.default)(validation.body, 'body'));
135
+ }
136
+ if (validation.params) {
137
+ validationMiddlewares.push((0, validation_middleware_1.default)(validation.params, 'params'));
138
+ }
139
+ if (validation.query) {
140
+ validationMiddlewares.push((0, validation_middleware_1.default)(validation.query, 'query'));
141
+ }
142
+ }
143
+ }
144
+ const middlewares = [];
145
+ if (authenticated) {
146
+ middlewares.push(authenticated_middleware_1.authenticatedMiddleware);
147
+ }
148
+ if (permissions) {
149
+ middlewares.push((0, authorized_middleware_1.authorizedMiddleware)(permissions));
150
+ }
151
+ if (otherHttpMiddlewares) {
152
+ middlewares.push(...otherHttpMiddlewares);
153
+ }
154
+ if (validationMiddlewares) {
155
+ middlewares.push(...validationMiddlewares);
156
+ }
157
+ const method = routeOptions.method;
158
+ const routePath = routeOptions.path;
159
+ const reqIndex = Reflect.getMetadata(exports.keyOfReq, controllerClass, property);
160
+ const resIndex = Reflect.getMetadata(exports.keyOfRes, controllerClass, property);
161
+ const nextIndex = Reflect.getMetadata(exports.keyOfNext, controllerClass, property);
162
+ const argsNotSorted = [
163
+ { name: 'req', index: reqIndex },
164
+ { name: 'res', index: resIndex },
165
+ { name: 'next', index: nextIndex },
166
+ ];
167
+ const args = [...argsNotSorted];
168
+ const argsSorted = args.sort((a, b) => a.index - b.index);
169
+ const handlerMiddleware = async (req, res, next) => {
170
+ try {
171
+ const realArgs = [];
172
+ for (const arg of argsSorted) {
173
+ if (arg.name === 'req') {
174
+ realArgs.push(req);
175
+ }
176
+ else if (arg.name === 'res') {
177
+ realArgs.push(res);
178
+ }
179
+ else if (arg.name === 'next') {
180
+ realArgs.push(next);
181
+ }
182
+ }
183
+ const result = await handler(...realArgs);
184
+ // ResponseBuilder'ı handle et
185
+ if (result && typeof result.build === 'function') {
186
+ result.build(res);
187
+ }
188
+ else {
189
+ res.json(result);
190
+ }
191
+ }
192
+ catch (error) {
193
+ next(error);
194
+ }
195
+ };
196
+ router[method](routePath, ...middlewares, handlerMiddleware);
197
+ }
198
+ return router;
199
+ }
200
+ function buildApp(app, controllers) {
201
+ for (const controller of controllers) {
202
+ const router = buildRouterFromController(controller);
203
+ const controllerPath = Reflect.getMetadata(exports.keyOfPath, controller.constructor);
204
+ if (controllerPath) {
205
+ app.use(controllerPath, router);
206
+ }
207
+ else {
208
+ app.use(router);
209
+ }
210
+ }
211
+ return app;
212
+ }
213
+ //# sourceMappingURL=rest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rest.js","sourceRoot":"","sources":["../rest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import 'reflect-metadata';
2
+ import { Express } from 'express';
3
+ export interface SwaggerOptions {
4
+ title?: string;
5
+ description?: string;
6
+ version?: string;
7
+ servers?: {
8
+ url: string;
9
+ description?: string;
10
+ }[];
11
+ docsPath?: string;
12
+ jsonPath?: string;
13
+ components?: any;
14
+ }
15
+ export declare class SwaggerIntegration {
16
+ private swaggerSpec;
17
+ private options;
18
+ constructor(options?: SwaggerOptions);
19
+ generateSwaggerSpec(controllers: any[]): void;
20
+ private generateSummary;
21
+ private generateDescription;
22
+ private extractControllerTag;
23
+ private extractResourceName;
24
+ private extractPathParameters;
25
+ private generateSchemaFromValidation;
26
+ setupSwagger(app: Express): void;
27
+ getSwaggerSpec(): any;
28
+ }
29
+ export default SwaggerIntegration;
30
+ //# sourceMappingURL=swagger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swagger.d.ts","sourceRoot":"","sources":["../swagger.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAIlC,MAAM,WAAW,cAAc;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,GAAG,CAAC;CACjB;AAED,qBAAa,kBAAkB;IAC9B,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,OAAO,CAAiB;gBAEpB,OAAO,GAAE,cAAmB;IAcjC,mBAAmB,CAAC,WAAW,EAAE,GAAG,EAAE;IAwI7C,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,4BAA4B;IAK7B,YAAY,CAAC,GAAG,EAAE,OAAO;IA6BzB,cAAc;CAGrB;AAED,eAAe,kBAAkB,CAAC"}