@mini2/core 1.1.16 → 1.1.18

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/dist/app.d.ts CHANGED
@@ -1,15 +1,16 @@
1
1
  import express, { Express } from 'express';
2
2
  import { IApp } from './interfaces/app.interface';
3
3
  import { IConfig } from './interfaces/config.interface';
4
+ import { IController } from './rest';
4
5
  import { Container } from 'inversify';
5
6
  declare class App implements IApp {
6
7
  private controllers;
7
8
  app: Express;
8
9
  container: Container;
9
- constructor(controllers: any[]);
10
+ constructor(controllers: IController[]);
10
11
  init(config: IConfig): Promise<void>;
11
12
  getApp(): express.Express;
12
- afterInit(): Promise<void>;
13
+ afterInit(standartErrorHandler?: boolean): Promise<void>;
13
14
  }
14
15
  export default App;
15
16
  //# sourceMappingURL=app.d.ts.map
package/dist/app.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../app.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAG3C,OAAO,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAExD,OAAO,EAAE,SAAS,EAA2B,MAAM,WAAW,CAAC;AAI/D,cACM,GAAI,YAAW,IAAI;IAIyB,OAAO,CAAC,WAAW;IAHpE,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,SAAS,CAAC;gBAEoC,WAAW,EAAE,GAAG,EAAE;IAKrE,IAAI,CAAC,MAAM,EAAE,OAAO;IAyB1B,MAAM;IAMA,SAAS;CAGf;AAED,eAAe,GAAG,CAAC"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../app.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,EAAE,EAAE,OAAO,EAAmC,MAAM,SAAS,CAAC;AAG5E,OAAO,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAY,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAE,SAAS,EAA2B,MAAM,WAAW,CAAC;AAM/D,cACM,GAAI,YAAW,IAAI;IAIyB,OAAO,CAAC,WAAW;IAHpE,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,SAAS,CAAC;gBAEoC,WAAW,EAAE,WAAW,EAAE;IAM7E,IAAI,CAAC,MAAM,EAAE,OAAO;IAyB1B,MAAM;IAMA,SAAS,CAAC,oBAAoB,GAAC,OAAc;CAuBnD;AAED,eAAe,GAAG,CAAC"}
package/dist/app.js CHANGED
@@ -22,11 +22,14 @@ const rest_1 = require("./rest");
22
22
  const inversify_1 = require("inversify");
23
23
  const swagger_1 = require("./swagger");
24
24
  const types_1 = require("./types");
25
+ const container_1 = __importDefault(require("./container"));
26
+ const http_expection_1 = __importDefault(require("./expections/http.expection"));
25
27
  let App = class App {
26
28
  constructor(controllers) {
27
29
  this.controllers = controllers;
28
30
  this.app = (0, express_1.default)();
29
- this.container = new inversify_1.Container();
31
+ this.container = container_1.default;
32
+ console.log(this.controllers);
30
33
  }
31
34
  async init(config) {
32
35
  this.app.use(express_1.default.json());
@@ -56,8 +59,21 @@ let App = class App {
56
59
  getApp() {
57
60
  return this.app;
58
61
  }
59
- async afterInit() {
60
- // console.log('afterInit');
62
+ async afterInit(standartErrorHandler = true) {
63
+ if (standartErrorHandler) {
64
+ this.app.use((error, _req, res, _next) => {
65
+ if (error instanceof http_expection_1.default) {
66
+ res.status(error.code).json(error.messageJson);
67
+ }
68
+ else {
69
+ console.error("Unexpected error:", error);
70
+ res.status(500).json({
71
+ errorId: 1,
72
+ message: "Some error happen",
73
+ });
74
+ }
75
+ });
76
+ }
61
77
  }
62
78
  };
63
79
  App = __decorate([
package/dist/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../app.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,sDAA2C;AAC3C,gDAAwB;AACxB,oDAA4B;AAG5B,iCAAkC;AAClC,yCAA+D;AAC/D,uCAA+C;AAC/C,mCAAqC;AAErC,IACM,GAAG,GADT,MACM,GAAG;IAIR,YAAyD,WAAkB;QAAlB,gBAAW,GAAX,WAAW,CAAO;QAC1E,IAAI,CAAC,GAAG,GAAG,IAAA,iBAAO,GAAE,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,IAAI,qBAAS,EAAE,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAe;QACzB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAO,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAA,cAAI,GAAE,CAAC,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAA,gBAAM,EAAC,KAAK,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;YACjC,OAAO,CAAC,GAAG,CAAC,6BAA6B,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QACH,MAAM,kBAAkB,GAAG,IAAI,4BAAkB,CAAC;YACjD,KAAK,EAAE,MAAM,CAAC,eAAe;YAC7B,WAAW,EAAE,yBAAyB,MAAM,CAAC,eAAe,EAAE;YAC9D,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE;gBACR;oBACC,GAAG,EAAE,UAAU,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE;oBAC3C,WAAW,EAAE,oBAAoB;iBACjC;aACD;YACD,QAAQ,EAAE,WAAW;YACrB,QAAQ,EAAE,gBAAgB;SAC1B,CAAC,CAAC;QACH,kBAAkB,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzD,kBAAkB,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAA,eAAQ,EAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC;IACD,MAAM;QACL,OAAO,IAAI,CAAC,GAAG,CAAC;IACjB,CAAC;IAID,KAAK,CAAC,SAAS;QACd,4BAA4B;IAC7B,CAAC;CACD,CAAA;AA3CK,GAAG;IADR,IAAA,sBAAU,GAAE;IAKC,WAAA,IAAA,uBAAW,EAAC,kBAAU,CAAC,WAAW,CAAC,CAAA;;GAJ3C,GAAG,CA2CR;AAED,kBAAe,GAAG,CAAC"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../app.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -18,7 +18,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
18
18
  };
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
20
  exports.HttpException = exports.container = exports.multiInject = exports.injectable = exports.inject = exports.Container = exports.App = void 0;
21
- // Ana Application sınıfı
21
+ // Main Application class
22
22
  var app_1 = require("./app");
23
23
  Object.defineProperty(exports, "App", { enumerable: true, get: function () { return __importDefault(app_1).default; } });
24
24
  // Container Class ve instance için
@@ -2,7 +2,7 @@ import { IConfig } from './config.interface';
2
2
  import { Express } from 'express';
3
3
  export interface IApp {
4
4
  init(config: IConfig): Promise<void>;
5
- afterInit(): Promise<void>;
5
+ afterInit(standartErrorHandler?: boolean): Promise<void>;
6
6
  getApp(): Express;
7
7
  }
8
8
  //# sourceMappingURL=app.interface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"app.interface.d.ts","sourceRoot":"","sources":["../../interfaces/app.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,MAAM,WAAW,IAAI;IACpB,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,MAAM,IAAG,OAAO,CAAC;CACjB"}
1
+ {"version":3,"file":"app.interface.d.ts","sourceRoot":"","sources":["../../interfaces/app.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,MAAM,WAAW,IAAI;IACpB,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,SAAS,CAAC,oBAAoB,CAAC,EAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,IAAG,OAAO,CAAC;CACjB"}
@@ -0,0 +1,4 @@
1
+ import type { Config } from 'jest';
2
+ declare const config: Config;
3
+ export default config;
4
+ //# sourceMappingURL=jest.config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jest.config.d.ts","sourceRoot":"","sources":["../jest.config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,QAAA,MAAM,MAAM,EAAE,MAiBb,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const config = {
4
+ preset: 'ts-jest',
5
+ testEnvironment: 'node',
6
+ roots: ['<rootDir>/__tests__'],
7
+ moduleFileExtensions: ['ts', 'tsx', 'js', 'json'],
8
+ transform: {
9
+ '^.+\\.tsx?$': [
10
+ 'ts-jest',
11
+ {
12
+ tsconfig: 'tsconfig.jest.json',
13
+ diagnostics: true,
14
+ isolatedModules: false,
15
+ },
16
+ ],
17
+ },
18
+ setupFilesAfterEnv: ['<rootDir>/jest.setup.ts'],
19
+ testTimeout: 20000,
20
+ };
21
+ exports.default = config;
22
+ //# sourceMappingURL=jest.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jest.config.js","sourceRoot":"","sources":["../jest.config.ts"],"names":[],"mappings":";;AAEA,MAAM,MAAM,GAAW;IACrB,MAAM,EAAE,SAAS;IACjB,eAAe,EAAE,MAAM;IACvB,KAAK,EAAE,CAAC,qBAAqB,CAAC;IAC9B,oBAAoB,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC;IACjD,SAAS,EAAE;QACT,aAAa,EAAE;YACb,SAAS;YACT;gBACE,QAAQ,EAAE,oBAAoB;gBAC9B,WAAW,EAAE,IAAI;gBACjB,eAAe,EAAE,KAAK;aACvB;SACF;KACF;IACD,kBAAkB,EAAE,CAAC,yBAAyB,CAAC;IAC/C,WAAW,EAAE,KAAK;CACnB,CAAC;AAEF,kBAAe,MAAM,CAAC"}
@@ -0,0 +1,2 @@
1
+ import 'reflect-metadata';
2
+ //# sourceMappingURL=jest.setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jest.setup.d.ts","sourceRoot":"","sources":["../jest.setup.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC"}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ require("reflect-metadata");
4
+ //# sourceMappingURL=jest.setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jest.setup.js","sourceRoot":"","sources":["../jest.setup.ts"],"names":[],"mappings":";;AAAA,4BAA0B"}
@@ -1,4 +1,9 @@
1
1
  import { NextFunction, Response } from 'express';
2
2
  import { IAuthenticatedRequest } from '../interfaces/authenticated.interface';
3
+ /** Header tabanlı auth kontrolü (throw’lu):
4
+ * - x-authenticated: "true" | "1" | "yes" → zorunlu
5
+ * - x-user-id: (opsiyonel)
6
+ * - x-user-permissions: "admin,editor" (opsiyonel, virgülle ayrılmış)
7
+ */
3
8
  export declare const authenticatedMiddleware: (req: IAuthenticatedRequest, _res: Response, next: NextFunction) => void;
4
9
  //# sourceMappingURL=authenticated.middleware.d.ts.map
@@ -1 +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"}
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;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,GAClC,KAAK,qBAAqB,EAC1B,MAAM,QAAQ,EACd,MAAM,YAAY,SAuBnB,CAAC"}
@@ -2,13 +2,28 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.authenticatedMiddleware = void 0;
4
4
  const http_expection_1 = require("../expections/http.expection");
5
+ /** Header tabanlı auth kontrolü (throw’lu):
6
+ * - x-authenticated: "true" | "1" | "yes" → zorunlu
7
+ * - x-user-id: (opsiyonel)
8
+ * - x-user-permissions: "admin,editor" (opsiyonel, virgülle ayrılmış)
9
+ */
5
10
  const authenticatedMiddleware = (req, _res, next) => {
6
- if (req.authenticated)
7
- next();
8
- else
9
- throw new http_expection_1.UnauthorizedException({
10
- message: 'Unauthorized',
11
- });
11
+ const isAuthHeader = String(req.headers['x-authenticated'] ?? '').trim().toLowerCase();
12
+ const isAuthenticated = isAuthHeader === 'true' || isAuthHeader === '1' || isAuthHeader === 'yes' || isAuthHeader === 'y';
13
+ if (!isAuthenticated) {
14
+ // 401 → throw (global error handler bunu 401’e map etmeli)
15
+ throw new http_expection_1.UnauthorizedException({ message: 'Unauthorized' });
16
+ }
17
+ const userId = req.headers['x-user-id'] || undefined;
18
+ const permsHeader = req.headers['x-user-permissions'] || '';
19
+ const permissions = permsHeader
20
+ .split(',')
21
+ .map((s) => s.trim())
22
+ .filter(Boolean);
23
+ // isteğe bağlı: request'e enjekte et
24
+ req.authenticated = true;
25
+ req.user = { id: userId, permissions };
26
+ next();
12
27
  };
13
28
  exports.authenticatedMiddleware = authenticatedMiddleware;
14
29
  //# sourceMappingURL=authenticated.middleware.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"authenticated.middleware.js","sourceRoot":"","sources":["../../middlewares/authenticated.middleware.ts"],"names":[],"mappings":";;;AACA,iEAAqE;AAGrE;;;;GAIG;AACI,MAAM,uBAAuB,GAAG,CACrC,GAA0B,EAC1B,IAAc,EACd,IAAkB,EAClB,EAAE;IACF,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACvF,MAAM,eAAe,GACnB,YAAY,KAAK,MAAM,IAAI,YAAY,KAAK,GAAG,IAAI,YAAY,KAAK,KAAK,IAAI,YAAY,KAAK,GAAG,CAAC;IAEpG,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,2DAA2D;QAC3D,MAAM,IAAI,sCAAqB,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,MAAM,GAAI,GAAG,CAAC,OAAO,CAAC,WAAW,CAAY,IAAI,SAAS,CAAC;IACjE,MAAM,WAAW,GAAI,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAY,IAAI,EAAE,CAAC;IACxE,MAAM,WAAW,GAAG,WAAW;SAC5B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CAAC;IAEnB,qCAAqC;IACrC,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC;IACxB,GAAW,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAEhD,IAAI,EAAE,CAAC;AACT,CAAC,CAAC;AA1BW,QAAA,uBAAuB,2BA0BlC"}
@@ -1,7 +1,12 @@
1
1
  import { NextFunction, Request, Response } from 'express';
2
- export declare const authorizedMiddleware: (permissions: string[]) => (req: Request & {
3
- user: {
4
- permissions: string[];
2
+ /** Header tabanlı yetkilendirme (throw’lu):
3
+ * - required: gerekli permission listesi
4
+ * - Mevcut izinler önce req.user.permissions’tan,
5
+ * yoksa x-user-permissions header’ından alınır.
6
+ */
7
+ export declare const authorizedMiddleware: (required: string[]) => (req: Request & {
8
+ user?: {
9
+ permissions?: string[];
5
10
  };
6
11
  }, _res: Response, next: NextFunction) => void;
7
12
  //# sourceMappingURL=authorized.middleware.d.ts.map
@@ -1 +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"}
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;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,UAAU,MAAM,EAAE,MAEnD,KAAK,OAAO,GAAG;IAAE,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;CAAE,EACpD,MAAM,QAAQ,EACd,MAAM,YAAY,SAkBrB,CAAC"}
@@ -2,14 +2,25 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.authorizedMiddleware = void 0;
4
4
  const http_expection_1 = require("../expections/http.expection");
5
- const authorizedMiddleware = (permissions) => {
5
+ /** Header tabanlı yetkilendirme (throw’lu):
6
+ * - required: gerekli permission listesi
7
+ * - Mevcut izinler önce req.user.permissions’tan,
8
+ * yoksa x-user-permissions header’ından alınır.
9
+ */
10
+ const authorizedMiddleware = (required) => {
6
11
  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
- });
12
+ const fromReq = req.user?.permissions ?? [];
13
+ const fromHeader = String(req.headers['x-user-permissions'] ?? '')
14
+ .split(',')
15
+ .map((s) => s.trim())
16
+ .filter(Boolean);
17
+ const current = new Set([...fromReq, ...fromHeader]);
18
+ const ok = required.length === 0 || required.some((perm) => current.has(perm));
19
+ if (!ok) {
20
+ // 403 → throw (global error handler bunu 403’e map etmeli)
21
+ throw new http_expection_1.ForbiddenException({ message: 'Forbidden' });
22
+ }
23
+ next();
13
24
  };
14
25
  };
15
26
  exports.authorizedMiddleware = authorizedMiddleware;
@@ -1 +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"}
1
+ {"version":3,"file":"authorized.middleware.js","sourceRoot":"","sources":["../../middlewares/authorized.middleware.ts"],"names":[],"mappings":";;;AACA,iEAAkE;AAElE;;;;GAIG;AACI,MAAM,oBAAoB,GAAG,CAAC,QAAkB,EAAE,EAAE;IACzD,OAAO,CACL,GAAoD,EACpD,IAAc,EACd,IAAkB,EAClB,EAAE;QACF,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,WAAW,IAAI,EAAE,CAAC;QAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;aAC/D,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,OAAO,CAAC,CAAC;QAEnB,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC;QAC7D,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAE/E,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,2DAA2D;YAC3D,MAAM,IAAI,mCAAkB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC,CAAC;AAtBW,QAAA,oBAAoB,wBAsB/B"}
@@ -1,4 +1,9 @@
1
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;
2
+ /**
3
+ * validationMiddleware(ValidationClass, 'body' | 'query' | 'params')
4
+ * - Orijinal kaynakları (req.body/query/params) ÜZERİNE YAZMAZ.
5
+ * - Doğrulanmış veriyi şu alanlara koyar: req.validatedBody / req.validatedQuery / req.validatedParams
6
+ * - Hata varsa 400 döner.
7
+ */
8
+ export default function validationMiddleware(ValidationClass: new (...args: any[]) => any, type: 'body' | 'query' | 'params'): RequestHandler;
4
9
  //# sourceMappingURL=validation.middleware.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"validation.middleware.d.ts","sourceRoot":"","sources":["../../middlewares/validation.middleware.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmC,cAAc,EAAE,MAAM,SAAS,CAAC;AAI/E;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAC1C,eAAe,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAC5C,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAChC,cAAc,CAoDhB"}
@@ -1,65 +1,62 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = validationMiddleware;
6
4
  const class_transformer_1 = require("class-transformer");
7
5
  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;
6
+ /**
7
+ * validationMiddleware(ValidationClass, 'body' | 'query' | 'params')
8
+ * - Orijinal kaynakları (req.body/query/params) ÜZERİNE YAZMAZ.
9
+ * - Doğrulanmış veriyi şu alanlara koyar: req.validatedBody / req.validatedQuery / req.validatedParams
10
+ * - Hata varsa 400 döner.
11
+ */
12
+ function validationMiddleware(ValidationClass, type) {
13
+ const handler = async (req, res, next) => {
14
+ try {
15
+ const source = type === 'body' ? req.body :
16
+ type === 'query' ? req.query :
17
+ req.params;
18
+ // class-transformer
19
+ const instance = (0, class_transformer_1.plainToInstance)(ValidationClass, source, {
20
+ enableImplicitConversion: true,
21
+ exposeDefaultValues: true,
22
+ });
23
+ // class-validator
24
+ const errors = await (0, class_validator_1.validate)(instance, {
25
+ whitelist: true,
26
+ forbidNonWhitelisted: false,
27
+ skipMissingProperties: false,
28
+ validationError: { target: false, value: false },
18
29
  });
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
30
  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,
31
+ res.status(400).json({
32
+ ok: false,
53
33
  message: 'Validation error',
54
- validationErrors: messages,
55
- }, 400));
56
- }
57
- else {
58
- req[value] = data;
59
- next();
34
+ errors: errors.map(e => ({
35
+ property: e.property,
36
+ constraints: e.constraints,
37
+ })),
38
+ });
39
+ return; // <-- explicit return
60
40
  }
61
- });
41
+ // validated* alanlarına yaz
42
+ if (type === 'body')
43
+ req.validatedBody = instance;
44
+ if (type === 'query')
45
+ req.validatedQuery = instance;
46
+ if (type === 'params')
47
+ req.validatedParams = instance;
48
+ next();
49
+ return; // <-- explicit return
50
+ }
51
+ catch (err) {
52
+ res.status(400).json({
53
+ ok: false,
54
+ message: 'Validation middleware failed',
55
+ error: err?.message ?? String(err),
56
+ });
57
+ return; // <-- explicit return
58
+ }
62
59
  };
63
- };
64
- exports.default = validationMiddleware;
60
+ return handler; // <-- handler'ı açıkça döndür
61
+ }
65
62
  //# sourceMappingURL=validation.middleware.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation.middleware.js","sourceRoot":"","sources":["../../middlewares/validation.middleware.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validation.middleware.js","sourceRoot":"","sources":["../../middlewares/validation.middleware.ts"],"names":[],"mappings":";;AAWA,uCAuDC;AAhED,yDAAoD;AACpD,qDAA2C;AAE3C;;;;;GAKG;AACH,SAAwB,oBAAoB,CAC1C,eAA4C,EAC5C,IAAiC;IAEjC,MAAM,OAAO,GAAmB,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAiB,EAAE;QACvG,IAAI,CAAC;YACH,MAAM,MAAM,GACV,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC5B,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBACX,GAAG,CAAC,MAAM,CAAC;YAEhC,oBAAoB;YACpB,MAAM,QAAQ,GAAG,IAAA,mCAAe,EAAC,eAAe,EAAE,MAAM,EAAE;gBACxD,wBAAwB,EAAE,IAAI;gBAC9B,mBAAmB,EAAE,IAAI;aAC1B,CAAC,CAAC;YAEH,kBAAkB;YAClB,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAQ,EAAC,QAAkB,EAAE;gBAChD,SAAS,EAAE,IAAI;gBACf,oBAAoB,EAAE,KAAK;gBAC3B,qBAAqB,EAAE,KAAK;gBAC5B,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;aACjD,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACnB,EAAE,EAAE,KAAK;oBACT,OAAO,EAAE,kBAAkB;oBAC3B,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACvB,QAAQ,EAAE,CAAC,CAAC,QAAQ;wBACpB,WAAW,EAAE,CAAC,CAAC,WAAW;qBAC3B,CAAC,CAAC;iBACJ,CAAC,CAAC;gBACH,OAAO,CAAC,sBAAsB;YAChC,CAAC;YAED,4BAA4B;YAC5B,IAAI,IAAI,KAAK,MAAM;gBAAK,GAAW,CAAC,aAAa,GAAG,QAAQ,CAAC;YAC7D,IAAI,IAAI,KAAK,OAAO;gBAAI,GAAW,CAAC,cAAc,GAAG,QAAQ,CAAC;YAC9D,IAAI,IAAI,KAAK,QAAQ;gBAAG,GAAW,CAAC,eAAe,GAAG,QAAQ,CAAC;YAE/D,IAAI,EAAE,CAAC;YACP,OAAO,CAAC,sBAAsB;QAChC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE,8BAA8B;gBACvC,KAAK,EAAE,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC;aACnC,CAAC,CAAC;YACH,OAAO,CAAC,sBAAsB;QAChC,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,OAAO,CAAC,CAAC,8BAA8B;AAChD,CAAC"}
package/dist/rest.d.ts CHANGED
@@ -1,22 +1,14 @@
1
1
  import 'reflect-metadata';
2
2
  import express, { type Express } from 'express';
3
- import type { Request, Response, NextFunction, IRouter, RequestHandler } from 'express';
4
- import { IResponseBuilder } from './response-builder';
3
+ import type { IRouter, RequestHandler } from 'express';
5
4
  export type Method = 'get' | 'post' | 'put' | 'delete' | 'patch';
6
- export declare const keyOfPath: unique symbol;
7
- export declare const keyOfName: unique symbol;
8
- export declare const keyOfModuleName: unique symbol;
9
- export declare const keyOfRouteOptions: unique symbol;
10
- export declare const keyOfReq: unique symbol;
11
- export declare const keyOfRes: unique symbol;
12
- export declare const keyOfNext: unique symbol;
13
- export type ControllerMethodSignature = (...args: (Request | Response | NextFunction)[]) => IResponseBuilder | Promise<IResponseBuilder>;
14
5
  export type IValidation = {
15
6
  body?: any;
16
7
  params?: any;
17
8
  query?: any;
18
9
  };
19
10
  export type IExtraData = Map<string, any>;
11
+ export type ParameterSlot = 'req' | 'res' | 'next' | 'body' | 'query' | 'params';
20
12
  export interface RouteOptions {
21
13
  method?: Method;
22
14
  path?: string;
@@ -27,8 +19,60 @@ export interface RouteOptions {
27
19
  extraData?: IExtraData;
28
20
  name?: string;
29
21
  }
22
+ export interface RouteDefinition {
23
+ methodName: string;
24
+ method?: Method;
25
+ path?: string;
26
+ name?: string;
27
+ validations: IValidation[];
28
+ permissions: string[];
29
+ authenticated?: boolean;
30
+ otherHttpMiddlewares: RequestHandler[];
31
+ extraData?: IExtraData;
32
+ parameterIndices?: Partial<Record<ParameterSlot, number>>;
33
+ }
34
+ export interface RouteDefinitions {
35
+ basePath: string;
36
+ controllerName?: string;
37
+ moduleName?: string;
38
+ routes: RouteDefinition[];
39
+ }
40
+ export interface IControllerClassConstructor {
41
+ new (...args: any[]): any;
42
+ __routeDefinitions?: RouteDefinitions;
43
+ }
44
+ export interface IController {
45
+ moduleName: string;
46
+ getRouteDefinition(methodName: string): RouteDefinition;
47
+ }
48
+ export declare class Controller implements IController {
49
+ moduleName: string;
50
+ RouteManager: RouteDefinitions;
51
+ constructor(moduleName?: string);
52
+ getRouteDefinition(methodName: string): RouteDefinition;
53
+ }
54
+ export declare class RouteRegistry {
55
+ private static getCtor;
56
+ static getRouteDefinitions(target: any): RouteDefinitions;
57
+ static setBasePath(constructor: IControllerClassConstructor, basePath: string, controllerName?: string, moduleName?: string): void;
58
+ static getOrCreateRoute(target: any, methodName: string): RouteDefinition;
59
+ static updateRoute(target: any, methodName: string, updates: Partial<RouteDefinition>): void;
60
+ static setParameterIndex(target: any, methodName: string, slot: ParameterSlot, index: number): void;
61
+ static getRoutes(target: any): RouteDefinition[];
62
+ static getBasePathOf(target: any): string;
63
+ }
64
+ export declare const keyOfPath: unique symbol;
65
+ export declare const keyOfName: unique symbol;
66
+ export declare const keyOfModuleName: unique symbol;
67
+ export declare const keyOfRouteOptions: unique symbol;
68
+ export declare const keyOfReq: unique symbol;
69
+ export declare const keyOfRes: unique symbol;
70
+ export declare const keyOfNext: unique symbol;
71
+ export declare const keyOfBody: unique symbol;
72
+ export declare const keyOfQuery: unique symbol;
73
+ export declare const keyOfParams: unique symbol;
30
74
  export declare function controller(path: string, name?: string, moduleName?: string): <T extends {
31
- new (...args: any[]): {};
75
+ new (...args: any[]): Controller;
32
76
  }>(constructor: T) => T;
33
77
  export declare function httpMethod(newOptions: RouteOptions): (target: any, propertyKey: string, _descriptor: PropertyDescriptor) => void;
34
78
  export declare function get(path: string, name?: string): (target: any, propertyKey: string, _descriptor: PropertyDescriptor) => void;
@@ -39,11 +83,14 @@ export declare function patch(path: string, name?: string): (target: any, proper
39
83
  export declare function validate(options: IValidation | IValidation[]): (target: any, propertyKey: string, _descriptor: PropertyDescriptor) => void;
40
84
  export declare function authenticated(value?: boolean): (target: any, propertyKey: string, _descriptor: PropertyDescriptor) => void;
41
85
  export declare function authorized(value: string | string[]): (target: any, propertyKey: string, _descriptor: PropertyDescriptor) => void;
42
- export declare function middleware(middlewares: RequestHandler): (target: any, propertyKey: string, _descriptor: PropertyDescriptor) => void;
86
+ export declare function middleware(mw: RequestHandler): (target: any, propertyKey: string, _descriptor: PropertyDescriptor) => void;
43
87
  export declare function custom<T>(key: string, value: T): (target: any, propertyKey: string, _descriptor: PropertyDescriptor) => void;
44
- export declare function req(): (target: any, propertyKey: string, parameterIndex: number) => void;
45
- export declare function res(): (target: any, propertyKey: string, parameterIndex: number) => void;
46
- export declare function next(): (target: any, propertyKey: string, parameterIndex: number) => void;
47
- export declare function buildRouterFromController(controllerClass: any): IRouter;
48
- export declare function buildApp(app: Express, controllers: any[]): express.Express;
88
+ export declare function req(): (t: any, k: string, i: number) => void;
89
+ export declare function res(): (t: any, k: string, i: number) => void;
90
+ export declare function next(): (t: any, k: string, i: number) => void;
91
+ export declare function body(): (t: any, k: string, i: number) => void;
92
+ export declare function query(): (t: any, k: string, i: number) => void;
93
+ export declare function params(): (t: any, k: string, i: number) => void;
94
+ export declare function buildRouterFromController(controllerInstance: IController): IRouter;
95
+ export declare function buildApp(app: Express, controllers: IController[]): express.Express;
49
96
  //# sourceMappingURL=rest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rest.d.ts","sourceRoot":"","sources":["../rest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rest.d.ts","sourceRoot":"","sources":["../rest.ts"],"names":[],"mappings":"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"}
package/dist/rest.js CHANGED
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.keyOfNext = exports.keyOfRes = exports.keyOfReq = exports.keyOfRouteOptions = exports.keyOfModuleName = exports.keyOfName = exports.keyOfPath = void 0;
6
+ exports.keyOfParams = exports.keyOfQuery = exports.keyOfBody = exports.keyOfNext = exports.keyOfRes = exports.keyOfReq = exports.keyOfRouteOptions = exports.keyOfModuleName = exports.keyOfName = exports.keyOfPath = exports.RouteRegistry = exports.Controller = void 0;
7
7
  exports.controller = controller;
8
8
  exports.httpMethod = httpMethod;
9
9
  exports.get = get;
@@ -19,6 +19,9 @@ exports.custom = custom;
19
19
  exports.req = req;
20
20
  exports.res = res;
21
21
  exports.next = next;
22
+ exports.body = body;
23
+ exports.query = query;
24
+ exports.params = params;
22
25
  exports.buildRouterFromController = buildRouterFromController;
23
26
  exports.buildApp = buildApp;
24
27
  require("reflect-metadata");
@@ -27,207 +30,309 @@ const array_unify_1 = require("./utils/array-unify");
27
30
  const validation_middleware_1 = __importDefault(require("./middlewares/validation.middleware"));
28
31
  const authenticated_middleware_1 = require("./middlewares/authenticated.middleware");
29
32
  const authorized_middleware_1 = require("./middlewares/authorized.middleware");
33
+ class Controller {
34
+ constructor(moduleName) {
35
+ const ctor = this.constructor;
36
+ const metaModuleName = Reflect.getMetadata(exports.keyOfModuleName, ctor);
37
+ this.moduleName = moduleName ?? metaModuleName ?? ctor.name;
38
+ this.RouteManager = RouteRegistry.getRouteDefinitions(ctor);
39
+ }
40
+ getRouteDefinition(methodName) {
41
+ const find = this.RouteManager.routes.find(item => item.methodName === methodName);
42
+ if (!find)
43
+ throw new Error("Route definition of method not found");
44
+ return find;
45
+ }
46
+ }
47
+ exports.Controller = Controller;
48
+ /* ------------------------------------------------------------------ */
49
+ /* RouteRegistry */
50
+ /* ------------------------------------------------------------------ */
51
+ class RouteRegistry {
52
+ static getCtor(target) {
53
+ return typeof target === 'function' ? target : target.constructor;
54
+ }
55
+ static getRouteDefinitions(target) {
56
+ const ctor = this.getCtor(target);
57
+ if (!ctor.__routeDefinitions) {
58
+ ctor.__routeDefinitions = { basePath: '', routes: [] };
59
+ }
60
+ return ctor.__routeDefinitions;
61
+ }
62
+ static setBasePath(constructor, basePath, controllerName, moduleName) {
63
+ const defs = this.getRouteDefinitions(constructor);
64
+ defs.basePath = basePath;
65
+ if (controllerName !== undefined)
66
+ defs.controllerName = controllerName;
67
+ if (moduleName !== undefined)
68
+ defs.moduleName = moduleName;
69
+ }
70
+ static getOrCreateRoute(target, methodName) {
71
+ const defs = this.getRouteDefinitions(target);
72
+ let route = defs.routes.find(r => r.methodName === methodName);
73
+ if (!route) {
74
+ route = {
75
+ methodName,
76
+ validations: [],
77
+ permissions: [],
78
+ otherHttpMiddlewares: [],
79
+ parameterIndices: {},
80
+ };
81
+ defs.routes.push(route);
82
+ }
83
+ return route;
84
+ }
85
+ static updateRoute(target, methodName, updates) {
86
+ const route = this.getOrCreateRoute(target, methodName);
87
+ if (updates.validations && updates.validations.length) {
88
+ route.validations = [...route.validations, ...updates.validations];
89
+ }
90
+ if (updates.permissions && updates.permissions.length) {
91
+ route.permissions = Array.from(new Set([...(route.permissions ?? []), ...updates.permissions]));
92
+ }
93
+ if (updates.otherHttpMiddlewares && updates.otherHttpMiddlewares.length) {
94
+ route.otherHttpMiddlewares = Array.from(new Set([...(route.otherHttpMiddlewares ?? []), ...updates.otherHttpMiddlewares]));
95
+ }
96
+ if (updates.method !== undefined)
97
+ route.method = updates.method;
98
+ if (updates.path !== undefined)
99
+ route.path = updates.path;
100
+ if (updates.name !== undefined)
101
+ route.name = updates.name;
102
+ if (updates.authenticated !== undefined)
103
+ route.authenticated = updates.authenticated;
104
+ if (updates.extraData !== undefined)
105
+ route.extraData = updates.extraData;
106
+ if (updates.parameterIndices) {
107
+ route.parameterIndices = { ...(route.parameterIndices ?? {}), ...updates.parameterIndices };
108
+ }
109
+ }
110
+ static setParameterIndex(target, methodName, slot, index) {
111
+ const route = this.getOrCreateRoute(target, methodName);
112
+ route.parameterIndices = { ...(route.parameterIndices ?? {}), [slot]: index };
113
+ }
114
+ static getRoutes(target) {
115
+ return this.getRouteDefinitions(target).routes;
116
+ }
117
+ static getBasePathOf(target) {
118
+ return this.getRouteDefinitions(target).basePath;
119
+ }
120
+ }
121
+ exports.RouteRegistry = RouteRegistry;
122
+ /* ------------------------------------------------------------------ */
123
+ /* Metadata Keys */
124
+ /* ------------------------------------------------------------------ */
30
125
  exports.keyOfPath = Symbol('path');
31
- exports.keyOfName = Symbol("name");
32
- exports.keyOfModuleName = Symbol("moduleName");
126
+ exports.keyOfName = Symbol('name');
127
+ exports.keyOfModuleName = Symbol('moduleName');
33
128
  exports.keyOfRouteOptions = Symbol('routeOptions');
34
129
  exports.keyOfReq = Symbol('req');
35
130
  exports.keyOfRes = Symbol('res');
36
131
  exports.keyOfNext = Symbol('next');
132
+ exports.keyOfBody = Symbol('body');
133
+ exports.keyOfQuery = Symbol('query');
134
+ exports.keyOfParams = Symbol('params');
135
+ /* ------------------------------------------------------------------ */
136
+ /* Decorators */
137
+ /* ------------------------------------------------------------------ */
37
138
  function controller(path, name, moduleName) {
38
139
  return function (constructor) {
39
- if (!name) {
40
- name = path;
41
- }
42
- if (!moduleName) {
43
- moduleName = name;
44
- }
140
+ const resolvedName = name ?? path;
141
+ const resolvedModuleName = moduleName ?? resolvedName;
142
+ // metadata'yı DOĞRUDAN orijinal constructor'a yaz
45
143
  Reflect.defineMetadata(exports.keyOfPath, path, constructor);
46
- Reflect.defineMetadata(exports.keyOfName, name, constructor);
47
- Reflect.defineMetadata(exports.keyOfModuleName, moduleName, constructor);
144
+ Reflect.defineMetadata(exports.keyOfName, resolvedName, constructor);
145
+ Reflect.defineMetadata(exports.keyOfModuleName, resolvedModuleName, constructor);
146
+ // registry'yi orijinal constructor için güncelle
147
+ RouteRegistry.setBasePath(constructor, path, resolvedName, resolvedModuleName);
148
+ // ÖNEMLİ: sınıfı sarmalama! aynı constructor'ı döndür
48
149
  return constructor;
49
150
  };
50
151
  }
51
152
  function httpMethod(newOptions) {
52
153
  return function (target, propertyKey, _descriptor) {
53
154
  const existingOptions = Reflect.getMetadata(exports.keyOfRouteOptions, target, propertyKey) || {};
54
- const method = newOptions.method || existingOptions.method;
55
- const path = newOptions.path || existingOptions.path;
56
- const validations = (0, array_unify_1.arrayUnify)((newOptions.validations || []).concat(existingOptions.validations || []));
57
- const permissions = (0, array_unify_1.arrayUnify)((newOptions.permissions || []).concat(existingOptions.permissions || []));
58
- const authenticated = newOptions.authenticated !== undefined ? newOptions.authenticated : existingOptions.authenticated !== undefined ? existingOptions.authenticated : undefined;
59
- const otherHttpMiddlewares = (0, array_unify_1.arrayUnify)((newOptions.otherHttpMiddlewares || []).concat(existingOptions.otherHttpMiddlewares || []));
60
- const name = newOptions.name || existingOptions.name;
61
- const extraData = existingOptions.extraData || new Map();
155
+ const method = newOptions.method ?? existingOptions.method;
156
+ const path = newOptions.path ?? existingOptions.path;
157
+ const validations = (0, array_unify_1.arrayUnify)((newOptions.validations ?? []).concat(existingOptions.validations ?? []));
158
+ const permissions = (0, array_unify_1.arrayUnify)((newOptions.permissions ?? []).concat(existingOptions.permissions ?? []));
159
+ const authenticated = newOptions.authenticated !== undefined ? newOptions.authenticated : existingOptions.authenticated;
160
+ const otherHttpMiddlewares = (0, array_unify_1.arrayUnify)((newOptions.otherHttpMiddlewares ?? []).concat(existingOptions.otherHttpMiddlewares ?? []));
161
+ const name = newOptions.name ?? existingOptions.name;
162
+ const extraData = existingOptions.extraData ?? new Map();
62
163
  if (newOptions.extraData) {
63
164
  const newOptionsExtraData = newOptions.extraData;
64
- for (const newOptionsExtraDataKey of Array.from(newOptionsExtraData.keys())) {
65
- const currentValue = extraData.get(newOptionsExtraDataKey);
66
- if (!currentValue) {
67
- extraData.set(newOptionsExtraDataKey, newOptionsExtraData.get(newOptionsExtraDataKey));
165
+ for (const k of Array.from(newOptionsExtraData.keys())) {
166
+ const currentValue = extraData.get(k);
167
+ if (currentValue === undefined) {
168
+ extraData.set(k, newOptionsExtraData.get(k));
68
169
  continue;
69
170
  }
70
- const newValue = newOptionsExtraData.get(newOptionsExtraDataKey);
71
- let newValueFinal = currentValue;
171
+ const newValue = newOptionsExtraData.get(k);
172
+ let finalValue = currentValue;
72
173
  if (Array.isArray(currentValue)) {
73
- newValueFinal = (0, array_unify_1.arrayUnify)([...currentValue, ...newValue]);
174
+ finalValue = (0, array_unify_1.arrayUnify)([...currentValue, ...newValue]);
74
175
  }
75
- else if (typeof currentValue === "object") {
76
- newValueFinal = { ...currentValue, ...newValue };
176
+ else if (currentValue !== null &&
177
+ typeof currentValue === 'object' &&
178
+ Object.getPrototypeOf(currentValue) === Object.prototype &&
179
+ newValue !== null &&
180
+ typeof newValue === 'object' &&
181
+ Object.getPrototypeOf(newValue) === Object.prototype) {
182
+ finalValue = { ...currentValue, ...newValue };
77
183
  }
78
184
  else {
79
- newValueFinal = newValue;
185
+ finalValue = newValue;
80
186
  }
81
- extraData.set(newOptionsExtraDataKey, newValueFinal);
187
+ extraData.set(k, finalValue);
82
188
  }
83
189
  }
84
- const mergedOptions = {
85
- method,
86
- path,
87
- validations,
88
- permissions,
89
- authenticated,
90
- otherHttpMiddlewares,
91
- name,
92
- extraData,
93
- };
190
+ const mergedOptions = {};
191
+ if (method !== undefined)
192
+ mergedOptions.method = method;
193
+ if (path !== undefined)
194
+ mergedOptions.path = path;
195
+ if (validations.length)
196
+ mergedOptions.validations = validations;
197
+ if (permissions.length)
198
+ mergedOptions.permissions = permissions;
199
+ if (authenticated !== undefined)
200
+ mergedOptions.authenticated = authenticated;
201
+ if (otherHttpMiddlewares.length)
202
+ mergedOptions.otherHttpMiddlewares = otherHttpMiddlewares;
203
+ if (name !== undefined)
204
+ mergedOptions.name = name;
205
+ if (extraData && extraData.size > 0)
206
+ mergedOptions.extraData = extraData;
207
+ // NOT: method/param dekoratör metadataları **prototype** üzerinde tutuluyor
94
208
  Reflect.defineMetadata(exports.keyOfRouteOptions, mergedOptions, target, propertyKey);
209
+ const updates = {
210
+ ...(validations.length ? { validations } : {}),
211
+ ...(permissions.length ? { permissions } : {}),
212
+ ...(otherHttpMiddlewares.length ? { otherHttpMiddlewares } : {}),
213
+ };
214
+ if (method !== undefined)
215
+ updates.method = method;
216
+ if (path !== undefined)
217
+ updates.path = path;
218
+ if (name !== undefined)
219
+ updates.name = name;
220
+ if (authenticated !== undefined)
221
+ updates.authenticated = authenticated;
222
+ if (extraData && extraData.size > 0)
223
+ updates.extraData = extraData;
224
+ RouteRegistry.updateRoute(target, propertyKey, updates);
95
225
  };
96
226
  }
97
- function get(path, name) {
98
- return httpMethod({ path, method: 'get', name: name || path });
99
- }
100
- function post(path, name) {
101
- return httpMethod({ path, method: 'post', name: name || path });
102
- }
103
- function put(path, name) {
104
- return httpMethod({ path, method: 'put', name: name || path });
105
- }
106
- function del(path, name) {
107
- return httpMethod({ path, method: 'delete', name: name || path });
108
- }
109
- function patch(path, name) {
110
- return httpMethod({ path, method: 'patch', name: name || path });
111
- }
227
+ /* HTTP method sugar */
228
+ function get(path, name) { return httpMethod({ path, method: 'get', name: name ?? path }); }
229
+ function post(path, name) { return httpMethod({ path, method: 'post', name: name ?? path }); }
230
+ function put(path, name) { return httpMethod({ path, method: 'put', name: name ?? path }); }
231
+ function del(path, name) { return httpMethod({ path, method: 'delete', name: name ?? path }); }
232
+ function patch(path, name) { return httpMethod({ path, method: 'patch', name: name ?? path }); }
233
+ /* Sugar decorators */
112
234
  function validate(options) {
113
- return httpMethod({
114
- validations: Array.isArray(options) ? options : [options],
115
- });
235
+ return httpMethod({ validations: Array.isArray(options) ? options : [options] });
116
236
  }
117
237
  function authenticated(value = true) {
118
238
  return httpMethod({ authenticated: value });
119
239
  }
120
240
  function authorized(value) {
121
- return httpMethod({
122
- permissions: Array.isArray(value) ? value : [value],
123
- });
241
+ return httpMethod({ permissions: Array.isArray(value) ? value : [value] });
124
242
  }
125
- function middleware(middlewares) {
126
- return httpMethod({ otherHttpMiddlewares: [middlewares] });
243
+ function middleware(mw) {
244
+ return httpMethod({ otherHttpMiddlewares: [mw] });
127
245
  }
128
246
  function custom(key, value) {
129
247
  const extraData = new Map();
130
248
  extraData.set(key, value);
131
- return httpMethod({ extraData });
132
- }
133
- // Param decorator'ları
134
- function req() {
135
- return function (target, propertyKey, parameterIndex) {
136
- Reflect.defineMetadata(exports.keyOfReq, parameterIndex, target, propertyKey);
137
- };
249
+ return httpMethod({ extraData: extraData });
138
250
  }
139
- function res() {
140
- return function (target, propertyKey, parameterIndex) {
141
- Reflect.defineMetadata(exports.keyOfRes, parameterIndex, target, propertyKey);
142
- };
143
- }
144
- function next() {
145
- return function (target, propertyKey, parameterIndex) {
146
- Reflect.defineMetadata(exports.keyOfNext, parameterIndex, target, propertyKey);
147
- };
148
- }
149
- function buildRouterFromController(controllerClass) {
150
- const path = Reflect.getMetadata(exports.keyOfPath, controllerClass.constructor);
151
- if (!path) {
251
+ /* Param dekoratörleri (prototype'a yazar) */
252
+ function req() { return (t, k, i) => { Reflect.defineMetadata(exports.keyOfReq, i, t, k); RouteRegistry.setParameterIndex(t, k, 'req', i); }; }
253
+ function res() { return (t, k, i) => { Reflect.defineMetadata(exports.keyOfRes, i, t, k); RouteRegistry.setParameterIndex(t, k, 'res', i); }; }
254
+ function next() { return (t, k, i) => { Reflect.defineMetadata(exports.keyOfNext, i, t, k); RouteRegistry.setParameterIndex(t, k, 'next', i); }; }
255
+ function body() { return (t, k, i) => { Reflect.defineMetadata(exports.keyOfBody, i, t, k); RouteRegistry.setParameterIndex(t, k, 'body', i); }; }
256
+ function query() { return (t, k, i) => { Reflect.defineMetadata(exports.keyOfQuery, i, t, k); RouteRegistry.setParameterIndex(t, k, 'query', i); }; }
257
+ function params() { return (t, k, i) => { Reflect.defineMetadata(exports.keyOfParams, i, t, k); RouteRegistry.setParameterIndex(t, k, 'params', i); }; }
258
+ /* ------------------------------------------------------------------ */
259
+ /* Router Builder (metadata'yı prototype'tan okur) */
260
+ /* ------------------------------------------------------------------ */
261
+ function buildRouterFromController(controllerInstance) {
262
+ const ctor = controllerInstance.constructor;
263
+ const proto = Object.getPrototypeOf(controllerInstance);
264
+ const path = Reflect.getMetadata(exports.keyOfPath, ctor);
265
+ if (!path)
152
266
  throw new Error('Controller class must have a path property');
153
- }
154
- const allProperties = Object.getOwnPropertyNames(Object.getPrototypeOf(controllerClass));
267
+ const allProperties = Object.getOwnPropertyNames(proto);
155
268
  const router = express_1.default.Router();
156
269
  for (const property of allProperties) {
157
- const routeOptions = Reflect.getMetadata(exports.keyOfRouteOptions, controllerClass, property);
158
- if (!routeOptions) {
270
+ const routeOptions = Reflect.getMetadata(exports.keyOfRouteOptions, proto, property);
271
+ if (!routeOptions)
159
272
  continue;
160
- }
161
- if (!routeOptions.path) {
162
- throw new Error('Route path is required');
163
- }
164
- if (!routeOptions.method) {
165
- throw new Error('Route method is required');
166
- }
167
- const validations = routeOptions.validations;
168
- const permissions = routeOptions.permissions;
169
- const authenticated = routeOptions.authenticated;
170
- const otherHttpMiddlewares = routeOptions.otherHttpMiddlewares;
171
- const handler = controllerClass[property].bind(controllerClass);
273
+ if (!routeOptions.path)
274
+ throw new Error(`Route path is required for ${ctor.name}.${property}`);
275
+ if (!routeOptions.method)
276
+ throw new Error(`Route method is required for ${ctor.name}.${property}`);
277
+ const { validations, permissions, authenticated, otherHttpMiddlewares } = routeOptions;
278
+ const handler = proto[property].bind(controllerInstance);
172
279
  const validationMiddlewares = [];
173
- if (validations) {
174
- for (const validation of validations) {
175
- if (validation.body) {
176
- validationMiddlewares.push((0, validation_middleware_1.default)(validation.body, 'body'));
177
- }
178
- if (validation.params) {
179
- validationMiddlewares.push((0, validation_middleware_1.default)(validation.params, 'params'));
180
- }
181
- if (validation.query) {
182
- validationMiddlewares.push((0, validation_middleware_1.default)(validation.query, 'query'));
183
- }
280
+ const pushOnce = (arr, mw) => { if (!arr.includes(mw))
281
+ arr.push(mw); };
282
+ const order = ['params', 'query', 'body'];
283
+ for (const v of validations ?? []) {
284
+ for (const t of order) {
285
+ const klass = v[t];
286
+ if (!klass)
287
+ continue;
288
+ pushOnce(validationMiddlewares, (0, validation_middleware_1.default)(klass, t));
184
289
  }
185
290
  }
186
291
  const middlewares = [];
187
- if (authenticated) {
292
+ if (authenticated)
188
293
  middlewares.push(authenticated_middleware_1.authenticatedMiddleware);
189
- }
190
- if (permissions && permissions.length > 0) {
294
+ if (permissions && permissions.length > 0)
191
295
  middlewares.push((0, authorized_middleware_1.authorizedMiddleware)(permissions));
192
- }
193
- if (otherHttpMiddlewares) {
296
+ if (otherHttpMiddlewares)
194
297
  middlewares.push(...otherHttpMiddlewares);
195
- }
196
- if (validationMiddlewares) {
298
+ if (validationMiddlewares.length)
197
299
  middlewares.push(...validationMiddlewares);
198
- }
199
300
  const method = routeOptions.method;
200
301
  const routePath = routeOptions.path;
201
- const reqIndex = Reflect.getMetadata(exports.keyOfReq, controllerClass, property);
202
- const resIndex = Reflect.getMetadata(exports.keyOfRes, controllerClass, property);
203
- const nextIndex = Reflect.getMetadata(exports.keyOfNext, controllerClass, property);
204
- const argsNotSorted = [
205
- { name: 'req', index: reqIndex },
206
- { name: 'res', index: resIndex },
207
- { name: 'next', index: nextIndex },
208
- ];
209
- const args = [...argsNotSorted];
210
- const argsSorted = args.sort((a, b) => a.index - b.index);
302
+ const reqIndex = Reflect.getMetadata(exports.keyOfReq, proto, property);
303
+ const resIndex = Reflect.getMetadata(exports.keyOfRes, proto, property);
304
+ const nextIndex = Reflect.getMetadata(exports.keyOfNext, proto, property);
305
+ const bodyIndex = Reflect.getMetadata(exports.keyOfBody, proto, property);
306
+ const queryIndex = Reflect.getMetadata(exports.keyOfQuery, proto, property);
307
+ const paramsIndex = Reflect.getMetadata(exports.keyOfParams, proto, property);
211
308
  const handlerMiddleware = async (req, res, next) => {
212
309
  try {
213
- const realArgs = [];
214
- for (const arg of argsSorted) {
215
- if (arg.name === 'req') {
216
- realArgs.push(req);
217
- }
218
- else if (arg.name === 'res') {
219
- realArgs.push(res);
220
- }
221
- else if (arg.name === 'next') {
222
- realArgs.push(next);
223
- }
310
+ const argMap = new Map();
311
+ if (typeof reqIndex === 'number')
312
+ argMap.set(reqIndex, req);
313
+ if (typeof resIndex === 'number')
314
+ argMap.set(resIndex, res);
315
+ if (typeof nextIndex === 'number')
316
+ argMap.set(nextIndex, next);
317
+ if (typeof bodyIndex === 'number')
318
+ argMap.set(bodyIndex, req.validatedBody ?? req.body);
319
+ if (typeof queryIndex === 'number')
320
+ argMap.set(queryIndex, req.validatedQuery ?? req.query);
321
+ if (typeof paramsIndex === 'number')
322
+ argMap.set(paramsIndex, req.validatedParams ?? req.params);
323
+ let realArgs;
324
+ if (argMap.size > 0) {
325
+ const maxIndex = Math.max(...Array.from(argMap.keys()));
326
+ realArgs = Array.from({ length: maxIndex + 1 }, (_, i) => argMap.get(i));
327
+ }
328
+ else {
329
+ realArgs = [req, res, next];
224
330
  }
225
331
  const result = await handler(...realArgs);
226
- // ResponseBuilder'ı handle et
227
332
  if (result && typeof result.build === 'function') {
228
333
  result.build(res);
229
334
  }
230
- else {
335
+ else if (!res.headersSent) {
231
336
  res.json(result);
232
337
  }
233
338
  }
@@ -240,15 +345,13 @@ function buildRouterFromController(controllerClass) {
240
345
  return router;
241
346
  }
242
347
  function buildApp(app, controllers) {
243
- for (const controller of controllers) {
244
- const router = buildRouterFromController(controller);
245
- const controllerPath = Reflect.getMetadata(exports.keyOfPath, controller.constructor);
246
- if (controllerPath) {
348
+ for (const instance of controllers) {
349
+ const router = buildRouterFromController(instance);
350
+ const controllerPath = Reflect.getMetadata(exports.keyOfPath, instance.constructor);
351
+ if (controllerPath)
247
352
  app.use(controllerPath, router);
248
- }
249
- else {
353
+ else
250
354
  app.use(router);
251
- }
252
355
  }
253
356
  return app;
254
357
  }
package/dist/rest.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"rest.js","sourceRoot":"","sources":["../rest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rest.js","sourceRoot":"","sources":["../rest.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "scripts": {
3
- "test": "jest",
3
+ "test": "jest --config jest.config.ts --detectOpenHandles",
4
4
  "build": "tsc",
5
5
  "clean": "rm -rf dist",
6
6
  "rebuild": "npm run clean && npm run build",
@@ -25,7 +25,7 @@
25
25
  "license": "ISC",
26
26
  "description": "Mini Express Framework - Lightweight and modular Express.js framework with TypeScript support",
27
27
  "name": "@mini2/core",
28
- "version": "1.1.16",
28
+ "version": "1.1.18",
29
29
  "author": "Mustafa Çolakoglu <mustafacolakoglu94@gmail.com> (https://github.com/mustafa-colakoglu)",
30
30
  "dependencies": {
31
31
  "class-transformer": "^0.5.1",
@@ -42,9 +42,14 @@
42
42
  "devDependencies": {
43
43
  "@types/cors": "^2.8.17",
44
44
  "@types/express": "^4.17.21",
45
+ "@types/jest": "^30.0.0",
45
46
  "@types/morgan": "^1.9.9",
46
47
  "@types/node": "^20.14.9",
48
+ "@types/supertest": "^6.0.3",
47
49
  "@types/swagger-ui-express": "^4.1.6",
50
+ "jest": "^30.0.5",
51
+ "supertest": "^7.1.4",
52
+ "ts-jest": "^29.4.1",
48
53
  "typescript": "^5.5.3"
49
54
  }
50
55
  }
@@ -0,0 +1,10 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "outDir": "./dist-tests",
5
+ "rootDir": "./",
6
+ "noEmitOnError": false
7
+ },
8
+ "include": ["__tests__/**/*.ts", "src/**/*.ts", "*.ts"],
9
+ "exclude": ["node_modules", "dist", "dist-tests"]
10
+ }