@wirestate/core 0.6.3 → 0.7.0-experimental.2

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 (167) hide show
  1. package/CHANGELOG.md +27 -1
  2. package/README.md +48 -37
  3. package/cjs/development/index.js +325 -91
  4. package/cjs/development/index.js.map +1 -1
  5. package/cjs/development/lib.js +1033 -248
  6. package/cjs/development/lib.js.map +1 -1
  7. package/cjs/development/test-utils.js +95 -32
  8. package/cjs/development/test-utils.js.map +1 -1
  9. package/cjs/production/index.js +1 -1
  10. package/cjs/production/index.js.map +1 -1
  11. package/cjs/production/lib.js +1 -1
  12. package/cjs/production/lib.js.map +1 -1
  13. package/cjs/production/test-utils.js +1 -1
  14. package/cjs/production/test-utils.js.map +1 -1
  15. package/esm/development/alias.js +10 -1
  16. package/esm/development/alias.js.map +1 -1
  17. package/esm/development/bind/bind-constant.js +25 -4
  18. package/esm/development/bind/bind-constant.js.map +1 -1
  19. package/esm/development/bind/bind-dynamic-value.js +27 -7
  20. package/esm/development/bind/bind-dynamic-value.js.map +1 -1
  21. package/esm/development/bind/bind-entry.js +50 -17
  22. package/esm/development/bind/bind-entry.js.map +1 -1
  23. package/esm/development/bind/bind-service.js +71 -19
  24. package/esm/development/bind/bind-service.js.map +1 -1
  25. package/esm/development/bind/get-entry-token.js +21 -5
  26. package/esm/development/bind/get-entry-token.js.map +1 -1
  27. package/esm/development/commands/command-bus.js +93 -46
  28. package/esm/development/commands/command-bus.js.map +1 -1
  29. package/esm/development/commands/command-optional.js +28 -5
  30. package/esm/development/commands/command-optional.js.map +1 -1
  31. package/esm/development/commands/command.js +26 -5
  32. package/esm/development/commands/command.js.map +1 -1
  33. package/esm/development/commands/get-command-handler-metadata.js +8 -3
  34. package/esm/development/commands/get-command-handler-metadata.js.map +1 -1
  35. package/esm/development/commands/on-command.js +19 -3
  36. package/esm/development/commands/on-command.js.map +1 -1
  37. package/esm/development/container/create-base-container.js +57 -0
  38. package/esm/development/container/create-base-container.js.map +1 -0
  39. package/esm/development/container/create-container.js +78 -0
  40. package/esm/development/container/create-container.js.map +1 -0
  41. package/esm/development/container/wire-scope.js +236 -54
  42. package/esm/development/container/wire-scope.js.map +1 -1
  43. package/esm/development/error/error-code.js +2 -1
  44. package/esm/development/error/error-code.js.map +1 -1
  45. package/esm/development/error/wirestate-error.js +25 -4
  46. package/esm/development/error/wirestate-error.js.map +1 -1
  47. package/esm/development/events/build-event-dispatcher.js +20 -2
  48. package/esm/development/events/build-event-dispatcher.js.map +1 -1
  49. package/esm/development/events/emit-event.js +18 -5
  50. package/esm/development/events/emit-event.js.map +1 -1
  51. package/esm/development/events/event-bus.js +58 -9
  52. package/esm/development/events/event-bus.js.map +1 -1
  53. package/esm/development/events/get-event-handler-metadata.js +19 -4
  54. package/esm/development/events/get-event-handler-metadata.js.map +1 -1
  55. package/esm/development/events/on-event.js +31 -2
  56. package/esm/development/events/on-event.js.map +1 -1
  57. package/esm/development/index.js +5 -4
  58. package/esm/development/index.js.map +1 -1
  59. package/esm/development/queries/get-query-handler-metadata.js +20 -4
  60. package/esm/development/queries/get-query-handler-metadata.js.map +1 -1
  61. package/esm/development/queries/on-query.js +24 -2
  62. package/esm/development/queries/on-query.js.map +1 -1
  63. package/esm/development/queries/query-bus.js +82 -31
  64. package/esm/development/queries/query-bus.js.map +1 -1
  65. package/esm/development/queries/query-optional.js +19 -5
  66. package/esm/development/queries/query-optional.js.map +1 -1
  67. package/esm/development/queries/query.js +25 -5
  68. package/esm/development/queries/query.js.map +1 -1
  69. package/esm/development/registry.js +81 -24
  70. package/esm/development/registry.js.map +1 -1
  71. package/esm/development/seeds/apply-seeds.js +19 -5
  72. package/esm/development/seeds/apply-seeds.js.map +1 -1
  73. package/esm/development/seeds/apply-shared-seed.js +16 -4
  74. package/esm/development/seeds/apply-shared-seed.js.map +1 -1
  75. package/esm/development/seeds/tokens.js +31 -0
  76. package/esm/development/seeds/tokens.js.map +1 -0
  77. package/esm/development/seeds/unapply-seeds.js +16 -5
  78. package/esm/development/seeds/unapply-seeds.js.map +1 -1
  79. package/esm/development/service/get-activated-handler-metadata.js +16 -4
  80. package/esm/development/service/get-activated-handler-metadata.js.map +1 -1
  81. package/esm/development/service/get-deactivation-handler-metadata.js +16 -4
  82. package/esm/development/service/get-deactivation-handler-metadata.js.map +1 -1
  83. package/esm/development/service/on-activated.js +22 -2
  84. package/esm/development/service/on-activated.js.map +1 -1
  85. package/esm/development/service/on-deactivation.js +22 -2
  86. package/esm/development/service/on-deactivation.js.map +1 -1
  87. package/esm/development/test-utils/mock-bind-entry.js +17 -7
  88. package/esm/development/test-utils/mock-bind-entry.js.map +1 -1
  89. package/esm/development/test-utils/mock-bind-service.js +17 -7
  90. package/esm/development/test-utils/mock-bind-service.js.map +1 -1
  91. package/esm/development/test-utils/mock-container.js +25 -8
  92. package/esm/development/test-utils/mock-container.js.map +1 -1
  93. package/esm/development/test-utils/mock-service.js +18 -5
  94. package/esm/development/test-utils/mock-service.js.map +1 -1
  95. package/esm/development/test-utils/mock-unbind-service.js +16 -3
  96. package/esm/development/test-utils/mock-unbind-service.js.map +1 -1
  97. package/esm/development/types/commands.js +6 -1
  98. package/esm/development/types/commands.js.map +1 -1
  99. package/esm/production/alias.js +1 -1
  100. package/esm/production/alias.js.map +1 -1
  101. package/esm/production/bind/bind-constant.js +1 -1
  102. package/esm/production/bind/bind-constant.js.map +1 -1
  103. package/esm/production/bind/bind-dynamic-value.js +1 -1
  104. package/esm/production/bind/bind-dynamic-value.js.map +1 -1
  105. package/esm/production/bind/bind-entry.js +1 -1
  106. package/esm/production/bind/bind-entry.js.map +1 -1
  107. package/esm/production/bind/bind-service.js.map +1 -1
  108. package/esm/production/bind/get-entry-token.js.map +1 -1
  109. package/esm/production/commands/command-bus.js +1 -1
  110. package/esm/production/commands/command-bus.js.map +1 -1
  111. package/esm/production/commands/command-optional.js.map +1 -1
  112. package/esm/production/commands/command.js.map +1 -1
  113. package/esm/production/commands/get-command-handler-metadata.js.map +1 -1
  114. package/esm/production/commands/on-command.js.map +1 -1
  115. package/esm/production/container/create-base-container.js +1 -0
  116. package/esm/production/container/create-base-container.js.map +1 -0
  117. package/esm/production/container/create-container.js +1 -0
  118. package/esm/production/container/create-container.js.map +1 -0
  119. package/esm/production/container/wire-scope.js +1 -1
  120. package/esm/production/container/wire-scope.js.map +1 -1
  121. package/esm/production/error/error-code.js +1 -1
  122. package/esm/production/error/error-code.js.map +1 -1
  123. package/esm/production/error/wirestate-error.js.map +1 -1
  124. package/esm/production/events/build-event-dispatcher.js.map +1 -1
  125. package/esm/production/events/emit-event.js.map +1 -1
  126. package/esm/production/events/event-bus.js +1 -1
  127. package/esm/production/events/event-bus.js.map +1 -1
  128. package/esm/production/events/get-event-handler-metadata.js.map +1 -1
  129. package/esm/production/events/on-event.js.map +1 -1
  130. package/esm/production/index.js +1 -1
  131. package/esm/production/queries/get-query-handler-metadata.js.map +1 -1
  132. package/esm/production/queries/on-query.js.map +1 -1
  133. package/esm/production/queries/query-bus.js +1 -1
  134. package/esm/production/queries/query-bus.js.map +1 -1
  135. package/esm/production/queries/query-optional.js.map +1 -1
  136. package/esm/production/queries/query.js.map +1 -1
  137. package/esm/production/registry.js +1 -1
  138. package/esm/production/registry.js.map +1 -1
  139. package/esm/production/seeds/apply-seeds.js +1 -1
  140. package/esm/production/seeds/apply-seeds.js.map +1 -1
  141. package/esm/production/seeds/apply-shared-seed.js +1 -1
  142. package/esm/production/seeds/apply-shared-seed.js.map +1 -1
  143. package/esm/production/seeds/tokens.js +1 -0
  144. package/esm/production/seeds/tokens.js.map +1 -0
  145. package/esm/production/seeds/unapply-seeds.js +1 -1
  146. package/esm/production/seeds/unapply-seeds.js.map +1 -1
  147. package/esm/production/service/get-activated-handler-metadata.js.map +1 -1
  148. package/esm/production/service/get-deactivation-handler-metadata.js.map +1 -1
  149. package/esm/production/service/on-activated.js.map +1 -1
  150. package/esm/production/service/on-deactivation.js.map +1 -1
  151. package/esm/production/test-utils/mock-bind-entry.js +1 -1
  152. package/esm/production/test-utils/mock-bind-entry.js.map +1 -1
  153. package/esm/production/test-utils/mock-bind-service.js +1 -1
  154. package/esm/production/test-utils/mock-bind-service.js.map +1 -1
  155. package/esm/production/test-utils/mock-container.js +1 -1
  156. package/esm/production/test-utils/mock-container.js.map +1 -1
  157. package/esm/production/test-utils/mock-service.js.map +1 -1
  158. package/esm/production/test-utils/mock-unbind-service.js.map +1 -1
  159. package/esm/production/types/commands.js.map +1 -1
  160. package/index.d.ts +1159 -229
  161. package/lib.d.ts +128 -9
  162. package/package.json +1 -2
  163. package/test-utils.d.ts +140 -40
  164. package/esm/development/container/create-ioc-container.js +0 -35
  165. package/esm/development/container/create-ioc-container.js.map +0 -1
  166. package/esm/production/container/create-ioc-container.js +0 -1
  167. package/esm/production/container/create-ioc-container.js.map +0 -1
@@ -3,10 +3,14 @@ import { WirestateError } from '../error/wirestate-error.js';
3
3
  import { CommandStatus } from '../types/commands.js';
4
4
 
5
5
  /**
6
- * Dispatches commands to handlers.
6
+ * Orchestrates command dispatching and handler registration.
7
7
  *
8
- * Unlike queries, command execution always wraps the handler in a promise
9
- * and returns a descriptor with task, status, and responder.
8
+ * @remarks
9
+ * The `CommandBus` provides a way to decouple command dispatchers from their handlers.
10
+ * It supports handler shadowing: when multiple handlers are registered for the same type,
11
+ * the last registered one takes priority.
12
+ *
13
+ * @group Commands
10
14
  */
11
15
  var CommandBus = /** @class */function () {
12
16
  function CommandBus() {
@@ -17,45 +21,32 @@ var CommandBus = /** @class */function () {
17
21
  this.handlers = new Map();
18
22
  }
19
23
  /**
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
24
+ * Removes all registered command handlers from the bus.
26
25
  */
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
- };
26
+ CommandBus.prototype.clear = function () {
27
+ this.handlers.clear();
49
28
  };
50
29
  /**
51
30
  * Dispatches a command to the last registered handler.
52
- * Wraps the handler execution in a promise and returns a descriptor.
53
31
  *
54
- * @param type - command type
55
- * @param data - command payload
56
- * @returns command descriptor with task, status, and responder
32
+ * @remarks
33
+ * Execution is always asynchronous. The handler's return value is wrapped in a Promise.
34
+ * Returns a {@link CommandDescriptor} that tracks the execution status and task.
35
+ *
36
+ * @template R - Type of the command result.
37
+ * @template D - Type of the command payload data.
38
+ *
39
+ * @param type - Command identifier.
40
+ * @param data - Optional payload for the handler.
41
+ * @returns A descriptor for the executing command.
42
+ *
43
+ * @throws {@link WirestateError} If no handler is registered.
57
44
  *
58
- * @throws if no handler is registered
45
+ * @example
46
+ * ```typescript
47
+ * const descriptor: CommandDescriptor<User> = commandBus.command<User, string>("GET_USER", "id-123");
48
+ * const user: User = await descriptor.task;
49
+ * ```
59
50
  */
60
51
  CommandBus.prototype.command = function (type, data) {
61
52
  var stack = this.handlers.get(type);
@@ -79,31 +70,87 @@ var CommandBus = /** @class */function () {
79
70
  return descriptor;
80
71
  };
81
72
  /**
82
- * Dispatches a command to the last registered handler, returning null if no handler exists.
73
+ * Dispatches a command if a handler exists, otherwise returns null.
83
74
  *
84
- * @param type - command type
85
- * @param data - command payload
86
- * @returns command descriptor or null if no handler is registered
75
+ * @template R - Type of the command result.
76
+ * @template D - Type of the command payload data.
77
+ *
78
+ * @param type - Command identifier.
79
+ * @param data - Optional payload for the handler.
80
+ * @returns A command descriptor, or `null` if no handler is found.
87
81
  */
88
82
  CommandBus.prototype.commandOptional = function (type, data) {
89
83
  var stack = this.handlers.get(type);
90
84
  return (stack === null || stack === void 0 ? void 0 : stack.length) ? this.command(type, data) : null;
91
85
  };
92
86
  /**
93
- * Checks if a handler is registered for the given type.
87
+ * Checks if at least one handler is registered for the given command type.
94
88
  *
95
- * @param type - command type
96
- * @returns true if handler exists
89
+ * @param type - Command identifier.
90
+ * @returns `true` if a handler is available, `false` otherwise.
97
91
  */
98
92
  CommandBus.prototype.has = function (type) {
99
93
  var _a;
100
94
  return Boolean((_a = this.handlers.get(type)) === null || _a === void 0 ? void 0 : _a.length);
101
95
  };
102
96
  /**
103
- * Removes all registered handlers.
97
+ * Registers a handler for a specific command type.
98
+ *
99
+ * @remarks
100
+ * If multiple handlers are registered for the same type, they are stored in a stack.
101
+ * The most recently registered handler will be used for dispatching.
102
+ *
103
+ * @template D - Type of the command payload data.
104
+ * @template R - Type of the command execution result.
105
+ *
106
+ * @param type - Command identifier.
107
+ * @param handler - Function to execute when the command is dispatched.
108
+ * @returns A function to unregister the handler.
109
+ *
110
+ * @example
111
+ * ```typescript
112
+ * const unregister: CommandUnregister = commandBus.register("LOG_MESSAGE", (message: string) => {
113
+ * console.log(message);
114
+ * });
115
+ * ```
104
116
  */
105
- CommandBus.prototype.clear = function () {
106
- this.handlers.clear();
117
+ CommandBus.prototype.register = function (type, handler) {
118
+ var _this = this;
119
+ var stack = this.handlers.get(type);
120
+ if (!stack) {
121
+ stack = [];
122
+ this.handlers.set(type, stack);
123
+ }
124
+ stack.push(handler);
125
+ return function () {
126
+ return _this.unregister(type, handler);
127
+ };
128
+ };
129
+ /**
130
+ * Removes a previously registered command handler.
131
+ *
132
+ * @remarks
133
+ * If the handler was not registered for the given type, this operation does nothing.
134
+ *
135
+ * @template D - Type of the command payload data.
136
+ * @template R - Type of the command execution result.
137
+ *
138
+ * @param type - Command identifier.
139
+ * @param handler - The handler function instance to remove.
140
+ */
141
+ CommandBus.prototype.unregister = function (type, handler) {
142
+ var current = this.handlers.get(type);
143
+ if (!current) {
144
+ return;
145
+ }
146
+ var index = current.indexOf(handler);
147
+ if (index >= 0) {
148
+ current.splice(index, 1);
149
+ }
150
+ // Clean empty stacks.
151
+ if (current.length === 0) {
152
+ this.handlers.delete(type);
153
+ }
107
154
  };
108
155
  return CommandBus;
109
156
  }();
@@ -1 +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","CommandStatus","PENDING","Promise","resolve","then","result","SETTLED","catch","error","ERROR","commandOptional","has","Boolean","_a","clear"],"mappings":"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"}
1
+ {"version":3,"file":"command-bus.js","sources":["../../../../../../../../src/wirestate-core/commands/command-bus.ts"],"sourcesContent":[null],"names":["CommandBus","handlers","Map","prototype","clear","command","type","data","stack","get","length","WirestateError","ERROR_CODE_FAILED_TO_RESOLVE_COMMAND_HANDLER","concat","String","handler","descriptor","task","status","CommandStatus","PENDING","Promise","resolve","then","result","SETTLED","catch","error","ERROR","commandOptional","has","Boolean","_a","register","_this","set","push","unregister","current","index","indexOf","splice","delete"],"mappings":";;;;AAcA;;;;;;;;;AASG;AACH,IAAAA,UAAA,gBAAA,YAAA;EAAA,SAAAA,UAAAA,GAAA;AACE;;;AAGG;AACc,IAAA,IAAA,CAAAC,QAAQ,GAA4C,IAAIC,GAAG,EAAE;AAsKhF,EAAA;AApKE;;AAEG;AACIF,EAAAA,UAAA,CAAAG,SAAA,CAAAC,KAAK,GAAZ,YAAA;AACE,IAAA,IAAI,CAACH,QAAQ,CAACG,KAAK,EAAE;EACvB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;AAqBG;EACIJ,UAAA,CAAAG,SAAA,CAAAE,OAAO,GAAd,UAAyCC,IAAiB,EAAEC,IAAQ,EAAA;IAClE,IAAMC,KAAK,GAAiC,IAAI,CAACP,QAAQ,CAACQ,GAAG,CAACH,IAAI,CAAC;AAEnE,IAAA,IAAI,EAACE,KAAK,KAAA,IAAA,IAALA,KAAK,KAAA,MAAA,GAAA,MAAA,GAALA,KAAK,CAAEE,MAAM,CAAA,EAAE;AAClB,MAAA,MAAM,IAAIC,cAAc,CACtBC,4CAA4C,EAC5C,wDAAA,CAAAC,MAAA,CAAyDC,MAAM,CAACR,IAAI,CAAC,EAAA,IAAA,CAAI,CAC1E;AACH,IAAA;IAEA,IAAMS,OAAO,GAAGP,KAAK,CAACA,KAAK,CAACE,MAAM,GAAG,CAAC,CAAyB;AAE/D,IAAA,IAAMM,UAAU,GAAyB;AACvCC,MAAAA,IAAI,EAAE,IAA6B;MACnCC,MAAM,EAAEC,aAAa,CAACC;KACvB;IAEAJ,UAAmC,CAACC,IAAI,GAAGI,OAAO,CAACC,OAAO,EAAE,CAC1DC,IAAI,CAAC;MAAM,OAAAR,OAAO,CAACR,IAAS,CAAC;AAAlB,IAAA,CAAkB,CAAC,CAC9BgB,IAAI,CAAC,UAACC,MAAS,EAAA;AACbR,MAAAA,UAAwC,CAACE,MAAM,GAAGC,aAAa,CAACM,OAAO;AAExE,MAAA,OAAOD,MAAM;AACf,IAAA,CAAC,CAAC,CACDE,KAAK,CAAC,UAACC,KAAc,EAAA;AACnBX,MAAAA,UAAwC,CAACE,MAAM,GAAGC,aAAa,CAACS,KAAK;AAEtE,MAAA,MAAMD,KAAK;AACb,IAAA,CAAC,CAAC;AAEJ,IAAA,OAAOX,UAAkC;EAC3C,CAAC;AAED;;;;;;;;;AASG;EACIhB,UAAA,CAAAG,SAAA,CAAA0B,eAAe,GAAtB,UAAiDvB,IAAiB,EAAEC,IAAQ,EAAA;IAC1E,IAAMC,KAAK,GAAiC,IAAI,CAACP,QAAQ,CAACQ,GAAG,CAACH,IAAI,CAAC;IAEnE,OAAO,CAAAE,KAAK,KAAA,IAAA,IAALA,KAAK,uBAALA,KAAK,CAAEE,MAAM,IAAG,IAAI,CAACL,OAAO,CAAOC,IAAI,EAAEC,IAAI,CAAC,GAAG,IAAI;EAC9D,CAAC;AAED;;;;;AAKG;AACIP,EAAAA,UAAA,CAAAG,SAAA,CAAA2B,GAAG,GAAV,UAAWxB,IAAiB,EAAA;;IAC1B,OAAOyB,OAAO,CAAC,CAAAC,EAAA,GAAA,IAAI,CAAC/B,QAAQ,CAACQ,GAAG,CAACH,IAAI,CAAC,MAAA,IAAA,IAAA0B,EAAA,KAAA,MAAA,GAAA,MAAA,GAAAA,EAAA,CAAEtB,MAAM,CAAC;EACjD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;AAoBG;EACIV,UAAA,CAAAG,SAAA,CAAA8B,QAAQ,GAAf,UAA0C3B,IAAiB,EAAES,OAA6B,EAAA;IAA1F,IAAAmB,KAAA,GAAA,IAAA;IAOE,IAAI1B,KAAK,GAAiC,IAAI,CAACP,QAAQ,CAACQ,GAAG,CAACH,IAAI,CAAC;IAEjE,IAAI,CAACE,KAAK,EAAE;AACVA,MAAAA,KAAK,GAAG,EAAE;MACV,IAAI,CAACP,QAAQ,CAACkC,GAAG,CAAC7B,IAAI,EAAEE,KAAK,CAAC;AAChC,IAAA;AAEAA,IAAAA,KAAK,CAAC4B,IAAI,CAACrB,OAAyB,CAAC;AAErC,IAAA,OAAO,YAAA;AAAM,MAAA,OAAAmB,KAAI,CAACG,UAAU,CAAC/B,IAAI,EAAES,OAAyB,CAAC;IAAhD,CAAgD;EAC/D,CAAC;AAED;;;;;;;;;;;AAWG;EACIf,UAAA,CAAAG,SAAA,CAAAkC,UAAU,GAAjB,UAA4C/B,IAAiB,EAAES,OAA6B,EAAA;IAO1F,IAAMuB,OAAO,GAAiC,IAAI,CAACrC,QAAQ,CAACQ,GAAG,CAACH,IAAI,CAAC;IAErE,IAAI,CAACgC,OAAO,EAAE;AACZ,MAAA;AACF,IAAA;AAEA,IAAA,IAAMC,KAAK,GAAWD,OAAO,CAACE,OAAO,CAACzB,OAAyB,CAAC;IAEhE,IAAIwB,KAAK,IAAI,CAAC,EAAE;AACdD,MAAAA,OAAO,CAACG,MAAM,CAACF,KAAK,EAAE,CAAC,CAAC;AAC1B,IAAA;AAEA;AACA,IAAA,IAAID,OAAO,CAAC5B,MAAM,KAAK,CAAC,EAAE;AACxB,MAAA,IAAI,CAACT,QAAQ,CAACyC,MAAM,CAACpC,IAAI,CAAC;AAC5B,IAAA;EACF,CAAC;AACH,EAAA,OAAAN,UAAC;AAAD,CAAC;;;;"}
@@ -1,12 +1,35 @@
1
1
  import { CommandBus } from './command-bus.js';
2
2
 
3
3
  /**
4
- * Dispatches a command on the provided container, returning null if no handler is registered.
4
+ * Dispatches a command through the {@link CommandBus} resolved from the container, returning null if no handler exists.
5
5
  *
6
- * @param container - inversify container
7
- * @param type - command type
8
- * @param data - command data
9
- * @returns command descriptor or null
6
+ * @remarks
7
+ * This is a convenience wrapper around the `CommandBus.commandOptional` method.
8
+ * Unlike {@link command}, it does not throw if no handler is registered.
9
+ *
10
+ * @group Commands
11
+ *
12
+ * @template R - Type of the expected result from the command execution.
13
+ * @template D - Type of the data (payload) passed to the command.
14
+ * @template T - Type of the command identifier.
15
+ *
16
+ * @param container - Inversify {@link Container} to resolve the {@link CommandBus} from.
17
+ * @param type - Unique identifier of the command to dispatch.
18
+ * @param data - Optional payload for the command handler.
19
+ * @returns A {@link CommandDescriptor} if a handler was found, or `null` otherwise.
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const descriptor = commandOptional<User, FindUserOptions>(
24
+ * container,
25
+ * "FIND_USER",
26
+ * { id: "123" }
27
+ * );
28
+ *
29
+ * if (descriptor) {
30
+ * const user: User = await descriptor.task;
31
+ * }
32
+ * ```
10
33
  */
11
34
  function commandOptional(container, type, data) {
12
35
  return container.get(CommandBus).commandOptional(type, data);
@@ -1 +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":";;AAUA;;;;;;;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;;;;"}
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":";;AAUA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BG;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;;;;"}
@@ -1,12 +1,33 @@
1
1
  import { CommandBus } from './command-bus.js';
2
2
 
3
3
  /**
4
- * Dispatches a command on the provided container.
4
+ * Dispatches a command through the {@link CommandBus} resolved from the container.
5
5
  *
6
- * @param container - inversify container
7
- * @param type - command type
8
- * @param data - command data
9
- * @returns command descriptor
6
+ * @remarks
7
+ * This is a convenience wrapper around the `CommandBus.command` method.
8
+ * Commands allow for decoupled communication between services.
9
+ *
10
+ * @group Commands
11
+ *
12
+ * @template R - Type of the expected result from the command execution.
13
+ * @template D - Type of the data (payload) passed to the command.
14
+ * @template T - Type of the command identifier.
15
+ *
16
+ * @param container - Inversify {@link Container} to resolve the {@link CommandBus} from.
17
+ * @param type - Unique identifier of the command to dispatch.
18
+ * @param data - Optional payload for the command handler.
19
+ * @returns A descriptor to track the command execution and result.
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const descriptor = command<User, UserFindParameters>(
24
+ * container,
25
+ * "FIND_USER",
26
+ * { id: "123" }
27
+ * );
28
+ *
29
+ * const user: User = await descriptor.task;
30
+ * ```
10
31
  */
11
32
  function command(container, type, data) {
12
33
  return container.get(CommandBus).command(type, data);
@@ -1 +1 @@
1
- {"version":3,"file":"command.js","sources":["../../../../../../../../src/wirestate-core/commands/command.ts"],"sourcesContent":[null],"names":["command","container","type","data","get","CommandBus"],"mappings":";;AASA;;;;;;;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;;;;"}
1
+ {"version":3,"file":"command.js","sources":["../../../../../../../../src/wirestate-core/commands/command.ts"],"sourcesContent":[null],"names":["command","container","type","data","get","CommandBus"],"mappings":";;AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BG;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;;;;"}
@@ -2,11 +2,16 @@ import { COMMAND_HANDLER_METADATA } from '../registry.js';
2
2
 
3
3
  /**
4
4
  * Retrieves `@OnCommand` metadata from the class hierarchy.
5
- * Returns handlers ordered from base to derived class.
6
5
  *
7
- * @param instance - service instance
8
- * @returns metadata list
6
+ * @remarks
7
+ * Traverses the prototype chain to collect all command handlers.
8
+ * Returns metadata ordered from base class to derived class to ensure parent-first execution.
9
+ *
10
+ * @group Commands
9
11
  * @internal
12
+ *
13
+ * @param instance - The service instance to inspect.
14
+ * @returns A read-only array of metadata for all discovered command handlers.
10
15
  */
11
16
  function getCommandHandlerMetadata(instance) {
12
17
  var constructor = instance.constructor;
@@ -1 +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,GAAyC,EAAE;AAEtD;AACA,EAAA,OAAO,OAAOD,WAAW,KAAK,UAAU,IAAIA,WAAW,KAAKE,MAAM,IAAIF,WAAW,KAAKG,QAAQ,CAACC,SAAS,EAAE;AACxG,IAAA,IAAMC,GAAG,GAAyCC,wBAAwB,CAACC,GAAG,CAACP,WAAqB,CAAC;AAErG,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;;;;"}
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;;;;;;;;;;;;AAYG;AACG,SAAUA,yBAAyBA,CAACC,QAAgB,EAAA;AAMxD,EAAA,IAAIC,WAAW,GAAYD,QAAQ,CAACC,WAAW;EAE/C,IAAMC,KAAK,GAAyC,EAAE;AAEtD;AACA,EAAA,OAAO,OAAOD,WAAW,KAAK,UAAU,IAAIA,WAAW,KAAKE,MAAM,IAAIF,WAAW,KAAKG,QAAQ,CAACC,SAAS,EAAE;AACxG,IAAA,IAAMC,GAAG,GAAyCC,wBAAwB,CAACC,GAAG,CAACP,WAAqB,CAAC;AAErG,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;;;;"}
@@ -1,10 +1,26 @@
1
1
  import { COMMAND_HANDLER_METADATA } from '../registry.js';
2
2
 
3
3
  /**
4
- * Decorator for service methods that handle a command.
4
+ * Decorator for service methods that handle a specific command.
5
5
  *
6
- * @param type - command type identifier
7
- * @returns decorator function
6
+ * @remarks
7
+ * Methods decorated with `@OnCommand` are automatically registered as command handlers
8
+ * when the service is bound via {@link bindService}.
9
+ *
10
+ * @group Commands
11
+ *
12
+ * @param type - Unique identifier of the command to handle.
13
+ * @returns A method decorator function.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * class UserService {
18
+ * @OnCommand("USER_LOGIN")
19
+ * private onUserLogin(credentials: Credentials): Promise<Session> {
20
+ * return auth.login(credentials);
21
+ * }
22
+ * }
23
+ * ```
8
24
  */
9
25
  function OnCommand(type) {
10
26
  return function (target, propertyKey) {
@@ -1 +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,IAAiB,EAAA;AACzC,EAAA,OAAO,UAACC,MAAM,EAAEC,WAAW,EAAA;AASzB,IAAA,IAAMC,WAAW,GAAGF,MAAM,CAACE,WAAW;AAEtC,IAAA,IAAIC,IAAI,GAAyCC,wBAAwB,CAACC,GAAG,CAACH,WAAW,CAAC;IAE1F,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;;;;"}
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;;;;;;;;;;;;;;;;;;;;;AAqBG;AACG,SAAUA,SAASA,CAACC,IAAiB,EAAA;AACzC,EAAA,OAAO,UAACC,MAAM,EAAEC,WAAW,EAAA;AASzB,IAAA,IAAMC,WAAW,GAAGF,MAAM,CAACE,WAAW;AAEtC,IAAA,IAAIC,IAAI,GAAyCC,wBAAwB,CAACC,GAAG,CAACH,WAAW,CAAC;IAE1F,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,57 @@
1
+ import { Container } from 'inversify';
2
+ import { CommandBus } from '../commands/command-bus.js';
3
+ import { EventBus } from '../events/event-bus.js';
4
+ import { QueryBus } from '../queries/query-bus.js';
5
+ import { applySeeds } from '../seeds/apply-seeds.js';
6
+ import { SEEDS_TOKEN, SEED_TOKEN } from '../seeds/tokens.js';
7
+
8
+ /**
9
+ * Creates the foundational {@link Container} used by Wirestate.
10
+ *
11
+ * @remarks
12
+ * This helper configures the core container primitives shared by higher-level
13
+ * container factories:
14
+ * - sets the default scope to `Singleton`
15
+ * - binds the core buses: {@link EventBus}, {@link QueryBus}, and {@link CommandBus}
16
+ * - registers the seed map tokens: `SEEDS_TOKEN` and `SEED_TOKEN`
17
+ * - applies any targeted seed entries passed in `options.seeds`
18
+ *
19
+ * @group Container
20
+ * @internal
21
+ *
22
+ * @param options - Base container configuration.
23
+ * @returns A configured {@link Container} instance.
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * const SOME_TOKEN: unique symbol = Symbol("SOME_TOKEN");
28
+ *
29
+ * const container: Container = createBaseContainer({
30
+ * seed: { environment: "test" },
31
+ * seeds: [
32
+ * [SOME_TOKEN, { value: 123 }],
33
+ * ],
34
+ * });
35
+ *
36
+ * const rootSeed = container.get(SEED_TOKEN);
37
+ * ```
38
+ */
39
+ function createBaseContainer(options) {
40
+ var _a;
41
+ var container = new Container({
42
+ parent: options.parent,
43
+ defaultScope: "Singleton"
44
+ });
45
+ container.bind(EventBus).toConstantValue(new EventBus());
46
+ container.bind(QueryBus).toConstantValue(new QueryBus());
47
+ container.bind(CommandBus).toConstantValue(new CommandBus());
48
+ container.bind(SEEDS_TOKEN).toConstantValue(new Map());
49
+ container.bind(SEED_TOKEN).toConstantValue((_a = options.seed) !== null && _a !== void 0 ? _a : {});
50
+ if (options.seeds) {
51
+ applySeeds(container, options.seeds);
52
+ }
53
+ return container;
54
+ }
55
+
56
+ export { createBaseContainer };
57
+ //# sourceMappingURL=create-base-container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-base-container.js","sources":["../../../../../../../../src/wirestate-core/container/create-base-container.ts"],"sourcesContent":[null],"names":["createBaseContainer","options","container","Container","parent","defaultScope","bind","EventBus","toConstantValue","QueryBus","CommandBus","SEEDS_TOKEN","Map","SEED_TOKEN","_a","seed","seeds","applySeeds"],"mappings":";;;;;;;AAmCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BG;AACG,SAAUA,mBAAmBA,CAACC,OAAmC,EAAA;;AACrE,EAAA,IAAMC,SAAS,GAAc,IAAIC,SAAS,CAAC;IACzCC,MAAM,EAAEH,OAAO,CAACG,MAAM;AACtBC,IAAAA,YAAY,EAAE;AACf,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;AAE5DR,EAAAA,SAAS,CAACI,IAAI,CAACK,WAAW,CAAC,CAACH,eAAe,CAAC,IAAII,GAAG,EAAc,CAAC;EAClEV,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;EAE9D,IAAIb,OAAO,CAACe,KAAK,EAAE;AACjBC,IAAAA,UAAU,CAACf,SAAS,EAAED,OAAO,CAACe,KAAK,CAAC;AACtC,EAAA;AAEA,EAAA,OAAOd,SAAS;AAClB;;;;"}
@@ -0,0 +1,78 @@
1
+ import { createBaseContainer } from './create-base-container.js';
2
+ import { WireScope } from './wire-scope.js';
3
+ import { Container } from 'inversify';
4
+ import { bindEntry } from '../bind/bind-entry.js';
5
+ import { getEntryToken } from '../bind/get-entry-token.js';
6
+ import { ERROR_CODE_VALIDATION_ERROR } from '../error/error-code.js';
7
+ import { WirestateError } from '../error/wirestate-error.js';
8
+
9
+ /**
10
+ * Creates an Inversify IoC container pre-configured with Wirestate essentials.
11
+ *
12
+ * @remarks
13
+ * The container is initialized with:
14
+ * - State management tokens: `SEEDS_TOKEN` and `SEED_TOKEN`.
15
+ * - Messaging buses: {@link EventBus}, {@link QueryBus}, {@link CommandBus}.
16
+ * - Service bridge: {@link WireScope} (bound in transient scope).
17
+ * - Default scope set to `Singleton`.
18
+ *
19
+ * @group Container
20
+ *
21
+ * @param options - {@link CreateContainerOptions} configuration.
22
+ * @returns A new Inversify {@link Container} instance.
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * const container: Container = createContainer({
27
+ * seeds: [
28
+ * [CounterService, { count: 1000 }],
29
+ * ["SOME_KEY", "VALUE"],
30
+ * ],
31
+ * entries: [CounterService, LoggerService],
32
+ * activate: [LoggerService]
33
+ * });
34
+ *
35
+ * bindService(container, MyService);
36
+ * ```
37
+ */
38
+ function createContainer(options) {
39
+ var _a;
40
+ if (options === void 0) {
41
+ options = {};
42
+ }
43
+ if (options.activate && options.activate.length) {
44
+ if (!((_a = options.entries) === null || _a === void 0 ? void 0 : _a.length)) {
45
+ throw new WirestateError(ERROR_CODE_VALIDATION_ERROR, "Supplied activation list while entries for binding are not provided.");
46
+ }
47
+ var entryTokens = options.entries.map(getEntryToken);
48
+ for (var _i = 0, _b = options.activate; _i < _b.length; _i++) {
49
+ var eager = _b[_i];
50
+ if (!entryTokens.includes(eager)) {
51
+ throw new WirestateError(ERROR_CODE_VALIDATION_ERROR, "createInjectablesProvider: '".concat(String(eager), "' is listed in 'activate' but was not provided in 'entries'."));
52
+ }
53
+ }
54
+ }
55
+ var container = new Container({
56
+ defaultScope: "Singleton",
57
+ parent: createBaseContainer(options)
58
+ });
59
+ container.bind(WireScope).toResolvedValue(function () {
60
+ return new WireScope(container);
61
+ }).inTransientScope();
62
+ if (options.entries) {
63
+ for (var _c = 0, _d = options.entries; _c < _d.length; _c++) {
64
+ var entry = _d[_c];
65
+ bindEntry(container, entry);
66
+ }
67
+ }
68
+ if (options.activate) {
69
+ for (var _e = 0, _f = options.activate; _e < _f.length; _e++) {
70
+ var entry = _f[_e];
71
+ container.get(entry);
72
+ }
73
+ }
74
+ return container;
75
+ }
76
+
77
+ export { createContainer };
78
+ //# sourceMappingURL=create-container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-container.js","sources":["../../../../../../../../src/wirestate-core/container/create-container.ts"],"sourcesContent":[null],"names":["createContainer","options","activate","length","_a","entries","WirestateError","ERROR_CODE_VALIDATION_ERROR","entryTokens","map","getEntryToken","_i","_b","eager","includes","concat","String","container","Container","defaultScope","parent","createBaseContainer","bind","WireScope","toResolvedValue","inTransientScope","_c","_d","entry","bindEntry","_e","_f","get"],"mappings":";;;;;;;;AAuDA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BG;AACG,SAAUA,eAAeA,CAACC,OAAoC,EAAA;;AAApC,EAAA,IAAAA,OAAA,KAAA,MAAA,EAAA;IAAAA,OAAA,GAAA,EAAoC;AAAA,EAAA;EAGlE,IAAIA,OAAO,CAACC,QAAQ,IAAID,OAAO,CAACC,QAAQ,CAACC,MAAM,EAAE;IAC/C,IAAI,EAAC,CAAAC,EAAA,GAAAH,OAAO,CAACI,OAAO,MAAA,IAAA,IAAAD,EAAA,KAAA,MAAA,GAAA,MAAA,GAAAA,EAAA,CAAED,MAAM,CAAA,EAAE;AAC5B,MAAA,MAAM,IAAIG,cAAc,CACtBC,2BAA2B,EAC3B,sEAAsE,CACvE;AACH,IAAA;IAEA,IAAMC,WAAW,GAAqCP,OAAO,CAACI,OAAO,CAACI,GAAG,CAACC,aAAa,CAAC;AAExF,IAAA,KAAoB,IAAAC,EAAA,GAAA,CAAgB,EAAhBC,EAAA,GAAAX,OAAO,CAACC,QAAQ,EAAhBS,EAAA,GAAAC,EAAA,CAAAT,MAAgB,EAAhBQ,EAAA,EAAgB,EAAE;AAAjC,MAAA,IAAME,KAAK,GAAAD,EAAA,CAAAD,EAAA,CAAA;AACd,MAAA,IAAI,CAACH,WAAW,CAACM,QAAQ,CAACD,KAAK,CAAC,EAAE;AAChC,QAAA,MAAM,IAAIP,cAAc,CACtBC,2BAA2B,EAC3B,8BAAA,CAAAQ,MAAA,CAA+BC,MAAM,CAACH,KAAK,CAAC,EAAA,8DAAA,CAA8D,CAC3G;AACH,MAAA;AACF,IAAA;AACF,EAAA;AAEA,EAAA,IAAMI,SAAS,GAAc,IAAIC,SAAS,CAAC;AACzCC,IAAAA,YAAY,EAAE,WAAW;IACzBC,MAAM,EAAEC,mBAAmB,CAACpB,OAAO;AACpC,GAAA,CAAC;EAEFgB,SAAS,CACNK,IAAI,CAACC,SAAS,CAAC,CACfC,eAAe,CAAC,YAAA;AAAiB,IAAA,OAAA,IAAID,SAAS,CAACN,SAAS,CAAC;AAAxB,EAAA,CAAwB,CAAC,CAC1DQ,gBAAgB,EAAE;EAIrB,IAAIxB,OAAO,CAACI,OAAO,EAAE;AACnB,IAAA,KAAoB,IAAAqB,EAAA,GAAA,CAAe,EAAfC,EAAA,GAAA1B,OAAO,CAACI,OAAO,EAAfqB,EAAA,GAAAC,EAAA,CAAAxB,MAAe,EAAfuB,EAAA,EAAe,EAAE;AAAhC,MAAA,IAAME,KAAK,GAAAD,EAAA,CAAAD,EAAA,CAAA;AACdG,MAAAA,SAAS,CAACZ,SAAS,EAAEW,KAAK,CAAC;AAC7B,IAAA;AACF,EAAA;EAEA,IAAI3B,OAAO,CAACC,QAAQ,EAAE;AACpB,IAAA,KAAoB,IAAA4B,EAAA,GAAA,CAAgB,EAAhBC,EAAA,GAAA9B,OAAO,CAACC,QAAQ,EAAhB4B,EAAA,GAAAC,EAAA,CAAA5B,MAAgB,EAAhB2B,EAAA,EAAgB,EAAE;AAAjC,MAAA,IAAMF,KAAK,GAAAG,EAAA,CAAAD,EAAA,CAAA;AACdb,MAAAA,SAAS,CAACe,GAAG,CAACJ,KAAK,CAAC;AACtB,IAAA;AACF,EAAA;AAEA,EAAA,OAAOX,SAAS;AAClB;;;;"}