@buenojs/bueno 0.8.4 → 0.8.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. package/README.md +264 -17
  2. package/dist/cli/{index.js → bin.js} +413 -332
  3. package/dist/container/index.js +273 -0
  4. package/dist/context/index.js +219 -0
  5. package/dist/database/index.js +493 -0
  6. package/dist/frontend/index.js +7697 -0
  7. package/dist/graphql/index.js +2156 -0
  8. package/dist/health/index.js +364 -0
  9. package/dist/i18n/index.js +345 -0
  10. package/dist/index.js +9694 -5047
  11. package/dist/jobs/index.js +819 -0
  12. package/dist/lock/index.js +367 -0
  13. package/dist/logger/index.js +281 -0
  14. package/dist/metrics/index.js +289 -0
  15. package/dist/middleware/index.js +77 -0
  16. package/dist/migrations/index.js +571 -0
  17. package/dist/modules/index.js +3411 -0
  18. package/dist/notification/index.js +484 -0
  19. package/dist/observability/index.js +331 -0
  20. package/dist/openapi/index.js +795 -0
  21. package/dist/orm/index.js +1356 -0
  22. package/dist/router/index.js +886 -0
  23. package/dist/rpc/index.js +691 -0
  24. package/dist/schema/index.js +400 -0
  25. package/dist/telemetry/index.js +595 -0
  26. package/dist/template/index.js +640 -0
  27. package/dist/templates/index.js +640 -0
  28. package/dist/testing/index.js +1111 -0
  29. package/dist/types/index.js +60 -0
  30. package/llms.txt +231 -0
  31. package/package.json +125 -27
  32. package/src/cache/index.ts +2 -1
  33. package/src/cli/ARCHITECTURE.md +3 -3
  34. package/src/cli/bin.ts +2 -2
  35. package/src/cli/commands/build.ts +183 -165
  36. package/src/cli/commands/dev.ts +96 -89
  37. package/src/cli/commands/generate.ts +142 -111
  38. package/src/cli/commands/help.ts +20 -16
  39. package/src/cli/commands/index.ts +3 -6
  40. package/src/cli/commands/migration.ts +124 -105
  41. package/src/cli/commands/new.ts +294 -232
  42. package/src/cli/commands/start.ts +81 -79
  43. package/src/cli/core/args.ts +68 -50
  44. package/src/cli/core/console.ts +89 -95
  45. package/src/cli/core/index.ts +4 -4
  46. package/src/cli/core/prompt.ts +65 -62
  47. package/src/cli/core/spinner.ts +23 -20
  48. package/src/cli/index.ts +46 -38
  49. package/src/cli/templates/database/index.ts +37 -18
  50. package/src/cli/templates/database/mysql.ts +3 -3
  51. package/src/cli/templates/database/none.ts +2 -2
  52. package/src/cli/templates/database/postgresql.ts +3 -3
  53. package/src/cli/templates/database/sqlite.ts +3 -3
  54. package/src/cli/templates/deploy.ts +29 -26
  55. package/src/cli/templates/docker.ts +41 -30
  56. package/src/cli/templates/frontend/index.ts +33 -15
  57. package/src/cli/templates/frontend/none.ts +2 -2
  58. package/src/cli/templates/frontend/react.ts +18 -18
  59. package/src/cli/templates/frontend/solid.ts +15 -15
  60. package/src/cli/templates/frontend/svelte.ts +17 -17
  61. package/src/cli/templates/frontend/vue.ts +15 -15
  62. package/src/cli/templates/generators/index.ts +29 -29
  63. package/src/cli/templates/generators/types.ts +21 -21
  64. package/src/cli/templates/index.ts +6 -6
  65. package/src/cli/templates/project/api.ts +37 -36
  66. package/src/cli/templates/project/default.ts +25 -25
  67. package/src/cli/templates/project/fullstack.ts +28 -26
  68. package/src/cli/templates/project/index.ts +55 -16
  69. package/src/cli/templates/project/minimal.ts +17 -12
  70. package/src/cli/templates/project/types.ts +10 -5
  71. package/src/cli/templates/project/website.ts +15 -15
  72. package/src/cli/utils/fs.ts +55 -41
  73. package/src/cli/utils/index.ts +3 -3
  74. package/src/cli/utils/strings.ts +47 -33
  75. package/src/cli/utils/version.ts +14 -8
  76. package/src/config/env-validation.ts +100 -0
  77. package/src/config/env.ts +169 -41
  78. package/src/config/index.ts +28 -20
  79. package/src/config/loader.ts +25 -16
  80. package/src/config/merge.ts +21 -10
  81. package/src/config/types.ts +566 -25
  82. package/src/config/validation.ts +215 -7
  83. package/src/container/forward-ref.ts +22 -22
  84. package/src/container/index.ts +34 -12
  85. package/src/context/index.ts +11 -1
  86. package/src/database/index.ts +7 -190
  87. package/src/database/orm/builder.ts +457 -0
  88. package/src/database/orm/casts/index.ts +130 -0
  89. package/src/database/orm/casts/types.ts +25 -0
  90. package/src/database/orm/compiler.ts +304 -0
  91. package/src/database/orm/hooks/index.ts +114 -0
  92. package/src/database/orm/index.ts +61 -0
  93. package/src/database/orm/model-registry.ts +59 -0
  94. package/src/database/orm/model.ts +821 -0
  95. package/src/database/orm/relationships/base.ts +146 -0
  96. package/src/database/orm/relationships/belongs-to-many.ts +179 -0
  97. package/src/database/orm/relationships/belongs-to.ts +56 -0
  98. package/src/database/orm/relationships/has-many.ts +45 -0
  99. package/src/database/orm/relationships/has-one.ts +41 -0
  100. package/src/database/orm/relationships/index.ts +11 -0
  101. package/src/database/orm/scopes/index.ts +55 -0
  102. package/src/events/__tests__/event-system.test.ts +235 -0
  103. package/src/events/config.ts +238 -0
  104. package/src/events/example-usage.ts +185 -0
  105. package/src/events/index.ts +278 -0
  106. package/src/events/manager.ts +385 -0
  107. package/src/events/registry.ts +182 -0
  108. package/src/events/types.ts +124 -0
  109. package/src/frontend/api-routes.ts +65 -23
  110. package/src/frontend/bundler.ts +76 -34
  111. package/src/frontend/console-client.ts +2 -2
  112. package/src/frontend/console-stream.ts +94 -38
  113. package/src/frontend/dev-server.ts +94 -46
  114. package/src/frontend/file-router.ts +61 -19
  115. package/src/frontend/frameworks/index.ts +37 -10
  116. package/src/frontend/frameworks/react.ts +10 -8
  117. package/src/frontend/frameworks/solid.ts +11 -9
  118. package/src/frontend/frameworks/svelte.ts +15 -9
  119. package/src/frontend/frameworks/vue.ts +13 -11
  120. package/src/frontend/hmr-client.ts +12 -10
  121. package/src/frontend/hmr.ts +146 -103
  122. package/src/frontend/index.ts +14 -5
  123. package/src/frontend/islands.ts +41 -22
  124. package/src/frontend/isr.ts +59 -37
  125. package/src/frontend/layout.ts +36 -21
  126. package/src/frontend/ssr/react.ts +74 -27
  127. package/src/frontend/ssr/solid.ts +54 -20
  128. package/src/frontend/ssr/svelte.ts +48 -14
  129. package/src/frontend/ssr/vue.ts +50 -18
  130. package/src/frontend/ssr.ts +83 -39
  131. package/src/frontend/types.ts +91 -56
  132. package/src/graphql/built-in-engine.ts +598 -0
  133. package/src/graphql/context-builder.ts +110 -0
  134. package/src/graphql/decorators.ts +358 -0
  135. package/src/graphql/execution-pipeline.ts +227 -0
  136. package/src/graphql/graphql-module.ts +563 -0
  137. package/src/graphql/index.ts +101 -0
  138. package/src/graphql/metadata.ts +237 -0
  139. package/src/graphql/schema-builder.ts +319 -0
  140. package/src/graphql/subscription-handler.ts +283 -0
  141. package/src/graphql/types.ts +324 -0
  142. package/src/health/index.ts +21 -9
  143. package/src/i18n/engine.ts +305 -0
  144. package/src/i18n/index.ts +38 -0
  145. package/src/i18n/loader.ts +218 -0
  146. package/src/i18n/middleware.ts +164 -0
  147. package/src/i18n/negotiator.ts +162 -0
  148. package/src/i18n/types.ts +158 -0
  149. package/src/index.ts +182 -27
  150. package/src/jobs/drivers/memory.ts +315 -0
  151. package/src/jobs/drivers/redis.ts +459 -0
  152. package/src/jobs/index.ts +30 -0
  153. package/src/jobs/queue.ts +281 -0
  154. package/src/jobs/types.ts +295 -0
  155. package/src/jobs/worker.ts +380 -0
  156. package/src/logger/index.ts +1 -3
  157. package/src/logger/transports/index.ts +62 -22
  158. package/src/metrics/index.ts +25 -16
  159. package/src/migrations/index.ts +9 -0
  160. package/src/modules/filters.ts +13 -17
  161. package/src/modules/guards.ts +49 -26
  162. package/src/modules/index.ts +457 -299
  163. package/src/modules/interceptors.ts +58 -20
  164. package/src/modules/lazy.ts +11 -19
  165. package/src/modules/lifecycle.ts +15 -7
  166. package/src/modules/metadata.ts +15 -5
  167. package/src/modules/pipes.ts +94 -72
  168. package/src/notification/channels/base.ts +68 -0
  169. package/src/notification/channels/email.ts +105 -0
  170. package/src/notification/channels/push.ts +104 -0
  171. package/src/notification/channels/sms.ts +105 -0
  172. package/src/notification/channels/whatsapp.ts +104 -0
  173. package/src/notification/index.ts +48 -0
  174. package/src/notification/service.ts +354 -0
  175. package/src/notification/types.ts +344 -0
  176. package/src/observability/__tests__/observability.test.ts +483 -0
  177. package/src/observability/breadcrumbs.ts +114 -0
  178. package/src/observability/index.ts +136 -0
  179. package/src/observability/interceptor.ts +85 -0
  180. package/src/observability/service.ts +303 -0
  181. package/src/observability/trace.ts +37 -0
  182. package/src/observability/types.ts +196 -0
  183. package/src/openapi/__tests__/decorators.test.ts +335 -0
  184. package/src/openapi/__tests__/document-builder.test.ts +285 -0
  185. package/src/openapi/__tests__/route-scanner.test.ts +334 -0
  186. package/src/openapi/__tests__/schema-generator.test.ts +275 -0
  187. package/src/openapi/decorators.ts +328 -0
  188. package/src/openapi/document-builder.ts +274 -0
  189. package/src/openapi/index.ts +112 -0
  190. package/src/openapi/metadata.ts +112 -0
  191. package/src/openapi/route-scanner.ts +289 -0
  192. package/src/openapi/schema-generator.ts +256 -0
  193. package/src/openapi/swagger-module.ts +166 -0
  194. package/src/openapi/types.ts +398 -0
  195. package/src/orm/index.ts +10 -0
  196. package/src/rpc/index.ts +3 -1
  197. package/src/schema/index.ts +9 -0
  198. package/src/security/index.ts +15 -6
  199. package/src/ssg/index.ts +9 -8
  200. package/src/telemetry/index.ts +76 -22
  201. package/src/template/index.ts +7 -0
  202. package/src/templates/engine.ts +224 -0
  203. package/src/templates/index.ts +9 -0
  204. package/src/templates/loader.ts +331 -0
  205. package/src/templates/renderers/markdown.ts +212 -0
  206. package/src/templates/renderers/simple.ts +269 -0
  207. package/src/templates/types.ts +154 -0
  208. package/src/testing/index.ts +100 -27
  209. package/src/types/optional-deps.d.ts +347 -187
  210. package/src/validation/index.ts +92 -2
  211. package/src/validation/schemas.ts +536 -0
  212. package/tests/integration/cli.test.ts +19 -19
  213. package/tests/integration/fullstack.test.ts +4 -4
  214. package/tests/unit/cli.test.ts +1 -1
  215. package/tests/unit/database.test.ts +2 -72
  216. package/tests/unit/env-validation.test.ts +166 -0
  217. package/tests/unit/events.test.ts +910 -0
  218. package/tests/unit/graphql.test.ts +991 -0
  219. package/tests/unit/i18n.test.ts +455 -0
  220. package/tests/unit/jobs.test.ts +493 -0
  221. package/tests/unit/notification.test.ts +988 -0
  222. package/tests/unit/observability.test.ts +453 -0
  223. package/tests/unit/orm/builder.test.ts +323 -0
  224. package/tests/unit/orm/casts.test.ts +179 -0
  225. package/tests/unit/orm/compiler.test.ts +220 -0
  226. package/tests/unit/orm/eager-loading.test.ts +285 -0
  227. package/tests/unit/orm/hooks.test.ts +191 -0
  228. package/tests/unit/orm/model.test.ts +373 -0
  229. package/tests/unit/orm/relationships.test.ts +303 -0
  230. package/tests/unit/orm/scopes.test.ts +74 -0
  231. package/tests/unit/templates-simple.test.ts +53 -0
  232. package/tests/unit/templates.test.ts +454 -0
  233. package/tests/unit/validation.test.ts +18 -24
  234. package/tsconfig.json +11 -3
@@ -16,8 +16,8 @@
16
16
  * - Add headers or modify request/response
17
17
  */
18
18
 
19
- import type { Context } from "../context";
20
19
  import type { Token } from "../container";
20
+ import type { Context } from "../context";
21
21
 
22
22
  // ============= Types =============
23
23
 
@@ -72,7 +72,7 @@ export interface NestInterceptor<T = unknown, R = unknown> {
72
72
  */
73
73
  export type InterceptorFn = (
74
74
  context: Context,
75
- next: () => Promise<unknown>
75
+ next: () => Promise<unknown>,
76
76
  ) => Promise<unknown> | unknown;
77
77
 
78
78
  /**
@@ -81,7 +81,10 @@ export type InterceptorFn = (
81
81
  * - An interceptor class instance
82
82
  * - An interceptor function
83
83
  */
84
- export type Interceptor = Token<NestInterceptor> | NestInterceptor | InterceptorFn;
84
+ export type Interceptor =
85
+ | Token<NestInterceptor>
86
+ | NestInterceptor
87
+ | InterceptorFn;
85
88
 
86
89
  // ============= Metadata Storage =============
87
90
 
@@ -92,19 +95,27 @@ type Constructor = new (...args: unknown[]) => unknown;
92
95
  const interceptorsClassMetadata = new WeakMap<Constructor, Interceptor[]>();
93
96
 
94
97
  // WeakMap for storing interceptors metadata on method prototypes
95
- const interceptorsMethodMetadata = new WeakMap<object, Map<string | symbol, Interceptor[]>>();
98
+ const interceptorsMethodMetadata = new WeakMap<
99
+ object,
100
+ Map<string | symbol, Interceptor[]>
101
+ >();
96
102
 
97
103
  /**
98
104
  * Set interceptors on a class constructor
99
105
  */
100
- function setClassInterceptors(target: Constructor, interceptors: Interceptor[]): void {
106
+ function setClassInterceptors(
107
+ target: Constructor,
108
+ interceptors: Interceptor[],
109
+ ): void {
101
110
  interceptorsClassMetadata.set(target, interceptors);
102
111
  }
103
112
 
104
113
  /**
105
114
  * Get interceptors from a class constructor
106
115
  */
107
- export function getClassInterceptors(target: Constructor): Interceptor[] | undefined {
116
+ export function getClassInterceptors(
117
+ target: Constructor,
118
+ ): Interceptor[] | undefined {
108
119
  return interceptorsClassMetadata.get(target);
109
120
  }
110
121
 
@@ -153,7 +164,9 @@ export function getMethodInterceptors(
153
164
  * }
154
165
  * ```
155
166
  */
156
- export function UseInterceptors(...interceptors: Interceptor[]): MethodDecorator & ClassDecorator {
167
+ export function UseInterceptors(
168
+ ...interceptors: Interceptor[]
169
+ ): MethodDecorator & ClassDecorator {
157
170
  const decorator = (
158
171
  target: unknown,
159
172
  propertyKey?: string | symbol,
@@ -162,14 +175,21 @@ export function UseInterceptors(...interceptors: Interceptor[]): MethodDecorator
162
175
  if (propertyKey !== undefined && descriptor !== undefined) {
163
176
  // Method decorator
164
177
  const targetObj = target as object;
165
- const existingInterceptors = getMethodInterceptors(targetObj, propertyKey) ?? [];
166
- setMethodInterceptors(targetObj, propertyKey, [...existingInterceptors, ...interceptors]);
178
+ const existingInterceptors =
179
+ getMethodInterceptors(targetObj, propertyKey) ?? [];
180
+ setMethodInterceptors(targetObj, propertyKey, [
181
+ ...existingInterceptors,
182
+ ...interceptors,
183
+ ]);
167
184
  return descriptor;
168
185
  } else {
169
186
  // Class decorator
170
187
  const targetClass = target as Constructor;
171
188
  const existingInterceptors = getClassInterceptors(targetClass) ?? [];
172
- setClassInterceptors(targetClass, [...existingInterceptors, ...interceptors]);
189
+ setClassInterceptors(targetClass, [
190
+ ...existingInterceptors,
191
+ ...interceptors,
192
+ ]);
173
193
  }
174
194
  };
175
195
  return decorator as MethodDecorator & ClassDecorator;
@@ -235,8 +255,13 @@ export interface TransformResponse<T> {
235
255
  * // Response: { data: [{ id: 1, name: 'John' }], timestamp: '2024-01-15T10:30:00.000Z' }
236
256
  * ```
237
257
  */
238
- export class TransformInterceptor<T = unknown> implements NestInterceptor<T, TransformResponse<T>> {
239
- async intercept(context: Context, next: CallHandler<T>): Promise<TransformResponse<T>> {
258
+ export class TransformInterceptor<T = unknown>
259
+ implements NestInterceptor<T, TransformResponse<T>>
260
+ {
261
+ async intercept(
262
+ context: Context,
263
+ next: CallHandler<T>,
264
+ ): Promise<TransformResponse<T>> {
240
265
  const result = await next.handle();
241
266
  return {
242
267
  data: result,
@@ -298,7 +323,7 @@ export class CacheInterceptor implements NestInterceptor {
298
323
  private static cache = new Map<string, CacheEntry>();
299
324
  private static cleanupInterval: Timer | null = null;
300
325
 
301
- constructor(private ttlMs: number = 60000) {
326
+ constructor(private ttlMs = 60000) {
302
327
  // Setup periodic cleanup of expired entries
303
328
  CacheInterceptor.setupCleanup();
304
329
  }
@@ -410,7 +435,9 @@ export interface InterceptorExecutorOptions {
410
435
  /** Interceptors from method */
411
436
  methodInterceptors?: Interceptor[];
412
437
  /** Container for resolving interceptor instances */
413
- resolveInterceptor?: (interceptor: Interceptor) => NestInterceptor | InterceptorFn | null;
438
+ resolveInterceptor?: (
439
+ interceptor: Interceptor,
440
+ ) => NestInterceptor | InterceptorFn | null;
414
441
  }
415
442
 
416
443
  /**
@@ -420,7 +447,9 @@ function createCallHandler(
420
447
  interceptors: Array<NestInterceptor | InterceptorFn>,
421
448
  context: Context,
422
449
  finalHandler: () => Promise<unknown>,
423
- resolveInterceptor?: (interceptor: Interceptor) => NestInterceptor | InterceptorFn | null,
450
+ resolveInterceptor?: (
451
+ interceptor: Interceptor,
452
+ ) => NestInterceptor | InterceptorFn | null,
424
453
  ): CallHandler {
425
454
  let index = 0;
426
455
 
@@ -430,10 +459,15 @@ function createCallHandler(
430
459
  }
431
460
 
432
461
  const interceptor = interceptors[index++];
433
- let interceptorInstance: NestInterceptor | InterceptorFn | null = interceptor;
462
+ let interceptorInstance: NestInterceptor | InterceptorFn | null =
463
+ interceptor;
434
464
 
435
465
  // Resolve if needed
436
- if (resolveInterceptor && !isNestInterceptor(interceptor) && !isInterceptorFn(interceptor)) {
466
+ if (
467
+ resolveInterceptor &&
468
+ !isNestInterceptor(interceptor) &&
469
+ !isInterceptorFn(interceptor)
470
+ ) {
437
471
  interceptorInstance = resolveInterceptor(interceptor);
438
472
  }
439
473
 
@@ -502,7 +536,10 @@ export async function executeInterceptors(
502
536
  // Resolve the interceptor
503
537
  if (typeof interceptor === "function") {
504
538
  // Check if it's an interceptor function or a class constructor
505
- const funcInterceptor = interceptor as { prototype?: unknown; intercept?: unknown };
539
+ const funcInterceptor = interceptor as {
540
+ prototype?: unknown;
541
+ intercept?: unknown;
542
+ };
506
543
  if (
507
544
  funcInterceptor.prototype &&
508
545
  typeof funcInterceptor.prototype === "object" &&
@@ -512,7 +549,8 @@ export async function executeInterceptors(
512
549
  instance = resolveInterceptor ? resolveInterceptor(interceptor) : null;
513
550
  if (!instance) {
514
551
  // Create a new instance if not in container
515
- const InterceptorClass = interceptor as unknown as new () => NestInterceptor;
552
+ const InterceptorClass =
553
+ interceptor as unknown as new () => NestInterceptor;
516
554
  instance = new InterceptorClass();
517
555
  }
518
556
  } else {
@@ -571,4 +609,4 @@ export function isNestInterceptor(value: unknown): value is NestInterceptor {
571
609
  */
572
610
  export function isInterceptorFn(value: unknown): value is InterceptorFn {
573
611
  return typeof value === "function" && !isNestInterceptor(value);
574
- }
612
+ }
@@ -5,9 +5,9 @@
5
5
  * and reduced memory usage for large applications.
6
6
  */
7
7
 
8
- import type { Container, Token, Provider } from "../container";
9
- import { Injectable } from "./metadata";
8
+ import type { Container, Provider, Token } from "../container";
10
9
  import { Inject } from "./index";
10
+ import { Injectable } from "./metadata";
11
11
 
12
12
  // ============= Types =============
13
13
 
@@ -166,7 +166,9 @@ export function LazyModule(loader: ModuleLoaderFn): ClassDecorator {
166
166
  /**
167
167
  * Token for the ModuleLoader service
168
168
  */
169
- export const MODULE_LOADER_TOKEN = Symbol.for("ModuleLoader") as Token<ModuleLoader>;
169
+ export const MODULE_LOADER_TOKEN = Symbol.for(
170
+ "ModuleLoader",
171
+ ) as Token<ModuleLoader>;
170
172
 
171
173
  /**
172
174
  * Options for loading lazy modules
@@ -200,9 +202,7 @@ export class ModuleLoader {
200
202
  private container: Container;
201
203
  private loadedModules = new Set<Constructor>();
202
204
  private moduleLoaders = new Map<Constructor, LazyModuleLoaderImpl>();
203
- private onModuleLoadCallback?: (
204
- moduleClass: Constructor,
205
- ) => Promise<void>;
205
+ private onModuleLoadCallback?: (moduleClass: Constructor) => Promise<void>;
206
206
 
207
207
  constructor(container: Container) {
208
208
  this.container = container;
@@ -230,9 +230,7 @@ export class ModuleLoader {
230
230
  ): Promise<void> {
231
231
  // Normalize to Constructor if it's a token
232
232
  const moduleClass =
233
- typeof moduleToken === "function"
234
- ? (moduleToken as Constructor)
235
- : null;
233
+ typeof moduleToken === "function" ? (moduleToken as Constructor) : null;
236
234
 
237
235
  if (!moduleClass) {
238
236
  throw new Error("Module token must be a class constructor");
@@ -385,9 +383,7 @@ export function createLazyLoader(
385
383
  const module = await importFn();
386
384
  const moduleClass = module[exportName] as Constructor;
387
385
  if (!moduleClass) {
388
- throw new Error(
389
- `Export "${exportName}" not found in lazy loaded module`,
390
- );
386
+ throw new Error(`Export "${exportName}" not found in lazy loaded module`);
391
387
  }
392
388
  return moduleClass;
393
389
  };
@@ -396,9 +392,7 @@ export function createLazyLoader(
396
392
  /**
397
393
  * Check if all lazy modules in a list are loaded
398
394
  */
399
- export function areAllLazyModulesLoaded(
400
- modules: Constructor[],
401
- ): boolean {
395
+ export function areAllLazyModulesLoaded(modules: Constructor[]): boolean {
402
396
  return modules.every((module) => {
403
397
  const metadata = getLazyMetadata(module);
404
398
  return !metadata || metadata.loaded;
@@ -408,11 +402,9 @@ export function areAllLazyModulesLoaded(
408
402
  /**
409
403
  * Get list of unloaded lazy modules
410
404
  */
411
- export function getUnloadedLazyModules(
412
- modules: Constructor[],
413
- ): Constructor[] {
405
+ export function getUnloadedLazyModules(modules: Constructor[]): Constructor[] {
414
406
  return modules.filter((module) => {
415
407
  const metadata = getLazyMetadata(module);
416
408
  return metadata && !metadata.loaded;
417
409
  });
418
- }
410
+ }
@@ -104,7 +104,9 @@ export function isOnApplicationBootstrap(
104
104
  /**
105
105
  * Check if an instance implements OnModuleDestroy
106
106
  */
107
- export function isOnModuleDestroy(instance: unknown): instance is OnModuleDestroy {
107
+ export function isOnModuleDestroy(
108
+ instance: unknown,
109
+ ): instance is OnModuleDestroy {
108
110
  return (
109
111
  typeof instance === "object" &&
110
112
  instance !== null &&
@@ -123,8 +125,8 @@ export function isBeforeApplicationShutdown(
123
125
  typeof instance === "object" &&
124
126
  instance !== null &&
125
127
  "beforeApplicationShutdown" in instance &&
126
- typeof (instance as BeforeApplicationShutdown)
127
- .beforeApplicationShutdown === "function"
128
+ typeof (instance as BeforeApplicationShutdown).beforeApplicationShutdown ===
129
+ "function"
128
130
  );
129
131
  }
130
132
 
@@ -146,7 +148,9 @@ export function isOnApplicationShutdown(
146
148
  /**
147
149
  * Check if an instance implements OnBeforeRequest
148
150
  */
149
- export function isOnBeforeRequest(instance: unknown): instance is OnBeforeRequest {
151
+ export function isOnBeforeRequest(
152
+ instance: unknown,
153
+ ): instance is OnBeforeRequest {
150
154
  return (
151
155
  typeof instance === "object" &&
152
156
  instance !== null &&
@@ -158,7 +162,9 @@ export function isOnBeforeRequest(instance: unknown): instance is OnBeforeReques
158
162
  /**
159
163
  * Check if an instance implements OnAfterRequest
160
164
  */
161
- export function isOnAfterRequest(instance: unknown): instance is OnAfterRequest {
165
+ export function isOnAfterRequest(
166
+ instance: unknown,
167
+ ): instance is OnAfterRequest {
162
168
  return (
163
169
  typeof instance === "object" &&
164
170
  instance !== null &&
@@ -170,7 +176,9 @@ export function isOnAfterRequest(instance: unknown): instance is OnAfterRequest
170
176
  /**
171
177
  * Check if an instance implements OnRequestError
172
178
  */
173
- export function isOnRequestError(instance: unknown): instance is OnRequestError {
179
+ export function isOnRequestError(
180
+ instance: unknown,
181
+ ): instance is OnRequestError {
174
182
  return (
175
183
  typeof instance === "object" &&
176
184
  instance !== null &&
@@ -475,4 +483,4 @@ export interface RequestLifecycle
475
483
  /**
476
484
  * Combined interface for all lifecycle hooks.
477
485
  */
478
- export interface FullLifecycle extends ApplicationLifecycle, RequestLifecycle {}
486
+ export interface FullLifecycle extends ApplicationLifecycle, RequestLifecycle {}
@@ -5,7 +5,7 @@
5
5
  * This module has no dependencies on other module files.
6
6
  */
7
7
 
8
- import type { Token, Provider } from "../container";
8
+ import type { Provider, Token } from "../container";
9
9
 
10
10
  // Type alias for class constructors
11
11
  type Constructor = new (...args: unknown[]) => unknown;
@@ -24,14 +24,21 @@ export interface ModuleMetadata {
24
24
  // Simple metadata storage without Reflect.metadata
25
25
  const metadataStore = new WeakMap<Constructor, Map<string, unknown>>();
26
26
 
27
- export function setMetadata(target: Constructor, key: string, value: unknown): void {
27
+ export function setMetadata(
28
+ target: Constructor,
29
+ key: string,
30
+ value: unknown,
31
+ ): void {
28
32
  if (!metadataStore.has(target)) {
29
33
  metadataStore.set(target, new Map());
30
34
  }
31
35
  metadataStore.get(target)?.set(key, value);
32
36
  }
33
37
 
34
- export function getMetadata<T>(target: Constructor, key: string): T | undefined {
38
+ export function getMetadata<T>(
39
+ target: Constructor,
40
+ key: string,
41
+ ): T | undefined {
35
42
  return metadataStore.get(target)?.get(key) as T | undefined;
36
43
  }
37
44
 
@@ -49,7 +56,10 @@ export function setPrototypeMetadata(
49
56
  prototypeMetadataStore.get(target)?.set(key, value);
50
57
  }
51
58
 
52
- export function getPrototypeMetadata<T>(target: object, key: string): T | undefined {
59
+ export function getPrototypeMetadata<T>(
60
+ target: object,
61
+ key: string,
62
+ ): T | undefined {
53
63
  return prototypeMetadataStore.get(target)?.get(key) as T | undefined;
54
64
  }
55
65
 
@@ -87,4 +97,4 @@ export function Module(metadata: ModuleMetadata): ClassDecorator {
87
97
  }
88
98
 
89
99
  // Export the Constructor type for use in other modules
90
- export type { Constructor };
100
+ export type { Constructor };