hexok 1.0.0 → 2.0.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 (259) hide show
  1. package/README.md +9 -0
  2. package/dist/adapter.d.ts +18 -0
  3. package/dist/adapter.d.ts.map +1 -0
  4. package/dist/adapter.js +21 -0
  5. package/dist/adapter.js.map +1 -0
  6. package/dist/catalog.d.ts +88 -0
  7. package/dist/catalog.d.ts.map +1 -0
  8. package/dist/catalog.js +79 -0
  9. package/dist/catalog.js.map +1 -0
  10. package/dist/{core/coded-error.d.ts → coded-error.d.ts} +9 -4
  11. package/dist/coded-error.d.ts.map +1 -0
  12. package/dist/{core/coded-error.js → coded-error.js} +9 -4
  13. package/dist/coded-error.js.map +1 -0
  14. package/dist/cow-draft.d.ts.map +1 -0
  15. package/dist/cow-draft.js.map +1 -0
  16. package/dist/entity.d.ts +63 -0
  17. package/dist/entity.d.ts.map +1 -0
  18. package/dist/{domain/entity.js → entity.js} +52 -80
  19. package/dist/entity.js.map +1 -0
  20. package/dist/error-map.d.ts +22 -0
  21. package/dist/error-map.d.ts.map +1 -0
  22. package/dist/error-map.js +2 -0
  23. package/dist/error-map.js.map +1 -0
  24. package/dist/errors.d.ts +85 -0
  25. package/dist/errors.d.ts.map +1 -0
  26. package/dist/errors.js +85 -0
  27. package/dist/errors.js.map +1 -0
  28. package/dist/event-handler.d.ts +31 -0
  29. package/dist/event-handler.d.ts.map +1 -0
  30. package/dist/event-handler.js +28 -0
  31. package/dist/event-handler.js.map +1 -0
  32. package/dist/event.d.ts +37 -0
  33. package/dist/event.d.ts.map +1 -0
  34. package/dist/event.js +44 -0
  35. package/dist/event.js.map +1 -0
  36. package/dist/index.d.ts +16 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +14 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/mapper.d.ts +100 -0
  41. package/dist/mapper.d.ts.map +1 -0
  42. package/dist/mapper.js +167 -0
  43. package/dist/mapper.js.map +1 -0
  44. package/dist/port.d.ts +20 -0
  45. package/dist/port.d.ts.map +1 -0
  46. package/dist/port.js +25 -0
  47. package/dist/port.js.map +1 -0
  48. package/dist/result.d.ts.map +1 -0
  49. package/dist/result.js.map +1 -0
  50. package/dist/schema.d.ts +37 -0
  51. package/dist/schema.d.ts.map +1 -0
  52. package/dist/schema.js +50 -0
  53. package/dist/schema.js.map +1 -0
  54. package/dist/{core/standard-schema.d.ts → standard-schema.d.ts} +1 -1
  55. package/dist/standard-schema.d.ts.map +1 -0
  56. package/dist/standard-schema.js.map +1 -0
  57. package/dist/use-case.d.ts +183 -0
  58. package/dist/use-case.d.ts.map +1 -0
  59. package/dist/use-case.js +221 -0
  60. package/dist/use-case.js.map +1 -0
  61. package/dist/{core/schema.d.ts → validate.d.ts} +1 -1
  62. package/dist/validate.d.ts.map +1 -0
  63. package/dist/{core/schema.js → validate.js} +1 -1
  64. package/dist/validate.js.map +1 -0
  65. package/package.json +16 -26
  66. package/dist/app/api-use-case.d.ts +0 -52
  67. package/dist/app/api-use-case.d.ts.map +0 -1
  68. package/dist/app/api-use-case.js +0 -59
  69. package/dist/app/api-use-case.js.map +0 -1
  70. package/dist/app/callable-use-case.d.ts +0 -34
  71. package/dist/app/callable-use-case.d.ts.map +0 -1
  72. package/dist/app/callable-use-case.js +0 -41
  73. package/dist/app/callable-use-case.js.map +0 -1
  74. package/dist/app/contract.d.ts +0 -46
  75. package/dist/app/contract.d.ts.map +0 -1
  76. package/dist/app/contract.js +0 -28
  77. package/dist/app/contract.js.map +0 -1
  78. package/dist/app/error-factory.d.ts +0 -9
  79. package/dist/app/error-factory.d.ts.map +0 -1
  80. package/dist/app/error-factory.js +0 -30
  81. package/dist/app/error-factory.js.map +0 -1
  82. package/dist/app/event-channel.d.ts +0 -133
  83. package/dist/app/event-channel.d.ts.map +0 -1
  84. package/dist/app/event-channel.js +0 -49
  85. package/dist/app/event-channel.js.map +0 -1
  86. package/dist/app/event-use-case.d.ts +0 -47
  87. package/dist/app/event-use-case.d.ts.map +0 -1
  88. package/dist/app/event-use-case.js +0 -54
  89. package/dist/app/event-use-case.js.map +0 -1
  90. package/dist/app/execute-ctx.d.ts +0 -92
  91. package/dist/app/execute-ctx.d.ts.map +0 -1
  92. package/dist/app/execute-ctx.js +0 -2
  93. package/dist/app/execute-ctx.js.map +0 -1
  94. package/dist/app/external-use-case.d.ts +0 -25
  95. package/dist/app/external-use-case.d.ts.map +0 -1
  96. package/dist/app/external-use-case.js +0 -25
  97. package/dist/app/external-use-case.js.map +0 -1
  98. package/dist/app/index.d.ts +0 -9
  99. package/dist/app/index.d.ts.map +0 -1
  100. package/dist/app/index.js +0 -8
  101. package/dist/app/index.js.map +0 -1
  102. package/dist/app/internal-use-case.d.ts +0 -26
  103. package/dist/app/internal-use-case.d.ts.map +0 -1
  104. package/dist/app/internal-use-case.js +0 -26
  105. package/dist/app/internal-use-case.js.map +0 -1
  106. package/dist/app/nest.d.ts +0 -9
  107. package/dist/app/nest.d.ts.map +0 -1
  108. package/dist/app/nest.js +0 -28
  109. package/dist/app/nest.js.map +0 -1
  110. package/dist/app/types.d.ts +0 -153
  111. package/dist/app/types.d.ts.map +0 -1
  112. package/dist/app/types.js +0 -17
  113. package/dist/app/types.js.map +0 -1
  114. package/dist/core/coded-error.d.ts.map +0 -1
  115. package/dist/core/coded-error.js.map +0 -1
  116. package/dist/core/error-map.d.ts +0 -21
  117. package/dist/core/error-map.d.ts.map +0 -1
  118. package/dist/core/error-map.js +0 -5
  119. package/dist/core/error-map.js.map +0 -1
  120. package/dist/core/index.d.ts +0 -6
  121. package/dist/core/index.d.ts.map +0 -1
  122. package/dist/core/index.js +0 -5
  123. package/dist/core/index.js.map +0 -1
  124. package/dist/core/result.d.ts.map +0 -1
  125. package/dist/core/result.js.map +0 -1
  126. package/dist/core/schema.d.ts.map +0 -1
  127. package/dist/core/schema.js.map +0 -1
  128. package/dist/core/standard-schema.d.ts.map +0 -1
  129. package/dist/core/standard-schema.js.map +0 -1
  130. package/dist/domain/capabilities.d.ts +0 -42
  131. package/dist/domain/capabilities.d.ts.map +0 -1
  132. package/dist/domain/capabilities.js +0 -2
  133. package/dist/domain/capabilities.js.map +0 -1
  134. package/dist/domain/catalog.d.ts +0 -46
  135. package/dist/domain/catalog.d.ts.map +0 -1
  136. package/dist/domain/catalog.js +0 -114
  137. package/dist/domain/catalog.js.map +0 -1
  138. package/dist/domain/channel.d.ts +0 -36
  139. package/dist/domain/channel.d.ts.map +0 -1
  140. package/dist/domain/channel.js +0 -2
  141. package/dist/domain/channel.js.map +0 -1
  142. package/dist/domain/cow-draft.d.ts.map +0 -1
  143. package/dist/domain/cow-draft.js.map +0 -1
  144. package/dist/domain/entity.d.ts +0 -120
  145. package/dist/domain/entity.d.ts.map +0 -1
  146. package/dist/domain/entity.js.map +0 -1
  147. package/dist/domain/envelope.d.ts +0 -59
  148. package/dist/domain/envelope.d.ts.map +0 -1
  149. package/dist/domain/envelope.js +0 -2
  150. package/dist/domain/envelope.js.map +0 -1
  151. package/dist/domain/event.d.ts +0 -44
  152. package/dist/domain/event.d.ts.map +0 -1
  153. package/dist/domain/event.js +0 -21
  154. package/dist/domain/event.js.map +0 -1
  155. package/dist/domain/index.d.ts +0 -8
  156. package/dist/domain/index.d.ts.map +0 -1
  157. package/dist/domain/index.js +0 -5
  158. package/dist/domain/index.js.map +0 -1
  159. package/dist/domain/port.d.ts +0 -45
  160. package/dist/domain/port.d.ts.map +0 -1
  161. package/dist/domain/port.js +0 -41
  162. package/dist/domain/port.js.map +0 -1
  163. package/dist/infra/adapter.d.ts +0 -22
  164. package/dist/infra/adapter.d.ts.map +0 -1
  165. package/dist/infra/adapter.js +0 -18
  166. package/dist/infra/adapter.js.map +0 -1
  167. package/dist/infra/index.d.ts +0 -3
  168. package/dist/infra/index.d.ts.map +0 -1
  169. package/dist/infra/index.js +0 -3
  170. package/dist/infra/index.js.map +0 -1
  171. package/dist/infra/mapper.d.ts +0 -48
  172. package/dist/infra/mapper.d.ts.map +0 -1
  173. package/dist/infra/mapper.js +0 -77
  174. package/dist/infra/mapper.js.map +0 -1
  175. package/dist/runtime/app.d.ts +0 -100
  176. package/dist/runtime/app.d.ts.map +0 -1
  177. package/dist/runtime/app.js +0 -292
  178. package/dist/runtime/app.js.map +0 -1
  179. package/dist/runtime/channel.d.ts +0 -34
  180. package/dist/runtime/channel.d.ts.map +0 -1
  181. package/dist/runtime/channel.js +0 -110
  182. package/dist/runtime/channel.js.map +0 -1
  183. package/dist/runtime/client.d.ts +0 -21
  184. package/dist/runtime/client.d.ts.map +0 -1
  185. package/dist/runtime/client.js +0 -2
  186. package/dist/runtime/client.js.map +0 -1
  187. package/dist/runtime/completeness.d.ts +0 -89
  188. package/dist/runtime/completeness.d.ts.map +0 -1
  189. package/dist/runtime/completeness.js +0 -2
  190. package/dist/runtime/completeness.js.map +0 -1
  191. package/dist/runtime/envelope.d.ts +0 -7
  192. package/dist/runtime/envelope.d.ts.map +0 -1
  193. package/dist/runtime/envelope.js +0 -69
  194. package/dist/runtime/envelope.js.map +0 -1
  195. package/dist/runtime/events.d.ts +0 -6
  196. package/dist/runtime/events.d.ts.map +0 -1
  197. package/dist/runtime/events.js +0 -48
  198. package/dist/runtime/events.js.map +0 -1
  199. package/dist/runtime/http-status.d.ts +0 -3
  200. package/dist/runtime/http-status.d.ts.map +0 -1
  201. package/dist/runtime/http-status.js +0 -11
  202. package/dist/runtime/http-status.js.map +0 -1
  203. package/dist/runtime/http.d.ts +0 -4
  204. package/dist/runtime/http.d.ts.map +0 -1
  205. package/dist/runtime/http.js +0 -58
  206. package/dist/runtime/http.js.map +0 -1
  207. package/dist/runtime/index.d.ts +0 -10
  208. package/dist/runtime/index.d.ts.map +0 -1
  209. package/dist/runtime/index.js +0 -6
  210. package/dist/runtime/index.js.map +0 -1
  211. package/dist/runtime/interceptor.d.ts +0 -61
  212. package/dist/runtime/interceptor.d.ts.map +0 -1
  213. package/dist/runtime/interceptor.js +0 -7
  214. package/dist/runtime/interceptor.js.map +0 -1
  215. package/dist/runtime/invoke.d.ts +0 -34
  216. package/dist/runtime/invoke.d.ts.map +0 -1
  217. package/dist/runtime/invoke.js +0 -235
  218. package/dist/runtime/invoke.js.map +0 -1
  219. package/dist/runtime/middleware.d.ts +0 -20
  220. package/dist/runtime/middleware.d.ts.map +0 -1
  221. package/dist/runtime/middleware.js +0 -2
  222. package/dist/runtime/middleware.js.map +0 -1
  223. package/dist/runtime/rpc.d.ts +0 -24
  224. package/dist/runtime/rpc.d.ts.map +0 -1
  225. package/dist/runtime/rpc.js +0 -16
  226. package/dist/runtime/rpc.js.map +0 -1
  227. package/dist/testing/app-test.d.ts +0 -77
  228. package/dist/testing/app-test.d.ts.map +0 -1
  229. package/dist/testing/app-test.js +0 -109
  230. package/dist/testing/app-test.js.map +0 -1
  231. package/dist/testing/in-memory-broker.d.ts +0 -18
  232. package/dist/testing/in-memory-broker.d.ts.map +0 -1
  233. package/dist/testing/in-memory-broker.js +0 -42
  234. package/dist/testing/in-memory-broker.js.map +0 -1
  235. package/dist/testing/in-memory-bus.d.ts +0 -19
  236. package/dist/testing/in-memory-bus.d.ts.map +0 -1
  237. package/dist/testing/in-memory-bus.js +0 -31
  238. package/dist/testing/in-memory-bus.js.map +0 -1
  239. package/dist/testing/in-memory-channel.d.ts +0 -32
  240. package/dist/testing/in-memory-channel.d.ts.map +0 -1
  241. package/dist/testing/in-memory-channel.js +0 -65
  242. package/dist/testing/in-memory-channel.js.map +0 -1
  243. package/dist/testing/in-memory-queue.d.ts +0 -24
  244. package/dist/testing/in-memory-queue.d.ts.map +0 -1
  245. package/dist/testing/in-memory-queue.js +0 -66
  246. package/dist/testing/in-memory-queue.js.map +0 -1
  247. package/dist/testing/in-memory-repository.d.ts +0 -44
  248. package/dist/testing/in-memory-repository.d.ts.map +0 -1
  249. package/dist/testing/in-memory-repository.js +0 -60
  250. package/dist/testing/in-memory-repository.js.map +0 -1
  251. package/dist/testing/index.d.ts +0 -6
  252. package/dist/testing/index.d.ts.map +0 -1
  253. package/dist/testing/index.js +0 -6
  254. package/dist/testing/index.js.map +0 -1
  255. /package/dist/{domain/cow-draft.d.ts → cow-draft.d.ts} +0 -0
  256. /package/dist/{domain/cow-draft.js → cow-draft.js} +0 -0
  257. /package/dist/{core/result.d.ts → result.d.ts} +0 -0
  258. /package/dist/{core/result.js → result.js} +0 -0
  259. /package/dist/{core/standard-schema.js → standard-schema.js} +0 -0
@@ -1,235 +0,0 @@
1
- import { errorFactories, isCallableUseCase, } from '../app/index.js';
2
- import { validate, validationError } from '../core/index.js';
3
- import { tracingCtx, wrapEvent } from './envelope.js';
4
- const START_REQUIRED = 'hexok: start() before handlers can receive events';
5
- function assertHandlersStarted(deps, publishes) {
6
- if (deps.started.value || publishes === undefined)
7
- return;
8
- for (const catalog of publishes) {
9
- for (const eventClass of catalog.list()) {
10
- if (deps.handlerKeys.has(`${catalog.key}:${eventClass.key}`)) {
11
- throw new Error(START_REQUIRED);
12
- }
13
- }
14
- }
15
- }
16
- function assertEnvelopeStarted(deps, envelope) {
17
- if (deps.started.value)
18
- return;
19
- if (deps.handlerKeys.has(`${envelope.catalog}:${envelope.key}`)) {
20
- throw new Error(START_REQUIRED);
21
- }
22
- }
23
- function nestedRun(deps, queue, shared) {
24
- const run = (ctor, input) => runNested(ctor, input, deps, queue, shared, run);
25
- return run;
26
- }
27
- async function runNested(ctor, input, deps, queue, shared, run) {
28
- if (!isCallableUseCase(ctor)) {
29
- throw new Error('hexok: run() requires ExternalUseCase or InternalUseCase');
30
- }
31
- assertHandlersStarted(deps, ctor.publishes);
32
- const parsed = validate(ctor.input, input);
33
- if (!parsed.ok) {
34
- throw validationError('Validation failed', parsed.issues);
35
- }
36
- const publish = ((event) => {
37
- queue.push(wrapEvent(event, ctor.publishes ?? [], tracingCtx(shared.ctx)));
38
- });
39
- const ctx = {
40
- input: parsed.value,
41
- ports: aliasPorts(ctor.ports, deps.ports),
42
- ctx: shared.ctx,
43
- errors: errorFactories(ctor.errors),
44
- signal: shared.signal,
45
- publish,
46
- run,
47
- channels: aliasChannels(ctor.channels, deps.channels),
48
- };
49
- const instance = constructUseCase(ctor);
50
- return instance.execute(ctx);
51
- }
52
- export async function invokeExternal(ctor, input, deps, opts) {
53
- assertHandlersStarted(deps, ctor.publishes);
54
- const parsed = validate(ctor.input, input);
55
- if (!parsed.ok) {
56
- throw validationError('Validation failed', parsed.issues);
57
- }
58
- const queue = [];
59
- const shared = {
60
- ctx: opts?.ctx ?? deps.defaultCtx,
61
- signal: opts?.signal ?? new AbortController().signal,
62
- };
63
- const run = nestedRun(deps, queue, shared);
64
- const publish = ((event) => {
65
- queue.push(wrapEvent(event, ctor.publishes ?? [], tracingCtx(shared.ctx)));
66
- });
67
- const ports = aliasPorts(ctor.ports, deps.ports);
68
- const errors = errorFactories(ctor.errors);
69
- const ctx = {
70
- input: parsed.value,
71
- ports,
72
- ctx: shared.ctx,
73
- errors,
74
- signal: shared.signal,
75
- publish,
76
- run,
77
- channels: aliasChannels(ctor.channels, deps.channels),
78
- };
79
- const instance = constructUseCase(ctor);
80
- let handler = (executeCtx) => instance.execute(executeCtx);
81
- handler = wrapUseCase(ctor, handler, deps.interceptors);
82
- handler = wrapMiddleware(ctor, handler, deps.middleware, errors, opts?.request);
83
- try {
84
- const output = await handler(ctx);
85
- await flush(queue, deps);
86
- return output;
87
- }
88
- catch (error) {
89
- queue.length = 0;
90
- throw error;
91
- }
92
- }
93
- export async function invokeEvent(ctor, envelope, deps, opts) {
94
- const queue = [];
95
- const shared = {
96
- ctx: opts?.ctx ?? deps.defaultCtx,
97
- signal: opts?.signal ?? new AbortController().signal,
98
- };
99
- assertHandlersStarted(deps, ctor.publishes);
100
- const run = nestedRun(deps, queue, shared);
101
- const publish = ((event) => {
102
- queue.push(wrapEvent(event, ctor.publishes ?? [], tracingCtx(shared.ctx, envelope)));
103
- });
104
- const ports = aliasPorts(ctor.ports ?? {}, deps.ports);
105
- const errors = errorFactories(ctor.errors ?? {});
106
- const ctx = {
107
- event: envelope,
108
- ports,
109
- ctx: shared.ctx,
110
- errors,
111
- signal: shared.signal,
112
- publish,
113
- run,
114
- channels: aliasChannels(ctor.channels, deps.channels),
115
- ...(opts?.attempt !== undefined ? { attempt: opts.attempt } : {}),
116
- };
117
- const instance = constructUseCase(ctor);
118
- let dispatch = () => instance.execute(ctx);
119
- dispatch = wrapDispatch(ctor, envelope, dispatch, deps.interceptors);
120
- let handler = async () => dispatch();
121
- handler = wrapUseCase(ctor, handler, deps.interceptors);
122
- try {
123
- await handler(ctx);
124
- await flush(queue, deps);
125
- }
126
- catch (error) {
127
- queue.length = 0;
128
- throw error;
129
- }
130
- }
131
- function constructUseCase(ctor) {
132
- return new ctor();
133
- }
134
- export function aliasPorts(aliases, provided) {
135
- const ports = {};
136
- for (const [alias, token] of Object.entries(aliases)) {
137
- const impl = provided.get(token);
138
- if (impl === undefined) {
139
- throw new Error(`hexok: unprovided port "${token.key}"`);
140
- }
141
- ports[alias] = impl;
142
- }
143
- return ports;
144
- }
145
- function wrapUseCase(ctor, handler, interceptors) {
146
- let current = handler;
147
- for (let i = interceptors.length - 1; i >= 0; i--) {
148
- const interceptor = interceptors[i];
149
- if (interceptor?.aroundUseCase) {
150
- current = interceptor.aroundUseCase(ctor, current);
151
- }
152
- }
153
- return current;
154
- }
155
- function wrapDispatch(ctor, envelope, run, interceptors) {
156
- let current = run;
157
- for (let i = interceptors.length - 1; i >= 0; i--) {
158
- const interceptor = interceptors[i];
159
- const aroundDispatch = interceptor?.aroundDispatch;
160
- if (aroundDispatch) {
161
- const inner = current;
162
- current = () => aroundDispatch(envelope, ctor, inner);
163
- }
164
- }
165
- return current;
166
- }
167
- function wrapMiddleware(ctor, handler, middleware, errors, request) {
168
- let current = handler;
169
- for (let i = middleware.length - 1; i >= 0; i--) {
170
- const mw = middleware[i];
171
- if (!mw)
172
- continue;
173
- const inner = current;
174
- current = async (ctx) => {
175
- const executeCtx = ctx;
176
- return mw({
177
- context: executeCtx.ctx,
178
- input: executeCtx.input,
179
- next: () => inner(ctx),
180
- errors,
181
- path: ctor.key,
182
- ...(request !== undefined ? { request } : {}),
183
- });
184
- };
185
- }
186
- return current;
187
- }
188
- async function flush(queue, deps) {
189
- for (const envelope of queue) {
190
- const adapter = adapterFor(envelope, deps.catalogs);
191
- const publish = async () => {
192
- deps.onFlush?.(envelope);
193
- await adapter.publish(envelope);
194
- };
195
- await wrapPublish(envelope, publish, deps.interceptors);
196
- }
197
- }
198
- function wrapPublish(envelope, publish, interceptors) {
199
- let current = publish;
200
- for (let i = interceptors.length - 1; i >= 0; i--) {
201
- const interceptor = interceptors[i];
202
- const aroundPublish = interceptor?.aroundPublish;
203
- if (aroundPublish) {
204
- const inner = current;
205
- current = () => aroundPublish(envelope, inner);
206
- }
207
- }
208
- return current();
209
- }
210
- export async function publishNow(envelope, deps) {
211
- assertEnvelopeStarted(deps, envelope);
212
- await flush([envelope], deps);
213
- }
214
- function aliasChannels(declared, all) {
215
- if (!declared || declared.length === 0)
216
- return {};
217
- const out = {};
218
- for (const ctor of declared) {
219
- const key = ctor.catalog.key;
220
- const handle = all?.[key];
221
- if (handle === undefined) {
222
- throw new Error(`hexok: unrouted channel "${key}"`);
223
- }
224
- out[key] = handle;
225
- }
226
- return out;
227
- }
228
- function adapterFor(envelope, catalogs) {
229
- for (const [catalog, adapter] of catalogs) {
230
- if (catalog.key === envelope.catalog)
231
- return adapter;
232
- }
233
- throw new Error(`hexok: unbound catalog "${envelope.catalog}"`);
234
- }
235
- //# sourceMappingURL=invoke.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"invoke.js","sourceRoot":"","sources":["../../src/runtime/invoke.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- /** Onion around external `execute` (`local` and HTTP). Does not run for event handlers or nested `run`. */
2
- export type ApiMiddleware<Ctx = unknown> = (args: {
3
- /** Request context (`ctx` on the use case). */
4
- context: Ctx;
5
- /** Parsed API input. */
6
- input: unknown;
7
- /** Continue the onion. Does not accept a replacement ctx. */
8
- next: () => Promise<unknown>;
9
- /** Error factories from the use-case error map. */
10
- errors: {
11
- [code: string]: (data?: unknown) => never;
12
- };
13
- /** Use-case key (`incident.close`). */
14
- path: string;
15
- /** Present on HTTP `router.fetch` only. Read headers here; set ctx with `.ctxFrom`. */
16
- request?: Request;
17
- }) => Promise<unknown>;
18
- /** @deprecated Use `ApiMiddleware`. Same type; not HTTP-only. */
19
- export type RpcMiddleware<Ctx = unknown> = ApiMiddleware<Ctx>;
20
- //# sourceMappingURL=middleware.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/runtime/middleware.ts"],"names":[],"mappings":"AAAA,2GAA2G;AAC3G,MAAM,MAAM,aAAa,CAAC,GAAG,GAAG,OAAO,IAAI,CAAC,IAAI,EAAE;IAChD,+CAA+C;IAC/C,OAAO,EAAE,GAAG,CAAC;IACb,wBAAwB;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,6DAA6D;IAC7D,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7B,mDAAmD;IACnD,MAAM,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,KAAK,KAAK,CAAA;KAAE,CAAC;IACtD,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,uFAAuF;IACvF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAEvB,iEAAiE;AACjE,MAAM,MAAM,aAAa,CAAC,GAAG,GAAG,OAAO,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=middleware.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/runtime/middleware.ts"],"names":[],"mappings":""}
@@ -1,24 +0,0 @@
1
- import type { CatalogEntry, UseCaseBag, UseCaseContract } from '../app/index.js';
2
- import type { PathTo, UnionToIntersection } from '../app/nest.js';
3
- import type { ExternalKeysOf } from '../app/types.js';
4
- /** Dotted use-case key to HTTP path (`incident.close` → `/rpc/incident/close`). */
5
- export declare function rpcPath(key: string): string;
6
- /** One API route with a POST path under `/rpc`. */
7
- export type RpcRoute = CatalogEntry & {
8
- /** Always `POST`. */
9
- method: 'POST';
10
- /** `/rpc/...` path derived from the use-case key. */
11
- path: string;
12
- };
13
- type NestedRpc<Bag> = UnionToIntersection<ExternalKeysOf<Bag> extends infer Key ? Key extends string ? PathTo<Key, RpcRoute> : never : never>;
14
- /** Flat `routes` plus nested keys (`rpc.incident.close.path`). */
15
- export type RpcContract<Bag extends UseCaseBag = UseCaseBag> = {
16
- /** Routes keyed by use-case `key`. */
17
- routes: {
18
- [K in Extract<ExternalKeysOf<Bag>, string>]: RpcRoute;
19
- };
20
- } & NestedRpc<Bag>;
21
- /** Attach `POST /rpc/...` paths to each external catalog entry and nest by use-case key. */
22
- export declare function deriveRpc<Bag extends UseCaseBag = UseCaseBag>(contract: UseCaseContract): RpcContract<Bag>;
23
- export {};
24
- //# sourceMappingURL=rpc.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../src/runtime/rpc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,mFAAmF;AACnF,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,mDAAmD;AACnD,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAG;IACpC,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,KAAK,SAAS,CAAC,GAAG,IAAI,mBAAmB,CACvC,cAAc,CAAC,GAAG,CAAC,SAAS,MAAM,GAAG,GACjC,GAAG,SAAS,MAAM,GAChB,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,GACrB,KAAK,GACP,KAAK,CACV,CAAC;AAEF,kEAAkE;AAClE,MAAM,MAAM,WAAW,CAAC,GAAG,SAAS,UAAU,GAAG,UAAU,IAAI;IAC7D,sCAAsC;IACtC,MAAM,EAAE;SAAG,CAAC,IAAI,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,QAAQ;KAAE,CAAC;CACnE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;AAEnB,4FAA4F;AAC5F,wBAAgB,SAAS,CAAC,GAAG,SAAS,UAAU,GAAG,UAAU,EAC3D,QAAQ,EAAE,eAAe,GACxB,WAAW,CAAC,GAAG,CAAC,CAQlB"}
@@ -1,16 +0,0 @@
1
- import { nestByKey } from '../app/index.js';
2
- /** Dotted use-case key to HTTP path (`incident.close` → `/rpc/incident/close`). */
3
- export function rpcPath(key) {
4
- return `/rpc/${key.split('.').join('/')}`;
5
- }
6
- /** Attach `POST /rpc/...` paths to each external catalog entry and nest by use-case key. */
7
- export function deriveRpc(contract) {
8
- const routes = {};
9
- for (const [key, entry] of Object.entries(contract.entries)) {
10
- routes[key] = { ...entry, method: 'POST', path: rpcPath(entry.key) };
11
- }
12
- return Object.assign(nestByKey(Object.entries(routes)), {
13
- routes,
14
- });
15
- }
16
- //# sourceMappingURL=rpc.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rpc.js","sourceRoot":"","sources":["../../src/runtime/rpc.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,mFAAmF;AACnF,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,OAAO,QAAQ,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAC5C,CAAC;AAwBD,4FAA4F;AAC5F,MAAM,UAAU,SAAS,CACvB,QAAyB;IAEzB,MAAM,MAAM,GAA6B,EAAE,CAAC;IAC5C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5D,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;IACvE,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE;QACtD,MAAM;KACP,CAAqB,CAAC;AACzB,CAAC"}
@@ -1,77 +0,0 @@
1
- import type { AsUseCaseBag, ChannelSession, CheckUseCase, EventChannelCtor, UseCaseBag } from '../app/index.js';
2
- import type { CatalogKind, ChannelAdapter, Envelope, EventCatalog, EventClass, PortToken } from '../domain/index.js';
3
- import { type AdapterFor, type ApiMiddleware, type AppInstance, type ChannelKindError, type DuplicateCatalogError, type DuplicateChannelError, type DuplicatePortError, type Interceptor, type MissingMessages, type NestedClient } from '../runtime/index.js';
4
- /**
5
- * Built test app: runtime `AppInstance` plus `published` and `as(ctx)`.
6
- * Use `App.test(...).build()`, then assert `app.published` or call `app.as(ctx)`.
7
- */
8
- export type TestAppInstance<Bag extends UseCaseBag, Ctx = unknown, Routed = never> = AppInstance<Bag, Ctx, Routed> & {
9
- /** Envelopes that completed `aroundPublish`, in order. */
10
- published: Envelope[];
11
- /** Nested local client with `ctx` fixed on every call. */
12
- as: (ctx: Ctx) => NestedClient<Bag, Ctx>;
13
- };
14
- type ChannelCatalogKind<C> = C extends {
15
- catalog: EventCatalog<string, infer Kind, infer _E, infer _Ctx>;
16
- } ? Kind : CatalogKind;
17
- type ChannelCatalogKey<C> = C extends {
18
- catalog: EventCatalog<infer K extends string, infer _Kind, infer _E, infer _Ctx>;
19
- } ? K : string;
20
- /**
21
- * Test composition root with the same `provide`/`bind`/`route`/`ctx`/`build`
22
- * as runtime, plus `published` capture. Construct with `App.test`, not `new`.
23
- */
24
- export declare class TestAppBuilder<Bag extends UseCaseBag, Provided = never, Bound = never, Ctx = unknown, Routed = never> {
25
- #private;
26
- private constructor();
27
- /** Start a test graph from a use-case bag. The built app has `published` and `as`. */
28
- static test<Bag extends {
29
- [K in keyof Bag]: CheckUseCase<Bag[K]>;
30
- }>(useCases: Bag): TestAppBuilder<AsUseCaseBag<Bag>>;
31
- /** Bind a port token to an implementation, usually an in-memory fake. */
32
- provide<I>(token: [PortToken<I>] extends [Provided] ? DuplicatePortError : PortToken<I>, impl: I): TestAppBuilder<Bag, Provided | PortToken<I>, Bound, Ctx, Routed>;
33
- /** Bind a catalog to a bus or queue adapter (`InMemoryBus` / `InMemoryQueue`). */
34
- bind<Key extends string, Kind extends CatalogKind, Events extends EventClass = never, CatCtx = undefined>(catalog: [EventCatalog<Key, Kind, Events, CatCtx>] extends [Bound] ? DuplicateCatalogError<Key> : EventCatalog<Key, Kind, Events, CatCtx>, adapter: AdapterFor<Kind>): TestAppBuilder<Bag, Provided, Bound | EventCatalog<Key, Kind, Events, CatCtx>, Ctx, Routed>;
35
- /** Route a bus `EventChannel` to a channel adapter (`InMemoryChannel`). */
36
- route<C extends EventChannelCtor>(channel: ChannelCatalogKind<C> extends 'bus' ? [C] extends [Routed] ? DuplicateChannelError<ChannelCatalogKey<C>> : C : ChannelKindError<ChannelCatalogKey<C>, ChannelCatalogKind<C> & string>, adapter: ChannelAdapter<ChannelSession<C>>): TestAppBuilder<Bag, Provided, Bound, Ctx, Routed | C>;
37
- /** Set default request context for `local` and HTTP. `as(ctx)` overrides per call. */
38
- ctx<C>(defaults?: C): TestAppBuilder<Bag, Provided, Bound, C, Routed>;
39
- /** Set HTTP request context from the `Request`. Same as runtime `.ctxFrom`. */
40
- ctxFrom(fn: (args: {
41
- request: Request;
42
- ctx: Ctx;
43
- }) => Ctx | Promise<Ctx>): this;
44
- /** Provide a factory from `Adapter.of` by calling `create(...deps)`. */
45
- adapt<I, Deps extends unknown[]>(factory: {
46
- token: [PortToken<I>] extends [Provided] ? DuplicatePortError : PortToken<I>;
47
- create: (...deps: Deps) => I;
48
- }, ...deps: Deps): TestAppBuilder<Bag, Provided | PortToken<I>, Bound, Ctx, Routed>;
49
- /** Register API middleware on the inner runtime builder. */
50
- use(middleware: ApiMiddleware): this;
51
- /** Register an interceptor. First registered is outer; `App.test` already captured publish. */
52
- intercept(interceptor: Interceptor): this;
53
- /**
54
- * Complete the graph; incomplete builders expose `build` as the missing
55
- * port/catalog message (not callable). The instance includes `published` and `as`.
56
- */
57
- get build(): [MissingMessages<Bag, Provided, Bound, Routed>] extends [never] ? () => TestAppInstance<Bag, Ctx, Routed> : MissingMessages<Bag, Provided, Bound, Routed>;
58
- }
59
- /**
60
- * Same completeness as `App.from`, plus `published` capture (after
61
- * `aroundPublish`) and `as(ctx)` to rebind request context.
62
- *
63
- * ```ts
64
- * const app = App.test({ close: CloseIncident })
65
- * .provide(IncidentRepository, InMemoryRepository.of(...))
66
- * .bind(DomainEvents, InMemoryBus.create())
67
- * .build()
68
- * await app.local.incident.close({ id: '1' })
69
- * expect(app.published).toHaveLength(1)
70
- * ```
71
- */
72
- export declare const App: {
73
- /** Start a test graph. The built app has `published` and `as`. Production composition is `hexok/runtime` `App.from`. */
74
- test: typeof TestAppBuilder.test;
75
- };
76
- export {};
77
- //# sourceMappingURL=app-test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"app-test.d.ts","sourceRoot":"","sources":["../../src/testing/app-test.ts"],"names":[],"mappings":"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"}
@@ -1,109 +0,0 @@
1
- import { App as RuntimeApp, } from '../runtime/index.js';
2
- /**
3
- * Test composition root with the same `provide`/`bind`/`route`/`ctx`/`build`
4
- * as runtime, plus `published` capture. Construct with `App.test`, not `new`.
5
- */
6
- export class TestAppBuilder {
7
- #inner;
8
- #published;
9
- constructor(inner, published) {
10
- this.#inner = inner;
11
- this.#published = published;
12
- }
13
- /** Start a test graph from a use-case bag. The built app has `published` and `as`. */
14
- static test(useCases) {
15
- const published = [];
16
- const inner = RuntimeApp.from(useCases).intercept({
17
- key: 'hexok:published',
18
- aroundPublish: async (envelope, next) => {
19
- await next();
20
- published.push(envelope);
21
- },
22
- });
23
- return new TestAppBuilder(inner, published);
24
- }
25
- /** Bind a port token to an implementation, usually an in-memory fake. */
26
- provide(token, impl) {
27
- const next = this.#inner.provide(token, impl);
28
- return new TestAppBuilder(next, this.#published);
29
- }
30
- /** Bind a catalog to a bus or queue adapter (`InMemoryBus` / `InMemoryQueue`). */
31
- bind(catalog, adapter) {
32
- const next = this.#inner.bind(catalog, adapter);
33
- return new TestAppBuilder(next, this.#published);
34
- }
35
- /** Route a bus `EventChannel` to a channel adapter (`InMemoryChannel`). */
36
- route(channel, adapter) {
37
- const next = this.#inner.route(channel, adapter);
38
- return new TestAppBuilder(next, this.#published);
39
- }
40
- /** Set default request context for `local` and HTTP. `as(ctx)` overrides per call. */
41
- ctx(defaults) {
42
- const next = this.#inner.ctx(defaults);
43
- return new TestAppBuilder(next, this.#published);
44
- }
45
- /** Set HTTP request context from the `Request`. Same as runtime `.ctxFrom`. */
46
- ctxFrom(fn) {
47
- this.#inner.ctxFrom(fn);
48
- return this;
49
- }
50
- /** Provide a factory from `Adapter.of` by calling `create(...deps)`. */
51
- adapt(factory, ...deps) {
52
- return this.provide(factory.token, factory.create(...deps));
53
- }
54
- /** Register API middleware on the inner runtime builder. */
55
- use(middleware) {
56
- this.#inner.use(middleware);
57
- return this;
58
- }
59
- /** Register an interceptor. First registered is outer; `App.test` already captured publish. */
60
- intercept(interceptor) {
61
- this.#inner.intercept(interceptor);
62
- return this;
63
- }
64
- /**
65
- * Complete the graph; incomplete builders expose `build` as the missing
66
- * port/catalog message (not callable). The instance includes `published` and `as`.
67
- */
68
- get build() {
69
- const published = this.#published;
70
- return (() => {
71
- const app = this.#inner.build();
72
- return Object.assign(app, {
73
- published,
74
- as: (ctx) => rebindLocal(app.local, ctx),
75
- });
76
- });
77
- }
78
- }
79
- /**
80
- * Same completeness as `App.from`, plus `published` capture (after
81
- * `aroundPublish`) and `as(ctx)` to rebind request context.
82
- *
83
- * ```ts
84
- * const app = App.test({ close: CloseIncident })
85
- * .provide(IncidentRepository, InMemoryRepository.of(...))
86
- * .bind(DomainEvents, InMemoryBus.create())
87
- * .build()
88
- * await app.local.incident.close({ id: '1' })
89
- * expect(app.published).toHaveLength(1)
90
- * ```
91
- */
92
- export const App = {
93
- /** Start a test graph. The built app has `published` and `as`. Production composition is `hexok/runtime` `App.from`. */
94
- test: TestAppBuilder.test,
95
- };
96
- function rebindLocal(value, ctx) {
97
- if (typeof value === 'function') {
98
- return (input, opts) => value(input, { ...opts, ctx });
99
- }
100
- if (value !== null && typeof value === 'object') {
101
- const out = Object.create(null);
102
- for (const [key, child] of Object.entries(value)) {
103
- out[key] = rebindLocal(child, ctx);
104
- }
105
- return out;
106
- }
107
- return value;
108
- }
109
- //# sourceMappingURL=app-test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"app-test.js","sourceRoot":"","sources":["../../src/testing/app-test.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- import type { BrokerAdapter, BrokerConsumeCtx, Envelope } from '../domain/index.js';
2
- type Consumer = (envelope: Envelope, ctx: BrokerConsumeCtx) => Promise<void>;
3
- /**
4
- * In-process broker. `consume` dispatches with attempt; ack/nack are no-ops
5
- * besides recording. `stop()` clears consumers.
6
- */
7
- export declare class InMemoryBroker implements BrokerAdapter {
8
- #private;
9
- readonly kind: "broker";
10
- readonly published: Envelope[];
11
- attempts: number;
12
- static create(): InMemoryBroker;
13
- publish(envelope: Envelope): Promise<void>;
14
- consume(key: string, group: string, handler: Consumer): void;
15
- stop(): Promise<void>;
16
- }
17
- export {};
18
- //# sourceMappingURL=in-memory-broker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"in-memory-broker.d.ts","sourceRoot":"","sources":["../../src/testing/in-memory-broker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,QAAQ,EACT,MAAM,oBAAoB,CAAC;AAE5B,KAAK,QAAQ,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE7E;;;GAGG;AACH,qBAAa,cAAe,YAAW,aAAa;;IAClD,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAClC,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAM;IAEpC,QAAQ,SAAK;IAEb,MAAM,CAAC,MAAM,IAAI,cAAc;IAIzB,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBhD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,IAAI;IAMtD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5B"}
@@ -1,42 +0,0 @@
1
- /**
2
- * In-process broker. `consume` dispatches with attempt; ack/nack are no-ops
3
- * besides recording. `stop()` clears consumers.
4
- */
5
- export class InMemoryBroker {
6
- kind = 'broker';
7
- published = [];
8
- #consumers = new Map();
9
- attempts = 1;
10
- static create() {
11
- return new InMemoryBroker();
12
- }
13
- async publish(envelope) {
14
- this.published.push(envelope);
15
- const groups = this.#consumers.get(envelope.key);
16
- if (!groups)
17
- return;
18
- for (const consumer of groups.values()) {
19
- let acked = false;
20
- const ctx = {
21
- attempt: this.attempts,
22
- ack: async () => {
23
- acked = true;
24
- },
25
- nack: async () => {
26
- acked = false;
27
- },
28
- };
29
- await consumer(envelope, ctx);
30
- void acked;
31
- }
32
- }
33
- consume(key, group, handler) {
34
- const groups = this.#consumers.get(key) ?? new Map();
35
- groups.set(group, handler);
36
- this.#consumers.set(key, groups);
37
- }
38
- async stop() {
39
- this.#consumers.clear();
40
- }
41
- }
42
- //# sourceMappingURL=in-memory-broker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"in-memory-broker.js","sourceRoot":"","sources":["../../src/testing/in-memory-broker.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,MAAM,OAAO,cAAc;IAChB,IAAI,GAAG,QAAiB,CAAC;IACzB,SAAS,GAAe,EAAE,CAAC;IACpC,UAAU,GAAG,IAAI,GAAG,EAAiC,CAAC;IACtD,QAAQ,GAAG,CAAC,CAAC;IAEb,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,cAAc,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,QAAkB;QAC9B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,KAAK,GAAG,KAAK,CAAC;YAClB,MAAM,GAAG,GAAqB;gBAC5B,OAAO,EAAE,IAAI,CAAC,QAAQ;gBACtB,GAAG,EAAE,KAAK,IAAI,EAAE;oBACd,KAAK,GAAG,IAAI,CAAC;gBACf,CAAC;gBACD,IAAI,EAAE,KAAK,IAAI,EAAE;oBACf,KAAK,GAAG,KAAK,CAAC;gBAChB,CAAC;aACF,CAAC;YACF,MAAM,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC9B,KAAK,KAAK,CAAC;QACb,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAW,EAAE,KAAa,EAAE,OAAiB;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAoB,CAAC;QACvE,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;CACF"}
@@ -1,19 +0,0 @@
1
- import type { BusAdapter, Envelope } from '../domain/index.js';
2
- /**
3
- * In-process bus. Records `published`. `stop()` clears subscribers.
4
- */
5
- export declare class InMemoryBus implements BusAdapter {
6
- #private;
7
- readonly kind: "bus";
8
- /** Envelopes passed to `publish`, in order. */
9
- readonly published: Envelope[];
10
- /** Empty bus. Pass to `.bind(catalog, InMemoryBus.create())`. */
11
- static create(): InMemoryBus;
12
- /** Record the envelope, then await each subscriber for its key. */
13
- publish(envelope: Envelope): Promise<void>;
14
- /** Register a handler for `key`. Cleared by `stop()`. */
15
- subscribe(key: string, handler: (envelope: Envelope) => Promise<void>): void;
16
- /** Drop all subscribers. Does not clear `published`. */
17
- stop(): Promise<void>;
18
- }
19
- //# sourceMappingURL=in-memory-bus.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"in-memory-bus.d.ts","sourceRoot":"","sources":["../../src/testing/in-memory-bus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE/D;;GAEG;AACH,qBAAa,WAAY,YAAW,UAAU;;IAC5C,QAAQ,CAAC,IAAI,EAAG,KAAK,CAAU;IAC/B,+CAA+C;IAC/C,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAM;IAMpC,iEAAiE;IACjE,MAAM,CAAC,MAAM,IAAI,WAAW;IAI5B,mEAAmE;IAC7D,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAOhD,yDAAyD;IACzD,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAM5E,wDAAwD;IAClD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5B"}