@zenofolio/hyper-decor 1.0.4 → 1.0.8

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 (189) hide show
  1. package/.agent/rules/philosophy.md +103 -0
  2. package/.agent/rules/writing.md +32 -0
  3. package/README.md +107 -142
  4. package/dist/__internals/constants.d.ts +1 -58
  5. package/dist/__internals/constants.js +3 -65
  6. package/dist/__internals/helpers/lifecycle.helper.d.ts +3 -0
  7. package/dist/__internals/helpers/lifecycle.helper.js +25 -0
  8. package/dist/__internals/helpers/merge-metadata.d.ts +2 -3
  9. package/dist/__internals/helpers/merge-metadata.js +43 -23
  10. package/dist/__internals/helpers/prepare.helper.d.ts +5 -0
  11. package/dist/__internals/helpers/prepare.helper.js +392 -0
  12. package/dist/__internals/stores/hyper.store.d.ts +5 -0
  13. package/dist/__internals/stores/hyper.store.js +5 -0
  14. package/dist/__internals/stores/index.d.ts +4 -15
  15. package/dist/__internals/stores/index.js +18 -35
  16. package/dist/__internals/stores/meta.store.d.ts +34 -0
  17. package/dist/__internals/stores/meta.store.js +107 -0
  18. package/dist/__internals/stores/scope.store.d.ts +14 -0
  19. package/dist/__internals/stores/scope.store.js +29 -0
  20. package/dist/__internals/stores/serivces.store.d.ts +1 -0
  21. package/dist/__internals/stores/{store.interface.js → serivces.store.js} +2 -0
  22. package/dist/__internals/transform/middleware.transform.d.ts +3 -0
  23. package/dist/__internals/transform/middleware.transform.js +19 -0
  24. package/dist/__internals/transform/role.transform.d.ts +1 -1
  25. package/dist/__internals/transform/role.transform.js +10 -7
  26. package/dist/__internals/transform/scope.transfrom.d.ts +5 -7
  27. package/dist/__internals/transform/scope.transfrom.js +53 -39
  28. package/dist/__internals/transform/transform.registry.d.ts +33 -0
  29. package/dist/__internals/transform/transform.registry.js +59 -0
  30. package/dist/__internals/types.d.ts +53 -4
  31. package/dist/__internals/utils/function.util.d.ts +1 -4
  32. package/dist/__internals/utils/function.util.js +22 -10
  33. package/dist/common/bootstrap.d.ts +6 -2
  34. package/dist/common/bootstrap.js +51 -8
  35. package/dist/common/helpers/index.d.ts +1 -0
  36. package/dist/common/helpers/index.js +1 -0
  37. package/dist/common/helpers/scopes.d.ts +3 -3
  38. package/dist/common/helpers/scopes.js +7 -8
  39. package/dist/common/helpers/state.d.ts +17 -0
  40. package/dist/common/helpers/state.js +44 -0
  41. package/dist/common/message-bus.d.ts +11 -0
  42. package/dist/common/message-bus.js +51 -0
  43. package/dist/common/testing.d.ts +56 -0
  44. package/dist/common/testing.js +193 -0
  45. package/dist/common/transport.d.ts +10 -0
  46. package/dist/common/transport.js +59 -0
  47. package/dist/constants.d.ts +1 -0
  48. package/dist/constants.js +2 -1
  49. package/dist/decorators.d.ts +1 -0
  50. package/dist/{common/openapi/index.js → decorators.js} +1 -2
  51. package/dist/extension.js +11 -2
  52. package/dist/index.d.ts +11 -3
  53. package/dist/index.js +11 -3
  54. package/dist/lib/event/meta.store.d.ts +4 -0
  55. package/dist/lib/event/meta.store.js +5 -0
  56. package/dist/lib/openapi/collectors/class.collector.d.ts +5 -0
  57. package/dist/lib/openapi/collectors/class.collector.js +10 -0
  58. package/dist/lib/openapi/collectors/index.d.ts +3 -0
  59. package/dist/lib/openapi/collectors/index.js +19 -0
  60. package/dist/lib/openapi/collectors/method.collector.d.ts +7 -0
  61. package/dist/lib/openapi/collectors/method.collector.js +101 -0
  62. package/dist/lib/openapi/collectors/schema.collector.d.ts +6 -0
  63. package/dist/lib/openapi/collectors/schema.collector.js +29 -0
  64. package/dist/lib/openapi/constants.d.ts +47 -0
  65. package/dist/lib/openapi/constants.js +61 -0
  66. package/dist/lib/openapi/decorators.d.ts +16 -0
  67. package/dist/lib/openapi/decorators.js +93 -0
  68. package/dist/lib/openapi/index.d.ts +30 -0
  69. package/dist/lib/openapi/index.js +136 -0
  70. package/dist/lib/openapi/metadata.d.ts +7 -0
  71. package/dist/lib/openapi/metadata.js +8 -0
  72. package/dist/lib/openapi/metadata.registry.d.ts +29 -0
  73. package/dist/lib/openapi/metadata.registry.js +41 -0
  74. package/dist/lib/openapi/types.d.ts +131 -0
  75. package/dist/lib/server/decorators/File.d.ts +37 -0
  76. package/dist/{decorators → lib/server/decorators}/File.js +62 -75
  77. package/dist/lib/server/decorators/Http.d.ts +12 -0
  78. package/dist/lib/server/decorators/Http.js +56 -0
  79. package/dist/lib/server/decorators/HyperApp.d.ts +7 -0
  80. package/dist/lib/server/decorators/HyperApp.js +14 -0
  81. package/dist/lib/server/decorators/HyperController.d.ts +6 -0
  82. package/dist/lib/server/decorators/HyperController.js +15 -0
  83. package/dist/lib/server/decorators/HyperModule.d.ts +6 -0
  84. package/dist/lib/server/decorators/HyperModule.js +13 -0
  85. package/dist/lib/server/decorators/HyperService.d.ts +12 -0
  86. package/dist/lib/server/decorators/HyperService.js +30 -0
  87. package/dist/lib/server/decorators/Messaging.d.ts +8 -0
  88. package/dist/lib/server/decorators/Messaging.js +19 -0
  89. package/dist/lib/server/decorators/Middleware.d.ts +18 -0
  90. package/dist/lib/server/decorators/Middleware.js +52 -0
  91. package/dist/lib/server/decorators/Output.d.ts +6 -0
  92. package/dist/lib/server/decorators/Output.js +14 -0
  93. package/dist/lib/server/decorators/Pass.d.ts +10 -0
  94. package/dist/lib/server/decorators/Pass.js +13 -0
  95. package/dist/lib/server/decorators/Role.d.ts +7 -0
  96. package/dist/lib/server/decorators/Role.js +14 -0
  97. package/dist/lib/server/decorators/Routes.d.ts +14 -0
  98. package/dist/lib/server/decorators/Routes.js +39 -0
  99. package/dist/lib/server/decorators/Scope.d.ts +7 -0
  100. package/dist/lib/server/decorators/Scope.js +14 -0
  101. package/dist/{decorators → lib/server/decorators}/index.d.ts +9 -4
  102. package/dist/{decorators → lib/server/decorators}/index.js +9 -4
  103. package/dist/lib/server/decorators/metadata.d.ts +1 -0
  104. package/dist/lib/server/decorators/metadata.js +5 -0
  105. package/dist/lib/server/decorators/types.d.ts +125 -0
  106. package/dist/lib/server/decorators/types.js +6 -0
  107. package/dist/{exeptions → lib/server/exeptions}/HyperException.d.ts +2 -1
  108. package/dist/{exeptions → lib/server/exeptions}/HyperException.js +2 -1
  109. package/dist/{exeptions → lib/server/exeptions}/HyperFileException.js +1 -1
  110. package/dist/{exeptions → lib/server/exeptions}/NotRoleException.js +1 -1
  111. package/dist/{exeptions → lib/server/exeptions}/NotScopeException.js +1 -1
  112. package/dist/lib/tree/tree.d.ts +36 -0
  113. package/dist/lib/tree/tree.js +106 -0
  114. package/dist/type.d.ts +13 -2
  115. package/hyper-express-decorators.d.ts +1 -0
  116. package/package.json +81 -60
  117. package/scripts/clean.js +56 -0
  118. package/scripts/test-server.ts +85 -0
  119. package/tsconfig.json +18 -13
  120. package/vitest.config.mjs +30 -0
  121. package/.mocharc.js +0 -5
  122. package/dist/__internals/creators/request.creator.d.ts +0 -12
  123. package/dist/__internals/creators/request.creator.js +0 -53
  124. package/dist/__internals/creators/routes.creator.d.ts +0 -10
  125. package/dist/__internals/creators/routes.creator.js +0 -37
  126. package/dist/__internals/decorator-base.d.ts +0 -30
  127. package/dist/__internals/decorator-base.js +0 -86
  128. package/dist/__internals/store.d.ts +0 -10
  129. package/dist/__internals/store.js +0 -17
  130. package/dist/__internals/stores/middleware.store.d.ts +0 -7
  131. package/dist/__internals/stores/middleware.store.js +0 -19
  132. package/dist/__internals/stores/params.store.d.ts +0 -21
  133. package/dist/__internals/stores/params.store.js +0 -65
  134. package/dist/__internals/stores/routes.store.d.ts +0 -17
  135. package/dist/__internals/stores/routes.store.js +0 -43
  136. package/dist/__internals/stores/store.interface.d.ts +0 -8
  137. package/dist/__internals/transform/method.transform.d.ts +0 -2
  138. package/dist/__internals/transform/method.transform.js +0 -20
  139. package/dist/__internals/transform/pass.transfrom.d.ts +0 -1
  140. package/dist/__internals/transform/pass.transfrom.js +0 -2
  141. package/dist/__internals/utils/mixin.utils.d.ts +0 -11
  142. package/dist/__internals/utils/mixin.utils.js +0 -34
  143. package/dist/__internals/utils/router.d.ts +0 -1
  144. package/dist/__internals/utils/router.js +0 -2
  145. package/dist/common/openapi/collect-class-data.d.ts +0 -21
  146. package/dist/common/openapi/collect-class-data.js +0 -45
  147. package/dist/common/openapi/collect-function-data.d.ts +0 -32
  148. package/dist/common/openapi/collect-function-data.js +0 -70
  149. package/dist/common/openapi/index.d.ts +0 -2
  150. package/dist/decorators/File.d.ts +0 -65
  151. package/dist/decorators/Http.d.ts +0 -55
  152. package/dist/decorators/Http.js +0 -93
  153. package/dist/decorators/HyperApp.d.ts +0 -7
  154. package/dist/decorators/HyperApp.js +0 -262
  155. package/dist/decorators/HyperController.d.ts +0 -2
  156. package/dist/decorators/HyperController.js +0 -19
  157. package/dist/decorators/HyperModule.d.ts +0 -5
  158. package/dist/decorators/HyperModule.js +0 -14
  159. package/dist/decorators/Middleware.d.ts +0 -24
  160. package/dist/decorators/Middleware.js +0 -51
  161. package/dist/decorators/Pass.d.ts +0 -12
  162. package/dist/decorators/Pass.js +0 -29
  163. package/dist/decorators/Role.d.ts +0 -6
  164. package/dist/decorators/Role.js +0 -34
  165. package/dist/decorators/Routes.d.ts +0 -14
  166. package/dist/decorators/Routes.js +0 -21
  167. package/dist/decorators/Scope.d.ts +0 -6
  168. package/dist/decorators/Scope.js +0 -25
  169. package/dist/decorators/types.d.ts +0 -89
  170. /package/dist/{decorators → lib/openapi}/types.js +0 -0
  171. /package/dist/{exeptions → lib/server/exeptions}/DuplicateControllerPathException.d.ts +0 -0
  172. /package/dist/{exeptions → lib/server/exeptions}/DuplicateControllerPathException.js +0 -0
  173. /package/dist/{exeptions → lib/server/exeptions}/DuplicatedException.d.ts +0 -0
  174. /package/dist/{exeptions → lib/server/exeptions}/DuplicatedException.js +0 -0
  175. /package/dist/{exeptions → lib/server/exeptions}/DuplicatedHandlerException.d.ts +0 -0
  176. /package/dist/{exeptions → lib/server/exeptions}/DuplicatedHandlerException.js +0 -0
  177. /package/dist/{exeptions → lib/server/exeptions}/HyperFileException.d.ts +0 -0
  178. /package/dist/{exeptions → lib/server/exeptions}/MethodNotFountException.d.ts +0 -0
  179. /package/dist/{exeptions → lib/server/exeptions}/MethodNotFountException.js +0 -0
  180. /package/dist/{exeptions → lib/server/exeptions}/NotPropertyException.d.ts +0 -0
  181. /package/dist/{exeptions → lib/server/exeptions}/NotPropertyException.js +0 -0
  182. /package/dist/{exeptions → lib/server/exeptions}/NotRoleException.d.ts +0 -0
  183. /package/dist/{exeptions → lib/server/exeptions}/NotScopeException.d.ts +0 -0
  184. /package/dist/{exeptions → lib/server/exeptions}/WrongPlaceException.d.ts +0 -0
  185. /package/dist/{exeptions → lib/server/exeptions}/WrongPlaceException.js +0 -0
  186. /package/dist/{exeptions → lib/server/exeptions}/index.d.ts +0 -0
  187. /package/dist/{exeptions → lib/server/exeptions}/index.js +0 -0
  188. /package/dist/{exeptions → lib/server/exeptions}/types.d.ts +0 -0
  189. /package/dist/{exeptions → lib/server/exeptions}/types.js +0 -0
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Middleware = void 0;
4
+ require("reflect-metadata");
5
+ const metadata_1 = require("./metadata");
6
+ /**
7
+ * 🚀 Middleware Decorator
8
+ * Purely injects middleware metadata into the target class or method.
9
+ */
10
+ const Middleware = (...middleware) => (target, propertyKey) => {
11
+ const current = metadata_1.HyperMeta.get(target, propertyKey);
12
+ const existing = current.middlewares || [];
13
+ metadata_1.HyperMeta.set(target, propertyKey, {
14
+ middlewares: [...existing, ...middleware]
15
+ });
16
+ };
17
+ exports.Middleware = Middleware;
18
+ /**
19
+ * Exclude middleware from matching paths.
20
+ */
21
+ exports.Middleware.exclude = (expressions, middleware) => (target, propertyKey) => {
22
+ const handler = buildHandler("exclude", expressions, middleware);
23
+ const current = metadata_1.HyperMeta.get(target, propertyKey);
24
+ const existing = current.middlewares || [];
25
+ metadata_1.HyperMeta.set(target, propertyKey, {
26
+ middlewares: [...existing, handler]
27
+ });
28
+ };
29
+ /**
30
+ * Only run middleware on matching paths.
31
+ */
32
+ exports.Middleware.only = (expressions, middleware) => (target, propertyKey) => {
33
+ const handler = buildHandler("only", expressions, middleware);
34
+ const current = metadata_1.HyperMeta.get(target, propertyKey);
35
+ const existing = current.middlewares || [];
36
+ metadata_1.HyperMeta.set(target, propertyKey, {
37
+ middlewares: [...existing, handler]
38
+ });
39
+ };
40
+ /**
41
+ * Helper function to build middleware handlers for "only" and "exclude" modes.
42
+ */
43
+ const buildHandler = (mode, expressions, middleware) => {
44
+ const matchers = Array.isArray(expressions) ? expressions : [expressions];
45
+ return (req, res, next) => {
46
+ const matches = matchers.some((rx) => rx.test(req.path));
47
+ if ((mode === "only" && !matches) || (mode === "exclude" && matches)) {
48
+ return next();
49
+ }
50
+ return middleware(req, res, next);
51
+ };
52
+ };
@@ -0,0 +1,6 @@
1
+ import "reflect-metadata";
2
+ /**
3
+ * 🚀 Output Decorator
4
+ * Purely injects output schema metadata into the method.
5
+ */
6
+ export declare function Output(schema?: any): (target: any, propertyKey?: any) => void;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Output = Output;
4
+ require("reflect-metadata");
5
+ const metadata_1 = require("./metadata");
6
+ /**
7
+ * 🚀 Output Decorator
8
+ * Purely injects output schema metadata into the method.
9
+ */
10
+ function Output(schema) {
11
+ return (target, propertyKey) => {
12
+ metadata_1.HyperMeta.set(target, propertyKey, { output: schema });
13
+ };
14
+ }
@@ -0,0 +1,10 @@
1
+ import "reflect-metadata";
2
+ import { Request, Response } from "hyper-express";
3
+ export interface PassOptions {
4
+ (req: Request, res: Response): boolean | Promise<boolean>;
5
+ }
6
+ /**
7
+ * 🚀 Pass Decorator
8
+ * Purely injects pass metadata into the target class or method.
9
+ */
10
+ export declare const Pass: (options?: PassOptions | boolean) => any;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Pass = void 0;
4
+ require("reflect-metadata");
5
+ const metadata_1 = require("./metadata");
6
+ /**
7
+ * 🚀 Pass Decorator
8
+ * Purely injects pass metadata into the target class or method.
9
+ */
10
+ const Pass = (options = true) => (target, propertyKey) => {
11
+ metadata_1.HyperMeta.set(target, propertyKey, { pass: options });
12
+ };
13
+ exports.Pass = Pass;
@@ -0,0 +1,7 @@
1
+ import "reflect-metadata";
2
+ import { RoleType } from "./types";
3
+ /**
4
+ * 🚀 Role Decorator
5
+ * Purely injects role metadata into the target class or method.
6
+ */
7
+ export declare const Role: <T extends string = string>(roles: RoleType<T>) => (target: any, propertyKey?: any) => void;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Role = void 0;
4
+ require("reflect-metadata");
5
+ const metadata_1 = require("./metadata");
6
+ /**
7
+ * 🚀 Role Decorator
8
+ * Purely injects role metadata into the target class or method.
9
+ */
10
+ const Role = (roles) => (target, propertyKey) => {
11
+ const _roles = Array.isArray(roles) ? roles : [roles];
12
+ metadata_1.HyperMeta.set(target, propertyKey, { roles: _roles });
13
+ };
14
+ exports.Role = Role;
@@ -0,0 +1,14 @@
1
+ import "reflect-metadata";
2
+ export declare const Get: (path?: string, options?: Record<string, unknown> | undefined) => (target: object, propertyKey?: any) => void;
3
+ export declare const Post: (path?: string, options?: Record<string, unknown> | undefined) => (target: object, propertyKey?: any) => void;
4
+ export declare const Put: (path?: string, options?: Record<string, unknown> | undefined) => (target: object, propertyKey?: any) => void;
5
+ export declare const Delete: (path?: string, options?: Record<string, unknown> | undefined) => (target: object, propertyKey?: any) => void;
6
+ export declare const Patch: (path?: string, options?: Record<string, unknown> | undefined) => (target: object, propertyKey?: any) => void;
7
+ export declare const Options: (path?: string, options?: Record<string, unknown> | undefined) => (target: object, propertyKey?: any) => void;
8
+ export declare const Head: (path?: string, options?: Record<string, unknown> | undefined) => (target: object, propertyKey?: any) => void;
9
+ export declare const Trace: (path?: string, options?: Record<string, unknown> | undefined) => (target: object, propertyKey?: any) => void;
10
+ export declare const Any: (path?: string, options?: Record<string, unknown> | undefined) => (target: object, propertyKey?: any) => void;
11
+ export declare const All: (path?: string, options?: Record<string, unknown> | undefined) => (target: object, propertyKey?: any) => void;
12
+ export declare const Connect: (path?: string, options?: Record<string, unknown> | undefined) => (target: object, propertyKey?: any) => void;
13
+ export declare const WS: (path?: string, options?: Record<string, unknown> | undefined) => (target: object, propertyKey?: any) => void;
14
+ export declare const Upgrade: (path?: string, options?: Record<string, unknown> | undefined) => (target: object, propertyKey?: any) => void;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Upgrade = exports.WS = exports.Connect = exports.All = exports.Any = exports.Trace = exports.Head = exports.Options = exports.Patch = exports.Delete = exports.Put = exports.Post = exports.Get = void 0;
4
+ require("reflect-metadata");
5
+ const metadata_1 = require("./metadata");
6
+ /**
7
+ * 🛠️ Helper to create route decorators
8
+ */
9
+ function createRouteDecorator(method) {
10
+ return (path = "/", options) => {
11
+ return (target, propertyKey) => {
12
+ const returnType = Reflect.getMetadata("design:returntype", target, propertyKey);
13
+ metadata_1.HyperMeta.set(target, propertyKey, {
14
+ route: {
15
+ method,
16
+ path,
17
+ propertyKey: propertyKey,
18
+ options: options,
19
+ },
20
+ reflection: {
21
+ output: returnType
22
+ }
23
+ });
24
+ };
25
+ };
26
+ }
27
+ exports.Get = createRouteDecorator("get");
28
+ exports.Post = createRouteDecorator("post");
29
+ exports.Put = createRouteDecorator("put");
30
+ exports.Delete = createRouteDecorator("delete");
31
+ exports.Patch = createRouteDecorator("patch");
32
+ exports.Options = createRouteDecorator("options");
33
+ exports.Head = createRouteDecorator("head");
34
+ exports.Trace = createRouteDecorator("trace");
35
+ exports.Any = createRouteDecorator("any");
36
+ exports.All = createRouteDecorator("all");
37
+ exports.Connect = createRouteDecorator("connect");
38
+ exports.WS = createRouteDecorator("ws");
39
+ exports.Upgrade = createRouteDecorator("upgrade");
@@ -0,0 +1,7 @@
1
+ import "reflect-metadata";
2
+ import { ScopeType } from "./types";
3
+ /**
4
+ * 🚀 Scope Decorator
5
+ * Purely injects scope metadata into the target class or method.
6
+ */
7
+ export declare const Scope: <T extends string = string>(scopes: ScopeType<T>) => (target: any, propertyKey?: any) => void;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Scope = void 0;
4
+ require("reflect-metadata");
5
+ const metadata_1 = require("./metadata");
6
+ /**
7
+ * 🚀 Scope Decorator
8
+ * Purely injects scope metadata into the target class or method.
9
+ */
10
+ const Scope = (scopes) => (target, propertyKey) => {
11
+ const _scopes = Array.isArray(scopes) ? scopes : [scopes];
12
+ metadata_1.HyperMeta.set(target, propertyKey, { scopes: _scopes });
13
+ };
14
+ exports.Scope = Scope;
@@ -1,11 +1,16 @@
1
+ export * from "./metadata";
2
+ export * from "./types";
1
3
  export * from "./HyperApp";
2
4
  export * from "./HyperModule";
3
5
  export * from "./HyperController";
4
- export * from "./Middleware";
5
- export * from "./Scope";
6
- export * from "./Role";
6
+ export * from "./HyperService";
7
7
  export * from "./Routes";
8
- export * from "./types";
9
8
  export * from "./Http";
9
+ export * from "./Role";
10
+ export * from "./Scope";
11
+ export * from "./Output";
12
+ export * from "./Middleware";
10
13
  export * from "./Pass";
11
14
  export * from "./File";
15
+ export * from "./Messaging";
16
+ export * from "./Output";
@@ -14,14 +14,19 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./metadata"), exports);
18
+ __exportStar(require("./types"), exports);
17
19
  __exportStar(require("./HyperApp"), exports);
18
20
  __exportStar(require("./HyperModule"), exports);
19
21
  __exportStar(require("./HyperController"), exports);
20
- __exportStar(require("./Middleware"), exports);
21
- __exportStar(require("./Scope"), exports);
22
- __exportStar(require("./Role"), exports);
22
+ __exportStar(require("./HyperService"), exports);
23
23
  __exportStar(require("./Routes"), exports);
24
- __exportStar(require("./types"), exports);
25
24
  __exportStar(require("./Http"), exports);
25
+ __exportStar(require("./Role"), exports);
26
+ __exportStar(require("./Scope"), exports);
27
+ __exportStar(require("./Output"), exports);
28
+ __exportStar(require("./Middleware"), exports);
26
29
  __exportStar(require("./Pass"), exports);
27
30
  __exportStar(require("./File"), exports);
31
+ __exportStar(require("./Messaging"), exports);
32
+ __exportStar(require("./Output"), exports);
@@ -0,0 +1 @@
1
+ export { HyperMeta } from "../../../__internals/stores/hyper.store";
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HyperMeta = void 0;
4
+ var hyper_store_1 = require("../../../__internals/stores/hyper.store");
5
+ Object.defineProperty(exports, "HyperMeta", { enumerable: true, get: function () { return hyper_store_1.HyperMeta; } });
@@ -0,0 +1,125 @@
1
+ import type { MiddlewareHandler, MiddlewareNext, Request, Response, ServerConstructorOptions } from "hyper-express";
2
+ import { InjectionToken, RegistrationOptions } from "tsyringe";
3
+ import { IMessageTransport } from "../../../common/transport";
4
+ export interface OnInit {
5
+ onInit(): Promise<any>;
6
+ }
7
+ export interface IsSingleton {
8
+ isSingleton(): boolean;
9
+ }
10
+ export type Constructor<R = object> = new (...args: any[]) => R;
11
+ export type ImportObject = {
12
+ token: (abstract new (...args: any[]) => any) | InjectionToken;
13
+ useClass?: Constructor;
14
+ useValue?: any;
15
+ useFactory?: (...args: any[]) => any;
16
+ useToken?: InjectionToken;
17
+ options?: RegistrationOptions;
18
+ };
19
+ export type ImportType = Constructor<Partial<OnInit> & Partial<IsSingleton>> | InjectionToken | ImportObject;
20
+ export type ConstructorDecorator = (target: Constructor, kay?: any, descriptor?: PropertyDescriptor) => Constructor;
21
+ export type HyperClassDecorator<T> = (options?: T) => ConstructorDecorator;
22
+ export type HyperMethodDecorator<T> = (options?: T) => (target: any, key?: any, descriptor?: PropertyDescriptor) => void;
23
+ export interface LogSpaces {
24
+ modules: boolean;
25
+ controllers: boolean;
26
+ middleware: boolean;
27
+ routes: boolean;
28
+ messaging: boolean;
29
+ }
30
+ export interface IHyperHooks {
31
+ onBeforeInit?(instance: any, token: any, context: any): void | Promise<void>;
32
+ onAfterInit?(instance: any, token: any, context: any): void | Promise<void>;
33
+ }
34
+ export interface HyperAppMetadata {
35
+ name?: string;
36
+ version?: string;
37
+ description?: string;
38
+ author?: string;
39
+ license?: string;
40
+ prefix?: string;
41
+ logger?: (...args: any[]) => void;
42
+ logs?: Partial<LogSpaces>;
43
+ modules: Constructor[];
44
+ imports?: ImportType[];
45
+ options?: ServerConstructorOptions;
46
+ uwsOptions?: any;
47
+ transports?: IMessageTransport[];
48
+ hooks?: IHyperHooks | Constructor<IHyperHooks>;
49
+ }
50
+ export interface HyperAppDecorator {
51
+ (options?: HyperAppMetadata): (target: Constructor) => Constructor;
52
+ }
53
+ export type HyperModuleMetadata = {
54
+ path?: string;
55
+ name?: string;
56
+ roles?: string[];
57
+ scopes?: string[];
58
+ modules?: Constructor[];
59
+ controllers?: Constructor[];
60
+ imports?: ImportType[];
61
+ };
62
+ export type HyperModuleDecorator = HyperClassDecorator<HyperModuleMetadata>;
63
+ export type HyperControllerMetadata = {
64
+ path?: string;
65
+ roles?: string[];
66
+ scopes?: string[];
67
+ imports?: ImportType[];
68
+ };
69
+ export type HyperControllerDecorator = HyperClassDecorator<HyperControllerMetadata | string>;
70
+ export type ParameterResolver = (req: Request, res: Response) => any | Promise<any>;
71
+ export type HyperParameterMetadata = {
72
+ params: {
73
+ index: number;
74
+ type: Constructor | Function;
75
+ source?: "body" | "query" | "params" | "headers" | "req" | "res";
76
+ picker?: string;
77
+ schema?: object | Function;
78
+ isWholeSource?: boolean;
79
+ name?: string;
80
+ decorator: string;
81
+ resolver?: ParameterResolver;
82
+ }[];
83
+ };
84
+ export type HyperParamDecorator = (key: string) => (target: any, key: string, index: number) => void;
85
+ export type RoleMap<T> = {
86
+ role: T;
87
+ description: string;
88
+ message?: string;
89
+ };
90
+ /**
91
+ * Type definition for Role decorator.
92
+ * It can accept a single role, an array of roles, or a function that evaluates roles dynamically.
93
+ */
94
+ export type RoleType<T extends string = string> = T | T[] | RoleMap<T> | RoleMap<T>[];
95
+ export type ScopeMap<T extends string = string> = {
96
+ scope: T;
97
+ description: string;
98
+ message?: string;
99
+ };
100
+ /**
101
+ * Type definition for Scope decorator.
102
+ * It can accept a single scope or multiple scopes as an array of strings.
103
+ */
104
+ export type ScopeType<T extends string = string> = T | T[] | ScopeMap<T> | ScopeMap<T>[];
105
+ /**
106
+ * Type definition for Route metadata.
107
+ * Contains method, path, and other configuration for a specific method.
108
+ */
109
+ export interface RouteMetadata {
110
+ method: string;
111
+ path: string;
112
+ propertyKey: string;
113
+ options?: Record<string, unknown>;
114
+ }
115
+ export declare abstract class MiddlewareClass {
116
+ abstract handle(req: Request, res: Response, next: MiddlewareNext): void;
117
+ }
118
+ export interface MiddlewareClassConstructor {
119
+ new (...args: any[]): MiddlewareClass;
120
+ }
121
+ /**
122
+ * Type definition for Middleware.
123
+ * Middleware can be a single handler or an array of handlers.
124
+ */
125
+ export type MiddlewareType = MiddlewareHandler | MiddlewareClassConstructor;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MiddlewareClass = void 0;
4
+ class MiddlewareClass {
5
+ }
6
+ exports.MiddlewareClass = MiddlewareClass;
@@ -2,6 +2,7 @@ import { ExceptionType } from "./types";
2
2
  export default class HyperException extends Error {
3
3
  code: ExceptionType;
4
4
  additionalInfo: any;
5
- constructor(message: string, code?: ExceptionType, additionalInfo?: any);
5
+ status: number;
6
+ constructor(message: string, code?: ExceptionType, additionalInfo?: any, status?: number);
6
7
  static throw(message: string, code?: ExceptionType, additionalInfo?: {}): void;
7
8
  }
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  class HyperException extends Error {
4
- constructor(message, code = "HyperException", additionalInfo = {}) {
4
+ constructor(message, code = "HyperException", additionalInfo = {}, status = 500) {
5
5
  super(message);
6
6
  this.code = code;
7
7
  this.additionalInfo = additionalInfo;
8
+ this.status = status;
8
9
  }
9
10
  static throw(message, code, additionalInfo = {}) {
10
11
  throw new this(message, code, additionalInfo);
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const HyperException_1 = __importDefault(require("./HyperException"));
7
7
  class HyperFileException extends HyperException_1.default {
8
8
  constructor(message, additional) {
9
- super(message, "HyperFileException", additional);
9
+ super(message, "HyperFileException", additional, 400);
10
10
  }
11
11
  }
12
12
  exports.default = HyperFileException;
@@ -9,7 +9,7 @@ class NotRoleException extends HyperException_1.default {
9
9
  super(message, "NotRoleException", {
10
10
  roles,
11
11
  requiredRoles,
12
- });
12
+ }, 403);
13
13
  this.roles = roles;
14
14
  this.requiredRoles = requiredRoles;
15
15
  }
@@ -9,7 +9,7 @@ class NotScopeException extends HyperException_1.default {
9
9
  super(message || `You don't have the required scopes to access this resource`, "NotScopeException", {
10
10
  requestScopes,
11
11
  requiredScopes,
12
- });
12
+ }, 403);
13
13
  this.message = message;
14
14
  this.requestScopes = requestScopes;
15
15
  this.requiredScopes = requiredScopes;
@@ -0,0 +1,36 @@
1
+ import { HyperAppMetadata, HyperModuleMetadata, HyperControllerMetadata, HyperParameterMetadata, RouteMetadata, ImportType, Constructor } from "../server/decorators/types";
2
+ export interface AppTree {
3
+ app: HyperAppMetadata & {
4
+ target: object;
5
+ fullPath: string;
6
+ };
7
+ modules: Record<string, ModuleNode>;
8
+ paths: Record<string, RouteNode[]>;
9
+ openapi?: Record<string, unknown>;
10
+ }
11
+ export interface ModuleNode {
12
+ metadata: HyperModuleMetadata;
13
+ target: object;
14
+ fullPath: string;
15
+ modules: Record<string, ModuleNode>;
16
+ controllers: Record<string, ControllerNode>;
17
+ services: ImportType[];
18
+ openapi?: Record<string, unknown>;
19
+ }
20
+ export interface ControllerNode {
21
+ metadata: HyperControllerMetadata;
22
+ target: object;
23
+ fullPath: string;
24
+ routes: RouteNode[];
25
+ services: ImportType[];
26
+ openapi?: Record<string, unknown>;
27
+ }
28
+ export interface RouteNode extends RouteMetadata {
29
+ fullPath: string;
30
+ params: HyperParameterMetadata['params'];
31
+ openapi?: Record<string, unknown>;
32
+ }
33
+ /**
34
+ * Extracts the complete application metadata tree.
35
+ */
36
+ export declare function getAppTree(Target: Constructor): AppTree;
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAppTree = getAppTree;
4
+ const meta_store_1 = require("../../__internals/stores/meta.store");
5
+ const metadata_1 = require("../openapi/metadata");
6
+ const path_util_1 = require("../../__internals/utils/path.util");
7
+ const metadata_registry_1 = require("../openapi/metadata.registry");
8
+ /**
9
+ * Extracts the complete application metadata tree.
10
+ */
11
+ function getAppTree(Target) {
12
+ var _a;
13
+ const root = meta_store_1.Metadata.get(Target);
14
+ const common = (_a = root.server) === null || _a === void 0 ? void 0 : _a.common;
15
+ const prefix = (common === null || common === void 0 ? void 0 : common.prefix) || "/";
16
+ const tree = {
17
+ app: Object.assign(Object.assign({}, (common || {})), { target: Target, fullPath: prefix }),
18
+ modules: {},
19
+ paths: {}
20
+ };
21
+ const modules = (common === null || common === void 0 ? void 0 : common.modules) || [];
22
+ modules.forEach(m => {
23
+ const node = getModuleNode(m, prefix, tree.paths);
24
+ tree.modules[m.name] = node;
25
+ });
26
+ // Apply tree processors
27
+ metadata_registry_1.openApiRegistry.getProcessors().forEach(processor => processor(tree));
28
+ return tree;
29
+ }
30
+ function getModuleNode(Target, parentPath = "", globalPaths = {}) {
31
+ var _a;
32
+ const root = meta_store_1.Metadata.get(Target);
33
+ const common = (_a = root.server) === null || _a === void 0 ? void 0 : _a.common;
34
+ const currentPath = (0, path_util_1.join)(parentPath, (common === null || common === void 0 ? void 0 : common.path) || "");
35
+ const openapi = metadata_1.SwaggerMeta.get(Target); // Fixed: Metadata utility now returns root.common
36
+ // Execute custom collectors
37
+ metadata_registry_1.openApiRegistry.getCollectors("class").forEach(collector => {
38
+ const extra = collector(Target);
39
+ if (extra)
40
+ Object.assign(openapi, extra);
41
+ });
42
+ const node = {
43
+ metadata: common,
44
+ target: Target,
45
+ fullPath: currentPath,
46
+ modules: {},
47
+ controllers: {},
48
+ services: ((common === null || common === void 0 ? void 0 : common.imports) || []),
49
+ openapi: openapi
50
+ };
51
+ ((common === null || common === void 0 ? void 0 : common.modules) || []).forEach(m => {
52
+ node.modules[m.name] = getModuleNode(m, currentPath, globalPaths);
53
+ });
54
+ ((common === null || common === void 0 ? void 0 : common.controllers) || []).forEach(c => {
55
+ node.controllers[c.name] = getControllerNode(c, currentPath, globalPaths);
56
+ });
57
+ return node;
58
+ }
59
+ function getControllerNode(Target, parentPath = "", globalPaths = {}) {
60
+ var _a;
61
+ const root = meta_store_1.Metadata.get(Target);
62
+ const common = (_a = root.server) === null || _a === void 0 ? void 0 : _a.common;
63
+ const currentPath = (0, path_util_1.join)(parentPath, (common === null || common === void 0 ? void 0 : common.path) || "");
64
+ const openapi = metadata_1.SwaggerMeta.get(Target);
65
+ const server = root.server || { common: {}, methods: {} };
66
+ const methods = server.methods;
67
+ const routes = Object.keys(methods).map((propertyKey) => {
68
+ var _a;
69
+ const methodMeta = methods[propertyKey];
70
+ const route = methodMeta.route;
71
+ if (!route)
72
+ return null;
73
+ const params = ((_a = methodMeta.params) === null || _a === void 0 ? void 0 : _a.params) || [];
74
+ const fullPath = (0, path_util_1.join)(currentPath, route.path);
75
+ // Get OpenAPI metadata for the method
76
+ const methodOpenApi = (metadata_1.SwaggerMeta.get(Target, propertyKey) || {});
77
+ // Execute custom collectors
78
+ metadata_registry_1.openApiRegistry.getCollectors("method").forEach((collector) => {
79
+ const extra = collector(Target.prototype, propertyKey);
80
+ if (extra)
81
+ Object.assign(methodOpenApi, extra);
82
+ });
83
+ const routeNode = Object.assign(Object.assign({}, route), { fullPath,
84
+ params, openapi: methodOpenApi });
85
+ // Add to global paths map
86
+ if (!globalPaths[fullPath]) {
87
+ globalPaths[fullPath] = [];
88
+ }
89
+ globalPaths[fullPath].push(routeNode);
90
+ return routeNode;
91
+ }).filter(Boolean);
92
+ // Execute custom collectors
93
+ metadata_registry_1.openApiRegistry.getCollectors("class").forEach(collector => {
94
+ const extra = collector(Target);
95
+ if (extra)
96
+ Object.assign(openapi, extra);
97
+ });
98
+ return {
99
+ metadata: common,
100
+ target: Target,
101
+ fullPath: currentPath,
102
+ routes,
103
+ services: (common === null || common === void 0 ? void 0 : common.imports) || [],
104
+ openapi: openapi
105
+ };
106
+ }
package/dist/type.d.ts CHANGED
@@ -1,10 +1,21 @@
1
1
  import type { Server } from "hyper-express";
2
+ declare module "hyper-express" {
3
+ interface Request {
4
+ setValue(key: string, value: any): void;
5
+ getValue<T>(key: string, defaultValue?: T): T;
6
+ }
7
+ }
8
+ import { TransformerInput } from "./__internals/transform/transform.registry";
2
9
  export type HyperRoleOptions = string | string[];
3
10
  export type HyperScopeOptions = string | string[];
4
11
  export interface IHyperApplication extends Partial<Server> {
5
- onPrepare(): void;
12
+ onPrepare?(): void;
13
+ emit?(topic: string, data: any): Promise<void>;
6
14
  }
7
- export type IHyperApp<T> = T & Server;
15
+ export type IHyperApp<T> = T & Server & {
16
+ emit(topic: string, data: any): Promise<void>;
17
+ useTransform(transformer: TransformerInput): IHyperApp<T>;
18
+ };
8
19
  export interface IHyperAppTarget {
9
20
  new (...args: any[]): IHyperApplication;
10
21
  }
@@ -6,6 +6,7 @@ declare module "hyper-express" {
6
6
 
7
7
  getScopes(): string[] | undefined;
8
8
  setScopes(scopes: HyperScopeOptions): void;
9
+ setFullScopes(): void
9
10
 
10
11
  getRoles(): string[] | undefined;
11
12
  setRole(role: HyperRoleOptions): void;