@haskou/ddd-kernel 0.1.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 (191) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +143 -0
  3. package/dist/Constructor-fyZLLIh8.d.cts +5 -0
  4. package/dist/Constructor-fyZLLIh8.d.ts +5 -0
  5. package/dist/Consumer-CC8ZRCsd.d.cts +17 -0
  6. package/dist/Consumer-CeT0Wbxb.d.ts +17 -0
  7. package/dist/DomainEvent-mXWEtr_J.d.cts +26 -0
  8. package/dist/DomainEvent-mXWEtr_J.d.ts +26 -0
  9. package/dist/DomainEventConsumer-3WBMSSr2.d.cts +7 -0
  10. package/dist/DomainEventConsumer-B4hkIUmP.d.ts +7 -0
  11. package/dist/DomainEventPublisher-8G0lvmdy.d.cts +7 -0
  12. package/dist/DomainEventPublisher-DhGgM3f2.d.ts +7 -0
  13. package/dist/HandlerContext-DUUExVo3.d.ts +20 -0
  14. package/dist/HandlerContext-Lm89pSeG.d.cts +20 -0
  15. package/dist/Kernel-BWUOUWWI.d.cts +70 -0
  16. package/dist/Kernel-CUaqHa1s.d.ts +70 -0
  17. package/dist/KernelLogger-BESOFrpW.d.cts +8 -0
  18. package/dist/KernelLogger-BESOFrpW.d.ts +8 -0
  19. package/dist/Log-36L3Z84a.d.cts +8 -0
  20. package/dist/Log-36L3Z84a.d.ts +8 -0
  21. package/dist/NoFailedMessagesError-0YJKRWPF.d.ts +45 -0
  22. package/dist/NoFailedMessagesError-Kz7CYWpT.d.cts +45 -0
  23. package/dist/Repository-D9CuAyCV.d.cts +7 -0
  24. package/dist/Repository-D9CuAyCV.d.ts +7 -0
  25. package/dist/Scheduler-oigqNOUJ.d.cts +27 -0
  26. package/dist/Scheduler-oigqNOUJ.d.ts +27 -0
  27. package/dist/ServiceClass-BmNw8fJj.d.cts +37 -0
  28. package/dist/ServiceClass-C7NCKdSS.d.ts +37 -0
  29. package/dist/ServiceResolver-D2Jz-l_Z.d.cts +5 -0
  30. package/dist/ServiceResolver-D2Jz-l_Z.d.ts +5 -0
  31. package/dist/ShutdownHook-BGskq2-q.d.ts +9 -0
  32. package/dist/ShutdownHook-Dib5uNKB.d.cts +9 -0
  33. package/dist/Subscription-Bwkb_did.d.ts +9 -0
  34. package/dist/Subscription-P9WROD_6.d.cts +9 -0
  35. package/dist/adapters/db/in-memory/index.cjs +46 -0
  36. package/dist/adapters/db/in-memory/index.cjs.map +1 -0
  37. package/dist/adapters/db/in-memory/index.d.cts +12 -0
  38. package/dist/adapters/db/in-memory/index.d.ts +12 -0
  39. package/dist/adapters/db/in-memory/index.js +19 -0
  40. package/dist/adapters/db/in-memory/index.js.map +1 -0
  41. package/dist/adapters/db/index.cjs +80 -0
  42. package/dist/adapters/db/index.cjs.map +1 -0
  43. package/dist/adapters/db/index.d.cts +4 -0
  44. package/dist/adapters/db/index.d.ts +4 -0
  45. package/dist/adapters/db/index.js +52 -0
  46. package/dist/adapters/db/index.js.map +1 -0
  47. package/dist/adapters/db/mongo/index.cjs +62 -0
  48. package/dist/adapters/db/mongo/index.cjs.map +1 -0
  49. package/dist/adapters/db/mongo/index.d.cts +22 -0
  50. package/dist/adapters/db/mongo/index.d.ts +22 -0
  51. package/dist/adapters/db/mongo/index.js +35 -0
  52. package/dist/adapters/db/mongo/index.js.map +1 -0
  53. package/dist/adapters/index.cjs +651 -0
  54. package/dist/adapters/index.cjs.map +1 -0
  55. package/dist/adapters/index.d.cts +26 -0
  56. package/dist/adapters/index.d.ts +26 -0
  57. package/dist/adapters/index.js +609 -0
  58. package/dist/adapters/index.js.map +1 -0
  59. package/dist/adapters/kernel/console/index.cjs +46 -0
  60. package/dist/adapters/kernel/console/index.cjs.map +1 -0
  61. package/dist/adapters/kernel/console/index.d.cts +10 -0
  62. package/dist/adapters/kernel/console/index.d.ts +10 -0
  63. package/dist/adapters/kernel/console/index.js +19 -0
  64. package/dist/adapters/kernel/console/index.js.map +1 -0
  65. package/dist/adapters/kernel/index.cjs +46 -0
  66. package/dist/adapters/kernel/index.cjs.map +1 -0
  67. package/dist/adapters/kernel/index.d.cts +2 -0
  68. package/dist/adapters/kernel/index.d.ts +2 -0
  69. package/dist/adapters/kernel/index.js +19 -0
  70. package/dist/adapters/kernel/index.js.map +1 -0
  71. package/dist/adapters/pubsub/amqp/index.cjs +724 -0
  72. package/dist/adapters/pubsub/amqp/index.cjs.map +1 -0
  73. package/dist/adapters/pubsub/amqp/index.d.cts +42 -0
  74. package/dist/adapters/pubsub/amqp/index.d.ts +42 -0
  75. package/dist/adapters/pubsub/amqp/index.js +691 -0
  76. package/dist/adapters/pubsub/amqp/index.js.map +1 -0
  77. package/dist/adapters/pubsub/in-memory/index.cjs +79 -0
  78. package/dist/adapters/pubsub/in-memory/index.cjs.map +1 -0
  79. package/dist/adapters/pubsub/in-memory/index.d.cts +21 -0
  80. package/dist/adapters/pubsub/in-memory/index.d.ts +21 -0
  81. package/dist/adapters/pubsub/in-memory/index.js +51 -0
  82. package/dist/adapters/pubsub/in-memory/index.js.map +1 -0
  83. package/dist/adapters/pubsub/index.cjs +492 -0
  84. package/dist/adapters/pubsub/index.cjs.map +1 -0
  85. package/dist/adapters/pubsub/index.d.cts +11 -0
  86. package/dist/adapters/pubsub/index.d.ts +11 -0
  87. package/dist/adapters/pubsub/index.js +456 -0
  88. package/dist/adapters/pubsub/index.js.map +1 -0
  89. package/dist/adapters/ui/express/index.cjs +126 -0
  90. package/dist/adapters/ui/express/index.cjs.map +1 -0
  91. package/dist/adapters/ui/express/index.d.cts +49 -0
  92. package/dist/adapters/ui/express/index.d.ts +49 -0
  93. package/dist/adapters/ui/express/index.js +98 -0
  94. package/dist/adapters/ui/express/index.js.map +1 -0
  95. package/dist/adapters/ui/index.cjs +489 -0
  96. package/dist/adapters/ui/index.cjs.map +1 -0
  97. package/dist/adapters/ui/index.d.cts +14 -0
  98. package/dist/adapters/ui/index.d.ts +14 -0
  99. package/dist/adapters/ui/index.js +455 -0
  100. package/dist/adapters/ui/index.js.map +1 -0
  101. package/dist/adapters/ui/routes/index.cjs +393 -0
  102. package/dist/adapters/ui/routes/index.cjs.map +1 -0
  103. package/dist/adapters/ui/routes/index.d.cts +5 -0
  104. package/dist/adapters/ui/routes/index.d.ts +5 -0
  105. package/dist/adapters/ui/routes/index.js +361 -0
  106. package/dist/adapters/ui/routes/index.js.map +1 -0
  107. package/dist/contracts/db/index.cjs +19 -0
  108. package/dist/contracts/db/index.cjs.map +1 -0
  109. package/dist/contracts/db/index.d.cts +7 -0
  110. package/dist/contracts/db/index.d.ts +7 -0
  111. package/dist/contracts/db/index.js +1 -0
  112. package/dist/contracts/db/index.js.map +1 -0
  113. package/dist/contracts/index.cjs +49 -0
  114. package/dist/contracts/index.cjs.map +1 -0
  115. package/dist/contracts/index.d.cts +11 -0
  116. package/dist/contracts/index.d.ts +11 -0
  117. package/dist/contracts/index.js +22 -0
  118. package/dist/contracts/index.js.map +1 -0
  119. package/dist/contracts/kernel/index.cjs +19 -0
  120. package/dist/contracts/kernel/index.cjs.map +1 -0
  121. package/dist/contracts/kernel/index.d.cts +9 -0
  122. package/dist/contracts/kernel/index.d.ts +9 -0
  123. package/dist/contracts/kernel/index.js +1 -0
  124. package/dist/contracts/kernel/index.js.map +1 -0
  125. package/dist/contracts/pubsub/index.cjs +19 -0
  126. package/dist/contracts/pubsub/index.cjs.map +1 -0
  127. package/dist/contracts/pubsub/index.d.cts +26 -0
  128. package/dist/contracts/pubsub/index.d.ts +26 -0
  129. package/dist/contracts/pubsub/index.js +1 -0
  130. package/dist/contracts/pubsub/index.js.map +1 -0
  131. package/dist/contracts/ui/index.cjs +49 -0
  132. package/dist/contracts/ui/index.cjs.map +1 -0
  133. package/dist/contracts/ui/index.d.cts +29 -0
  134. package/dist/contracts/ui/index.d.ts +29 -0
  135. package/dist/contracts/ui/index.js +22 -0
  136. package/dist/contracts/ui/index.js.map +1 -0
  137. package/dist/domain/index.cjs +121 -0
  138. package/dist/domain/index.cjs.map +1 -0
  139. package/dist/domain/index.d.cts +26 -0
  140. package/dist/domain/index.d.ts +26 -0
  141. package/dist/domain/index.js +89 -0
  142. package/dist/domain/index.js.map +1 -0
  143. package/dist/errors/index.cjs +58 -0
  144. package/dist/errors/index.cjs.map +1 -0
  145. package/dist/errors/index.d.cts +13 -0
  146. package/dist/errors/index.d.ts +13 -0
  147. package/dist/errors/index.js +29 -0
  148. package/dist/errors/index.js.map +1 -0
  149. package/dist/index.cjs +442 -0
  150. package/dist/index.cjs.map +1 -0
  151. package/dist/index.d.cts +19 -0
  152. package/dist/index.d.ts +19 -0
  153. package/dist/index.js +405 -0
  154. package/dist/index.js.map +1 -0
  155. package/dist/infrastructure/dependency-injection/index.cjs +169 -0
  156. package/dist/infrastructure/dependency-injection/index.cjs.map +1 -0
  157. package/dist/infrastructure/dependency-injection/index.d.cts +30 -0
  158. package/dist/infrastructure/dependency-injection/index.d.ts +30 -0
  159. package/dist/infrastructure/dependency-injection/index.js +137 -0
  160. package/dist/infrastructure/dependency-injection/index.js.map +1 -0
  161. package/dist/infrastructure/express/index.cjs +126 -0
  162. package/dist/infrastructure/express/index.cjs.map +1 -0
  163. package/dist/infrastructure/express/index.d.cts +14 -0
  164. package/dist/infrastructure/express/index.d.ts +14 -0
  165. package/dist/infrastructure/express/index.js +98 -0
  166. package/dist/infrastructure/express/index.js.map +1 -0
  167. package/dist/infrastructure/lifecycle/index.cjs +19 -0
  168. package/dist/infrastructure/lifecycle/index.cjs.map +1 -0
  169. package/dist/infrastructure/lifecycle/index.d.cts +9 -0
  170. package/dist/infrastructure/lifecycle/index.d.ts +9 -0
  171. package/dist/infrastructure/lifecycle/index.js +1 -0
  172. package/dist/infrastructure/lifecycle/index.js.map +1 -0
  173. package/dist/infrastructure/logs/index.cjs +144 -0
  174. package/dist/infrastructure/logs/index.cjs.map +1 -0
  175. package/dist/infrastructure/logs/index.d.cts +30 -0
  176. package/dist/infrastructure/logs/index.d.ts +30 -0
  177. package/dist/infrastructure/logs/index.js +107 -0
  178. package/dist/infrastructure/logs/index.js.map +1 -0
  179. package/dist/infrastructure/scheduler/index.cjs +461 -0
  180. package/dist/infrastructure/scheduler/index.cjs.map +1 -0
  181. package/dist/infrastructure/scheduler/index.d.cts +17 -0
  182. package/dist/infrastructure/scheduler/index.d.ts +17 -0
  183. package/dist/infrastructure/scheduler/index.js +426 -0
  184. package/dist/infrastructure/scheduler/index.js.map +1 -0
  185. package/dist/infrastructure/websocket/index.cjs +131 -0
  186. package/dist/infrastructure/websocket/index.cjs.map +1 -0
  187. package/dist/infrastructure/websocket/index.d.cts +56 -0
  188. package/dist/infrastructure/websocket/index.d.ts +56 -0
  189. package/dist/infrastructure/websocket/index.js +103 -0
  190. package/dist/infrastructure/websocket/index.js.map +1 -0
  191. package/package.json +248 -0
@@ -0,0 +1,30 @@
1
+ export { D as DependencyInjection, a as DependencyInjectionOptions, S as ServiceClass } from '../../ServiceClass-C7NCKdSS.js';
2
+ import '../../ServiceResolver-D2Jz-l_Z.js';
3
+
4
+ type ExplicitServiceClass = {
5
+ readonly name: string;
6
+ };
7
+
8
+ type ContainerDefinition = {
9
+ readonly Object?: ExplicitServiceClass;
10
+ };
11
+
12
+ type DefinitionMetadata = {
13
+ readonly _abstract?: boolean;
14
+ readonly _parent?: string | null;
15
+ };
16
+
17
+ type ContainerInternals = {
18
+ readonly _alias?: Map<string, string>;
19
+ readonly _definitions?: Map<string, DefinitionMetadata>;
20
+ };
21
+
22
+ type DependencyAlias = readonly [unknown, unknown];
23
+
24
+ interface ExplicitServiceDefinition {
25
+ readonly dependencyClasses?: readonly unknown[];
26
+ readonly serviceClass: ExplicitServiceClass;
27
+ readonly sourcePath: string;
28
+ }
29
+
30
+ export type { ContainerDefinition, ContainerInternals, DefinitionMetadata, DependencyAlias, ExplicitServiceClass, ExplicitServiceDefinition };
@@ -0,0 +1,137 @@
1
+ // src/infrastructure/dependency-injection/DependencyInjection.ts
2
+ import fs from "fs-extra";
3
+ import {
4
+ Autowire,
5
+ ContainerBuilder,
6
+ ServiceFile,
7
+ YamlFileLoader
8
+ } from "node-dependency-injection";
9
+ import path from "path";
10
+ var DependencyInjection = class _DependencyInjection {
11
+ constructor(options = {
12
+ containerBuild: process.env.CONTAINER_BUILD === "true",
13
+ servicesYamlPath: path.resolve(
14
+ process.cwd(),
15
+ "config",
16
+ "container",
17
+ "services.yaml"
18
+ ),
19
+ sourceDirectory: path.resolve(process.cwd(), "src")
20
+ }) {
21
+ this.options = options;
22
+ this.container = new ContainerBuilder(false, this.options.sourceDirectory);
23
+ }
24
+ options;
25
+ static configuredInstance;
26
+ autowire;
27
+ loader;
28
+ container;
29
+ static configure(options) {
30
+ _DependencyInjection.configuredInstance = new _DependencyInjection(options);
31
+ return _DependencyInjection.configuredInstance;
32
+ }
33
+ static get instance() {
34
+ if (!_DependencyInjection.configuredInstance) {
35
+ throw new Error("DependencyInjection has not been configured.");
36
+ }
37
+ return _DependencyInjection.configuredInstance;
38
+ }
39
+ get definitions() {
40
+ const container = this.container;
41
+ return container._definitions || /* @__PURE__ */ new Map();
42
+ }
43
+ get aliases() {
44
+ const container = this.container;
45
+ return container._alias || /* @__PURE__ */ new Map();
46
+ }
47
+ async ensureFolderExists(filePath) {
48
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
49
+ }
50
+ getServiceClassName(serviceName) {
51
+ return typeof serviceName === "function" ? serviceName.name : void 0;
52
+ }
53
+ parentMatchesService(parentId, serviceClassName) {
54
+ if (!parentId) {
55
+ return false;
56
+ }
57
+ const parentName = Buffer.from(parentId, "base64").toString("utf8");
58
+ return parentName.endsWith(`__${serviceClassName}__${serviceClassName}`);
59
+ }
60
+ serviceIdMatchesService(serviceId, serviceClassName) {
61
+ const serviceName = Buffer.from(serviceId, "base64").toString("utf8");
62
+ return serviceName.endsWith(`__${serviceClassName}__${serviceClassName}`);
63
+ }
64
+ findConcreteChildServiceId(serviceName) {
65
+ const serviceClassName = this.getServiceClassName(serviceName);
66
+ if (!serviceClassName) {
67
+ return void 0;
68
+ }
69
+ const matches = [...this.definitions.entries()].filter(([, definition]) => definition._abstract !== true).filter(
70
+ ([, definition]) => this.parentMatchesService(definition._parent, serviceClassName)
71
+ ).map(([id]) => id);
72
+ return matches[matches.length - 1];
73
+ }
74
+ findRegisteredServiceId(serviceName) {
75
+ const serviceClassName = this.getServiceClassName(serviceName);
76
+ if (!serviceClassName) {
77
+ return void 0;
78
+ }
79
+ const matches = [...this.definitions.keys()].filter(
80
+ (id) => this.serviceIdMatchesService(id, serviceClassName)
81
+ );
82
+ return matches[matches.length - 1];
83
+ }
84
+ findAliasServiceId(serviceName) {
85
+ const serviceClassName = this.getServiceClassName(serviceName);
86
+ if (!serviceClassName) {
87
+ return void 0;
88
+ }
89
+ const matches = [...this.aliases.keys()].filter(
90
+ (id) => this.serviceIdMatchesService(id, serviceClassName)
91
+ );
92
+ return matches[matches.length - 1];
93
+ }
94
+ registerParentAliases() {
95
+ for (const [id, definition] of this.definitions.entries()) {
96
+ if (definition._abstract === true || !definition._parent) {
97
+ continue;
98
+ }
99
+ this.container.setAlias(definition._parent, id);
100
+ }
101
+ }
102
+ async compile() {
103
+ if (this.options.containerBuild) {
104
+ await this.ensureFolderExists(this.options.servicesYamlPath);
105
+ this.autowire = new Autowire(this.container);
106
+ this.autowire.serviceFile = new ServiceFile(
107
+ this.options.servicesYamlPath,
108
+ false
109
+ );
110
+ await this.autowire.process();
111
+ } else {
112
+ this.loader = new YamlFileLoader(this.container);
113
+ await this.loader.load(this.options.servicesYamlPath);
114
+ }
115
+ this.registerParentAliases();
116
+ await this.container.compile();
117
+ }
118
+ getService(serviceName) {
119
+ const childServiceId = this.findConcreteChildServiceId(serviceName);
120
+ if (childServiceId) {
121
+ return this.container.get(childServiceId);
122
+ }
123
+ const aliasServiceId = this.findAliasServiceId(serviceName);
124
+ if (aliasServiceId) {
125
+ return this.container.get(aliasServiceId);
126
+ }
127
+ const registeredServiceId = this.findRegisteredServiceId(serviceName);
128
+ if (registeredServiceId) {
129
+ return this.container.get(registeredServiceId);
130
+ }
131
+ return this.container.get(serviceName);
132
+ }
133
+ };
134
+ export {
135
+ DependencyInjection
136
+ };
137
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/infrastructure/dependency-injection/DependencyInjection.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport {\n Autowire,\n ContainerBuilder,\n ServiceFile,\n YamlFileLoader,\n} from 'node-dependency-injection';\nimport path from 'node:path';\n\nimport type { ServiceResolver } from '../../contracts/index.js';\nimport type { ContainerInternals } from './ContainerInternals.js';\nimport type { DefinitionMetadata } from './DefinitionMetadata.js';\nimport type { DependencyInjectionOptions } from './DependencyInjectionOptions.js';\n\nexport class DependencyInjection implements ServiceResolver {\n private static configuredInstance: DependencyInjection | undefined;\n private autowire: Autowire | undefined;\n private loader: YamlFileLoader | undefined;\n private readonly container: ContainerBuilder;\n\n public static configure(\n options: DependencyInjectionOptions,\n ): DependencyInjection {\n DependencyInjection.configuredInstance = new DependencyInjection(options);\n\n return DependencyInjection.configuredInstance;\n }\n\n public static get instance(): DependencyInjection {\n if (!DependencyInjection.configuredInstance) {\n throw new Error('DependencyInjection has not been configured.');\n }\n\n return DependencyInjection.configuredInstance;\n }\n\n constructor(\n private readonly options: DependencyInjectionOptions = {\n containerBuild: process.env.CONTAINER_BUILD === 'true',\n servicesYamlPath: path.resolve(\n process.cwd(),\n 'config',\n 'container',\n 'services.yaml',\n ),\n sourceDirectory: path.resolve(process.cwd(), 'src'),\n },\n ) {\n this.container = new ContainerBuilder(false, this.options.sourceDirectory);\n }\n\n private get definitions(): Map<string, DefinitionMetadata> {\n const container = this.container as unknown as ContainerInternals;\n\n return container._definitions || new Map();\n }\n\n private get aliases(): Map<string, string> {\n const container = this.container as unknown as ContainerInternals;\n\n return container._alias || new Map();\n }\n\n private async ensureFolderExists(filePath: string): Promise<void> {\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n }\n\n private getServiceClassName(serviceName: unknown): string | undefined {\n return typeof serviceName === 'function' ? serviceName.name : undefined;\n }\n\n private parentMatchesService(\n parentId: string | null | undefined,\n serviceClassName: string,\n ): boolean {\n if (!parentId) {\n return false;\n }\n\n const parentName = Buffer.from(parentId, 'base64').toString('utf8');\n\n return parentName.endsWith(`__${serviceClassName}__${serviceClassName}`);\n }\n\n private serviceIdMatchesService(\n serviceId: string,\n serviceClassName: string,\n ): boolean {\n const serviceName = Buffer.from(serviceId, 'base64').toString('utf8');\n\n return serviceName.endsWith(`__${serviceClassName}__${serviceClassName}`);\n }\n\n private findConcreteChildServiceId(serviceName: unknown): string | undefined {\n const serviceClassName = this.getServiceClassName(serviceName);\n\n if (!serviceClassName) {\n return undefined;\n }\n\n const matches = [...this.definitions.entries()]\n .filter(([, definition]) => definition._abstract !== true)\n .filter(([, definition]) =>\n this.parentMatchesService(definition._parent, serviceClassName),\n )\n .map(([id]) => id);\n\n return matches[matches.length - 1];\n }\n\n private findRegisteredServiceId(serviceName: unknown): string | undefined {\n const serviceClassName = this.getServiceClassName(serviceName);\n\n if (!serviceClassName) {\n return undefined;\n }\n\n const matches = [...this.definitions.keys()].filter((id) =>\n this.serviceIdMatchesService(id, serviceClassName),\n );\n\n return matches[matches.length - 1];\n }\n\n private findAliasServiceId(serviceName: unknown): string | undefined {\n const serviceClassName = this.getServiceClassName(serviceName);\n\n if (!serviceClassName) {\n return undefined;\n }\n\n const matches = [...this.aliases.keys()].filter((id) =>\n this.serviceIdMatchesService(id, serviceClassName),\n );\n\n return matches[matches.length - 1];\n }\n\n private registerParentAliases(): void {\n for (const [id, definition] of this.definitions.entries()) {\n if (definition._abstract === true || !definition._parent) {\n continue;\n }\n\n this.container.setAlias(definition._parent, id);\n }\n }\n\n public async compile(): Promise<void> {\n if (this.options.containerBuild) {\n await this.ensureFolderExists(this.options.servicesYamlPath);\n this.autowire = new Autowire(this.container);\n this.autowire.serviceFile = new ServiceFile(\n this.options.servicesYamlPath,\n false,\n );\n await this.autowire.process();\n } else {\n this.loader = new YamlFileLoader(this.container);\n await this.loader.load(this.options.servicesYamlPath);\n }\n\n this.registerParentAliases();\n await this.container.compile();\n }\n\n public getService<T>(serviceName: unknown): T {\n const childServiceId = this.findConcreteChildServiceId(serviceName);\n\n if (childServiceId) {\n return this.container.get<T>(childServiceId);\n }\n\n const aliasServiceId = this.findAliasServiceId(serviceName);\n\n if (aliasServiceId) {\n return this.container.get<T>(aliasServiceId);\n }\n\n const registeredServiceId = this.findRegisteredServiceId(serviceName);\n\n if (registeredServiceId) {\n return this.container.get<T>(registeredServiceId);\n }\n\n return this.container.get<T>(serviceName);\n }\n}\n\nexport default DependencyInjection;\n"],"mappings":"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","names":[]}
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/infrastructure/express/index.ts
21
+ var express_exports = {};
22
+ __export(express_exports, {
23
+ ExpressKernelServer: () => ExpressKernelServer,
24
+ RoutePrefix: () => RoutePrefix
25
+ });
26
+ module.exports = __toCommonJS(express_exports);
27
+
28
+ // src/adapters/ui/express/ExpressKernelServer.ts
29
+ var import_routing_controllers = require("routing-controllers");
30
+ var ExpressKernelServer = class {
31
+ constructor(options) {
32
+ this.options = options;
33
+ }
34
+ options;
35
+ appInstance;
36
+ serverInstance;
37
+ registerErrorHandlers(app) {
38
+ const handlers = this.options.errorHandlers ?? [this.defaultErrorHandler()];
39
+ for (const handler of handlers) {
40
+ app.use(handler);
41
+ }
42
+ }
43
+ defaultErrorHandler() {
44
+ return (error, request, response) => {
45
+ void request;
46
+ response.status(500).json({
47
+ error: error instanceof Error ? error.message : String(error)
48
+ });
49
+ };
50
+ }
51
+ get app() {
52
+ if (!this.appInstance) {
53
+ throw new Error("HTTP server is not running.");
54
+ }
55
+ return this.appInstance;
56
+ }
57
+ get server() {
58
+ if (!this.serverInstance) {
59
+ throw new Error("HTTP server is not running.");
60
+ }
61
+ return this.serverInstance;
62
+ }
63
+ close() {
64
+ if (!this.serverInstance) {
65
+ return Promise.resolve();
66
+ }
67
+ return new Promise((resolve, reject) => {
68
+ this.serverInstance?.close((error) => {
69
+ if (error) {
70
+ reject(error);
71
+ return;
72
+ }
73
+ this.serverInstance = void 0;
74
+ this.appInstance = void 0;
75
+ resolve();
76
+ });
77
+ });
78
+ }
79
+ run() {
80
+ const app = (0, import_routing_controllers.createExpressServer)({
81
+ controllers: this.options.kernel.getRoutes(),
82
+ routePrefix: this.options.routePrefix
83
+ });
84
+ for (const middleware of this.options.middlewares ?? []) {
85
+ app.use(middleware);
86
+ }
87
+ this.registerErrorHandlers(app);
88
+ this.appInstance = app;
89
+ return new Promise((resolve) => {
90
+ this.serverInstance = app.listen(this.options.port ?? 3e3, () => {
91
+ resolve();
92
+ });
93
+ });
94
+ }
95
+ };
96
+
97
+ // src/adapters/ui/express/RoutePrefix.ts
98
+ var RoutePrefix = class _RoutePrefix {
99
+ value;
100
+ static fromEnvironment(value) {
101
+ return new _RoutePrefix(value);
102
+ }
103
+ constructor(value) {
104
+ if (!value || value === "/") {
105
+ this.value = "";
106
+ return;
107
+ }
108
+ const normalizedPrefix = value.trim().replace(/^\/+/, "").replace(/\/+$/, "");
109
+ this.value = normalizedPrefix ? `/${normalizedPrefix}` : "";
110
+ }
111
+ includes(requestPath) {
112
+ return this.value.length > 0 && (requestPath === this.value || requestPath.startsWith(`${this.value}/`));
113
+ }
114
+ isEmpty() {
115
+ return this.value.length === 0;
116
+ }
117
+ toString() {
118
+ return this.value;
119
+ }
120
+ };
121
+ // Annotate the CommonJS export names for ESM import in node:
122
+ 0 && (module.exports = {
123
+ ExpressKernelServer,
124
+ RoutePrefix
125
+ });
126
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/infrastructure/express/index.ts","../../../src/adapters/ui/express/ExpressKernelServer.ts","../../../src/adapters/ui/express/RoutePrefix.ts"],"sourcesContent":["export * from '../../adapters/ui/express/index.js';\n","import type { ErrorRequestHandler } from 'express';\n\nimport { createExpressServer } from 'routing-controllers';\n\nimport type { ExpressKernelServerOptions } from './ExpressKernelServerOptions.js';\nimport type { HttpApp } from './HttpApp.js';\nimport type { HttpServer } from './HttpServer.js';\n\nexport class ExpressKernelServer {\n private appInstance: HttpApp | undefined;\n private serverInstance: HttpServer | undefined;\n\n constructor(private readonly options: ExpressKernelServerOptions) {}\n\n private registerErrorHandlers(app: HttpApp): void {\n const handlers = this.options.errorHandlers ?? [this.defaultErrorHandler()];\n\n for (const handler of handlers) {\n app.use(handler);\n }\n }\n\n private defaultErrorHandler(): ErrorRequestHandler {\n return (error, request, response) => {\n void request;\n\n response.status(500).json({\n error: error instanceof Error ? error.message : String(error),\n });\n };\n }\n\n public get app(): HttpApp {\n if (!this.appInstance) {\n throw new Error('HTTP server is not running.');\n }\n\n return this.appInstance;\n }\n\n public get server(): HttpServer {\n if (!this.serverInstance) {\n throw new Error('HTTP server is not running.');\n }\n\n return this.serverInstance;\n }\n\n public close(): Promise<void> {\n if (!this.serverInstance) {\n return Promise.resolve();\n }\n\n return new Promise((resolve, reject) => {\n this.serverInstance?.close((error?: Error) => {\n if (error) {\n reject(error);\n\n return;\n }\n\n this.serverInstance = undefined;\n this.appInstance = undefined;\n resolve();\n });\n });\n }\n\n public run(): Promise<void> {\n const app = createExpressServer({\n controllers: this.options.kernel.getRoutes(),\n routePrefix: this.options.routePrefix,\n }) as HttpApp;\n\n for (const middleware of this.options.middlewares ?? []) {\n app.use(middleware);\n }\n\n this.registerErrorHandlers(app);\n this.appInstance = app;\n\n return new Promise((resolve) => {\n this.serverInstance = app.listen(this.options.port ?? 3000, () => {\n resolve();\n });\n });\n }\n}\n","export class RoutePrefix {\n private readonly value: string;\n\n public static fromEnvironment(value: string | undefined): RoutePrefix {\n return new RoutePrefix(value);\n }\n\n constructor(value: string | undefined) {\n if (!value || value === '/') {\n this.value = '';\n\n return;\n }\n\n const normalizedPrefix = value\n .trim()\n .replace(/^\\/+/, '')\n .replace(/\\/+$/, '');\n\n this.value = normalizedPrefix ? `/${normalizedPrefix}` : '';\n }\n\n public includes(requestPath: string): boolean {\n return (\n this.value.length > 0 &&\n (requestPath === this.value || requestPath.startsWith(`${this.value}/`))\n );\n }\n\n public isEmpty(): boolean {\n return this.value.length === 0;\n }\n\n public toString(): string {\n return this.value;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEA,iCAAoC;AAM7B,IAAM,sBAAN,MAA0B;AAAA,EAI/B,YAA6B,SAAqC;AAArC;AAAA,EAAsC;AAAA,EAAtC;AAAA,EAHrB;AAAA,EACA;AAAA,EAIA,sBAAsB,KAAoB;AAChD,UAAM,WAAW,KAAK,QAAQ,iBAAiB,CAAC,KAAK,oBAAoB,CAAC;AAE1E,eAAW,WAAW,UAAU;AAC9B,UAAI,IAAI,OAAO;AAAA,IACjB;AAAA,EACF;AAAA,EAEQ,sBAA2C;AACjD,WAAO,CAAC,OAAO,SAAS,aAAa;AACnC,WAAK;AAEL,eAAS,OAAO,GAAG,EAAE,KAAK;AAAA,QACxB,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MAC9D,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,IAAW,MAAe;AACxB,QAAI,CAAC,KAAK,aAAa;AACrB,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AAEA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,SAAqB;AAC9B,QAAI,CAAC,KAAK,gBAAgB;AACxB,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AAEA,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,QAAuB;AAC5B,QAAI,CAAC,KAAK,gBAAgB;AACxB,aAAO,QAAQ,QAAQ;AAAA,IACzB;AAEA,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,WAAK,gBAAgB,MAAM,CAAC,UAAkB;AAC5C,YAAI,OAAO;AACT,iBAAO,KAAK;AAEZ;AAAA,QACF;AAEA,aAAK,iBAAiB;AACtB,aAAK,cAAc;AACnB,gBAAQ;AAAA,MACV,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEO,MAAqB;AAC1B,UAAM,UAAM,gDAAoB;AAAA,MAC9B,aAAa,KAAK,QAAQ,OAAO,UAAU;AAAA,MAC3C,aAAa,KAAK,QAAQ;AAAA,IAC5B,CAAC;AAED,eAAW,cAAc,KAAK,QAAQ,eAAe,CAAC,GAAG;AACvD,UAAI,IAAI,UAAU;AAAA,IACpB;AAEA,SAAK,sBAAsB,GAAG;AAC9B,SAAK,cAAc;AAEnB,WAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,WAAK,iBAAiB,IAAI,OAAO,KAAK,QAAQ,QAAQ,KAAM,MAAM;AAChE,gBAAQ;AAAA,MACV,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;;;ACvFO,IAAM,cAAN,MAAM,aAAY;AAAA,EACN;AAAA,EAEjB,OAAc,gBAAgB,OAAwC;AACpE,WAAO,IAAI,aAAY,KAAK;AAAA,EAC9B;AAAA,EAEA,YAAY,OAA2B;AACrC,QAAI,CAAC,SAAS,UAAU,KAAK;AAC3B,WAAK,QAAQ;AAEb;AAAA,IACF;AAEA,UAAM,mBAAmB,MACtB,KAAK,EACL,QAAQ,QAAQ,EAAE,EAClB,QAAQ,QAAQ,EAAE;AAErB,SAAK,QAAQ,mBAAmB,IAAI,gBAAgB,KAAK;AAAA,EAC3D;AAAA,EAEO,SAAS,aAA8B;AAC5C,WACE,KAAK,MAAM,SAAS,MACnB,gBAAgB,KAAK,SAAS,YAAY,WAAW,GAAG,KAAK,KAAK,GAAG;AAAA,EAE1E;AAAA,EAEO,UAAmB;AACxB,WAAO,KAAK,MAAM,WAAW;AAAA,EAC/B;AAAA,EAEO,WAAmB;AACxB,WAAO,KAAK;AAAA,EACd;AACF;","names":[]}
@@ -0,0 +1,14 @@
1
+ export { ExpressKernelServer, ExpressKernelServerOptions, HttpApp, HttpServer, RoutePrefix } from '../../adapters/ui/express/index.cjs';
2
+ import '../../adapters/ui/routes/index.cjs';
3
+ import 'express';
4
+ import '../../Kernel-BWUOUWWI.cjs';
5
+ import '../../Consumer-CC8ZRCsd.cjs';
6
+ import '../../DomainEventConsumer-3WBMSSr2.cjs';
7
+ import '../../DomainEvent-mXWEtr_J.cjs';
8
+ import '../../ShutdownHook-Dib5uNKB.cjs';
9
+ import '../../KernelLogger-BESOFrpW.cjs';
10
+ import '../../ServiceClass-BmNw8fJj.cjs';
11
+ import '../../ServiceResolver-D2Jz-l_Z.cjs';
12
+ import '../lifecycle/index.cjs';
13
+ import '../../Scheduler-oigqNOUJ.cjs';
14
+ import 'node:http';
@@ -0,0 +1,14 @@
1
+ export { ExpressKernelServer, ExpressKernelServerOptions, HttpApp, HttpServer, RoutePrefix } from '../../adapters/ui/express/index.js';
2
+ import '../../adapters/ui/routes/index.js';
3
+ import 'express';
4
+ import '../../Kernel-CUaqHa1s.js';
5
+ import '../../Consumer-CeT0Wbxb.js';
6
+ import '../../DomainEventConsumer-B4hkIUmP.js';
7
+ import '../../DomainEvent-mXWEtr_J.js';
8
+ import '../../ShutdownHook-BGskq2-q.js';
9
+ import '../../KernelLogger-BESOFrpW.js';
10
+ import '../../ServiceClass-C7NCKdSS.js';
11
+ import '../../ServiceResolver-D2Jz-l_Z.js';
12
+ import '../lifecycle/index.js';
13
+ import '../../Scheduler-oigqNOUJ.js';
14
+ import 'node:http';
@@ -0,0 +1,98 @@
1
+ // src/adapters/ui/express/ExpressKernelServer.ts
2
+ import { createExpressServer } from "routing-controllers";
3
+ var ExpressKernelServer = class {
4
+ constructor(options) {
5
+ this.options = options;
6
+ }
7
+ options;
8
+ appInstance;
9
+ serverInstance;
10
+ registerErrorHandlers(app) {
11
+ const handlers = this.options.errorHandlers ?? [this.defaultErrorHandler()];
12
+ for (const handler of handlers) {
13
+ app.use(handler);
14
+ }
15
+ }
16
+ defaultErrorHandler() {
17
+ return (error, request, response) => {
18
+ void request;
19
+ response.status(500).json({
20
+ error: error instanceof Error ? error.message : String(error)
21
+ });
22
+ };
23
+ }
24
+ get app() {
25
+ if (!this.appInstance) {
26
+ throw new Error("HTTP server is not running.");
27
+ }
28
+ return this.appInstance;
29
+ }
30
+ get server() {
31
+ if (!this.serverInstance) {
32
+ throw new Error("HTTP server is not running.");
33
+ }
34
+ return this.serverInstance;
35
+ }
36
+ close() {
37
+ if (!this.serverInstance) {
38
+ return Promise.resolve();
39
+ }
40
+ return new Promise((resolve, reject) => {
41
+ this.serverInstance?.close((error) => {
42
+ if (error) {
43
+ reject(error);
44
+ return;
45
+ }
46
+ this.serverInstance = void 0;
47
+ this.appInstance = void 0;
48
+ resolve();
49
+ });
50
+ });
51
+ }
52
+ run() {
53
+ const app = createExpressServer({
54
+ controllers: this.options.kernel.getRoutes(),
55
+ routePrefix: this.options.routePrefix
56
+ });
57
+ for (const middleware of this.options.middlewares ?? []) {
58
+ app.use(middleware);
59
+ }
60
+ this.registerErrorHandlers(app);
61
+ this.appInstance = app;
62
+ return new Promise((resolve) => {
63
+ this.serverInstance = app.listen(this.options.port ?? 3e3, () => {
64
+ resolve();
65
+ });
66
+ });
67
+ }
68
+ };
69
+
70
+ // src/adapters/ui/express/RoutePrefix.ts
71
+ var RoutePrefix = class _RoutePrefix {
72
+ value;
73
+ static fromEnvironment(value) {
74
+ return new _RoutePrefix(value);
75
+ }
76
+ constructor(value) {
77
+ if (!value || value === "/") {
78
+ this.value = "";
79
+ return;
80
+ }
81
+ const normalizedPrefix = value.trim().replace(/^\/+/, "").replace(/\/+$/, "");
82
+ this.value = normalizedPrefix ? `/${normalizedPrefix}` : "";
83
+ }
84
+ includes(requestPath) {
85
+ return this.value.length > 0 && (requestPath === this.value || requestPath.startsWith(`${this.value}/`));
86
+ }
87
+ isEmpty() {
88
+ return this.value.length === 0;
89
+ }
90
+ toString() {
91
+ return this.value;
92
+ }
93
+ };
94
+ export {
95
+ ExpressKernelServer,
96
+ RoutePrefix
97
+ };
98
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/adapters/ui/express/ExpressKernelServer.ts","../../../src/adapters/ui/express/RoutePrefix.ts"],"sourcesContent":["import type { ErrorRequestHandler } from 'express';\n\nimport { createExpressServer } from 'routing-controllers';\n\nimport type { ExpressKernelServerOptions } from './ExpressKernelServerOptions.js';\nimport type { HttpApp } from './HttpApp.js';\nimport type { HttpServer } from './HttpServer.js';\n\nexport class ExpressKernelServer {\n private appInstance: HttpApp | undefined;\n private serverInstance: HttpServer | undefined;\n\n constructor(private readonly options: ExpressKernelServerOptions) {}\n\n private registerErrorHandlers(app: HttpApp): void {\n const handlers = this.options.errorHandlers ?? [this.defaultErrorHandler()];\n\n for (const handler of handlers) {\n app.use(handler);\n }\n }\n\n private defaultErrorHandler(): ErrorRequestHandler {\n return (error, request, response) => {\n void request;\n\n response.status(500).json({\n error: error instanceof Error ? error.message : String(error),\n });\n };\n }\n\n public get app(): HttpApp {\n if (!this.appInstance) {\n throw new Error('HTTP server is not running.');\n }\n\n return this.appInstance;\n }\n\n public get server(): HttpServer {\n if (!this.serverInstance) {\n throw new Error('HTTP server is not running.');\n }\n\n return this.serverInstance;\n }\n\n public close(): Promise<void> {\n if (!this.serverInstance) {\n return Promise.resolve();\n }\n\n return new Promise((resolve, reject) => {\n this.serverInstance?.close((error?: Error) => {\n if (error) {\n reject(error);\n\n return;\n }\n\n this.serverInstance = undefined;\n this.appInstance = undefined;\n resolve();\n });\n });\n }\n\n public run(): Promise<void> {\n const app = createExpressServer({\n controllers: this.options.kernel.getRoutes(),\n routePrefix: this.options.routePrefix,\n }) as HttpApp;\n\n for (const middleware of this.options.middlewares ?? []) {\n app.use(middleware);\n }\n\n this.registerErrorHandlers(app);\n this.appInstance = app;\n\n return new Promise((resolve) => {\n this.serverInstance = app.listen(this.options.port ?? 3000, () => {\n resolve();\n });\n });\n }\n}\n","export class RoutePrefix {\n private readonly value: string;\n\n public static fromEnvironment(value: string | undefined): RoutePrefix {\n return new RoutePrefix(value);\n }\n\n constructor(value: string | undefined) {\n if (!value || value === '/') {\n this.value = '';\n\n return;\n }\n\n const normalizedPrefix = value\n .trim()\n .replace(/^\\/+/, '')\n .replace(/\\/+$/, '');\n\n this.value = normalizedPrefix ? `/${normalizedPrefix}` : '';\n }\n\n public includes(requestPath: string): boolean {\n return (\n this.value.length > 0 &&\n (requestPath === this.value || requestPath.startsWith(`${this.value}/`))\n );\n }\n\n public isEmpty(): boolean {\n return this.value.length === 0;\n }\n\n public toString(): string {\n return this.value;\n }\n}\n"],"mappings":";AAEA,SAAS,2BAA2B;AAM7B,IAAM,sBAAN,MAA0B;AAAA,EAI/B,YAA6B,SAAqC;AAArC;AAAA,EAAsC;AAAA,EAAtC;AAAA,EAHrB;AAAA,EACA;AAAA,EAIA,sBAAsB,KAAoB;AAChD,UAAM,WAAW,KAAK,QAAQ,iBAAiB,CAAC,KAAK,oBAAoB,CAAC;AAE1E,eAAW,WAAW,UAAU;AAC9B,UAAI,IAAI,OAAO;AAAA,IACjB;AAAA,EACF;AAAA,EAEQ,sBAA2C;AACjD,WAAO,CAAC,OAAO,SAAS,aAAa;AACnC,WAAK;AAEL,eAAS,OAAO,GAAG,EAAE,KAAK;AAAA,QACxB,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MAC9D,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,IAAW,MAAe;AACxB,QAAI,CAAC,KAAK,aAAa;AACrB,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AAEA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,SAAqB;AAC9B,QAAI,CAAC,KAAK,gBAAgB;AACxB,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AAEA,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,QAAuB;AAC5B,QAAI,CAAC,KAAK,gBAAgB;AACxB,aAAO,QAAQ,QAAQ;AAAA,IACzB;AAEA,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,WAAK,gBAAgB,MAAM,CAAC,UAAkB;AAC5C,YAAI,OAAO;AACT,iBAAO,KAAK;AAEZ;AAAA,QACF;AAEA,aAAK,iBAAiB;AACtB,aAAK,cAAc;AACnB,gBAAQ;AAAA,MACV,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEO,MAAqB;AAC1B,UAAM,MAAM,oBAAoB;AAAA,MAC9B,aAAa,KAAK,QAAQ,OAAO,UAAU;AAAA,MAC3C,aAAa,KAAK,QAAQ;AAAA,IAC5B,CAAC;AAED,eAAW,cAAc,KAAK,QAAQ,eAAe,CAAC,GAAG;AACvD,UAAI,IAAI,UAAU;AAAA,IACpB;AAEA,SAAK,sBAAsB,GAAG;AAC9B,SAAK,cAAc;AAEnB,WAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,WAAK,iBAAiB,IAAI,OAAO,KAAK,QAAQ,QAAQ,KAAM,MAAM;AAChE,gBAAQ;AAAA,MACV,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;;;ACvFO,IAAM,cAAN,MAAM,aAAY;AAAA,EACN;AAAA,EAEjB,OAAc,gBAAgB,OAAwC;AACpE,WAAO,IAAI,aAAY,KAAK;AAAA,EAC9B;AAAA,EAEA,YAAY,OAA2B;AACrC,QAAI,CAAC,SAAS,UAAU,KAAK;AAC3B,WAAK,QAAQ;AAEb;AAAA,IACF;AAEA,UAAM,mBAAmB,MACtB,KAAK,EACL,QAAQ,QAAQ,EAAE,EAClB,QAAQ,QAAQ,EAAE;AAErB,SAAK,QAAQ,mBAAmB,IAAI,gBAAgB,KAAK;AAAA,EAC3D;AAAA,EAEO,SAAS,aAA8B;AAC5C,WACE,KAAK,MAAM,SAAS,MACnB,gBAAgB,KAAK,SAAS,YAAY,WAAW,GAAG,KAAK,KAAK,GAAG;AAAA,EAE1E;AAAA,EAEO,UAAmB;AACxB,WAAO,KAAK,MAAM,WAAW;AAAA,EAC/B;AAAA,EAEO,WAAmB;AACxB,WAAO,KAAK;AAAA,EACd;AACF;","names":[]}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+
16
+ // src/infrastructure/lifecycle/index.ts
17
+ var lifecycle_exports = {};
18
+ module.exports = __toCommonJS(lifecycle_exports);
19
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/infrastructure/lifecycle/index.ts"],"sourcesContent":["export * from './Initializer.js';\nexport * from './Runtime.js';\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -0,0 +1,9 @@
1
+ type Initializer = {
2
+ ensure(): Promise<void>;
3
+ };
4
+
5
+ type Runtime = {
6
+ run(): Promise<void>;
7
+ };
8
+
9
+ export type { Initializer, Runtime };
@@ -0,0 +1,9 @@
1
+ type Initializer = {
2
+ ensure(): Promise<void>;
3
+ };
4
+
5
+ type Runtime = {
6
+ run(): Promise<void>;
7
+ };
8
+
9
+ export type { Initializer, Runtime };
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/infrastructure/logs/index.ts
31
+ var logs_exports = {};
32
+ __export(logs_exports, {
33
+ WinstonLogger: () => WinstonLogger
34
+ });
35
+ module.exports = __toCommonJS(logs_exports);
36
+
37
+ // src/infrastructure/logs/WinstonLogger.ts
38
+ var import_winston = __toESM(require("winston"), 1);
39
+ var WinstonLogger = class {
40
+ constructor(options = {}) {
41
+ this.options = options;
42
+ }
43
+ options;
44
+ loggerInstance;
45
+ prefix = "";
46
+ get logger() {
47
+ if (!this.loggerInstance) {
48
+ this.loggerInstance = import_winston.default.createLogger({
49
+ level: this.options.logLevel ?? process.env.LOG_LEVEL ?? "info",
50
+ transports: [
51
+ new import_winston.default.transports.Console({
52
+ format: this.consoleFormat()
53
+ }),
54
+ new import_winston.default.transports.File({
55
+ filename: this.getLogFileName(),
56
+ format: this.jsonFormat()
57
+ })
58
+ ]
59
+ });
60
+ }
61
+ return this.loggerInstance;
62
+ }
63
+ consoleFormat() {
64
+ return import_winston.format.combine(
65
+ import_winston.format.timestamp({
66
+ format: "YYYY-MM-DD HH:mm:ss"
67
+ }),
68
+ import_winston.format.colorize(),
69
+ import_winston.format.printf((entry) => {
70
+ const timestamp = this.formatTimestamp(entry.timestamp);
71
+ const level = String(entry.level);
72
+ const message = this.formatConsoleMessage(entry.message);
73
+ return `${timestamp} ${level.padEnd(7)} ${message}`;
74
+ })
75
+ );
76
+ }
77
+ jsonFormat() {
78
+ return import_winston.format.combine(
79
+ import_winston.format.timestamp({
80
+ format: "YYYY-MM-DD HH:mm:ss"
81
+ }),
82
+ import_winston.format.json()
83
+ );
84
+ }
85
+ getLogFileName() {
86
+ const rootDirectory = this.options.rootDirectory ?? process.cwd();
87
+ const logDirectory = this.options.logDirectory ?? process.env.LOG_URL ?? "logs";
88
+ const serviceName = this.options.serviceName ?? process.env.SERVICE_NAME ?? "service";
89
+ return `${rootDirectory}/${logDirectory}/${serviceName}.log`;
90
+ }
91
+ formatConsoleMessage(message) {
92
+ if (typeof message !== "string") {
93
+ return String(message);
94
+ }
95
+ const parsedMessage = this.parseJSONMessage(message);
96
+ if (!parsedMessage) {
97
+ return message;
98
+ }
99
+ return Object.entries(parsedMessage).filter(([, value]) => value !== void 0).map(([key, value]) => `${key}=${this.formatConsoleValue(value)}`).join(" ");
100
+ }
101
+ formatTimestamp(timestamp) {
102
+ return String(timestamp || "");
103
+ }
104
+ formatConsoleValue(value) {
105
+ if (Array.isArray(value)) {
106
+ return `[${value.map((item) => this.formatConsoleValue(item)).join(",")}]`;
107
+ }
108
+ if (value && typeof value === "object") {
109
+ return JSON.stringify(value);
110
+ }
111
+ return JSON.stringify(value);
112
+ }
113
+ parseJSONMessage(message) {
114
+ try {
115
+ const parsedMessage = JSON.parse(message);
116
+ if (!parsedMessage || typeof parsedMessage !== "object" || Array.isArray(parsedMessage)) {
117
+ return void 0;
118
+ }
119
+ return parsedMessage;
120
+ } catch {
121
+ return void 0;
122
+ }
123
+ }
124
+ run(prefix) {
125
+ this.prefix = prefix || "";
126
+ }
127
+ error(message) {
128
+ this.logger.error(this.prefix + message);
129
+ }
130
+ warn(message) {
131
+ this.logger.warn(this.prefix + message);
132
+ }
133
+ info(message) {
134
+ this.logger.info(this.prefix + message);
135
+ }
136
+ debug(message) {
137
+ this.logger.debug(this.prefix + message);
138
+ }
139
+ };
140
+ // Annotate the CommonJS export names for ESM import in node:
141
+ 0 && (module.exports = {
142
+ WinstonLogger
143
+ });
144
+ //# sourceMappingURL=index.cjs.map