glasswork 1.5.0 → 1.6.0

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 (200) hide show
  1. package/CHANGELOG.md +54 -1
  2. package/README.md +6 -2
  3. package/dist/audit/audit-logger.d.ts +6 -1
  4. package/dist/audit/audit-logger.d.ts.map +1 -1
  5. package/dist/audit/audit-logger.js +6 -1
  6. package/dist/audit/audit-logger.js.map +1 -1
  7. package/dist/auth/assert.d.ts +4 -0
  8. package/dist/auth/assert.d.ts.map +1 -1
  9. package/dist/auth/assert.js +7 -3
  10. package/dist/auth/assert.js.map +1 -1
  11. package/dist/auth/better-auth-provider.js +13 -4
  12. package/dist/auth/better-auth-provider.js.map +1 -1
  13. package/dist/auth/errors.d.ts +17 -0
  14. package/dist/auth/errors.d.ts.map +1 -0
  15. package/dist/auth/errors.js +23 -0
  16. package/dist/auth/errors.js.map +1 -0
  17. package/dist/auth/index.d.ts +2 -1
  18. package/dist/auth/index.d.ts.map +1 -1
  19. package/dist/auth/index.js +1 -0
  20. package/dist/auth/index.js.map +1 -1
  21. package/dist/auth/middleware.d.ts +13 -0
  22. package/dist/auth/middleware.d.ts.map +1 -1
  23. package/dist/auth/middleware.js +19 -8
  24. package/dist/auth/middleware.js.map +1 -1
  25. package/dist/auth/types.d.ts +4 -0
  26. package/dist/auth/types.d.ts.map +1 -1
  27. package/dist/config/providers.d.ts.map +1 -1
  28. package/dist/config/providers.js +5 -4
  29. package/dist/config/providers.js.map +1 -1
  30. package/dist/core/bootstrap.d.ts +2 -2
  31. package/dist/core/bootstrap.d.ts.map +1 -1
  32. package/dist/core/bootstrap.js +142 -68
  33. package/dist/core/bootstrap.js.map +1 -1
  34. package/dist/core/contract.d.ts +9 -2
  35. package/dist/core/contract.d.ts.map +1 -1
  36. package/dist/core/contract.js +2 -1
  37. package/dist/core/contract.js.map +1 -1
  38. package/dist/core/errors.d.ts +16 -0
  39. package/dist/core/errors.d.ts.map +1 -0
  40. package/dist/core/errors.js +31 -0
  41. package/dist/core/errors.js.map +1 -0
  42. package/dist/core/glasswork-config.d.ts +42 -0
  43. package/dist/core/glasswork-config.d.ts.map +1 -0
  44. package/dist/core/glasswork-config.js +2 -0
  45. package/dist/core/glasswork-config.js.map +1 -0
  46. package/dist/core/index.d.ts +6 -3
  47. package/dist/core/index.d.ts.map +1 -1
  48. package/dist/core/index.js +4 -2
  49. package/dist/core/index.js.map +1 -1
  50. package/dist/core/job-services.d.ts +16 -0
  51. package/dist/core/job-services.d.ts.map +1 -0
  52. package/dist/core/job-services.js +19 -0
  53. package/dist/core/job-services.js.map +1 -0
  54. package/dist/core/lifecycle.d.ts +29 -1
  55. package/dist/core/lifecycle.d.ts.map +1 -1
  56. package/dist/core/lifecycle.js +98 -15
  57. package/dist/core/lifecycle.js.map +1 -1
  58. package/dist/core/module-graph.d.ts +2 -0
  59. package/dist/core/module-graph.d.ts.map +1 -1
  60. package/dist/core/module-graph.js +63 -10
  61. package/dist/core/module-graph.js.map +1 -1
  62. package/dist/core/module-inspection.d.ts +44 -0
  63. package/dist/core/module-inspection.d.ts.map +1 -0
  64. package/dist/core/module-inspection.js +114 -0
  65. package/dist/core/module-inspection.js.map +1 -0
  66. package/dist/core/module-runtime.d.ts +8 -0
  67. package/dist/core/module-runtime.d.ts.map +1 -1
  68. package/dist/core/module-runtime.js +60 -6
  69. package/dist/core/module-runtime.js.map +1 -1
  70. package/dist/core/request-scope.js +1 -1
  71. package/dist/core/request-scope.js.map +1 -1
  72. package/dist/core/types.d.ts +98 -7
  73. package/dist/core/types.d.ts.map +1 -1
  74. package/dist/email/ses.d.ts +7 -0
  75. package/dist/email/ses.d.ts.map +1 -0
  76. package/dist/email/ses.js +6 -0
  77. package/dist/email/ses.js.map +1 -0
  78. package/dist/email/smtp.d.ts +7 -0
  79. package/dist/email/smtp.d.ts.map +1 -0
  80. package/dist/email/smtp.js +6 -0
  81. package/dist/email/smtp.js.map +1 -0
  82. package/dist/email/transports/ses-transport.d.ts.map +1 -1
  83. package/dist/email/transports/ses-transport.js +6 -4
  84. package/dist/email/transports/ses-transport.js.map +1 -1
  85. package/dist/email/transports/smtp-transport.d.ts +40 -0
  86. package/dist/email/transports/smtp-transport.d.ts.map +1 -0
  87. package/dist/email/transports/smtp-transport.js +67 -0
  88. package/dist/email/transports/smtp-transport.js.map +1 -0
  89. package/dist/http/error-handler.d.ts +7 -1
  90. package/dist/http/error-handler.d.ts.map +1 -1
  91. package/dist/http/error-handler.js +18 -6
  92. package/dist/http/error-handler.js.map +1 -1
  93. package/dist/http/error-response.dto.d.ts +6 -0
  94. package/dist/http/error-response.dto.d.ts.map +1 -1
  95. package/dist/http/error-response.dto.js +6 -0
  96. package/dist/http/error-response.dto.js.map +1 -1
  97. package/dist/http/errors.d.ts +12 -0
  98. package/dist/http/errors.d.ts.map +1 -1
  99. package/dist/http/errors.js +35 -23
  100. package/dist/http/errors.js.map +1 -1
  101. package/dist/http/index.d.ts +1 -1
  102. package/dist/http/index.d.ts.map +1 -1
  103. package/dist/http/index.js +1 -1
  104. package/dist/http/index.js.map +1 -1
  105. package/dist/http/route-authorization.d.ts.map +1 -1
  106. package/dist/http/route-authorization.js +3 -3
  107. package/dist/http/route-authorization.js.map +1 -1
  108. package/dist/http/route-helpers.d.ts +2 -1
  109. package/dist/http/route-helpers.d.ts.map +1 -1
  110. package/dist/http/route-helpers.js +29 -2
  111. package/dist/http/route-helpers.js.map +1 -1
  112. package/dist/http/route-openapi-context.d.ts +15 -1
  113. package/dist/http/route-openapi-context.d.ts.map +1 -1
  114. package/dist/http/route-openapi-context.js.map +1 -1
  115. package/dist/http/route-response.d.ts +6 -2
  116. package/dist/http/route-response.d.ts.map +1 -1
  117. package/dist/http/route-response.js +36 -16
  118. package/dist/http/route-response.js.map +1 -1
  119. package/dist/http/route-types.d.ts +12 -4
  120. package/dist/http/route-types.d.ts.map +1 -1
  121. package/dist/http/route-types.js.map +1 -1
  122. package/dist/http/route-validation.d.ts.map +1 -1
  123. package/dist/http/route-validation.js +21 -1
  124. package/dist/http/route-validation.js.map +1 -1
  125. package/dist/jobs/drivers/eventbridge-scheduler-driver.d.ts +1 -0
  126. package/dist/jobs/drivers/eventbridge-scheduler-driver.d.ts.map +1 -1
  127. package/dist/jobs/drivers/eventbridge-scheduler-driver.js +12 -2
  128. package/dist/jobs/drivers/eventbridge-scheduler-driver.js.map +1 -1
  129. package/dist/jobs/drivers/mock-driver.d.ts +4 -0
  130. package/dist/jobs/drivers/mock-driver.d.ts.map +1 -1
  131. package/dist/jobs/drivers/mock-driver.js +10 -3
  132. package/dist/jobs/drivers/mock-driver.js.map +1 -1
  133. package/dist/jobs/drivers/sqs-driver.d.ts +1 -1
  134. package/dist/jobs/drivers/sqs-driver.d.ts.map +1 -1
  135. package/dist/jobs/drivers/sqs-driver.js +8 -2
  136. package/dist/jobs/drivers/sqs-driver.js.map +1 -1
  137. package/dist/jobs/errors.d.ts +14 -1
  138. package/dist/jobs/errors.d.ts.map +1 -1
  139. package/dist/jobs/errors.js +19 -2
  140. package/dist/jobs/errors.js.map +1 -1
  141. package/dist/jobs/index.d.ts +3 -3
  142. package/dist/jobs/index.d.ts.map +1 -1
  143. package/dist/jobs/index.js +1 -1
  144. package/dist/jobs/index.js.map +1 -1
  145. package/dist/jobs/job-service.d.ts +46 -7
  146. package/dist/jobs/job-service.d.ts.map +1 -1
  147. package/dist/jobs/job-service.js +63 -9
  148. package/dist/jobs/job-service.js.map +1 -1
  149. package/dist/jobs/scheduler.d.ts +6 -0
  150. package/dist/jobs/scheduler.d.ts.map +1 -0
  151. package/dist/jobs/scheduler.js +6 -0
  152. package/dist/jobs/scheduler.js.map +1 -0
  153. package/dist/jobs/sqs.d.ts +7 -0
  154. package/dist/jobs/sqs.d.ts.map +1 -0
  155. package/dist/jobs/sqs.js +7 -0
  156. package/dist/jobs/sqs.js.map +1 -0
  157. package/dist/jobs/types.d.ts +6 -1
  158. package/dist/jobs/types.d.ts.map +1 -1
  159. package/dist/jobs/utils.d.ts +6 -0
  160. package/dist/jobs/utils.d.ts.map +1 -1
  161. package/dist/jobs/utils.js +8 -0
  162. package/dist/jobs/utils.js.map +1 -1
  163. package/dist/middleware/rate-limit.d.ts.map +1 -1
  164. package/dist/middleware/rate-limit.js +5 -4
  165. package/dist/middleware/rate-limit.js.map +1 -1
  166. package/dist/observability/exception-tracking.d.ts +23 -0
  167. package/dist/observability/exception-tracking.d.ts.map +1 -1
  168. package/dist/observability/exception-tracking.js +101 -6
  169. package/dist/observability/exception-tracking.js.map +1 -1
  170. package/dist/observability/index.d.ts +1 -1
  171. package/dist/observability/index.d.ts.map +1 -1
  172. package/dist/observability/index.js +1 -1
  173. package/dist/observability/index.js.map +1 -1
  174. package/dist/observability/sanitizers.d.ts.map +1 -1
  175. package/dist/observability/sanitizers.js +2 -0
  176. package/dist/observability/sanitizers.js.map +1 -1
  177. package/dist/openapi/drift.d.ts +17 -2
  178. package/dist/openapi/drift.d.ts.map +1 -1
  179. package/dist/openapi/drift.js +79 -5
  180. package/dist/openapi/drift.js.map +1 -1
  181. package/dist/openapi/openapi.d.ts.map +1 -1
  182. package/dist/openapi/openapi.js +2 -1
  183. package/dist/openapi/openapi.js.map +1 -1
  184. package/dist/utils/environment.d.ts +10 -2
  185. package/dist/utils/environment.d.ts.map +1 -1
  186. package/dist/utils/environment.js +20 -3
  187. package/dist/utils/environment.js.map +1 -1
  188. package/dist/utils/module-interop.d.ts +9 -0
  189. package/dist/utils/module-interop.d.ts.map +1 -0
  190. package/dist/utils/module-interop.js +16 -0
  191. package/dist/utils/module-interop.js.map +1 -0
  192. package/dist/utils/optional-dependency.d.ts +6 -0
  193. package/dist/utils/optional-dependency.d.ts.map +1 -0
  194. package/dist/utils/optional-dependency.js +16 -0
  195. package/dist/utils/optional-dependency.js.map +1 -0
  196. package/dist/utils/serialize-prisma-types.d.ts +51 -15
  197. package/dist/utils/serialize-prisma-types.d.ts.map +1 -1
  198. package/dist/utils/serialize-prisma-types.js +47 -16
  199. package/dist/utils/serialize-prisma-types.js.map +1 -1
  200. package/package.json +56 -12
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-services.js","sourceRoot":"","sources":["../../src/core/job-services.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;AAUhE,yFAAyF;AACzF,MAAM,UAAU,kBAAkB,CAChC,QAAiC,EACjC,OAAe;IAEf,IAAI,QAAiB,CAAC;IACtB,IAAI,CAAC;QACH,QAAQ,GAAI,QAAoC,CAAC,YAAY,CAAC,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAE,QAAgC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACjG,CAAC"}
@@ -1,7 +1,35 @@
1
1
  import { type AwilixContainer } from 'awilix';
2
2
  import type { Logger } from '../utils/logger.js';
3
3
  /**
4
- * Execute lifecycle hooks on all registered services in parallel.
4
+ * Execute lifecycle hooks on singleton and value providers in parallel.
5
+ *
6
+ * `onModuleInit` creates every singleton to initialize it. `onModuleDestroy` only reaches
7
+ * singletons that were already created, so shutdown never constructs a provider just to
8
+ * destroy it. Every hook runs to completion before failures are reported: one failure is
9
+ * rethrown as-is, several are combined in an `AggregateError`.
5
10
  */
6
11
  export declare function executeLifecycleHooks(container: AwilixContainer, hook: 'onModuleInit' | 'onModuleDestroy', logger: Logger): Promise<void>;
12
+ /**
13
+ * Stops the providers a container owns: destroy hooks first, then the Awilix disposers of
14
+ * resolved registrations. Value providers are borrowed and have no disposer. Disposers run
15
+ * even when a destroy hook failed.
16
+ */
17
+ export declare function shutdownContainer(container: AwilixContainer, logger: Logger): Promise<void>;
18
+ /** Rethrows a single failure unchanged and combines several in an AggregateError. */
19
+ export declare function throwFailures(failures: unknown[], message: string): void;
20
+ export interface ApplicationLifecycle {
21
+ start(): Promise<void>;
22
+ stop(): Promise<void>;
23
+ }
24
+ /**
25
+ * Runs an application's start and stop steps at most once.
26
+ *
27
+ * Concurrent calls share one promise, so `start()` only resolves after the start step has
28
+ * finished. A failed start keeps rejecting with its original error. `stop()` waits for a
29
+ * pending start to settle before it runs, and `start()` rejects once `stop()` was called.
30
+ */
31
+ export declare function createApplicationLifecycle(steps: {
32
+ start: () => Promise<void>;
33
+ stop: () => Promise<void>;
34
+ }): ApplicationLifecycle;
7
35
  //# sourceMappingURL=lifecycle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/core/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAY,MAAM,QAAQ,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,eAAe,EAC1B,IAAI,EAAE,cAAc,GAAG,iBAAiB,EACxC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAyBf"}
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/core/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAqC,MAAM,QAAQ,CAAC;AACjF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,eAAe,EAC1B,IAAI,EAAE,cAAc,GAAG,iBAAiB,EACxC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BjG;AAED,qFAAqF;AACrF,wBAAgB,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAKxE;AAcD,MAAM,WAAW,oBAAoB;IACnC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B,GAAG,oBAAoB,CAoBvB"}
@@ -1,27 +1,83 @@
1
1
  import { Lifetime } from 'awilix';
2
2
  /**
3
- * Execute lifecycle hooks on all registered services in parallel.
3
+ * Execute lifecycle hooks on singleton and value providers in parallel.
4
+ *
5
+ * `onModuleInit` creates every singleton to initialize it. `onModuleDestroy` only reaches
6
+ * singletons that were already created, so shutdown never constructs a provider just to
7
+ * destroy it. Every hook runs to completion before failures are reported: one failure is
8
+ * rethrown as-is, several are combined in an `AggregateError`.
4
9
  */
5
10
  export async function executeLifecycleHooks(container, hook, logger) {
6
11
  const cradle = container.cradle;
7
- const serviceNames = Object.keys(cradle);
8
- const promises = [];
9
- for (const name of serviceNames) {
10
- const lifetime = container.registrations[name]?.lifetime;
12
+ // Awilix rebuilds `registrations` on every access; read it once.
13
+ const registrations = container.registrations;
14
+ const names = Object.keys(registrations).filter((name) => {
15
+ const lifetime = registrations[name]?.lifetime;
11
16
  if (lifetime && lifetime !== Lifetime.SINGLETON)
12
- continue;
13
- const service = cradle[name];
14
- if (hasHook(service, hook)) {
17
+ return false;
18
+ return hook === 'onModuleInit' || !lifetime || container.cache.has(name);
19
+ });
20
+ const results = await Promise.allSettled(names.map(async (name) => {
21
+ try {
22
+ const service = cradle[name];
23
+ if (!hasHook(service, hook))
24
+ return;
15
25
  logger.debug(`Executing ${hook} for ${name}`);
16
- promises.push(Promise.resolve()
17
- .then(() => service[hook]())
18
- .catch((err) => {
19
- logger.error(`Error in ${hook} for ${name}`, err);
20
- throw err;
21
- }));
26
+ await service[hook]();
27
+ }
28
+ catch (error) {
29
+ logger.error(`Error in ${hook} for ${name}`, error);
30
+ throw error;
22
31
  }
32
+ }));
33
+ throwFailures(results.flatMap((result) => (result.status === 'rejected' ? [result.reason] : [])), `${hook} failed`);
34
+ }
35
+ /**
36
+ * Stops the providers a container owns: destroy hooks first, then the Awilix disposers of
37
+ * resolved registrations. Value providers are borrowed and have no disposer. Disposers run
38
+ * even when a destroy hook failed.
39
+ */
40
+ export async function shutdownContainer(container, logger) {
41
+ const failures = [];
42
+ await executeLifecycleHooks(container, 'onModuleDestroy', logger).catch((error) => {
43
+ failures.push(error);
44
+ });
45
+ // Awilix uses Promise.all for disposal. Preserve its cache ownership, but collect each
46
+ // disposer failure so its promise waits for every close before shutdown rejects.
47
+ for (const [name, entry] of container.cache) {
48
+ const resolver = entry.resolver;
49
+ const dispose = resolver.dispose;
50
+ if (!dispose)
51
+ continue;
52
+ container.cache.set(name, {
53
+ ...entry,
54
+ resolver: {
55
+ ...resolver,
56
+ dispose: async (value) => {
57
+ try {
58
+ await dispose.call(resolver, value);
59
+ }
60
+ catch (error) {
61
+ logger.error(`Error while disposing provider ${String(name)}`, error);
62
+ failures.push(error);
63
+ }
64
+ },
65
+ },
66
+ });
67
+ }
68
+ await container.dispose().catch((error) => {
69
+ logger.error('Error while disposing providers', error);
70
+ failures.push(error);
71
+ });
72
+ throwFailures(failures, 'Shutdown failed');
73
+ }
74
+ /** Rethrows a single failure unchanged and combines several in an AggregateError. */
75
+ export function throwFailures(failures, message) {
76
+ if (failures.length === 1)
77
+ throw failures[0];
78
+ if (failures.length > 1) {
79
+ throw new AggregateError(failures, `${message} (${failures.length} errors)`);
23
80
  }
24
- await Promise.all(promises);
25
81
  }
26
82
  function hasHook(service, hook) {
27
83
  return (service !== null &&
@@ -29,4 +85,31 @@ function hasHook(service, hook) {
29
85
  hook in service &&
30
86
  typeof service[hook] === 'function');
31
87
  }
88
+ /**
89
+ * Runs an application's start and stop steps at most once.
90
+ *
91
+ * Concurrent calls share one promise, so `start()` only resolves after the start step has
92
+ * finished. A failed start keeps rejecting with its original error. `stop()` waits for a
93
+ * pending start to settle before it runs, and `start()` rejects once `stop()` was called.
94
+ */
95
+ export function createApplicationLifecycle(steps) {
96
+ let starting;
97
+ let stopping;
98
+ return {
99
+ start() {
100
+ if (stopping) {
101
+ return Promise.reject(new Error('Application has been stopped and cannot start again'));
102
+ }
103
+ starting ??= steps.start();
104
+ return starting;
105
+ },
106
+ stop() {
107
+ stopping ??= (async () => {
108
+ await starting?.catch(() => undefined);
109
+ await steps.stop();
110
+ })();
111
+ return stopping;
112
+ },
113
+ };
114
+ }
32
115
  //# sourceMappingURL=lifecycle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/core/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAGxD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,SAA0B,EAC1B,IAAwC,EACxC,MAAc;IAEd,MAAM,MAAM,GAAG,SAAS,CAAC,MAAiC,CAAC;IAC3D,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEzC,MAAM,QAAQ,GAAoB,EAAE,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;QACzD,IAAI,QAAQ,IAAI,QAAQ,KAAK,QAAQ,CAAC,SAAS;YAAE,SAAS;QAC1D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAE7B,IAAI,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,CAAC,KAAK,CAAC,aAAa,IAAI,QAAQ,IAAI,EAAE,CAAC,CAAC;YAC9C,QAAQ,CAAC,IAAI,CACX,OAAO,CAAC,OAAO,EAAE;iBACd,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;iBAC3B,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACb,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,QAAQ,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;gBAClD,MAAM,GAAG,CAAC;YACZ,CAAC,CAAC,CACL,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,OAAO,CACd,OAAgB,EAChB,IAAwC;IAExC,OAAO,CACL,OAAO,KAAK,IAAI;QAChB,OAAO,OAAO,KAAK,QAAQ;QAC3B,IAAI,IAAI,OAAO;QACf,OAAQ,OAAmC,CAAC,IAAI,CAAC,KAAK,UAAU,CACjE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/core/lifecycle.ts"],"names":[],"mappings":"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"}
@@ -21,5 +21,7 @@ export declare function resolveAsyncFactoryProviders(container: AwilixContainer,
21
21
  /** Factory dependency metadata used to order asynchronous initialization. */
22
22
  export interface DependencyResolver extends Resolver<unknown> {
23
23
  dependencies?: string[];
24
+ /** Awilix disposer, set by `.disposer()`. */
25
+ dispose?: (value: unknown) => unknown;
24
26
  }
25
27
  //# sourceMappingURL=module-graph.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"module-graph.d.ts","sourceRoot":"","sources":["../../src/core/module-graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAExD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,KAAK,EAAe,YAAY,EAAgC,MAAM,YAAY,CAAC;AAE1F;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,YAAY,GAAG,YAAY,EAAE,CAyBvE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,IAAI,CA4C9D;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,eAAe,EAC1B,MAAM,EAAE,MAAM,GACb,MAAM,EAAE,CAeV;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAChD,SAAS,EAAE,eAAe,EAC1B,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CA6Bf;AAED,6EAA6E;AAC7E,MAAM,WAAW,kBAAmB,SAAQ,QAAQ,CAAC,OAAO,CAAC;IAC3D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB"}
1
+ {"version":3,"file":"module-graph.d.ts","sourceRoot":"","sources":["../../src/core/module-graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAExD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,KAAK,EAAe,YAAY,EAAgC,MAAM,YAAY,CAAC;AAE1F;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,YAAY,GAAG,YAAY,EAAE,CAyBvE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,IAAI,CA4C9D;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,eAAe,EAC1B,MAAM,EAAE,MAAM,GACb,MAAM,EAAE,CAeV;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAChD,SAAS,EAAE,eAAe,EAC1B,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAoCf;AAyBD,6EAA6E;AAC7E,MAAM,WAAW,kBAAmB,SAAQ,QAAQ,CAAC,OAAO,CAAC;IAC3D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;CACvC"}
@@ -96,13 +96,21 @@ export async function resolveAsyncFactoryProviders(container, names, logger) {
96
96
  if (visiting.has(name))
97
97
  throw new Error(`Circular async factory dependency: ${[...visiting, name].join(' -> ')}`);
98
98
  visiting.add(name);
99
- const registration = container.registrations[name];
99
+ const registration = container.getRegistration(name);
100
100
  for (const dependency of registration?.dependencies ?? [])
101
101
  await initialize(dependency);
102
102
  if (pending.has(name)) {
103
103
  logger?.debug(` - Resolving async factory: ${name}`);
104
- const value = await container.resolve(name);
105
- container.register({ [name]: asValue(value) });
104
+ let value;
105
+ try {
106
+ value = await container.resolve(name);
107
+ }
108
+ catch (error) {
109
+ // Disposal must not receive the rejected promise cached for this singleton.
110
+ container.cache.delete(name);
111
+ throw error;
112
+ }
113
+ registerResolvedValue(container, name, value, registration?.dispose);
106
114
  }
107
115
  visiting.delete(name);
108
116
  completed.add(name);
@@ -116,6 +124,23 @@ export async function resolveAsyncFactoryProviders(container, names, logger) {
116
124
  throw error;
117
125
  }
118
126
  }
127
+ /**
128
+ * Replaces an async factory with its resolved value. The cached promise is dropped, and a
129
+ * disposer moves to a singleton holding the value so that disposal receives the value.
130
+ */
131
+ function registerResolvedValue(container, name, value, dispose) {
132
+ container.cache.delete(name);
133
+ if (!dispose) {
134
+ container.register({ [name]: asValue(value) });
135
+ return;
136
+ }
137
+ container.register({
138
+ [name]: asFunction(() => value)
139
+ .singleton()
140
+ .disposer(dispose),
141
+ });
142
+ container.resolve(name);
143
+ }
119
144
  function registerProvider(provider, container, moduleName, logger) {
120
145
  if (typeof provider === 'function') {
121
146
  registerClassProvider(provider, container, logger);
@@ -130,7 +155,7 @@ function registerProvider(provider, container, moduleName, logger) {
130
155
  return undefined;
131
156
  }
132
157
  if ('useFactory' in provider) {
133
- return registerFactoryProvider(provider, container, logger);
158
+ return registerFactoryProvider(provider, container, moduleName, logger);
134
159
  }
135
160
  throw new Error(`Invalid provider configuration in module "${moduleName}"`);
136
161
  }
@@ -144,10 +169,13 @@ function registerClassProvider(provider, container, logger) {
144
169
  function registerExplicitClassProvider(provider, container, logger) {
145
170
  const name = typeof provider.provide === 'string' ? provider.provide : camelCase(provider.provide.name);
146
171
  const scope = provider.scope || 'SINGLETON';
172
+ if (provider.dispose && scope === 'TRANSIENT') {
173
+ throw new Error(`Provider "${name}": dispose requires SINGLETON or SCOPED scope`);
174
+ }
147
175
  logger.debug(` - Registering ${name} (scope: ${scope})`);
148
- const registration = asClass(provider.useClass);
176
+ const registration = applyScopeToRegistration(asClass(provider.useClass), scope);
149
177
  container.register({
150
- [name]: applyScopeToRegistration(registration, scope),
178
+ [name]: provider.dispose ? registration.disposer(provider.dispose) : registration,
151
179
  });
152
180
  }
153
181
  function registerValueProvider(provider, container, logger) {
@@ -156,23 +184,48 @@ function registerValueProvider(provider, container, logger) {
156
184
  [provider.provide]: asValue(provider.useValue),
157
185
  });
158
186
  }
159
- function registerFactoryProvider(provider, container, logger) {
187
+ function registerFactoryProvider(provider, container, moduleName, logger) {
160
188
  const scope = provider.scope || 'SINGLETON';
189
+ if (provider.dispose && scope === 'TRANSIENT') {
190
+ throw new Error(`Provider "${provider.provide}": dispose requires SINGLETON or SCOPED scope`);
191
+ }
161
192
  const factory = provider.useFactory;
162
- const isAsync = isAsyncFunction(factory);
193
+ const isAsync = provider.async ?? isAsyncFunction(factory);
163
194
  if (isAsync && scope !== 'SINGLETON') {
164
195
  throw new Error(`Async factory "${provider.provide}" must use SINGLETON scope`);
165
196
  }
166
197
  logger.debug(` - Registering ${provider.provide} (factory${isAsync ? ' async' : ''}, scope: ${scope})`);
167
- const registration = Object.assign(asFunction(factory), { dependencies: provider.inject ?? [] });
198
+ const create = isAsync || scope !== 'SINGLETON'
199
+ ? factory
200
+ : rejectPromiseResult(factory, provider.provide, moduleName);
201
+ const registration = applyScopeToRegistration(Object.assign(asFunction(create), { dependencies: provider.inject ?? [] }), scope);
168
202
  container.register({
169
- [provider.provide]: applyScopeToRegistration(registration, scope),
203
+ [provider.provide]: provider.dispose ? registration.disposer(provider.dispose) : registration,
170
204
  });
171
205
  return isAsync ? provider.provide : undefined;
172
206
  }
173
207
  function isAsyncFunction(fn) {
174
208
  return fn.constructor.name === 'AsyncFunction';
175
209
  }
210
+ /**
211
+ * A singleton factory that is not known to be async would hand its pending promise to every
212
+ * consumer. Fail with the fix instead of awaiting it implicitly.
213
+ */
214
+ function rejectPromiseResult(factory, name, moduleName) {
215
+ return (...args) => {
216
+ const value = factory(...args);
217
+ if (isThenable(value)) {
218
+ void Promise.resolve(value).catch(() => undefined);
219
+ throw new Error(`Factory "${name}" in module "${moduleName}" returned a Promise. Use an async function or set async: true so bootstrap awaits it.`);
220
+ }
221
+ return value;
222
+ };
223
+ }
224
+ function isThenable(value) {
225
+ return ((typeof value === 'object' || typeof value === 'function') &&
226
+ value !== null &&
227
+ typeof value.then === 'function');
228
+ }
176
229
  function applyScopeToRegistration(registration, scope) {
177
230
  if (scope === 'SCOPED') {
178
231
  return registration.scoped();
@@ -1 +1 @@
1
- {"version":3,"file":"module-graph.js","sourceRoot":"","sources":["../../src/core/module-graph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"module-graph.js","sourceRoot":"","sources":["../../src/core/module-graph.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,UAAwB;IACrD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAC;IAChD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,SAAS,OAAO,CAAC,MAAoB;QACnC,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,0BAA0B,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;YAC5D,CAAC;YACD,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAEjC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,KAAK,MAAM,cAAc,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC5C,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,UAAU,CAAC,CAAC;IAEpB,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAuB;IACtD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAC;IAE7C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,KAAK,MAAM,cAAc,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC5C,gEAAgE;gBAChE,IAAI,CAAC,CAAC,YAAY,IAAI,cAAc,CAAC,EAAE,CAAC;oBACtC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,SAAS,KAAK,CAAC,IAAY,EAAE,IAAc;QACzC,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACnF,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEnB,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;QAClD,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9B,CAAC;QAED,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAoB,EACpB,SAA0B,EAC1B,MAAc;IAEd,MAAM,iBAAiB,GAAa,EAAE,CAAC;IAEvC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACtB,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACxC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACpF,IAAI,gBAAgB,EAAE,CAAC;YACrB,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,SAA0B,EAC1B,KAAe,EACf,MAAe;IAEf,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,KAAK,UAAU,UAAU,CAAC,IAAY;QACpC,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO;QAChC,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5F,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM,YAAY,GAAG,SAAS,CAAC,eAAe,CAAC,IAAI,CAA8B,CAAC;QAClF,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE,YAAY,IAAI,EAAE;YAAE,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;QACxF,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,MAAM,EAAE,KAAK,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC;YACtD,IAAI,KAAc,CAAC;YACnB,IAAI,CAAC;gBACH,KAAK,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACxC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,4EAA4E;gBAC5E,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC7B,MAAM,KAAK,CAAC;YACd,CAAC;YACD,qBAAqB,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QACvE,CAAC;QACD,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtB,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IACD,IAAI,CAAC;QACH,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,EAAE,KAAK,CAAC,mCAAmC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9D,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,qBAAqB,CAC5B,SAA0B,EAC1B,IAAY,EACZ,KAAc,EACd,OAAkD;IAElD,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IACD,SAAS,CAAC,QAAQ,CAAC;QACjB,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;aAC5B,SAAS,EAAE;aACX,QAAQ,CAAC,OAAO,CAAC;KACrB,CAAC,CAAC;IACH,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AASD,SAAS,gBAAgB,CACvB,QAAwB,EACxB,SAA0B,EAC1B,UAAkB,EAClB,MAAc;IAEd,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;QACnC,qBAAqB,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACnD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;QAC3B,6BAA6B,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAC3D,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;QAC3B,qBAAqB,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACnD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,YAAY,IAAI,QAAQ,EAAE,CAAC;QAC7B,OAAO,uBAAuB,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,6CAA6C,UAAU,GAAG,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,qBAAqB,CAC5B,QAAqB,EACrB,SAA0B,EAC1B,MAAc;IAEd,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEtC,MAAM,CAAC,KAAK,CAAC,mBAAmB,IAAI,KAAK,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;IAE3D,SAAS,CAAC,QAAQ,CAAC;QACjB,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE;KACtC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,6BAA6B,CACpC,QAAwD,EACxD,SAA0B,EAC1B,MAAc;IAEd,MAAM,IAAI,GACR,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7F,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,WAAW,CAAC;IAE5C,IAAI,QAAQ,CAAC,OAAO,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,+CAA+C,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,mBAAmB,IAAI,YAAY,KAAK,GAAG,CAAC,CAAC;IAE1D,MAAM,YAAY,GAAG,wBAAwB,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC;IAEjF,SAAS,CAAC,QAAQ,CAAC;QACjB,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY;KAClF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,qBAAqB,CAC5B,QAAgD,EAChD,SAA0B,EAC1B,MAAc;IAEd,MAAM,CAAC,KAAK,CAAC,mBAAmB,QAAQ,CAAC,OAAO,UAAU,CAAC,CAAC;IAE5D,SAAS,CAAC,QAAQ,CAAC;QACjB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;KAC/C,CAAC,CAAC;AACL,CAAC;AAID,SAAS,uBAAuB,CAC9B,QAAyB,EACzB,SAA0B,EAC1B,UAAkB,EAClB,MAAc;IAEd,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,WAAW,CAAC;IAC5C,IAAI,QAAQ,CAAC,OAAO,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,aAAa,QAAQ,CAAC,OAAO,+CAA+C,CAAC,CAAC;IAChG,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,UAA6C,CAAC;IACvE,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;IAC3D,IAAI,OAAO,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,kBAAkB,QAAQ,CAAC,OAAO,4BAA4B,CAAC,CAAC;IAClF,CAAC;IACD,MAAM,CAAC,KAAK,CACV,mBAAmB,QAAQ,CAAC,OAAO,YAAY,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,YAAY,KAAK,GAAG,CAC3F,CAAC;IAEF,MAAM,MAAM,GACV,OAAO,IAAI,KAAK,KAAK,WAAW;QAC9B,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACjE,MAAM,YAAY,GAAG,wBAAwB,CAC3C,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC,EAC1E,KAAK,CACN,CAAC;IAEF,SAAS,CAAC,QAAQ,CAAC;QACjB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY;KAC9F,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC;AAED,SAAS,eAAe,CAAC,EAAmC;IAC1D,OAAO,EAAE,CAAC,WAAW,CAAC,IAAI,KAAK,eAAe,CAAC;AACjD,CAAC;AAED;;;GAGG;AACH,SAAS,mBAAmB,CAC1B,OAAwC,EACxC,IAAY,EACZ,UAAkB;IAElB,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE;QACjB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAC/B,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,KAAK,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACnD,MAAM,IAAI,KAAK,CACb,YAAY,IAAI,gBAAgB,UAAU,wFAAwF,CACnI,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,CACL,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,UAAU,CAAC;QAC1D,KAAK,KAAK,IAAI;QACd,OAAQ,KAA4B,CAAC,IAAI,KAAK,UAAU,CACzD,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAC/B,YAAwC,EACxC,KAAmB;IAEnB,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,OAAO,YAAY,CAAC,MAAM,EAAE,CAAC;IAC/B,CAAC;IACD,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;QAC1B,OAAO,YAAY,CAAC,SAAS,EAAE,CAAC;IAClC,CAAC;IACD,OAAO,YAAY,CAAC,SAAS,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,44 @@
1
+ import type { ModuleConfig } from './types.js';
2
+ export interface ModuleGraphProvider {
3
+ name: string;
4
+ kind: 'class' | 'factory' | 'value';
5
+ /** Value providers have no Awilix lifetime. */
6
+ scope: 'SINGLETON' | 'SCOPED' | 'TRANSIENT' | 'VALUE';
7
+ /** Async factories are awaited during bootstrap. */
8
+ async: boolean;
9
+ exported: boolean;
10
+ /** Dependencies declared with `inject`. Constructor dependencies are not analyzed. */
11
+ inject: string[];
12
+ }
13
+ export interface ModuleGraphNode {
14
+ name: string;
15
+ basePath?: string;
16
+ /** `deferred` marks a `forwardRef()` import. */
17
+ imports: Array<{
18
+ module: string;
19
+ deferred: boolean;
20
+ }>;
21
+ /** Provider names the module exports, including re-exports of imported modules. */
22
+ exports: string[];
23
+ providers: ModuleGraphProvider[];
24
+ jobs: string[];
25
+ hasRoutes: boolean;
26
+ }
27
+ export interface ModuleGraph {
28
+ root: string;
29
+ modules: ModuleGraphNode[];
30
+ /** Module cycles closed by `forwardRef()` imports, as module names from first to last. */
31
+ cycles: string[][];
32
+ }
33
+ /**
34
+ * Describe the module graph of an application without creating any provider.
35
+ *
36
+ * Runs the same checks as bootstrap: duplicate module and provider names, undeferred import
37
+ * cycles, ambiguous imports, unknown exports and `inject` dependencies that a module cannot
38
+ * see. It does not run factories, route factories or lifecycle hooks, so it needs no
39
+ * database, network or credentials.
40
+ */
41
+ export declare function inspectModuleGraph(root: ModuleConfig): ModuleGraph;
42
+ /** Render a module graph as a Mermaid flowchart. Deferred imports use dotted arrows. */
43
+ export declare function moduleGraphToMermaid(graph: ModuleGraph): string;
44
+ //# sourceMappingURL=module-inspection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-inspection.d.ts","sourceRoot":"","sources":["../../src/core/module-inspection.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,YAAY,CAAC;AAE/D,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;IACpC,+CAA+C;IAC/C,KAAK,EAAE,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC;IACtD,oDAAoD;IACpD,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,sFAAsF;IACtF,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,OAAO,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACtD,mFAAmF;IACnF,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,mBAAmB,EAAE,CAAC;IACjC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,0FAA0F;IAC1F,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,WAAW,CAwBlE;AAqED,wFAAwF;AACxF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAoB/D"}
@@ -0,0 +1,114 @@
1
+ import { createLogger } from '../utils/logger.js';
2
+ import { getProviderName, resolveModule } from './module.js';
3
+ import { collectModules, validateNoCycles } from './module-graph.js';
4
+ import { ModuleRuntime } from './module-runtime.js';
5
+ /**
6
+ * Describe the module graph of an application without creating any provider.
7
+ *
8
+ * Runs the same checks as bootstrap: duplicate module and provider names, undeferred import
9
+ * cycles, ambiguous imports, unknown exports and `inject` dependencies that a module cannot
10
+ * see. It does not run factories, route factories or lifecycle hooks, so it needs no
11
+ * database, network or credentials.
12
+ */
13
+ export function inspectModuleGraph(root) {
14
+ const modules = collectModules(root);
15
+ validateNoCycles(modules);
16
+ const runtime = new ModuleRuntime(modules, createLogger('ModuleGraph', 'silent'));
17
+ return {
18
+ root: root.name,
19
+ modules: modules.map((module) => {
20
+ const exported = new Set(runtime.exportedNames(module));
21
+ return {
22
+ name: module.name,
23
+ ...(module.basePath ? { basePath: module.basePath } : {}),
24
+ imports: (module.imports ?? []).map((reference) => ({
25
+ module: resolveModule(reference).name,
26
+ deferred: 'forwardRef' in reference,
27
+ })),
28
+ exports: [...exported],
29
+ providers: (module.providers ?? []).map((provider) => describeProvider(provider, exported)),
30
+ jobs: (module.jobs ?? []).map((job) => job.name),
31
+ hasRoutes: Boolean(module.routes),
32
+ };
33
+ }),
34
+ cycles: findDeferredCycles(modules),
35
+ };
36
+ }
37
+ function describeProvider(provider, exported) {
38
+ const name = getProviderName(provider);
39
+ const base = { name, exported: exported.has(name), inject: [] };
40
+ if (typeof provider === 'function') {
41
+ return { ...base, kind: 'class', scope: 'SINGLETON', async: false };
42
+ }
43
+ if ('useValue' in provider) {
44
+ return { ...base, kind: 'value', scope: 'VALUE', async: false };
45
+ }
46
+ if ('useClass' in provider) {
47
+ return { ...base, kind: 'class', scope: provider.scope ?? 'SINGLETON', async: false };
48
+ }
49
+ const declared = provider.async;
50
+ return {
51
+ ...base,
52
+ kind: 'factory',
53
+ scope: provider.scope ?? 'SINGLETON',
54
+ async: declared ?? provider.useFactory.constructor.name === 'AsyncFunction',
55
+ inject: provider.inject ?? [],
56
+ };
57
+ }
58
+ /** Every deferred edge that leads back to its importer closes a deliberate cycle. */
59
+ function findDeferredCycles(modules) {
60
+ const edges = new Map(modules.map((module) => [
61
+ module.name,
62
+ (module.imports ?? []).map((reference) => resolveModule(reference).name),
63
+ ]));
64
+ const cycles = [];
65
+ for (const module of modules) {
66
+ for (const reference of module.imports ?? []) {
67
+ if (!('forwardRef' in reference))
68
+ continue;
69
+ const path = shortestPath(edges, resolveModule(reference).name, module.name);
70
+ if (path)
71
+ cycles.push([module.name, ...path]);
72
+ }
73
+ }
74
+ return cycles;
75
+ }
76
+ function shortestPath(edges, from, to) {
77
+ const previous = new Map([[from, null]]);
78
+ const queue = [from];
79
+ while (queue.length > 0) {
80
+ const current = queue.shift();
81
+ if (current === to) {
82
+ const path = [];
83
+ for (let node = to; node; node = previous.get(node)) {
84
+ path.unshift(node);
85
+ }
86
+ return path;
87
+ }
88
+ for (const next of edges.get(current) ?? []) {
89
+ if (!previous.has(next)) {
90
+ previous.set(next, current);
91
+ queue.push(next);
92
+ }
93
+ }
94
+ }
95
+ return undefined;
96
+ }
97
+ /** Render a module graph as a Mermaid flowchart. Deferred imports use dotted arrows. */
98
+ export function moduleGraphToMermaid(graph) {
99
+ const ids = new Map(graph.modules.map((module, index) => [module.name, `m_${index}`]));
100
+ const id = (name) => ids.get(name);
101
+ const label = (name) => name.replace(/[&<>"#\r\n]/g, (character) => `#${character.charCodeAt(0)};`);
102
+ const lines = ['flowchart LR'];
103
+ for (const module of graph.modules) {
104
+ const providers = module.providers.length;
105
+ lines.push(` ${id(module.name)}["${label(module.name)}<br/>${providers} provider${providers === 1 ? '' : 's'}, ${module.exports.length} exported"]`);
106
+ }
107
+ for (const module of graph.modules) {
108
+ for (const imported of module.imports) {
109
+ lines.push(` ${id(module.name)} ${imported.deferred ? '-.->' : '-->'} ${id(imported.module)}`);
110
+ }
111
+ }
112
+ return lines.join('\n');
113
+ }
114
+ //# sourceMappingURL=module-inspection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-inspection.js","sourceRoot":"","sources":["../../src/core/module-inspection.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { type AwilixContainer } from 'awilix';
2
2
  import type { Logger } from '../utils/logger.js';
3
+ import { type JobServicesScope } from './job-services.js';
3
4
  import type { ModuleConfig } from './types.js';
4
5
  /** Module names are translated only at the edge; Awilix owns caching and lifetimes. */
5
6
  export declare class ModuleRuntime {
@@ -8,6 +9,13 @@ export declare class ModuleRuntime {
8
9
  readonly container: AwilixContainer<{}>;
9
10
  readonly asyncFactories: string[];
10
11
  constructor(modules: ModuleConfig[], logger: Logger);
12
+ /** Names a module exports, including re-exports of imported modules. */
13
+ exportedNames(module: ModuleConfig): string[];
14
+ /**
15
+ * Opens a scope in the module that declares a job, as the worker does for each attempt.
16
+ * Returns undefined for jobs that no module declares.
17
+ */
18
+ jobServices(jobName: string): JobServicesScope | undefined;
11
19
  /** A container view exposes only local providers and direct imports' exports. */
12
20
  forModule(module: ModuleConfig, container?: AwilixContainer<{}>): AwilixContainer;
13
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"module-runtime.d.ts","sourceRoot":"","sources":["../../src/core/module-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EAMrB,MAAM,QAAQ,CAAC;AAChB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAGjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,uFAAuF;AACvF,qBAAa,aAAa;;IAStB,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE;IARlC,QAAQ,CAAC,SAAS,sBAAyE;IAC3F,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,CAAM;IAMvC,YACW,OAAO,EAAE,YAAY,EAAE,EAChC,MAAM,EAAE,MAAM,EAmBf;IAwHD,iFAAiF;IACjF,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,sBAAiB,GAAG,eAAe,CAM3E;CAyEF"}
1
+ {"version":3,"file":"module-runtime.d.ts","sourceRoot":"","sources":["../../src/core/module-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EAMrB,MAAM,QAAQ,CAAC;AAChB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAgB,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,uFAAuF;AACvF,qBAAa,aAAa;;IAUtB,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE;IATlC,QAAQ,CAAC,SAAS,sBAAyE;IAC3F,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,CAAM;IAOvC,YACW,OAAO,EAAE,YAAY,EAAE,EAChC,MAAM,EAAE,MAAM,EAsBf;IAgGD,wEAAwE;IACxE,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,EAAE,CAE5C;IA8CD;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAQzD;IAED,iFAAiF;IACjF,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,sBAAiB,GAAG,eAAe,CAM3E;CA6EF"}