@wirestate/core 0.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 (183) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/LICENSE +21 -0
  3. package/README.md +319 -0
  4. package/cjs/development/index.js +301 -0
  5. package/cjs/development/index.js.map +1 -0
  6. package/cjs/development/lib.js +1007 -0
  7. package/cjs/development/lib.js.map +1 -0
  8. package/cjs/development/test-utils.js +128 -0
  9. package/cjs/development/test-utils.js.map +1 -0
  10. package/cjs/production/index.js +1 -0
  11. package/cjs/production/index.js.map +1 -0
  12. package/cjs/production/lib.js +1 -0
  13. package/cjs/production/lib.js.map +1 -0
  14. package/cjs/production/test-utils.js +1 -0
  15. package/cjs/production/test-utils.js.map +1 -0
  16. package/esm/development/alias.js +9 -0
  17. package/esm/development/alias.js.map +1 -0
  18. package/esm/development/bind/bind-constant.js +19 -0
  19. package/esm/development/bind/bind-constant.js.map +1 -0
  20. package/esm/development/bind/bind-dynamic-value.js +28 -0
  21. package/esm/development/bind/bind-dynamic-value.js.map +1 -0
  22. package/esm/development/bind/bind-entry.js +39 -0
  23. package/esm/development/bind/bind-entry.js.map +1 -0
  24. package/esm/development/bind/bind-service.js +253 -0
  25. package/esm/development/bind/bind-service.js.map +1 -0
  26. package/esm/development/bind/get-entry-token.js +14 -0
  27. package/esm/development/bind/get-entry-token.js.map +1 -0
  28. package/esm/development/commands/command-bus.js +112 -0
  29. package/esm/development/commands/command-bus.js.map +1 -0
  30. package/esm/development/commands/command-optional.js +16 -0
  31. package/esm/development/commands/command-optional.js.map +1 -0
  32. package/esm/development/commands/command.js +16 -0
  33. package/esm/development/commands/command.js.map +1 -0
  34. package/esm/development/commands/get-command-handler-metadata.js +27 -0
  35. package/esm/development/commands/get-command-handler-metadata.js.map +1 -0
  36. package/esm/development/commands/on-command.js +26 -0
  37. package/esm/development/commands/on-command.js.map +1 -0
  38. package/esm/development/container/create-ioc-container.js +35 -0
  39. package/esm/development/container/create-ioc-container.js.map +1 -0
  40. package/esm/development/container/wire-scope.js +151 -0
  41. package/esm/development/container/wire-scope.js.map +1 -0
  42. package/esm/development/error/error-code.js +10 -0
  43. package/esm/development/error/error-code.js.map +1 -0
  44. package/esm/development/error/wirestate-error.js +29 -0
  45. package/esm/development/error/wirestate-error.js.map +1 -0
  46. package/esm/development/events/build-event-dispatcher.js +39 -0
  47. package/esm/development/events/build-event-dispatcher.js.map +1 -0
  48. package/esm/development/events/emit-event.js +20 -0
  49. package/esm/development/events/emit-event.js.map +1 -0
  50. package/esm/development/events/event-bus.js +52 -0
  51. package/esm/development/events/event-bus.js.map +1 -0
  52. package/esm/development/events/get-event-handler-metadata.js +27 -0
  53. package/esm/development/events/get-event-handler-metadata.js.map +1 -0
  54. package/esm/development/events/on-event.js +29 -0
  55. package/esm/development/events/on-event.js.map +1 -0
  56. package/esm/development/index.js +28 -0
  57. package/esm/development/index.js.map +1 -0
  58. package/esm/development/queries/get-query-handler-metadata.js +27 -0
  59. package/esm/development/queries/get-query-handler-metadata.js.map +1 -0
  60. package/esm/development/queries/on-query.js +26 -0
  61. package/esm/development/queries/on-query.js.map +1 -0
  62. package/esm/development/queries/query-bus.js +99 -0
  63. package/esm/development/queries/query-bus.js.map +1 -0
  64. package/esm/development/queries/query-optional.js +16 -0
  65. package/esm/development/queries/query-optional.js.map +1 -0
  66. package/esm/development/queries/query.js +16 -0
  67. package/esm/development/queries/query.js.map +1 -0
  68. package/esm/development/registry.js +56 -0
  69. package/esm/development/registry.js.map +1 -0
  70. package/esm/development/seeds/apply-seeds.js +21 -0
  71. package/esm/development/seeds/apply-seeds.js.map +1 -0
  72. package/esm/development/seeds/apply-shared-seed.js +14 -0
  73. package/esm/development/seeds/apply-shared-seed.js.map +1 -0
  74. package/esm/development/seeds/unapply-seeds.js +19 -0
  75. package/esm/development/seeds/unapply-seeds.js.map +1 -0
  76. package/esm/development/service/get-activated-handler-metadata.js +27 -0
  77. package/esm/development/service/get-activated-handler-metadata.js.map +1 -0
  78. package/esm/development/service/get-deactivation-handler-metadata.js +27 -0
  79. package/esm/development/service/get-deactivation-handler-metadata.js.map +1 -0
  80. package/esm/development/service/on-activated.js +21 -0
  81. package/esm/development/service/on-activated.js.map +1 -0
  82. package/esm/development/service/on-deactivation.js +21 -0
  83. package/esm/development/service/on-deactivation.js.map +1 -0
  84. package/esm/development/test-utils/mock-bind-entry.js +24 -0
  85. package/esm/development/test-utils/mock-bind-entry.js.map +1 -0
  86. package/esm/development/test-utils/mock-bind-service.js +24 -0
  87. package/esm/development/test-utils/mock-bind-service.js.map +1 -0
  88. package/esm/development/test-utils/mock-container.js +52 -0
  89. package/esm/development/test-utils/mock-container.js.map +1 -0
  90. package/esm/development/test-utils/mock-service.js +26 -0
  91. package/esm/development/test-utils/mock-service.js.map +1 -0
  92. package/esm/development/test-utils/mock-unbind-service.js +13 -0
  93. package/esm/development/test-utils/mock-unbind-service.js.map +1 -0
  94. package/esm/development/test-utils.js +6 -0
  95. package/esm/development/test-utils.js.map +1 -0
  96. package/esm/development/types/commands.js +12 -0
  97. package/esm/development/types/commands.js.map +1 -0
  98. package/esm/production/alias.js +1 -0
  99. package/esm/production/alias.js.map +1 -0
  100. package/esm/production/bind/bind-constant.js +1 -0
  101. package/esm/production/bind/bind-constant.js.map +1 -0
  102. package/esm/production/bind/bind-dynamic-value.js +1 -0
  103. package/esm/production/bind/bind-dynamic-value.js.map +1 -0
  104. package/esm/production/bind/bind-entry.js +1 -0
  105. package/esm/production/bind/bind-entry.js.map +1 -0
  106. package/esm/production/bind/bind-service.js +1 -0
  107. package/esm/production/bind/bind-service.js.map +1 -0
  108. package/esm/production/bind/get-entry-token.js +1 -0
  109. package/esm/production/bind/get-entry-token.js.map +1 -0
  110. package/esm/production/commands/command-bus.js +1 -0
  111. package/esm/production/commands/command-bus.js.map +1 -0
  112. package/esm/production/commands/command-optional.js +1 -0
  113. package/esm/production/commands/command-optional.js.map +1 -0
  114. package/esm/production/commands/command.js +1 -0
  115. package/esm/production/commands/command.js.map +1 -0
  116. package/esm/production/commands/get-command-handler-metadata.js +1 -0
  117. package/esm/production/commands/get-command-handler-metadata.js.map +1 -0
  118. package/esm/production/commands/on-command.js +1 -0
  119. package/esm/production/commands/on-command.js.map +1 -0
  120. package/esm/production/container/create-ioc-container.js +1 -0
  121. package/esm/production/container/create-ioc-container.js.map +1 -0
  122. package/esm/production/container/wire-scope.js +1 -0
  123. package/esm/production/container/wire-scope.js.map +1 -0
  124. package/esm/production/error/error-code.js +1 -0
  125. package/esm/production/error/error-code.js.map +1 -0
  126. package/esm/production/error/wirestate-error.js +1 -0
  127. package/esm/production/error/wirestate-error.js.map +1 -0
  128. package/esm/production/events/build-event-dispatcher.js +1 -0
  129. package/esm/production/events/build-event-dispatcher.js.map +1 -0
  130. package/esm/production/events/emit-event.js +1 -0
  131. package/esm/production/events/emit-event.js.map +1 -0
  132. package/esm/production/events/event-bus.js +1 -0
  133. package/esm/production/events/event-bus.js.map +1 -0
  134. package/esm/production/events/get-event-handler-metadata.js +1 -0
  135. package/esm/production/events/get-event-handler-metadata.js.map +1 -0
  136. package/esm/production/events/on-event.js +1 -0
  137. package/esm/production/events/on-event.js.map +1 -0
  138. package/esm/production/index.js +1 -0
  139. package/esm/production/index.js.map +1 -0
  140. package/esm/production/queries/get-query-handler-metadata.js +1 -0
  141. package/esm/production/queries/get-query-handler-metadata.js.map +1 -0
  142. package/esm/production/queries/on-query.js +1 -0
  143. package/esm/production/queries/on-query.js.map +1 -0
  144. package/esm/production/queries/query-bus.js +1 -0
  145. package/esm/production/queries/query-bus.js.map +1 -0
  146. package/esm/production/queries/query-optional.js +1 -0
  147. package/esm/production/queries/query-optional.js.map +1 -0
  148. package/esm/production/queries/query.js +1 -0
  149. package/esm/production/queries/query.js.map +1 -0
  150. package/esm/production/registry.js +1 -0
  151. package/esm/production/registry.js.map +1 -0
  152. package/esm/production/seeds/apply-seeds.js +1 -0
  153. package/esm/production/seeds/apply-seeds.js.map +1 -0
  154. package/esm/production/seeds/apply-shared-seed.js +1 -0
  155. package/esm/production/seeds/apply-shared-seed.js.map +1 -0
  156. package/esm/production/seeds/unapply-seeds.js +1 -0
  157. package/esm/production/seeds/unapply-seeds.js.map +1 -0
  158. package/esm/production/service/get-activated-handler-metadata.js +1 -0
  159. package/esm/production/service/get-activated-handler-metadata.js.map +1 -0
  160. package/esm/production/service/get-deactivation-handler-metadata.js +1 -0
  161. package/esm/production/service/get-deactivation-handler-metadata.js.map +1 -0
  162. package/esm/production/service/on-activated.js +1 -0
  163. package/esm/production/service/on-activated.js.map +1 -0
  164. package/esm/production/service/on-deactivation.js +1 -0
  165. package/esm/production/service/on-deactivation.js.map +1 -0
  166. package/esm/production/test-utils/mock-bind-entry.js +1 -0
  167. package/esm/production/test-utils/mock-bind-entry.js.map +1 -0
  168. package/esm/production/test-utils/mock-bind-service.js +1 -0
  169. package/esm/production/test-utils/mock-bind-service.js.map +1 -0
  170. package/esm/production/test-utils/mock-container.js +1 -0
  171. package/esm/production/test-utils/mock-container.js.map +1 -0
  172. package/esm/production/test-utils/mock-service.js +1 -0
  173. package/esm/production/test-utils/mock-service.js.map +1 -0
  174. package/esm/production/test-utils/mock-unbind-service.js +1 -0
  175. package/esm/production/test-utils/mock-unbind-service.js.map +1 -0
  176. package/esm/production/test-utils.js +1 -0
  177. package/esm/production/test-utils.js.map +1 -0
  178. package/esm/production/types/commands.js +1 -0
  179. package/esm/production/types/commands.js.map +1 -0
  180. package/index.d.ts +566 -0
  181. package/lib.d.ts +17 -0
  182. package/package.json +61 -0
  183. package/test-utils.d.ts +108 -0
@@ -0,0 +1,253 @@
1
+ import { CommandBus } from '../commands/command-bus.js';
2
+ import { getCommandHandlerMetadata } from '../commands/get-command-handler-metadata.js';
3
+ import { WireScope } from '../container/wire-scope.js';
4
+ import { buildEventDispatcher } from '../events/build-event-dispatcher.js';
5
+ import { EventBus } from '../events/event-bus.js';
6
+ import { getQueryHandlerMetadata } from '../queries/get-query-handler-metadata.js';
7
+ import { QueryBus } from '../queries/query-bus.js';
8
+ import { CONTAINER_REFS_BY_SERVICE, WIRE_SCOPES_BY_SERVICE, EVENT_UNSUBSCRIBERS_BY_SERVICE, QUERY_UNREGISTERS_BY_SERVICE, COMMAND_UNREGISTERS_BY_SERVICE } from '../registry.js';
9
+ import { getActivatedHandlerMetadata } from '../service/get-activated-handler-metadata.js';
10
+ import { getDeactivationHandlerMetadata } from '../service/get-deactivation-handler-metadata.js';
11
+
12
+ /**
13
+ * Registers a service class in the container with activation/deactivation logic.
14
+ * Ensures container references, event subscriptions, command and query handlers are managed correctly.
15
+ *
16
+ * @param container - target Inversify container
17
+ * @param entry - service constructor
18
+ * @param options - options object to control binding flow
19
+ */
20
+ function bindService(container, entry, options) {
21
+ // Inversify's fluent binding API only allows a single `.onActivation` /
22
+ // `.onDeactivation` call per chain, so we register them on the container
23
+ // itself instead — this also works correctly if a later call rebinds the
24
+ // same token.
25
+ var whenBind = container.bind(entry).to(entry).inSingletonScope();
26
+ whenBind.onActivation(function (context, instance) {
27
+ // Ensure flag is initialized on activation.
28
+ instance.IS_DISPOSED = false;
29
+ CONTAINER_REFS_BY_SERVICE.set(instance, container);
30
+ attachWireScopes(instance, entry);
31
+ // Compose all events listeners into a single bus subscription so we only
32
+ // pay one Set lookup per emitted event.
33
+ var dispatcher = buildEventDispatcher(instance);
34
+ if (dispatcher) {
35
+ attachEventsSubscription(instance, dispatcher);
36
+ }
37
+ // Register every `@OnQuery` handler on the container's QueryBus, and
38
+ // remember the unregister functions so we can roll them back when the
39
+ // service is deactivated.
40
+ var queryBus = container.get(QueryBus);
41
+ for (var _i = 0, _a = getQueryHandlerMetadata(instance); _i < _a.length; _i++) {
42
+ var meta = _a[_i];
43
+ var method = instance[meta.methodName];
44
+ if (typeof method !== "function") {
45
+ continue;
46
+ }
47
+ var unregister = queryBus.register(meta.type, method.bind(instance));
48
+ attachQueryUnregister(instance, unregister);
49
+ }
50
+ // Register every `@OnCommand` handler on the container's CommandBus, and
51
+ // remember the unregister functions so we can roll them back when the
52
+ // service is deactivated.
53
+ var commandBus = container.get(CommandBus);
54
+ for (var _b = 0, _c = getCommandHandlerMetadata(instance); _b < _c.length; _b++) {
55
+ var meta = _c[_b];
56
+ var method = instance[meta.methodName];
57
+ if (typeof method !== "function") {
58
+ continue;
59
+ }
60
+ var unregister = commandBus.register(meta.type, method.bind(instance));
61
+ attachCommandUnregister(instance, unregister);
62
+ }
63
+ if (options === null || options === void 0 ? void 0 : options.isWithIgnoreLifecycle) ; else {
64
+ var _loop_1 = function (methodName) {
65
+ var method = instance[methodName];
66
+ if (typeof method !== "function") {
67
+ return "continue";
68
+ }
69
+ var result = method.call(instance);
70
+ if (result && typeof result.then === "function") {
71
+ result.catch(function (error) {
72
+ console.error("[wirestate] @OnActivated rejected for:", entry.name, String(methodName), error);
73
+ });
74
+ }
75
+ };
76
+ // Call every `@OnActivated`-decorated method in base-to-derived order.
77
+ // Fire-and-forget any async init so we stay synchronous from the
78
+ // container's point of view.
79
+ for (var _d = 0, _e = getActivatedHandlerMetadata(instance); _d < _e.length; _d++) {
80
+ var methodName = _e[_d];
81
+ _loop_1(methodName);
82
+ }
83
+ }
84
+ return instance;
85
+ });
86
+ whenBind.onDeactivation(function (instance) {
87
+ if (options === null || options === void 0 ? void 0 : options.isWithIgnoreLifecycle) ; else {
88
+ // Call every `@OnDeactivation`-decorated method in base-to-derived order.
89
+ for (var _i = 0, _a = getDeactivationHandlerMetadata(instance); _i < _a.length; _i++) {
90
+ var methodName = _a[_i];
91
+ var method = instance[methodName];
92
+ if (typeof method === "function") {
93
+ method.call(instance);
94
+ }
95
+ }
96
+ }
97
+ // Flip the public disposal flag first so any async work already in
98
+ // flight (fetches awaiting in @Action methods, scheduled reactions,
99
+ // etc.) can short-circuit before it mutates the about-to-die instance.
100
+ // The cast is the only write-site for this `readonly` field.
101
+ instance.IS_DISPOSED = true;
102
+ detachWireScopes(instance);
103
+ detachCommandUnregister(instance);
104
+ detachQueryUnregister(instance);
105
+ detachEventSubscription(instance);
106
+ CONTAINER_REFS_BY_SERVICE.delete(instance);
107
+ });
108
+ }
109
+ /**
110
+ * Attaches a event subscription to a service.
111
+ *
112
+ * @param service - service instance
113
+ * @param handler - event handler
114
+ * @internal
115
+ */
116
+ function attachEventsSubscription(service, handler) {
117
+ var _a;
118
+ var bus = (_a = CONTAINER_REFS_BY_SERVICE.get(service)) === null || _a === void 0 ? void 0 : _a.get(EventBus);
119
+ if (bus) {
120
+ EVENT_UNSUBSCRIBERS_BY_SERVICE.set(service, bus.subscribe(handler));
121
+ }
122
+ }
123
+ /**
124
+ * Detaches the event subscription from a service.
125
+ *
126
+ * @param service - service instance
127
+ * @internal
128
+ */
129
+ function detachEventSubscription(service) {
130
+ var unsubscribe = EVENT_UNSUBSCRIBERS_BY_SERVICE.get(service);
131
+ if (unsubscribe) {
132
+ unsubscribe();
133
+ EVENT_UNSUBSCRIBERS_BY_SERVICE.delete(service);
134
+ }
135
+ }
136
+ /**
137
+ * Registers a query unregister function for a service.
138
+ *
139
+ * @param service - service instance
140
+ * @param unregister - query unregister function
141
+ * @internal
142
+ */
143
+ function attachQueryUnregister(service, unregister) {
144
+ var list = QUERY_UNREGISTERS_BY_SERVICE.get(service);
145
+ if (!list) {
146
+ list = [];
147
+ QUERY_UNREGISTERS_BY_SERVICE.set(service, list);
148
+ }
149
+ list.push(unregister);
150
+ }
151
+ /**
152
+ * Executes and removes all query unregister functions for a service.
153
+ *
154
+ * @param service - service instance
155
+ * @internal
156
+ */
157
+ function detachQueryUnregister(service) {
158
+ var list = QUERY_UNREGISTERS_BY_SERVICE.get(service);
159
+ if (!list) {
160
+ return;
161
+ }
162
+ for (var _i = 0, list_1 = list; _i < list_1.length; _i++) {
163
+ var unregister = list_1[_i];
164
+ unregister();
165
+ }
166
+ QUERY_UNREGISTERS_BY_SERVICE.delete(service);
167
+ }
168
+ /**
169
+ * Registers a command unregister function for a service.
170
+ *
171
+ * @param service - service instance
172
+ * @param unregister - command unregister function
173
+ * @internal
174
+ */
175
+ function attachCommandUnregister(service, unregister) {
176
+ var list = COMMAND_UNREGISTERS_BY_SERVICE.get(service);
177
+ if (!list) {
178
+ list = [];
179
+ COMMAND_UNREGISTERS_BY_SERVICE.set(service, list);
180
+ }
181
+ list.push(unregister);
182
+ }
183
+ /**
184
+ * Executes and removes all command unregister functions for a service.
185
+ *
186
+ * @param service - service instance
187
+ * @internal
188
+ */
189
+ function detachCommandUnregister(service) {
190
+ var list = COMMAND_UNREGISTERS_BY_SERVICE.get(service);
191
+ if (!list) {
192
+ return;
193
+ }
194
+ for (var _i = 0, list_2 = list; _i < list_2.length; _i++) {
195
+ var unregister = list_2[_i];
196
+ unregister();
197
+ }
198
+ COMMAND_UNREGISTERS_BY_SERVICE.delete(service);
199
+ }
200
+ /**
201
+ * Reads `design:paramtypes` from the service constructor to find parameters typed as WireScope.
202
+ * Property iteration happens only when the constructor metadata declares a WireScope
203
+ * parameter, avoiding false positives from manually created or subclassed scopes.
204
+ *
205
+ * todo: Simplify this part.
206
+ *
207
+ * @param service - service instance
208
+ * @param Service - service constructor
209
+ * @internal
210
+ */
211
+ function attachWireScopes(service, Service) {
212
+ var paramTypes = Reflect.getMetadata("design:paramtypes", Service);
213
+ if (!(paramTypes === null || paramTypes === void 0 ? void 0 : paramTypes.some(function (type) {
214
+ return type === WireScope;
215
+ }))) {
216
+ return;
217
+ }
218
+ var scopes = [];
219
+ for (var _i = 0, _a = Object.getOwnPropertyNames(service); _i < _a.length; _i++) {
220
+ var key = _a[_i];
221
+ var value = service[key];
222
+ if ((value === null || value === void 0 ? void 0 : value.constructor) === WireScope) {
223
+ scopes.push(value);
224
+ }
225
+ }
226
+ if (scopes.length > 0) {
227
+ WIRE_SCOPES_BY_SERVICE.set(service, scopes);
228
+ }
229
+ }
230
+ /**
231
+ * Marks all injected WireScope instances for this service as disposed and removes
232
+ * the stored references.
233
+ *
234
+ * todo: Simplify this part.
235
+ *
236
+ * @param service - service instance
237
+ * @internal
238
+ */
239
+ function detachWireScopes(service) {
240
+ var scopes = WIRE_SCOPES_BY_SERVICE.get(service);
241
+ if (!scopes) {
242
+ return;
243
+ }
244
+ for (var _i = 0, scopes_1 = scopes; _i < scopes_1.length; _i++) {
245
+ var scope = scopes_1[_i];
246
+ scope.isDisposed = true;
247
+ scope.container = null;
248
+ }
249
+ WIRE_SCOPES_BY_SERVICE.delete(service);
250
+ }
251
+
252
+ export { bindService };
253
+ //# sourceMappingURL=bind-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bind-service.js","sources":["../../../../../../../../src/wirestate-core/bind/bind-service.ts"],"sourcesContent":[null],"names":["bindService","container","entry","options","whenBind","bind","to","inSingletonScope","onActivation","context","instance","IS_DISPOSED","CONTAINER_REFS_BY_SERVICE","set","attachWireScopes","dispatcher","buildEventDispatcher","attachEventsSubscription","queryBus","get","QueryBus","_i","_a","getQueryHandlerMetadata","length","meta","method","methodName","unregister","register","type","attachQueryUnregister","commandBus","CommandBus","_b","_c","getCommandHandlerMetadata","attachCommandUnregister","isWithIgnoreLifecycle","result","call","then","catch","error","console","name","String","_d","_e","getActivatedHandlerMetadata","onDeactivation","getDeactivationHandlerMetadata","detachWireScopes","detachCommandUnregister","detachQueryUnregister","detachEventSubscription","delete","service","handler","bus","EventBus","EVENT_UNSUBSCRIBERS_BY_SERVICE","subscribe","unsubscribe","list","QUERY_UNREGISTERS_BY_SERVICE","push","list_1","COMMAND_UNREGISTERS_BY_SERVICE","list_2","Service","paramTypes","Reflect","getMetadata","some","WireScope","scopes","Object","getOwnPropertyNames","key","value","constructor","WIRE_SCOPES_BY_SERVICE","scopes_1","scope","isDisposed"],"mappings":";;;;;;;;;;;AA8BA;;;;;;;AAOG;SACaA,WAAWA,CACzBC,SAAoB,EACpBC,KAAiB,EACjBC,OAA6B,EAAA;AAS7B;AACA;AACA;AACA;AACA,EAAA,IAAMC,QAAQ,GAA8BH,SAAS,CAACI,IAAI,CAAIH,KAAK,CAAC,CAACI,EAAE,CAACJ,KAAK,CAAC,CAACK,gBAAgB,EAAE;AAEjGH,EAAAA,QAAQ,CAACI,YAAY,CAAC,UAACC,OAAO,EAAEC,QAAQ,EAAA;AAUtC;IACCA,QAAqC,CAACC,WAAW,GAAG,KAAK;AAE1DC,IAAAA,yBAAyB,CAACC,GAAG,CAACH,QAAQ,EAAET,SAAS,CAAC;AAClDa,IAAAA,gBAAgB,CAACJ,QAAQ,EAAER,KAAK,CAAC;AAEjC;AACA;AACA,IAAA,IAAMa,UAAU,GAA4BC,oBAAoB,CAACN,QAAQ,CAAC;AAE1E,IAAA,IAAIK,UAAU,EAAE;AACdE,MAAAA,wBAAwB,CAACP,QAAQ,EAAEK,UAAU,CAAC;AAChD,IAAA;AAEA;AACA;AACA;AACA,IAAA,IAAMG,QAAQ,GAAajB,SAAS,CAACkB,GAAG,CAACC,QAAQ,CAAC;IAElD,KAAmB,IAAAC,EAAA,GAAA,CAAiC,EAAjCC,EAAA,GAAAC,uBAAuB,CAACb,QAAQ,CAAC,EAAjCW,EAAA,GAAAC,EAAA,CAAAE,MAAiC,EAAjCH,EAAA,EAAiC,EAAE;AAAjD,MAAA,IAAMI,IAAI,GAAAH,EAAA,CAAAD,EAAA,CAAA;AACb,MAAA,IAAMK,MAAM,GAAIhB,QAAwD,CAACe,IAAI,CAACE,UAAU,CAAC;AAEzF,MAAA,IAAI,OAAOD,MAAM,KAAK,UAAU,EAAE;AAChC,QAAA;AACF,MAAA;AAEA,MAAA,IAAME,UAAU,GAAqBV,QAAQ,CAACW,QAAQ,CAACJ,IAAI,CAACK,IAAI,EAAGJ,MAAwB,CAACrB,IAAI,CAACK,QAAQ,CAAC,CAAC;AAE3GqB,MAAAA,qBAAqB,CAACrB,QAAQ,EAAEkB,UAAU,CAAC;AAC7C,IAAA;AAEA;AACA;AACA;AACA,IAAA,IAAMI,UAAU,GAAe/B,SAAS,CAACkB,GAAG,CAACc,UAAU,CAAC;IAExD,KAAmB,IAAAC,EAAA,GAAA,CAAmC,EAAnCC,EAAA,GAAAC,yBAAyB,CAAC1B,QAAQ,CAAC,EAAnCwB,EAAA,GAAAC,EAAA,CAAAX,MAAmC,EAAnCU,EAAA,EAAmC,EAAE;AAAnD,MAAA,IAAMT,IAAI,GAAAU,EAAA,CAAAD,EAAA,CAAA;AACb,MAAA,IAAMR,MAAM,GAAahB,QAAwD,CAACe,IAAI,CAACE,UAAU,CAAC;AAElG,MAAA,IAAI,OAAOD,MAAM,KAAK,UAAU,EAAE;AAChC,QAAA;AACF,MAAA;AAEA,MAAA,IAAME,UAAU,GAAuBI,UAAU,CAACH,QAAQ,CAACJ,IAAI,CAACK,IAAI,EAAGJ,MAA0B,CAACrB,IAAI,CAACK,QAAQ,CAAC,CAAC;AAEjH2B,MAAAA,uBAAuB,CAAC3B,QAAQ,EAAEkB,UAAU,CAAC;AAC/C,IAAA;AAEA,IAAA,IAAIzB,OAAO,aAAPA,OAAO,KAAA,MAAA,GAAA,MAAA,GAAPA,OAAO,CAAEmC,qBAAqB,EAAE,CASnC,MAAM;8BAIMX,UAAU,EAAA;AACnB,QAAA,IAAMD,MAAM,GAAIhB,QAAwD,CAACiB,UAAU,CAAC;AAEpF,QAAA,IAAI,OAAOD,MAAM,KAAK,UAAU,EAAE;;AAElC,QAAA;AAEA,QAAA,IAAMa,MAAM,GAAwBb,MAAmC,CAACc,IAAI,CAAC9B,QAAQ,CAAC;QAEtF,IAAI6B,MAAM,IAAI,OAAQA,MAAwB,CAACE,IAAI,KAAK,UAAU,EAAE;AACjEF,UAAAA,MAAwB,CAACG,KAAK,CAAC,UAACC,KAAK,EAAA;AACpCC,YAAAA,OAAO,CAACD,KAAK,CAAC,wCAAwC,EAAEzC,KAAK,CAAC2C,IAAI,EAAEC,MAAM,CAACnB,UAAU,CAAC,EAAEgB,KAAK,CAAC;AAChG,UAAA,CAAC,CAAC;AACJ,QAAA;;AAhBF;AACA;AACA;MACA,KAAyB,IAAAI,EAAA,GAAA,CAAqC,EAArCC,EAAA,GAAAC,2BAA2B,CAACvC,QAAQ,CAAC,EAArCqC,EAAA,GAAAC,EAAA,CAAAxB,MAAqC,EAArCuB,EAAA,EAAqC,EAAA;AAAzD,QAAA,IAAMpB,UAAU,GAAAqB,EAAA,CAAAD,EAAA,CAAA;gBAAVpB,UAAU,CAAA;AAcpB,MAAA;AACH,IAAA;AAEA,IAAA,OAAOjB,QAAQ;AACjB,EAAA,CAAC,CAAC;AAEFN,EAAAA,QAAQ,CAAC8C,cAAc,CAAC,UAACxC,QAAQ,EAAA;AAO/B,IAAA,IAAIP,OAAO,aAAPA,OAAO,KAAA,MAAA,GAAA,MAAA,GAAPA,OAAO,CAAEmC,qBAAqB,EAAE,CAQnC,MAAM;AACL;MACA,KAAyB,IAAAjB,EAAA,GAAA,CAAwC,EAAxCC,EAAA,GAAA6B,8BAA8B,CAACzC,QAAQ,CAAC,EAAxCW,EAAA,GAAAC,EAAA,CAAAE,MAAwC,EAAxCH,EAAA,EAAwC,EAAE;AAA9D,QAAA,IAAMM,UAAU,GAAAL,EAAA,CAAAD,EAAA,CAAA;AACnB,QAAA,IAAMK,MAAM,GAAahB,QAAwD,CAACiB,UAAU,CAAC;AAE7F,QAAA,IAAI,OAAOD,MAAM,KAAK,UAAU,EAAE;AAC/BA,UAAAA,MAAqB,CAACc,IAAI,CAAC9B,QAAQ,CAAC;AACvC,QAAA;AACF,MAAA;AACF,IAAA;AAEA;AACA;AACA;AACA;IACCA,QAAqC,CAACC,WAAW,GAAG,IAAI;IAEzDyC,gBAAgB,CAAC1C,QAAQ,CAAC;IAC1B2C,uBAAuB,CAAC3C,QAAQ,CAAC;IACjC4C,qBAAqB,CAAC5C,QAAQ,CAAC;IAC/B6C,uBAAuB,CAAC7C,QAAQ,CAAC;AAEjCE,IAAAA,yBAAyB,CAAC4C,MAAM,CAAC9C,QAAQ,CAAC;AAC5C,EAAA,CAAC,CAAC;AACJ;AAEA;;;;;;AAMG;AACH,SAASO,wBAAwBA,CAAmBwC,OAAU,EAAEC,OAAsB,EAAA;;EACpF,IAAMC,GAAG,GAAoB,CAAArC,EAAA,GAAAV,yBAAyB,CAACO,GAAG,CAACsC,OAAO,CAAC,MAAA,IAAA,IAAAnC,EAAA,KAAA,MAAA,GAAA,MAAA,GAAAA,EAAA,CAAEH,GAAG,CAACyC,QAAQ,CAAC;AAElF,EAAA,IAAID,GAAG,EAAE;IACPE,8BAA8B,CAAChD,GAAG,CAAC4C,OAAO,EAAEE,GAAG,CAACG,SAAS,CAACJ,OAAO,CAAC,CAAC;AACrE,EAAA;AACF;AAEA;;;;;AAKG;AACH,SAASH,uBAAuBA,CAAmBE,OAAU,EAAA;AAC3D,EAAA,IAAMM,WAAW,GAA8BF,8BAA8B,CAAC1C,GAAG,CAACsC,OAAO,CAAC;AAE1F,EAAA,IAAIM,WAAW,EAAE;AACfA,IAAAA,WAAW,EAAE;AACbF,IAAAA,8BAA8B,CAACL,MAAM,CAACC,OAAO,CAAC;AAChD,EAAA;AACF;AAEA;;;;;;AAMG;AACH,SAAS1B,qBAAqBA,CAAmB0B,OAAU,EAAE7B,UAA4B,EAAA;AACvF,EAAA,IAAIoC,IAAI,GAAmCC,4BAA4B,CAAC9C,GAAG,CAACsC,OAAO,CAAC;EAEpF,IAAI,CAACO,IAAI,EAAE;AACTA,IAAAA,IAAI,GAAG,EAAE;AACTC,IAAAA,4BAA4B,CAACpD,GAAG,CAAC4C,OAAO,EAAEO,IAAI,CAAC;AACjD,EAAA;AAEAA,EAAAA,IAAI,CAACE,IAAI,CAACtC,UAAU,CAAC;AACvB;AAEA;;;;;AAKG;AACH,SAAS0B,qBAAqBA,CAAmBG,OAAU,EAAA;AACzD,EAAA,IAAMO,IAAI,GAAmCC,4BAA4B,CAAC9C,GAAG,CAACsC,OAAO,CAAC;EAEtF,IAAI,CAACO,IAAI,EAAE;AACT,IAAA;AACF,EAAA;AAEA,EAAA,KAAyB,IAAA3C,EAAA,GAAA,CAAI,EAAJ8C,MAAA,GAAAH,IAAI,EAAJ3C,kBAAI,EAAJA,EAAA,EAAI,EAAE;AAA1B,IAAA,IAAMO,UAAU,GAAAuC,MAAA,CAAA9C,EAAA,CAAA;AACnBO,IAAAA,UAAU,EAAE;AACd,EAAA;AAEAqC,EAAAA,4BAA4B,CAACT,MAAM,CAACC,OAAO,CAAC;AAC9C;AAEA;;;;;;AAMG;AACH,SAASpB,uBAAuBA,CAAmBoB,OAAU,EAAE7B,UAA8B,EAAA;AAC3F,EAAA,IAAIoC,IAAI,GAAqCI,8BAA8B,CAACjD,GAAG,CAACsC,OAAO,CAAC;EAExF,IAAI,CAACO,IAAI,EAAE;AACTA,IAAAA,IAAI,GAAG,EAAE;AACTI,IAAAA,8BAA8B,CAACvD,GAAG,CAAC4C,OAAO,EAAEO,IAAI,CAAC;AACnD,EAAA;AAEAA,EAAAA,IAAI,CAACE,IAAI,CAACtC,UAAU,CAAC;AACvB;AAEA;;;;;AAKG;AACH,SAASyB,uBAAuBA,CAAmBI,OAAU,EAAA;AAC3D,EAAA,IAAMO,IAAI,GAAqCI,8BAA8B,CAACjD,GAAG,CAACsC,OAAO,CAAC;EAE1F,IAAI,CAACO,IAAI,EAAE;AACT,IAAA;AACF,EAAA;AAEA,EAAA,KAAyB,IAAA3C,EAAA,GAAA,CAAI,EAAJgD,MAAA,GAAAL,IAAI,EAAJ3C,kBAAI,EAAJA,EAAA,EAAI,EAAE;AAA1B,IAAA,IAAMO,UAAU,GAAAyC,MAAA,CAAAhD,EAAA,CAAA;AACnBO,IAAAA,UAAU,EAAE;AACd,EAAA;AAEAwC,EAAAA,8BAA8B,CAACZ,MAAM,CAACC,OAAO,CAAC;AAChD;AAEA;;;;;;;;;;AAUG;AACH,SAAS3C,gBAAgBA,CAAmB2C,OAAU,EAAEa,OAAmB,EAAA;EACzE,IAAMC,UAAU,GAAGC,OAAO,CAACC,WAAW,CAAC,mBAAmB,EAAEH,OAAO,CAA+B;AAElG,EAAA,IAAI,EAACC,UAAU,KAAA,IAAA,IAAVA,UAAU,KAAA,MAAA,GAAA,MAAA,GAAVA,UAAU,CAAEG,IAAI,CAAC,UAAC5C,IAAI,EAAA;IAAK,OAAAA,IAAI,KAAK6C,SAAS;EAAlB,CAAkB,CAAC,CAAA,EAAE;AACnD,IAAA;AACF,EAAA;EAEA,IAAMC,MAAM,GAAqB,EAAE;EAEnC,KAAkB,IAAAvD,EAAA,GAAA,CAAmC,EAAnCC,EAAA,GAAAuD,MAAM,CAACC,mBAAmB,CAACrB,OAAO,CAAC,EAAnCpC,EAAA,GAAAC,EAAA,CAAAE,MAAmC,EAAnCH,EAAA,EAAmC,EAAE;AAAlD,IAAA,IAAM0D,GAAG,GAAAzD,EAAA,CAAAD,EAAA,CAAA;AACZ,IAAA,IAAM2D,KAAK,GAAIvB,OAAmC,CAACsB,GAAG,CAAC;AAEvD,IAAA,IAAI,CAACC,KAA0B,KAAA,IAAA,IAA1BA,KAAK,KAAA,MAAA,GAAA,MAAA,GAALA,KAAK,CAAuBC,WAAW,MAAKN,SAAS,EAAE;AAC1DC,MAAAA,MAAM,CAACV,IAAI,CAACc,KAAkB,CAAC;AACjC,IAAA;AACF,EAAA;AAEA,EAAA,IAAIJ,MAAM,CAACpD,MAAM,GAAG,CAAC,EAAE;AACrB0D,IAAAA,sBAAsB,CAACrE,GAAG,CAAC4C,OAAO,EAAEmB,MAAM,CAAC;AAC7C,EAAA;AACF;AAEA;;;;;;;;AAQG;AACH,SAASxB,gBAAgBA,CAAmBK,OAAU,EAAA;AACpD,EAAA,IAAMmB,MAAM,GAA4BM,sBAAsB,CAAC/D,GAAG,CAACsC,OAAO,CAAC;EAE3E,IAAI,CAACmB,MAAM,EAAE;AACX,IAAA;AACF,EAAA;AAEA,EAAA,KAAoB,IAAAvD,EAAA,GAAA,CAAM,EAAN8D,QAAA,GAAAP,MAAM,EAANvD,oBAAM,EAANA,EAAA,EAAM,EAAE;AAAvB,IAAA,IAAM+D,KAAK,GAAAD,QAAA,CAAA9D,EAAA,CAAA;IACb+D,KAAiC,CAACC,UAAU,GAAG,IAAI;IACnDD,KAAuD,CAACnF,SAAS,GAAG,IAAI;AAC3E,EAAA;AAEAiF,EAAAA,sBAAsB,CAAC1B,MAAM,CAACC,OAAO,CAAC;AACxC;;;;"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Returns the container token for a service entry.
3
+ * For plain service classes the class itself is the token;
4
+ * for descriptors the `id` field is used.
5
+ *
6
+ * @param entry - entry descriptor to get service identifier for
7
+ * @returns injectable identifier token
8
+ */
9
+ function getEntryToken(entry) {
10
+ return typeof entry === "function" ? entry : entry.id;
11
+ }
12
+
13
+ export { getEntryToken };
14
+ //# sourceMappingURL=get-entry-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-entry-token.js","sources":["../../../../../../../../src/wirestate-core/bind/get-entry-token.ts"],"sourcesContent":[null],"names":["getEntryToken","entry","id"],"mappings":"AAIA;;;;;;;AAOG;AACG,SAAUA,aAAaA,CAA4BC,KAAyC,EAAA;EAChG,OAAO,OAAOA,KAAK,KAAK,UAAU,GAAGA,KAAK,GAAGA,KAAK,CAACC,EAAE;AACvD;;;;"}
@@ -0,0 +1,112 @@
1
+ import { ERROR_CODE_FAILED_TO_RESOLVE_COMMAND_HANDLER } from '../error/error-code.js';
2
+ import { WirestateError } from '../error/wirestate-error.js';
3
+ import { ECommandStatus } from '../types/commands.js';
4
+
5
+ /**
6
+ * Dispatches commands to handlers.
7
+ *
8
+ * Unlike queries, command execution always wraps the handler in a promise
9
+ * and returns a descriptor with task, status, and responder.
10
+ */
11
+ var CommandBus = /** @class */function () {
12
+ function CommandBus() {
13
+ /**
14
+ * Internal handler storage.
15
+ * Uses a stack for each command type to support shadowing.
16
+ */
17
+ this.handlers = new Map();
18
+ }
19
+ /**
20
+ * Registers a command handler.
21
+ * Returns an unregister function.
22
+ *
23
+ * @param type - command type
24
+ * @param handler - handler function
25
+ * @returns unregister function
26
+ */
27
+ CommandBus.prototype.register = function (type, handler) {
28
+ var _this = this;
29
+ var stack = this.handlers.get(type);
30
+ if (!stack) {
31
+ stack = [];
32
+ this.handlers.set(type, stack);
33
+ }
34
+ stack.push(handler);
35
+ return function () {
36
+ var current = _this.handlers.get(type);
37
+ if (!current) {
38
+ return;
39
+ }
40
+ var index = current.indexOf(handler);
41
+ if (index >= 0) {
42
+ current.splice(index, 1);
43
+ }
44
+ // Clean empty stacks.
45
+ if (current.length === 0) {
46
+ _this.handlers.delete(type);
47
+ }
48
+ };
49
+ };
50
+ /**
51
+ * Dispatches a command to the last registered handler.
52
+ * Wraps the handler execution in a promise and returns a descriptor.
53
+ *
54
+ * @param type - command type
55
+ * @param data - command payload
56
+ * @returns command descriptor with task, status, and responder
57
+ *
58
+ * @throws if no handler is registered
59
+ */
60
+ CommandBus.prototype.command = function (type, data) {
61
+ var stack = this.handlers.get(type);
62
+ if (!(stack === null || stack === void 0 ? void 0 : stack.length)) {
63
+ throw new WirestateError(ERROR_CODE_FAILED_TO_RESOLVE_COMMAND_HANDLER, "No command handler registered in container for type: '".concat(String(type), "'."));
64
+ }
65
+ var handler = stack[stack.length - 1];
66
+ var descriptor = {
67
+ task: null,
68
+ status: ECommandStatus.PENDING
69
+ };
70
+ descriptor.task = Promise.resolve().then(function () {
71
+ return handler(data);
72
+ }).then(function (result) {
73
+ descriptor.status = ECommandStatus.SETTLED;
74
+ return result;
75
+ }).catch(function (error) {
76
+ descriptor.status = ECommandStatus.ERROR;
77
+ throw error;
78
+ });
79
+ return descriptor;
80
+ };
81
+ /**
82
+ * Dispatches a command to the last registered handler, returning null if no handler exists.
83
+ *
84
+ * @param type - command type
85
+ * @param data - command payload
86
+ * @returns command descriptor or null if no handler is registered
87
+ */
88
+ CommandBus.prototype.commandOptional = function (type, data) {
89
+ var stack = this.handlers.get(type);
90
+ return (stack === null || stack === void 0 ? void 0 : stack.length) ? this.command(type, data) : null;
91
+ };
92
+ /**
93
+ * Checks if a handler is registered for the given type.
94
+ *
95
+ * @param type - command type
96
+ * @returns true if handler exists
97
+ */
98
+ CommandBus.prototype.has = function (type) {
99
+ var _a;
100
+ return Boolean((_a = this.handlers.get(type)) === null || _a === void 0 ? void 0 : _a.length);
101
+ };
102
+ /**
103
+ * Removes all registered handlers.
104
+ */
105
+ CommandBus.prototype.clear = function () {
106
+ this.handlers.clear();
107
+ };
108
+ return CommandBus;
109
+ }();
110
+
111
+ export { CommandBus };
112
+ //# sourceMappingURL=command-bus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-bus.js","sources":["../../../../../../../../src/wirestate-core/commands/command-bus.ts"],"sourcesContent":[null],"names":["CommandBus","handlers","Map","prototype","register","type","handler","_this","stack","get","set","push","current","index","indexOf","splice","length","delete","command","data","WirestateError","ERROR_CODE_FAILED_TO_RESOLVE_COMMAND_HANDLER","concat","String","descriptor","task","status","ECommandStatus","PENDING","Promise","resolve","then","result","SETTLED","catch","error","ERROR","commandOptional","has","Boolean","_a","clear"],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { CommandBus } from './command-bus.js';
2
+
3
+ /**
4
+ * Dispatches a command on the provided container, returning null if no handler is registered.
5
+ *
6
+ * @param container - inversify container
7
+ * @param type - command type
8
+ * @param data - command data
9
+ * @returns command descriptor or null
10
+ */
11
+ function commandOptional(container, type, data) {
12
+ return container.get(CommandBus).commandOptional(type, data);
13
+ }
14
+
15
+ export { commandOptional };
16
+ //# sourceMappingURL=command-optional.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-optional.js","sources":["../../../../../../../../src/wirestate-core/commands/command-optional.ts"],"sourcesContent":[null],"names":["commandOptional","container","type","data","get","CommandBus"],"mappings":";;AASA;;;;;;;AAOG;SACaA,eAAeA,CAC7BC,SAAoB,EACpBC,IAAO,EACPC,IAAQ,EAAA;AAIR,EAAA,OAAOF,SAAS,CAACG,GAAG,CAACC,UAAU,CAAC,CAACL,eAAe,CAAOE,IAAI,EAAEC,IAAI,CAAC;AACpE;;;;"}
@@ -0,0 +1,16 @@
1
+ import { CommandBus } from './command-bus.js';
2
+
3
+ /**
4
+ * Dispatches a command on the provided container.
5
+ *
6
+ * @param container - inversify container
7
+ * @param type - command type
8
+ * @param data - command data
9
+ * @returns command descriptor
10
+ */
11
+ function command(container, type, data) {
12
+ return container.get(CommandBus).command(type, data);
13
+ }
14
+
15
+ export { command };
16
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sources":["../../../../../../../../src/wirestate-core/commands/command.ts"],"sourcesContent":[null],"names":["command","container","type","data","get","CommandBus"],"mappings":";;AAQA;;;;;;;AAOG;SACaA,OAAOA,CACrBC,SAAoB,EACpBC,IAAO,EACPC,IAAQ,EAAA;AAIR,EAAA,OAAOF,SAAS,CAACG,GAAG,CAACC,UAAU,CAAC,CAACL,OAAO,CAAOE,IAAI,EAAEC,IAAI,CAAC;AAC5D;;;;"}
@@ -0,0 +1,27 @@
1
+ import { COMMAND_HANDLER_METADATA } from '../registry.js';
2
+
3
+ /**
4
+ * Retrieves `@OnCommand` metadata from the class hierarchy.
5
+ * Returns handlers ordered from base to derived class.
6
+ *
7
+ * @param instance - service instance
8
+ * @returns metadata list
9
+ * @internal
10
+ */
11
+ function getCommandHandlerMetadata(instance) {
12
+ var constructor = instance.constructor;
13
+ var chain = [];
14
+ // Traverse prototype chain up to Object/Function
15
+ while (typeof constructor === "function" && constructor !== Object && constructor !== Function.prototype) {
16
+ var own = COMMAND_HANDLER_METADATA.get(constructor);
17
+ if (own && own.length > 0) {
18
+ chain.push(own);
19
+ }
20
+ constructor = Object.getPrototypeOf(constructor);
21
+ }
22
+ // Reverse to ensure parent-first execution order.
23
+ return chain.reverse().flat();
24
+ }
25
+
26
+ export { getCommandHandlerMetadata };
27
+ //# sourceMappingURL=get-command-handler-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-command-handler-metadata.js","sources":["../../../../../../../../src/wirestate-core/commands/get-command-handler-metadata.ts"],"sourcesContent":[null],"names":["getCommandHandlerMetadata","instance","constructor","chain","Object","Function","prototype","own","COMMAND_HANDLER_METADATA","get","length","push","getPrototypeOf","reverse","flat"],"mappings":";;AAOA;;;;;;;AAOG;AACG,SAAUA,yBAAyBA,CAACC,QAAgB,EAAA;AAMxD,EAAA,IAAIC,WAAW,GAAYD,QAAQ,CAACC,WAAW;EAE/C,IAAMC,KAAK,GAA0C,EAAE;AAEvD;AACA,EAAA,OAAO,OAAOD,WAAW,KAAK,UAAU,IAAIA,WAAW,KAAKE,MAAM,IAAIF,WAAW,KAAKG,QAAQ,CAACC,SAAS,EAAE;AACxG,IAAA,IAAMC,GAAG,GAA0CC,wBAAwB,CAACC,GAAG,CAACP,WAAqB,CAAC;AAEtG,IAAA,IAAIK,GAAG,IAAIA,GAAG,CAACG,MAAM,GAAG,CAAC,EAAE;AACzBP,MAAAA,KAAK,CAACQ,IAAI,CAACJ,GAAG,CAAC;AACjB,IAAA;AAEAL,IAAAA,WAAW,GAAGE,MAAM,CAACQ,cAAc,CAACV,WAAW,CAAC;AAClD,EAAA;AAQA;EACA,OAAOC,KAAK,CAACU,OAAO,EAAE,CAACC,IAAI,EAAE;AAC/B;;;;"}
@@ -0,0 +1,26 @@
1
+ import { COMMAND_HANDLER_METADATA } from '../registry.js';
2
+
3
+ /**
4
+ * Decorator for service methods that handle a command.
5
+ *
6
+ * @param type - command type identifier
7
+ * @returns decorator function
8
+ */
9
+ function OnCommand(type) {
10
+ return function (target, propertyKey) {
11
+ var constructor = target.constructor;
12
+ var list = COMMAND_HANDLER_METADATA.get(constructor);
13
+ if (!list) {
14
+ list = [];
15
+ COMMAND_HANDLER_METADATA.set(constructor, list);
16
+ }
17
+ // Register handler metadata for prototype-based retrieval.
18
+ list.push({
19
+ methodName: propertyKey,
20
+ type: type
21
+ });
22
+ };
23
+ }
24
+
25
+ export { OnCommand };
26
+ //# sourceMappingURL=on-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"on-command.js","sources":["../../../../../../../../src/wirestate-core/commands/on-command.ts"],"sourcesContent":[null],"names":["OnCommand","type","target","propertyKey","constructor","list","COMMAND_HANDLER_METADATA","get","set","push","methodName"],"mappings":";;AAOA;;;;;AAKG;AACG,SAAUA,SAASA,CAACC,IAAkB,EAAA;AAC1C,EAAA,OAAO,UAACC,MAAM,EAAEC,WAAW,EAAA;AASzB,IAAA,IAAMC,WAAW,GAAGF,MAAM,CAACE,WAAW;AAEtC,IAAA,IAAIC,IAAI,GAA0CC,wBAAwB,CAACC,GAAG,CAACH,WAAW,CAAC;IAE3F,IAAI,CAACC,IAAI,EAAE;AACTA,MAAAA,IAAI,GAAG,EAAE;AACTC,MAAAA,wBAAwB,CAACE,GAAG,CAACJ,WAAW,EAAEC,IAAI,CAAC;AACjD,IAAA;AAEA;IACAA,IAAI,CAACI,IAAI,CAAC;AAAEC,MAAAA,UAAU,EAAEP,WAAW;AAAEF,MAAAA,IAAI,EAAAA;AAAA,KAAE,CAAC;EAC9C,CAAC;AACH;;;;"}
@@ -0,0 +1,35 @@
1
+ import { Container } from 'inversify';
2
+ import { CommandBus } from '../commands/command-bus.js';
3
+ import { WireScope } from './wire-scope.js';
4
+ import { EventBus } from '../events/event-bus.js';
5
+ import { QueryBus } from '../queries/query-bus.js';
6
+ import { SEEDS_TOKEN, SEED_TOKEN } from '../registry.js';
7
+
8
+ /**
9
+ * Creates an IoC container with framework essentials.
10
+ *
11
+ * @param options - container configuration
12
+ * @returns new IoC container
13
+ */
14
+ function createIocContainer(options) {
15
+ var _a;
16
+ if (options === void 0) {
17
+ options = {};
18
+ }
19
+ var container = new Container({
20
+ defaultScope: "Singleton",
21
+ parent: options.parent
22
+ });
23
+ container.bind(EventBus).toConstantValue(new EventBus());
24
+ container.bind(QueryBus).toConstantValue(new QueryBus());
25
+ container.bind(CommandBus).toConstantValue(new CommandBus());
26
+ container.bind(SEEDS_TOKEN).toConstantValue(new Map());
27
+ container.bind(SEED_TOKEN).toConstantValue((_a = options.seed) !== null && _a !== void 0 ? _a : {});
28
+ container.bind(WireScope).toResolvedValue(function () {
29
+ return new WireScope(container);
30
+ }).inTransientScope();
31
+ return container;
32
+ }
33
+
34
+ export { createIocContainer };
35
+ //# sourceMappingURL=create-ioc-container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-ioc-container.js","sources":["../../../../../../../../src/wirestate-core/container/create-ioc-container.ts"],"sourcesContent":[null],"names":["createIocContainer","options","container","Container","defaultScope","parent","bind","EventBus","toConstantValue","QueryBus","CommandBus","SEEDS_TOKEN","Map","SEED_TOKEN","_a","seed","WireScope","toResolvedValue","inTransientScope"],"mappings":";;;;;;;AAwBA;;;;;AAKG;AACG,SAAUA,kBAAkBA,CAACC,OAAwC,EAAA;;AAAxC,EAAA,IAAAA,OAAA,KAAA,MAAA,EAAA;IAAAA,OAAA,GAAA,EAAwC;AAAA,EAAA;AAGzE,EAAA,IAAMC,SAAS,GAAc,IAAIC,SAAS,CAAC;AACzCC,IAAAA,YAAY,EAAE,WAAW;IACzBC,MAAM,EAAEJ,OAAO,CAACI;AACjB,GAAA,CAAC;AAEFH,EAAAA,SAAS,CAACI,IAAI,CAACC,QAAQ,CAAC,CAACC,eAAe,CAAC,IAAID,QAAQ,EAAE,CAAC;AACxDL,EAAAA,SAAS,CAACI,IAAI,CAACG,QAAQ,CAAC,CAACD,eAAe,CAAC,IAAIC,QAAQ,EAAE,CAAC;AACxDP,EAAAA,SAAS,CAACI,IAAI,CAACI,UAAU,CAAC,CAACF,eAAe,CAAC,IAAIE,UAAU,EAAE,CAAC;AAC5DR,EAAAA,SAAS,CAACI,IAAI,CAACK,WAAW,CAAC,CAACH,eAAe,CAAC,IAAII,GAAG,EAAe,CAAC;EACnEV,SAAS,CAACI,IAAI,CAACO,UAAU,CAAC,CAACL,eAAe,CAAC,CAAAM,EAAA,GAAAb,OAAO,CAACc,IAAI,MAAA,IAAA,IAAAD,EAAA,KAAA,MAAA,GAAAA,EAAA,GAAI,EAAE,CAAC;EAE9DZ,SAAS,CACNI,IAAI,CAACU,SAAS,CAAC,CACfC,eAAe,CAAC,YAAA;AAAiB,IAAA,OAAA,IAAID,SAAS,CAACd,SAAS,CAAC;AAAxB,EAAA,CAAwB,CAAC,CAC1DgB,gBAAgB,EAAE;AAIrB,EAAA,OAAOhB,SAAS;AAClB;;;;"}