honovajs 0.0.1

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 (122) hide show
  1. package/README.md +366 -0
  2. package/dist/adapters/db/drizzle.d.ts +7 -0
  3. package/dist/adapters/db/drizzle.d.ts.map +1 -0
  4. package/dist/adapters/db/drizzle.js +8 -0
  5. package/dist/adapters/db/drizzle.js.map +1 -0
  6. package/dist/adapters/db/index.d.ts +5 -0
  7. package/dist/adapters/db/index.d.ts.map +1 -0
  8. package/dist/adapters/db/index.js +5 -0
  9. package/dist/adapters/db/index.js.map +1 -0
  10. package/dist/adapters/db/mondel.d.ts +2 -0
  11. package/dist/adapters/db/mondel.d.ts.map +1 -0
  12. package/dist/adapters/db/mondel.js +2 -0
  13. package/dist/adapters/db/mondel.js.map +1 -0
  14. package/dist/adapters/db/mongodb.d.ts +7 -0
  15. package/dist/adapters/db/mongodb.d.ts.map +1 -0
  16. package/dist/adapters/db/mongodb.js +8 -0
  17. package/dist/adapters/db/mongodb.js.map +1 -0
  18. package/dist/adapters/db/prisma.d.ts +9 -0
  19. package/dist/adapters/db/prisma.d.ts.map +1 -0
  20. package/dist/adapters/db/prisma.js +16 -0
  21. package/dist/adapters/db/prisma.js.map +1 -0
  22. package/dist/core/application.d.ts +45 -0
  23. package/dist/core/application.d.ts.map +1 -0
  24. package/dist/core/application.js +138 -0
  25. package/dist/core/application.js.map +1 -0
  26. package/dist/core/constants.d.ts +9 -0
  27. package/dist/core/constants.d.ts.map +1 -0
  28. package/dist/core/constants.js +9 -0
  29. package/dist/core/constants.js.map +1 -0
  30. package/dist/core/container/container.d.ts +34 -0
  31. package/dist/core/container/container.d.ts.map +1 -0
  32. package/dist/core/container/container.js +243 -0
  33. package/dist/core/container/container.js.map +1 -0
  34. package/dist/core/container/index.d.ts +3 -0
  35. package/dist/core/container/index.d.ts.map +1 -0
  36. package/dist/core/container/index.js +3 -0
  37. package/dist/core/container/index.js.map +1 -0
  38. package/dist/core/container/inject.d.ts +3 -0
  39. package/dist/core/container/inject.d.ts.map +1 -0
  40. package/dist/core/container/inject.js +9 -0
  41. package/dist/core/container/inject.js.map +1 -0
  42. package/dist/core/decorators/context.d.ts +12 -0
  43. package/dist/core/decorators/context.d.ts.map +1 -0
  44. package/dist/core/decorators/context.js +2 -0
  45. package/dist/core/decorators/context.js.map +1 -0
  46. package/dist/core/decorators/controller.d.ts +2 -0
  47. package/dist/core/decorators/controller.d.ts.map +1 -0
  48. package/dist/core/decorators/controller.js +52 -0
  49. package/dist/core/decorators/controller.js.map +1 -0
  50. package/dist/core/decorators/http-methods.d.ts +9 -0
  51. package/dist/core/decorators/http-methods.d.ts.map +1 -0
  52. package/dist/core/decorators/http-methods.js +45 -0
  53. package/dist/core/decorators/http-methods.js.map +1 -0
  54. package/dist/core/decorators/index.d.ts +8 -0
  55. package/dist/core/decorators/index.d.ts.map +1 -0
  56. package/dist/core/decorators/index.js +8 -0
  57. package/dist/core/decorators/index.js.map +1 -0
  58. package/dist/core/decorators/inject.d.ts +3 -0
  59. package/dist/core/decorators/inject.d.ts.map +1 -0
  60. package/dist/core/decorators/inject.js +8 -0
  61. package/dist/core/decorators/inject.js.map +1 -0
  62. package/dist/core/decorators/injectable.d.ts +6 -0
  63. package/dist/core/decorators/injectable.d.ts.map +1 -0
  64. package/dist/core/decorators/injectable.js +10 -0
  65. package/dist/core/decorators/injectable.js.map +1 -0
  66. package/dist/core/decorators/middleware.d.ts +3 -0
  67. package/dist/core/decorators/middleware.d.ts.map +1 -0
  68. package/dist/core/decorators/middleware.js +45 -0
  69. package/dist/core/decorators/middleware.js.map +1 -0
  70. package/dist/core/decorators/module.d.ts +3 -0
  71. package/dist/core/decorators/module.d.ts.map +1 -0
  72. package/dist/core/decorators/module.js +7 -0
  73. package/dist/core/decorators/module.js.map +1 -0
  74. package/dist/core/metadata.d.ts +17 -0
  75. package/dist/core/metadata.d.ts.map +1 -0
  76. package/dist/core/metadata.js +72 -0
  77. package/dist/core/metadata.js.map +1 -0
  78. package/dist/core/router/index.d.ts +2 -0
  79. package/dist/core/router/index.d.ts.map +1 -0
  80. package/dist/core/router/index.js +2 -0
  81. package/dist/core/router/index.js.map +1 -0
  82. package/dist/core/router/router.d.ts +14 -0
  83. package/dist/core/router/router.d.ts.map +1 -0
  84. package/dist/core/router/router.js +60 -0
  85. package/dist/core/router/router.js.map +1 -0
  86. package/dist/core/types.d.ts +29 -0
  87. package/dist/core/types.d.ts.map +1 -0
  88. package/dist/core/types.js +2 -0
  89. package/dist/core/types.js.map +1 -0
  90. package/dist/database/index.d.ts +4 -0
  91. package/dist/database/index.d.ts.map +1 -0
  92. package/dist/database/index.js +4 -0
  93. package/dist/database/index.js.map +1 -0
  94. package/dist/database/manager.d.ts +72 -0
  95. package/dist/database/manager.d.ts.map +1 -0
  96. package/dist/database/manager.js +160 -0
  97. package/dist/database/manager.js.map +1 -0
  98. package/dist/database/middleware.d.ts +21 -0
  99. package/dist/database/middleware.d.ts.map +1 -0
  100. package/dist/database/middleware.js +23 -0
  101. package/dist/database/middleware.js.map +1 -0
  102. package/dist/database/types.d.ts +31 -0
  103. package/dist/database/types.d.ts.map +1 -0
  104. package/dist/database/types.js +24 -0
  105. package/dist/database/types.js.map +1 -0
  106. package/dist/index.d.ts +10 -0
  107. package/dist/index.d.ts.map +1 -0
  108. package/dist/index.js +10 -0
  109. package/dist/index.js.map +1 -0
  110. package/dist/middleware/auth/apikey.d.ts +16 -0
  111. package/dist/middleware/auth/apikey.d.ts.map +1 -0
  112. package/dist/middleware/auth/apikey.js +37 -0
  113. package/dist/middleware/auth/apikey.js.map +1 -0
  114. package/dist/middleware/auth/bearer.d.ts +17 -0
  115. package/dist/middleware/auth/bearer.d.ts.map +1 -0
  116. package/dist/middleware/auth/bearer.js +41 -0
  117. package/dist/middleware/auth/bearer.js.map +1 -0
  118. package/dist/middleware/auth/index.d.ts +3 -0
  119. package/dist/middleware/auth/index.d.ts.map +1 -0
  120. package/dist/middleware/auth/index.js +3 -0
  121. package/dist/middleware/auth/index.js.map +1 -0
  122. package/package.json +47 -0
@@ -0,0 +1,45 @@
1
+ import { getControllerMetadata, prependMethodRouteMiddlewares, prependRouteMiddlewares, setControllerMetadata, } from "../metadata";
2
+ function applyControllerMiddlewares(target, middlewares) {
3
+ const existing = getControllerMetadata(target);
4
+ setControllerMetadata(target, {
5
+ prefix: existing?.prefix ?? "",
6
+ middlewares: [...(existing?.middlewares ?? []), ...middlewares],
7
+ });
8
+ }
9
+ export function UseMiddleware(...middlewares) {
10
+ return ((...args) => {
11
+ // Standard class decorator: (value, context)
12
+ if (args.length === 2 &&
13
+ typeof args[1] === "object" &&
14
+ args[1] !== null &&
15
+ args[1].kind === "class") {
16
+ const [value] = args;
17
+ applyControllerMiddlewares(value, middlewares);
18
+ return;
19
+ }
20
+ // Standard method decorator: (value, context)
21
+ if (args.length === 2 &&
22
+ typeof args[1] === "object" &&
23
+ args[1] !== null &&
24
+ args[1].kind === "method") {
25
+ const [value] = args;
26
+ prependMethodRouteMiddlewares(value, middlewares);
27
+ return;
28
+ }
29
+ // Legacy method decorator: (target, propertyKey, descriptor)
30
+ if (args.length === 3) {
31
+ const [target, propertyKey, descriptor] = args;
32
+ const fn = descriptor?.value ??
33
+ target[propertyKey];
34
+ if (fn) {
35
+ prependMethodRouteMiddlewares(fn, middlewares);
36
+ }
37
+ prependRouteMiddlewares(target.constructor, propertyKey, middlewares);
38
+ return descriptor;
39
+ }
40
+ // Legacy class decorator: (target)
41
+ const [target] = args;
42
+ applyControllerMiddlewares(target, middlewares);
43
+ });
44
+ }
45
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../src/core/decorators/middleware.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,qBAAqB,EACrB,6BAA6B,EAC7B,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AAErB,SAAS,0BAA0B,CAAC,MAAgB,EAAE,WAAgC;IACpF,MAAM,QAAQ,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAE/C,qBAAqB,CAAC,MAAM,EAAE;QAC5B,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,EAAE;QAC9B,WAAW,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,IAAI,EAAE,CAAC,EAAE,GAAG,WAAW,CAAC;KAChE,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAG,WAAgC;IAC/D,OAAO,CAAC,CAAC,GAAG,IAAe,EAAE,EAAE;QAC7B,6CAA6C;QAC7C,IACE,IAAI,CAAC,MAAM,KAAK,CAAC;YACjB,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ;YAC3B,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI;YACf,IAAI,CAAC,CAAC,CAAuB,CAAC,IAAI,KAAK,OAAO,EAC/C,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,GAAG,IAAqC,CAAC;YACtD,0BAA0B,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,8CAA8C;QAC9C,IACE,IAAI,CAAC,MAAM,KAAK,CAAC;YACjB,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ;YAC3B,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI;YACf,IAAI,CAAC,CAAC,CAAuB,CAAC,IAAI,KAAK,QAAQ,EAChD,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,GAAG,IAAsC,CAAC;YACvD,6BAA6B,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QAED,6DAA6D;QAC7D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,GAAG,IAIzC,CAAC;YAEF,MAAM,EAAE,GAAI,UAAU,EAAE,KAA8B;gBAClD,MAA2C,CAAC,WAAW,CAE3C,CAAC;YACjB,IAAI,EAAE,EAAE,CAAC;gBACP,6BAA6B,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;YACjD,CAAC;YAED,uBAAuB,CAAC,MAAM,CAAC,WAAuB,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;YAClF,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,mCAAmC;QACnC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAkB,CAAC;QACpC,0BAA0B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAClD,CAAC,CAAqC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ModuleMetadata } from "../types";
2
+ export declare function Module(metadata: ModuleMetadata): ClassDecorator;
3
+ //# sourceMappingURL=module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/core/decorators/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG/C,wBAAgB,MAAM,CAAC,QAAQ,EAAE,cAAc,GAAG,cAAc,CAI/D"}
@@ -0,0 +1,7 @@
1
+ import { setModuleMetadata } from "../metadata";
2
+ export function Module(metadata) {
3
+ return (target) => {
4
+ setModuleMetadata(target, metadata);
5
+ };
6
+ }
7
+ //# sourceMappingURL=module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../../src/core/decorators/module.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,UAAU,MAAM,CAAC,QAAwB;IAC7C,OAAO,CAAC,MAAM,EAAE,EAAE;QAChB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { ControllerMetadata, InjectableMetadata, ModuleMetadata, RouteDefinition, Constructor } from "./types";
2
+ export declare function setModuleMetadata(target: Function, metadata: ModuleMetadata): void;
3
+ export declare function getModuleMetadata(target: Function): ModuleMetadata | undefined;
4
+ export declare function setControllerMetadata(target: Function, metadata: ControllerMetadata): void;
5
+ export declare function getControllerMetadata(target: Function): ControllerMetadata | undefined;
6
+ export declare function appendRouteMetadata(target: Function, route: RouteDefinition): void;
7
+ export declare function setRoutesMetadata(target: Function, routes: RouteDefinition[]): void;
8
+ export declare function getRoutesMetadata(target: Function): RouteDefinition[];
9
+ export declare function setMethodRouteMetadata(method: Function, route: RouteDefinition): void;
10
+ export declare function getMethodRouteMetadata(method: Function): RouteDefinition | undefined;
11
+ export declare function prependRouteMiddlewares(target: Function, handlerName: string | symbol, middlewares: RouteDefinition["middlewares"]): void;
12
+ export declare function prependMethodRouteMiddlewares(method: Function, middlewares: RouteDefinition["middlewares"]): void;
13
+ export declare function setInjectableMetadata(target: Function, metadata: InjectableMetadata): void;
14
+ export declare function getInjectableMetadata(target: Function): InjectableMetadata | undefined;
15
+ export declare function setInjectionToken(target: Function, index: number, token: Constructor | string | symbol): void;
16
+ export declare function getInjectionTokens(target: Function): Map<number, Constructor | string | symbol>;
17
+ //# sourceMappingURL=metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/core/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,WAAW,EACZ,MAAM,SAAS,CAAC;AASjB,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI,CAElF;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,GAAG,cAAc,GAAG,SAAS,CAE9E;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAE1F;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,QAAQ,GAAG,kBAAkB,GAAG,SAAS,CAEtF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,CAGlF;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAEnF;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,GAAG,eAAe,EAAE,CAErE;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,QAAQ,EAChB,KAAK,EAAE,eAAe,GACrB,IAAI,CAEN;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,QAAQ,GACf,eAAe,GAAG,SAAS,CAE7B;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,QAAQ,EAChB,WAAW,EAAE,MAAM,GAAG,MAAM,EAC5B,WAAW,EAAE,eAAe,CAAC,aAAa,CAAC,GAC1C,IAAI,CAeN;AAED,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,QAAQ,EAChB,WAAW,EAAE,eAAe,CAAC,aAAa,CAAC,GAC1C,IAAI,CAUN;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAE1F;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,QAAQ,GAAG,kBAAkB,GAAG,SAAS,CAEtF;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,QAAQ,EAChB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM,GACnC,IAAI,CAIN;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,QAAQ,GACf,GAAG,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC,CAE5C"}
@@ -0,0 +1,72 @@
1
+ const moduleMetadata = new WeakMap();
2
+ const controllerMetadata = new WeakMap();
3
+ const routesMetadata = new WeakMap();
4
+ const methodRouteMetadata = new WeakMap();
5
+ const injectableMetadata = new WeakMap();
6
+ const injectionMetadata = new WeakMap();
7
+ export function setModuleMetadata(target, metadata) {
8
+ moduleMetadata.set(target, metadata);
9
+ }
10
+ export function getModuleMetadata(target) {
11
+ return moduleMetadata.get(target);
12
+ }
13
+ export function setControllerMetadata(target, metadata) {
14
+ controllerMetadata.set(target, metadata);
15
+ }
16
+ export function getControllerMetadata(target) {
17
+ return controllerMetadata.get(target);
18
+ }
19
+ export function appendRouteMetadata(target, route) {
20
+ const existing = routesMetadata.get(target) ?? [];
21
+ routesMetadata.set(target, [...existing, route]);
22
+ }
23
+ export function setRoutesMetadata(target, routes) {
24
+ routesMetadata.set(target, routes);
25
+ }
26
+ export function getRoutesMetadata(target) {
27
+ return routesMetadata.get(target) ?? [];
28
+ }
29
+ export function setMethodRouteMetadata(method, route) {
30
+ methodRouteMetadata.set(method, route);
31
+ }
32
+ export function getMethodRouteMetadata(method) {
33
+ return methodRouteMetadata.get(method);
34
+ }
35
+ export function prependRouteMiddlewares(target, handlerName, middlewares) {
36
+ const routes = routesMetadata.get(target) ?? [];
37
+ const index = routes.findIndex((route) => route.handlerName === handlerName);
38
+ if (index < 0) {
39
+ return;
40
+ }
41
+ const next = [...routes];
42
+ next[index] = {
43
+ ...next[index],
44
+ middlewares: [...middlewares, ...next[index].middlewares],
45
+ };
46
+ routesMetadata.set(target, next);
47
+ }
48
+ export function prependMethodRouteMiddlewares(method, middlewares) {
49
+ const existing = methodRouteMetadata.get(method);
50
+ if (!existing) {
51
+ return;
52
+ }
53
+ methodRouteMetadata.set(method, {
54
+ ...existing,
55
+ middlewares: [...middlewares, ...existing.middlewares],
56
+ });
57
+ }
58
+ export function setInjectableMetadata(target, metadata) {
59
+ injectableMetadata.set(target, metadata);
60
+ }
61
+ export function getInjectableMetadata(target) {
62
+ return injectableMetadata.get(target);
63
+ }
64
+ export function setInjectionToken(target, index, token) {
65
+ const existing = injectionMetadata.get(target) ?? new Map();
66
+ existing.set(index, token);
67
+ injectionMetadata.set(target, existing);
68
+ }
69
+ export function getInjectionTokens(target) {
70
+ return injectionMetadata.get(target) ?? new Map();
71
+ }
72
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/core/metadata.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from "./router";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/router/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./router";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/router/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { Hono } from "hono";
2
+ import { Container } from "../container/container";
3
+ import type { Constructor } from "../types";
4
+ export declare class Router<Env extends Record<string, unknown> = Record<string, unknown>> {
5
+ private readonly app;
6
+ private readonly container;
7
+ constructor(app: Hono<{
8
+ Bindings: Env;
9
+ }>, container: Container);
10
+ registerController(controllerClass: Constructor): void;
11
+ private registerRoute;
12
+ private normalizePath;
13
+ }
14
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../src/core/router/router.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAgB,MAAM,MAAM,CAAC;AAE1C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,UAAU,CAAC;AAKxD,qBAAa,MAAM,CAAC,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAE7E,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBADT,GAAG,EAAE,IAAI,CAAC;QAAE,QAAQ,EAAE,GAAG,CAAA;KAAE,CAAC,EAC5B,SAAS,EAAE,SAAS;IAGvC,kBAAkB,CAAC,eAAe,EAAE,WAAW,GAAG,IAAI;IA8BtD,OAAO,CAAC,aAAa;IAqCrB,OAAO,CAAC,aAAa;CAGtB"}
@@ -0,0 +1,60 @@
1
+ import { getControllerMetadata, getRoutesMetadata } from "../metadata";
2
+ export class Router {
3
+ constructor(app, container) {
4
+ this.app = app;
5
+ this.container = container;
6
+ }
7
+ registerController(controllerClass) {
8
+ const controllerMetadata = getControllerMetadata(controllerClass);
9
+ if (!controllerMetadata) {
10
+ throw new Error(`Class ${controllerClass.name} is not decorated with @Controller()`);
11
+ }
12
+ const routes = getRoutesMetadata(controllerClass);
13
+ for (const route of routes) {
14
+ const fullPath = this.normalizePath(controllerMetadata.prefix + route.path);
15
+ const middlewares = [...controllerMetadata.middlewares, ...route.middlewares];
16
+ const handler = async (c) => {
17
+ const controller = this.container.resolveWithContext(controllerClass, c);
18
+ const method = controller[route.handlerName];
19
+ if (typeof method !== "function") {
20
+ throw new Error(`Handler ${String(route.handlerName)} not found on ${controllerClass.name}`);
21
+ }
22
+ return method.call(controller, c);
23
+ };
24
+ this.registerRoute(route.method, fullPath, middlewares, handler);
25
+ }
26
+ }
27
+ registerRoute(method, path, middlewares, handler) {
28
+ const handlers = middlewares.length > 0 ? [...middlewares, handler] : [handler];
29
+ if (method === "HEAD") {
30
+ this.app.on("HEAD", [path], ...handlers);
31
+ return;
32
+ }
33
+ switch (method) {
34
+ case "GET":
35
+ this.app.get(path, ...handlers);
36
+ return;
37
+ case "POST":
38
+ this.app.post(path, ...handlers);
39
+ return;
40
+ case "PUT":
41
+ this.app.put(path, ...handlers);
42
+ return;
43
+ case "PATCH":
44
+ this.app.patch(path, ...handlers);
45
+ return;
46
+ case "DELETE":
47
+ this.app.delete(path, ...handlers);
48
+ return;
49
+ case "OPTIONS":
50
+ this.app.options(path, ...handlers);
51
+ return;
52
+ default:
53
+ throw new Error(`Unsupported method: ${String(method)}`);
54
+ }
55
+ }
56
+ normalizePath(path) {
57
+ return path.replace(/\/+$/g, "").replace(/\/+/g, "/") || "/";
58
+ }
59
+ }
60
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/core/router/router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { MiddlewareHandler, Context as HonoContext } from "hono";
2
+ export type Constructor<T = unknown> = new (...args: never[]) => T;
3
+ export type HttpMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "OPTIONS" | "HEAD";
4
+ export interface RouteDefinition {
5
+ method: HttpMethod;
6
+ path: string;
7
+ handlerName: string | symbol;
8
+ middlewares: MiddlewareHandler[];
9
+ }
10
+ export interface ControllerMetadata {
11
+ prefix: string;
12
+ middlewares: MiddlewareHandler[];
13
+ }
14
+ export interface ModuleMetadata {
15
+ controllers?: Constructor[];
16
+ providers?: Constructor[];
17
+ imports?: Constructor[];
18
+ }
19
+ export interface InjectableMetadata {
20
+ scope: "singleton" | "request" | "transient";
21
+ autoResolve?: boolean;
22
+ }
23
+ export interface OnModuleInit<TContext = unknown> {
24
+ onModuleInit(context?: TContext): void;
25
+ }
26
+ export type HandlerFunction<Env extends Record<string, unknown>> = (ctx: HonoContext<{
27
+ Bindings: Env;
28
+ }>) => Response | Promise<Response>;
29
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,MAAM,CAAC;AAEtE,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,OAAO,IAAI,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAEnE,MAAM,MAAM,UAAU,GAClB,KAAK,GACL,MAAM,GACN,KAAK,GACL,OAAO,GACP,QAAQ,GACR,SAAS,GACT,MAAM,CAAC;AAEX,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,WAAW,EAAE,iBAAiB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,iBAAiB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,WAAW,CAAC;IAC7C,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,YAAY,CAAC,QAAQ,GAAG,OAAO;IAC9C,YAAY,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;CACxC;AAED,MAAM,MAAM,eAAe,CAAC,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CACjE,GAAG,EAAE,WAAW,CAAC;IAAE,QAAQ,EAAE,GAAG,CAAA;CAAE,CAAC,KAChC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export * from "./manager";
2
+ export * from "./middleware";
3
+ export * from "./types";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/database/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./manager";
2
+ export * from "./middleware";
3
+ export * from "./types";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/database/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC"}
@@ -0,0 +1,72 @@
1
+ import type { Context } from "hono";
2
+ export type DbLifecycleStrategy = "request" | "manual";
3
+ export interface DbLifecycleOptions {
4
+ strategy?: DbLifecycleStrategy;
5
+ }
6
+ export interface DatabaseAdapterConnectArgs<Env extends Record<string, unknown>, Options> {
7
+ url: string;
8
+ options: Options;
9
+ env: Env;
10
+ context: Context<{
11
+ Bindings: Env;
12
+ Variables: Record<string, unknown>;
13
+ }>;
14
+ }
15
+ export interface DatabaseAdapter<Env extends Record<string, unknown> = Record<string, unknown>, Client = unknown, Options = unknown> {
16
+ name: string;
17
+ connect: (args: DatabaseAdapterConnectArgs<Env, Options>) => Promise<Client> | Client;
18
+ disconnect?(client: Client): Promise<void> | void;
19
+ }
20
+ export interface DatabaseConnectionDefinition<Env extends Record<string, unknown> = Record<string, unknown>, ConnectionName extends string = string, Client = unknown, Options = unknown> {
21
+ connectionName: ConnectionName;
22
+ adapter: DatabaseAdapter<Env, Client, Options>;
23
+ options?: Options;
24
+ url?: string;
25
+ urlFromEnv?: Extract<keyof Env, string> | string;
26
+ resolveUrl?: (c: Context<{
27
+ Bindings: Env;
28
+ Variables: Record<string, unknown>;
29
+ }>) => string | Promise<string>;
30
+ required?: boolean;
31
+ eager?: boolean;
32
+ }
33
+ export type DatabaseConnectionDefinitions<Env extends Record<string, unknown> = Record<string, unknown>> = readonly DatabaseConnectionDefinition<Env, string, unknown, unknown>[];
34
+ export interface DatabaseConfig<Env extends Record<string, unknown> = Record<string, unknown>, TConnections extends DatabaseConnectionDefinitions<Env> = DatabaseConnectionDefinitions<Env>> {
35
+ defaultConnection?: TConnections[number]["connectionName"];
36
+ connections: TConnections;
37
+ lifecycle?: DbLifecycleOptions;
38
+ }
39
+ type ConnectionClient<TConnection> = TConnection extends DatabaseConnectionDefinition<any, any, infer Client, any> ? Client : never;
40
+ export type InferDbConnectionsFromDefinitions<TConnections extends readonly DatabaseConnectionDefinition<any, any, any, any>[]> = {
41
+ [TConnection in TConnections[number] as TConnection["connectionName"]]: ConnectionClient<TConnection>;
42
+ };
43
+ type InferDefaultName<TConnections extends readonly DatabaseConnectionDefinition<any, any, any, any>[], TDefault> = TDefault extends string ? TDefault : TConnections extends readonly [infer First, ...infer _Rest] ? First extends DatabaseConnectionDefinition<any, infer Name, any, any> ? Name : never : never;
44
+ export type InferDbDefaultClient<TDatabase extends DatabaseConfig<any, any>> = TDatabase extends DatabaseConfig<any, infer TConnections> ? InferDbConnectionsFromDefinitions<TConnections>[InferDefaultName<TConnections, TDatabase["defaultConnection"]>] : never;
45
+ export type InferDbConnectionsFromDatabase<TDatabase extends DatabaseConfig<any, any>> = TDatabase extends DatabaseConfig<any, infer TConnections> ? InferDbConnectionsFromDefinitions<TConnections> : never;
46
+ export type InferDbDefaultAndConnections<TDatabase extends DatabaseConfig<any, any>> = InferDbDefaultClient<TDatabase> & InferDbConnectionsFromDatabase<TDatabase>;
47
+ export declare function defineDatabase<Env extends Record<string, unknown>, const TConnections extends DatabaseConnectionDefinitions<Env>>(config: DatabaseConfig<Env, TConnections>): DatabaseConfig<Env, TConnections>;
48
+ export declare function defineDatabase<Env extends Record<string, unknown>>(): <const TConnections extends DatabaseConnectionDefinitions<Env>>(config: DatabaseConfig<Env, TConnections>) => DatabaseConfig<Env, TConnections>;
49
+ export declare class DatabaseManager<Env extends Record<string, unknown>, TDatabase extends DatabaseConfig<Env, DatabaseConnectionDefinitions<Env>>> {
50
+ private readonly env;
51
+ private readonly context;
52
+ private readonly config;
53
+ private readonly definitions;
54
+ private readonly connected;
55
+ private readonly dbConnections;
56
+ private readonly defaultConnectionName;
57
+ private static readonly optionalConnectionUnavailablePrefix;
58
+ constructor(env: Env, context: Context<{
59
+ Bindings: Env;
60
+ Variables: Record<string, unknown>;
61
+ }>, config: TDatabase);
62
+ initialize(): Promise<InferDbDefaultAndConnections<TDatabase>>;
63
+ connection<TName extends keyof InferDbConnectionsFromDatabase<TDatabase> & string>(connectionName: TName): Promise<InferDbConnectionsFromDatabase<TDatabase>[TName]>;
64
+ get defaultConnection(): string;
65
+ get connections(): InferDbConnectionsFromDatabase<TDatabase>;
66
+ get db(): InferDbDefaultAndConnections<TDatabase>;
67
+ cleanup(): Promise<void>;
68
+ private initializeConnection;
69
+ private resolveConnectionUrl;
70
+ }
71
+ export {};
72
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/database/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,160 @@
1
+ export function defineDatabase(config) {
2
+ if (config) {
3
+ return config;
4
+ }
5
+ return (resolved) => resolved;
6
+ }
7
+ export class DatabaseManager {
8
+ static { this.optionalConnectionUnavailablePrefix = "Optional database connection"; }
9
+ constructor(env, context, config) {
10
+ this.env = env;
11
+ this.context = context;
12
+ this.config = config;
13
+ this.definitions = new Map();
14
+ this.connected = new Map();
15
+ this.dbConnections = {};
16
+ if (!config.connections || config.connections.length === 0) {
17
+ throw new Error("Database configuration must include at least one connection.");
18
+ }
19
+ for (const connection of config.connections) {
20
+ if (this.definitions.has(connection.connectionName)) {
21
+ throw new Error(`Duplicate database connection \"${connection.connectionName}\". Connection names must be unique.`);
22
+ }
23
+ this.definitions.set(connection.connectionName, {
24
+ connectionName: connection.connectionName,
25
+ required: connection.required !== false,
26
+ eager: connection.eager === true,
27
+ adapter: connection.adapter,
28
+ options: connection.options,
29
+ url: connection.url,
30
+ urlFromEnv: connection.urlFromEnv ? String(connection.urlFromEnv) : undefined,
31
+ resolveUrl: connection.resolveUrl,
32
+ });
33
+ }
34
+ const connectionNames = [...this.definitions.keys()];
35
+ if (connectionNames.length > 1 && !config.defaultConnection) {
36
+ throw new Error("When multiple database connections are configured, defaultConnection is required.");
37
+ }
38
+ this.defaultConnectionName =
39
+ String(config.defaultConnection ?? connectionNames[0]);
40
+ if (!this.definitions.has(this.defaultConnectionName)) {
41
+ throw new Error(`defaultConnection \"${this.defaultConnectionName}\" is not present in connections list.`);
42
+ }
43
+ const defaultDefinition = this.definitions.get(this.defaultConnectionName);
44
+ if (defaultDefinition && !defaultDefinition.required) {
45
+ throw new Error("defaultConnection cannot be optional (required must not be false).");
46
+ }
47
+ }
48
+ async initialize() {
49
+ const connectionNamesToInitialize = new Set([this.defaultConnectionName]);
50
+ const eagerConnections = [...this.definitions.values()]
51
+ .filter((definition) => definition.eager)
52
+ .map((definition) => definition.connectionName);
53
+ for (const connectionName of eagerConnections) {
54
+ connectionNamesToInitialize.add(connectionName);
55
+ }
56
+ await Promise.all([...connectionNamesToInitialize].map((name) => this.initializeConnection(name)));
57
+ return this.db;
58
+ }
59
+ async connection(connectionName) {
60
+ if (this.connected.has(connectionName)) {
61
+ return this.connected.get(connectionName);
62
+ }
63
+ const definition = this.definitions.get(connectionName);
64
+ if (!definition) {
65
+ const available = [...this.definitions.keys()].join(", ") || "none";
66
+ throw new Error(`Database connection \"${connectionName}\" is not configured. Available: ${available}.`);
67
+ }
68
+ const url = await this.resolveConnectionUrl(definition);
69
+ if (!url) {
70
+ if (definition.required) {
71
+ throw new Error(`Could not resolve URL for required database connection \"${connectionName}\". Configure resolveUrl, url or urlFromEnv.`);
72
+ }
73
+ throw new Error(`Optional database connection \"${connectionName}\" is unavailable (URL not resolved).`);
74
+ }
75
+ const client = await definition.adapter.connect({
76
+ url,
77
+ options: definition.options,
78
+ env: this.env,
79
+ context: this.context,
80
+ });
81
+ this.connected.set(connectionName, client);
82
+ this.dbConnections[connectionName] = client;
83
+ return client;
84
+ }
85
+ get defaultConnection() {
86
+ return this.defaultConnectionName;
87
+ }
88
+ get connections() {
89
+ return this.dbConnections;
90
+ }
91
+ get db() {
92
+ const map = this.connections;
93
+ const defaultClient = map[this.defaultConnectionName];
94
+ if (!defaultClient || typeof defaultClient !== "object") {
95
+ return defaultClient;
96
+ }
97
+ return new Proxy(defaultClient, {
98
+ get(target, property, receiver) {
99
+ if (typeof property === "string" && property in map) {
100
+ return map[property];
101
+ }
102
+ return Reflect.get(target, property, receiver);
103
+ },
104
+ has(target, property) {
105
+ if (typeof property === "string" && property in map) {
106
+ return true;
107
+ }
108
+ return Reflect.has(target, property);
109
+ },
110
+ });
111
+ }
112
+ async cleanup() {
113
+ const disconnections = [...this.connected.entries()].map(async ([name, client]) => {
114
+ const definition = this.definitions.get(name);
115
+ if (!definition?.adapter.disconnect) {
116
+ return;
117
+ }
118
+ await definition.adapter.disconnect(client);
119
+ });
120
+ await Promise.all(disconnections);
121
+ this.connected.clear();
122
+ for (const key of Object.keys(this.dbConnections)) {
123
+ delete this.dbConnections[key];
124
+ }
125
+ }
126
+ async initializeConnection(connectionName) {
127
+ try {
128
+ await this.connection(connectionName);
129
+ }
130
+ catch (error) {
131
+ const definition = this.definitions.get(connectionName);
132
+ if (!definition) {
133
+ throw error;
134
+ }
135
+ if (definition.required) {
136
+ throw error;
137
+ }
138
+ if (error instanceof Error &&
139
+ error.message.startsWith(DatabaseManager.optionalConnectionUnavailablePrefix)) {
140
+ return;
141
+ }
142
+ throw error;
143
+ }
144
+ }
145
+ async resolveConnectionUrl(definition) {
146
+ if (definition.resolveUrl) {
147
+ const resolved = await definition.resolveUrl(this.context);
148
+ return typeof resolved === "string" ? resolved.trim() : "";
149
+ }
150
+ if (typeof definition.url === "string") {
151
+ return definition.url.trim();
152
+ }
153
+ if (definition.urlFromEnv) {
154
+ const value = this.env[definition.urlFromEnv];
155
+ return typeof value === "string" ? value.trim() : "";
156
+ }
157
+ return "";
158
+ }
159
+ }
160
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/database/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { DatabaseManager, type DatabaseConfig, type DatabaseConnectionDefinitions, type InferDbConnectionsFromDatabase, type InferDbDefaultAndConnections } from "./manager";
2
+ export type DbManagerMiddlewareOptions<Env extends Record<string, unknown>> = DatabaseConfig<Env, DatabaseConnectionDefinitions<Env>>;
3
+ export declare function createDbManagerMiddleware<const TDatabase extends DatabaseConfig<any, any>>(config: TDatabase): import("hono").MiddlewareHandler<{
4
+ Bindings: TDatabase extends DatabaseConfig<infer TEnv extends Record<string, unknown>, any> ? TEnv : Record<string, unknown>;
5
+ Variables: {
6
+ dbManager: DatabaseManager<TDatabase extends DatabaseConfig<infer TEnv extends Record<string, unknown>, any> ? TEnv : Record<string, unknown>, TDatabase>;
7
+ db: InferDbDefaultAndConnections<TDatabase>;
8
+ dbConnections: InferDbConnectionsFromDatabase<TDatabase>;
9
+ };
10
+ }, string, {}, Response>;
11
+ declare module "hono" {
12
+ interface ContextVariableMap {
13
+ dbManager: unknown;
14
+ db: Record<string, unknown>;
15
+ dbConnections: Record<string, unknown>;
16
+ }
17
+ interface Context {
18
+ db: Record<string, unknown>;
19
+ }
20
+ }
21
+ //# sourceMappingURL=middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/database/middleware.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,eAAe,EACf,KAAK,cAAc,EACnB,KAAK,6BAA6B,EAClC,KAAK,8BAA8B,EACnC,KAAK,4BAA4B,EAClC,MAAM,WAAW,CAAC;AAEnB,MAAM,MAAM,0BAA0B,CACpC,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACjC,cAAc,CAAC,GAAG,EAAE,6BAA6B,CAAC,GAAG,CAAC,CAAC,CAAC;AAE5D,wBAAgB,yBAAyB,CACvC,KAAK,CAAC,SAAS,SAAS,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,EAChD,MAAM,EAAE,SAAS;qDACiC,IAAI;eASzC;QACT,SAAS,yDAVqC,IAAI,oFAU/B;QACnB,EAAE,0CAA0B;QAC5B,aAAa,4CAAgB;KAC9B;yBA6BJ;AAED,OAAO,QAAQ,MAAM,CAAC;IACpB,UAAU,kBAAkB;QAC1B,SAAS,EAAE,OAAO,CAAC;QACnB,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC5B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACxC;IAED,UAAU,OAAO;QACf,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC7B;CACF"}