@beignet/core 0.0.1 → 0.0.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 (274) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +149 -4
  3. package/dist/application/index.d.ts +93 -9
  4. package/dist/application/index.d.ts.map +1 -1
  5. package/dist/application/index.js +11 -11
  6. package/dist/application/index.js.map +1 -1
  7. package/dist/client/client.d.ts +73 -12
  8. package/dist/client/client.d.ts.map +1 -1
  9. package/dist/client/client.js +37 -12
  10. package/dist/client/client.js.map +1 -1
  11. package/dist/client/index.d.ts +12 -0
  12. package/dist/client/index.d.ts.map +1 -1
  13. package/dist/client/index.js +6 -0
  14. package/dist/client/index.js.map +1 -1
  15. package/dist/client/types.d.ts +69 -8
  16. package/dist/client/types.d.ts.map +1 -1
  17. package/dist/config/index.d.ts +84 -0
  18. package/dist/config/index.d.ts.map +1 -1
  19. package/dist/config/index.js +36 -0
  20. package/dist/config/index.js.map +1 -1
  21. package/dist/contracts/contract-builder.d.ts +49 -22
  22. package/dist/contracts/contract-builder.d.ts.map +1 -1
  23. package/dist/contracts/contract-builder.js +48 -21
  24. package/dist/contracts/contract-builder.js.map +1 -1
  25. package/dist/contracts/contract-group.d.ts +35 -19
  26. package/dist/contracts/contract-group.d.ts.map +1 -1
  27. package/dist/contracts/contract-group.js +35 -19
  28. package/dist/contracts/contract-group.js.map +1 -1
  29. package/dist/contracts/contract-like.d.ts +4 -4
  30. package/dist/contracts/contract-like.d.ts.map +1 -1
  31. package/dist/contracts/contract-like.js +2 -1
  32. package/dist/contracts/contract-like.js.map +1 -1
  33. package/dist/contracts/index.d.ts +28 -0
  34. package/dist/contracts/index.d.ts.map +1 -1
  35. package/dist/contracts/index.js +12 -0
  36. package/dist/contracts/index.js.map +1 -1
  37. package/dist/contracts/openapi-meta.d.ts +8 -8
  38. package/dist/contracts/openapi-meta.d.ts.map +1 -1
  39. package/dist/contracts/path-template.d.ts +27 -0
  40. package/dist/contracts/path-template.d.ts.map +1 -1
  41. package/dist/contracts/path-template.js +6 -0
  42. package/dist/contracts/path-template.js.map +1 -1
  43. package/dist/contracts/types.d.ts +104 -10
  44. package/dist/contracts/types.d.ts.map +1 -1
  45. package/dist/contracts/types.js +15 -0
  46. package/dist/contracts/types.js.map +1 -1
  47. package/dist/contracts/utils.d.ts +6 -0
  48. package/dist/contracts/utils.d.ts.map +1 -1
  49. package/dist/contracts/utils.js +6 -0
  50. package/dist/contracts/utils.js.map +1 -1
  51. package/dist/domain/entity.d.ts +22 -11
  52. package/dist/domain/entity.d.ts.map +1 -1
  53. package/dist/domain/entity.js +5 -1
  54. package/dist/domain/entity.js.map +1 -1
  55. package/dist/domain/events.d.ts +5 -2
  56. package/dist/domain/events.d.ts.map +1 -1
  57. package/dist/domain/events.js +4 -1
  58. package/dist/domain/events.js.map +1 -1
  59. package/dist/domain/value-object.d.ts +19 -9
  60. package/dist/domain/value-object.d.ts.map +1 -1
  61. package/dist/domain/value-object.js +5 -1
  62. package/dist/domain/value-object.js.map +1 -1
  63. package/dist/errors/catalog.d.ts +40 -16
  64. package/dist/errors/catalog.d.ts.map +1 -1
  65. package/dist/errors/catalog.js +18 -7
  66. package/dist/errors/catalog.js.map +1 -1
  67. package/dist/errors/response.d.ts +16 -4
  68. package/dist/errors/response.d.ts.map +1 -1
  69. package/dist/errors/response.js +3 -3
  70. package/dist/errors/response.js.map +1 -1
  71. package/dist/errors/validation.d.ts +10 -1
  72. package/dist/errors/validation.d.ts.map +1 -1
  73. package/dist/errors/validation.js +3 -0
  74. package/dist/errors/validation.js.map +1 -1
  75. package/dist/events/index.d.ts +133 -0
  76. package/dist/events/index.d.ts.map +1 -1
  77. package/dist/events/index.js +30 -0
  78. package/dist/events/index.js.map +1 -1
  79. package/dist/idempotency/index.d.ts +355 -0
  80. package/dist/idempotency/index.d.ts.map +1 -0
  81. package/dist/idempotency/index.js +360 -0
  82. package/dist/idempotency/index.js.map +1 -0
  83. package/dist/jobs/index.d.ts +110 -0
  84. package/dist/jobs/index.d.ts.map +1 -1
  85. package/dist/jobs/index.js +22 -0
  86. package/dist/jobs/index.js.map +1 -1
  87. package/dist/mail/index.d.ts +149 -0
  88. package/dist/mail/index.d.ts.map +1 -1
  89. package/dist/mail/index.js +30 -0
  90. package/dist/mail/index.js.map +1 -1
  91. package/dist/notifications/index.d.ts +369 -0
  92. package/dist/notifications/index.d.ts.map +1 -0
  93. package/dist/notifications/index.js +310 -0
  94. package/dist/notifications/index.js.map +1 -0
  95. package/dist/openapi/index.d.ts +132 -16
  96. package/dist/openapi/index.d.ts.map +1 -1
  97. package/dist/openapi/index.js +1 -1
  98. package/dist/openapi/index.js.map +1 -1
  99. package/dist/outbox/index.d.ts +469 -0
  100. package/dist/outbox/index.d.ts.map +1 -0
  101. package/dist/outbox/index.js +482 -0
  102. package/dist/outbox/index.js.map +1 -0
  103. package/dist/pagination/index.d.ts +166 -0
  104. package/dist/pagination/index.d.ts.map +1 -0
  105. package/dist/pagination/index.js +96 -0
  106. package/dist/pagination/index.js.map +1 -0
  107. package/dist/ports/audit.d.ts +271 -0
  108. package/dist/ports/audit.d.ts.map +1 -1
  109. package/dist/ports/audit.js +128 -0
  110. package/dist/ports/audit.js.map +1 -1
  111. package/dist/ports/auth.d.ts +70 -0
  112. package/dist/ports/auth.d.ts.map +1 -1
  113. package/dist/ports/auth.js +30 -0
  114. package/dist/ports/auth.js.map +1 -1
  115. package/dist/ports/cache.d.ts +41 -0
  116. package/dist/ports/cache.d.ts.map +1 -1
  117. package/dist/ports/cache.js +10 -0
  118. package/dist/ports/cache.js.map +1 -1
  119. package/dist/ports/clock.d.ts +38 -0
  120. package/dist/ports/clock.d.ts.map +1 -1
  121. package/dist/ports/clock.js +20 -0
  122. package/dist/ports/clock.js.map +1 -1
  123. package/dist/ports/id-generator.d.ts +37 -0
  124. package/dist/ports/id-generator.d.ts.map +1 -1
  125. package/dist/ports/id-generator.js +22 -0
  126. package/dist/ports/id-generator.js.map +1 -1
  127. package/dist/ports/index.d.ts +83 -0
  128. package/dist/ports/index.d.ts.map +1 -1
  129. package/dist/ports/index.js +41 -5
  130. package/dist/ports/index.js.map +1 -1
  131. package/dist/ports/logger.d.ts +56 -0
  132. package/dist/ports/logger.d.ts.map +1 -1
  133. package/dist/ports/logger.js +17 -0
  134. package/dist/ports/logger.js.map +1 -1
  135. package/dist/ports/policy.d.ts +132 -0
  136. package/dist/ports/policy.d.ts.map +1 -1
  137. package/dist/ports/policy.js +45 -0
  138. package/dist/ports/policy.js.map +1 -1
  139. package/dist/ports/rate-limit.d.ts +25 -0
  140. package/dist/ports/rate-limit.d.ts.map +1 -1
  141. package/dist/ports/rate-limit.js +10 -0
  142. package/dist/ports/rate-limit.js.map +1 -1
  143. package/dist/ports/redaction.d.ts +101 -0
  144. package/dist/ports/redaction.d.ts.map +1 -1
  145. package/dist/ports/redaction.js +59 -0
  146. package/dist/ports/redaction.js.map +1 -1
  147. package/dist/ports/storage.d.ts +100 -0
  148. package/dist/ports/storage.d.ts.map +1 -1
  149. package/dist/ports/storage.js +10 -0
  150. package/dist/ports/storage.js.map +1 -1
  151. package/dist/ports/testing.d.ts +47 -0
  152. package/dist/ports/testing.d.ts.map +1 -1
  153. package/dist/ports/testing.js +23 -0
  154. package/dist/ports/testing.js.map +1 -1
  155. package/dist/ports/unit-of-work.d.ts +60 -3
  156. package/dist/ports/unit-of-work.d.ts.map +1 -1
  157. package/dist/ports/unit-of-work.js +11 -2
  158. package/dist/ports/unit-of-work.js.map +1 -1
  159. package/dist/providers/instrumentation.d.ts +204 -0
  160. package/dist/providers/instrumentation.d.ts.map +1 -1
  161. package/dist/providers/instrumentation.js +14 -0
  162. package/dist/providers/instrumentation.js.map +1 -1
  163. package/dist/providers/provider.d.ts +14 -1
  164. package/dist/providers/provider.d.ts.map +1 -1
  165. package/dist/providers/provider.js.map +1 -1
  166. package/dist/schedules/index.d.ts +246 -0
  167. package/dist/schedules/index.d.ts.map +1 -1
  168. package/dist/schedules/index.js +27 -0
  169. package/dist/schedules/index.js.map +1 -1
  170. package/dist/server/health.d.ts +14 -5
  171. package/dist/server/health.d.ts.map +1 -1
  172. package/dist/server/health.js +5 -2
  173. package/dist/server/health.js.map +1 -1
  174. package/dist/server/hooks/auth.d.ts +57 -0
  175. package/dist/server/hooks/auth.d.ts.map +1 -1
  176. package/dist/server/hooks/auth.js.map +1 -1
  177. package/dist/server/hooks/cors.d.ts +27 -0
  178. package/dist/server/hooks/cors.d.ts.map +1 -1
  179. package/dist/server/hooks/cors.js +12 -0
  180. package/dist/server/hooks/cors.js.map +1 -1
  181. package/dist/server/hooks/errors.d.ts +15 -6
  182. package/dist/server/hooks/errors.d.ts.map +1 -1
  183. package/dist/server/hooks/errors.js.map +1 -1
  184. package/dist/server/hooks/index.d.ts +3 -0
  185. package/dist/server/hooks/index.d.ts.map +1 -1
  186. package/dist/server/hooks/index.js +3 -0
  187. package/dist/server/hooks/index.js.map +1 -1
  188. package/dist/server/hooks/logging.d.ts +36 -0
  189. package/dist/server/hooks/logging.d.ts.map +1 -1
  190. package/dist/server/hooks/logging.js +6 -0
  191. package/dist/server/hooks/logging.js.map +1 -1
  192. package/dist/server/hooks/rate-limit.d.ts +33 -0
  193. package/dist/server/hooks/rate-limit.d.ts.map +1 -1
  194. package/dist/server/hooks/rate-limit.js +11 -0
  195. package/dist/server/hooks/rate-limit.js.map +1 -1
  196. package/dist/server/http.d.ts +170 -0
  197. package/dist/server/http.d.ts.map +1 -1
  198. package/dist/server/index.d.ts +18 -0
  199. package/dist/server/index.d.ts.map +1 -1
  200. package/dist/server/index.js +6 -0
  201. package/dist/server/index.js.map +1 -1
  202. package/dist/server/openapi.d.ts +5 -3
  203. package/dist/server/openapi.d.ts.map +1 -1
  204. package/dist/server/openapi.js +4 -2
  205. package/dist/server/openapi.js.map +1 -1
  206. package/dist/server/providers/loadProviderConfig.d.ts +9 -0
  207. package/dist/server/providers/loadProviderConfig.d.ts.map +1 -1
  208. package/dist/server/providers/loadProviderConfig.js +9 -0
  209. package/dist/server/providers/loadProviderConfig.js.map +1 -1
  210. package/dist/server/server.d.ts +107 -8
  211. package/dist/server/server.d.ts.map +1 -1
  212. package/dist/server/server.js +27 -7
  213. package/dist/server/server.js.map +1 -1
  214. package/dist/testing/index.d.ts +167 -0
  215. package/dist/testing/index.d.ts.map +1 -0
  216. package/dist/testing/index.js +119 -0
  217. package/dist/testing/index.js.map +1 -0
  218. package/package.json +21 -1
  219. package/src/application/index.ts +85 -22
  220. package/src/client/client.ts +73 -12
  221. package/src/client/index.ts +12 -0
  222. package/src/client/types.ts +70 -9
  223. package/src/config/index.ts +86 -0
  224. package/src/contracts/contract-builder.ts +49 -22
  225. package/src/contracts/contract-group.ts +35 -19
  226. package/src/contracts/contract-like.ts +4 -4
  227. package/src/contracts/index.ts +28 -1
  228. package/src/contracts/openapi-meta.ts +8 -8
  229. package/src/contracts/path-template.ts +27 -0
  230. package/src/contracts/types.ts +111 -10
  231. package/src/contracts/utils.ts +6 -0
  232. package/src/domain/entity.ts +22 -11
  233. package/src/domain/events.ts +5 -2
  234. package/src/domain/value-object.ts +19 -9
  235. package/src/errors/catalog.ts +40 -16
  236. package/src/errors/response.ts +16 -4
  237. package/src/errors/validation.ts +10 -1
  238. package/src/events/index.ts +134 -0
  239. package/src/idempotency/index.ts +767 -0
  240. package/src/jobs/index.ts +111 -0
  241. package/src/mail/index.ts +149 -0
  242. package/src/notifications/index.ts +771 -0
  243. package/src/openapi/index.ts +133 -16
  244. package/src/outbox/index.ts +1024 -0
  245. package/src/pagination/index.ts +278 -0
  246. package/src/ports/audit.ts +271 -0
  247. package/src/ports/auth.ts +70 -0
  248. package/src/ports/cache.ts +41 -0
  249. package/src/ports/clock.ts +38 -0
  250. package/src/ports/id-generator.ts +37 -0
  251. package/src/ports/index.ts +106 -11
  252. package/src/ports/logger.ts +56 -0
  253. package/src/ports/policy.ts +133 -0
  254. package/src/ports/rate-limit.ts +25 -0
  255. package/src/ports/redaction.ts +101 -0
  256. package/src/ports/storage.ts +100 -0
  257. package/src/ports/testing.ts +47 -0
  258. package/src/ports/unit-of-work.ts +60 -3
  259. package/src/providers/instrumentation.ts +204 -0
  260. package/src/providers/provider.ts +14 -1
  261. package/src/schedules/index.ts +247 -0
  262. package/src/server/health.ts +14 -5
  263. package/src/server/hooks/auth.ts +58 -0
  264. package/src/server/hooks/cors.ts +27 -0
  265. package/src/server/hooks/errors.ts +15 -6
  266. package/src/server/hooks/index.ts +3 -0
  267. package/src/server/hooks/logging.ts +36 -0
  268. package/src/server/hooks/rate-limit.ts +33 -0
  269. package/src/server/http.ts +170 -1
  270. package/src/server/index.ts +18 -1
  271. package/src/server/openapi.ts +5 -3
  272. package/src/server/providers/loadProviderConfig.ts +9 -0
  273. package/src/server/server.ts +107 -9
  274. package/src/testing/index.ts +337 -0
@@ -1,6 +1,18 @@
1
+ /**
2
+ * Default replacement used when a sensitive field is redacted.
3
+ */
1
4
  export const DEFAULT_REDACTED_VALUE = "[redacted]";
5
+ /**
6
+ * Default replacement used when recursive redaction exceeds `maxDepth`.
7
+ */
2
8
  export const DEFAULT_TRUNCATED_VALUE = "[truncated]";
9
+ /**
10
+ * Default replacement used when recursive redaction finds a circular object.
11
+ */
3
12
  export const DEFAULT_CIRCULAR_VALUE = "[circular]";
13
+ /**
14
+ * Exact header/object keys redacted by default.
15
+ */
4
16
  export const DEFAULT_SENSITIVE_KEYS = [
5
17
  "authorization",
6
18
  "cookie",
@@ -12,6 +24,11 @@ export const DEFAULT_SENSITIVE_KEYS = [
12
24
  "refresh-token",
13
25
  "credentials",
14
26
  ];
27
+ /**
28
+ * Key substrings redacted by default.
29
+ *
30
+ * Matching is case-insensitive.
31
+ */
15
32
  export const DEFAULT_SENSITIVE_KEY_TERMS = [
16
33
  "token",
17
34
  "password",
@@ -23,6 +40,17 @@ export const DEFAULT_SENSITIVE_KEY_TERMS = [
23
40
  function normalizeKey(key) {
24
41
  return key.toLowerCase();
25
42
  }
43
+ /**
44
+ * Return whether a key should be redacted.
45
+ *
46
+ * Checks default exact keys, default key terms, user-provided exact keys,
47
+ * user-provided key terms, and finally `shouldRedactKey`.
48
+ *
49
+ * @param key - Object or header key to evaluate.
50
+ * @param options - Optional redaction behavior.
51
+ * @param context - Optional path/value context for custom decisions.
52
+ * @returns `true` when the key should be replaced.
53
+ */
26
54
  export function isSensitiveKey(key, options = {}, context) {
27
55
  const normalized = normalizeKey(key);
28
56
  const exactKeys = new Set([...DEFAULT_SENSITIVE_KEYS, ...(options.sensitiveKeys ?? [])].map(normalizeKey));
@@ -91,6 +119,20 @@ function redactUnknown(value, options, path, seen) {
91
119
  seen.delete(objectValue);
92
120
  return output;
93
121
  }
122
+ /**
123
+ * Recursively redact a value using Beignet's default sensitive-key rules plus
124
+ * any custom rules in `options`.
125
+ *
126
+ * This returns a copy for objects and arrays. Primitive values are returned as
127
+ * is unless they are under a sensitive key. Some runtime shapes are normalized:
128
+ * `bigint` becomes a string, `Error` becomes a plain object with `name`,
129
+ * `message`, and `stack`, and class instances are copied from enumerable
130
+ * entries.
131
+ *
132
+ * @param value - Value to redact.
133
+ * @param options - Optional redaction behavior.
134
+ * @returns A redacted value typed as the input type for caller convenience.
135
+ */
94
136
  export function redactValue(value, options = {}) {
95
137
  return redactUnknown(value, options, [], new WeakSet());
96
138
  }
@@ -108,6 +150,17 @@ function headerEntries(headers) {
108
150
  }
109
151
  return Object.entries(headers);
110
152
  }
153
+ /**
154
+ * Redact headers into a plain object.
155
+ *
156
+ * Sensitive header names such as `authorization`, `cookie`, and token-like keys
157
+ * are replaced. Non-sensitive values are passed through `redactValue(...)` so
158
+ * nested object values are still sanitized.
159
+ *
160
+ * @param headers - Headers object, iterable entries, or plain object.
161
+ * @param options - Optional redaction behavior.
162
+ * @returns A plain object with redacted header values.
163
+ */
111
164
  export function redactHeaders(headers, options = {}) {
112
165
  const output = {};
113
166
  for (const [key, value] of headerEntries(headers)) {
@@ -120,6 +173,12 @@ export function redactHeaders(headers, options = {}) {
120
173
  }
121
174
  return output;
122
175
  }
176
+ /**
177
+ * Create a reusable redactor function from options.
178
+ *
179
+ * @param options - Redaction behavior to apply on each call.
180
+ * @returns A function that redacts values with the provided options.
181
+ */
123
182
  export function createRedactor(options = {}) {
124
183
  return (value) => redactValue(value, options);
125
184
  }
@@ -1 +1 @@
1
- {"version":3,"file":"redaction.js","sourceRoot":"","sources":["../../src/ports/redaction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"redaction.js","sourceRoot":"","sources":["../../src/ports/redaction.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,70 @@
1
+ /**
2
+ * Object visibility understood by storage ports.
3
+ */
1
4
  export type StorageVisibility = "private" | "public";
5
+ /**
6
+ * String metadata stored alongside an object.
7
+ */
2
8
  export type StorageMetadata = Record<string, string>;
9
+ /**
10
+ * Body types accepted by `StoragePort.put(...)`.
11
+ */
3
12
  export type StorageBody = string | ArrayBuffer | Uint8Array | Blob | ReadableStream<Uint8Array>;
13
+ /**
14
+ * Options for writing an object to storage.
15
+ */
4
16
  export interface StoragePutOptions {
17
+ /**
18
+ * MIME content type stored with the object.
19
+ */
5
20
  contentType?: string;
21
+ /**
22
+ * Cache-Control value stored with the object.
23
+ */
6
24
  cacheControl?: string;
25
+ /**
26
+ * Provider metadata stored with the object.
27
+ */
7
28
  metadata?: StorageMetadata;
29
+ /**
30
+ * Whether the object may receive a public URL.
31
+ */
8
32
  visibility?: StorageVisibility;
9
33
  }
34
+ /**
35
+ * Metadata for an object in storage.
36
+ */
10
37
  export interface StorageObject {
38
+ /**
39
+ * Object key. Keys are relative object-store paths, not filesystem paths or
40
+ * public URLs.
41
+ */
11
42
  key: string;
43
+ /**
44
+ * Object size in bytes.
45
+ */
12
46
  size: number;
13
47
  contentType?: string;
14
48
  cacheControl?: string;
49
+ /**
50
+ * Provider metadata stored with the object.
51
+ */
15
52
  metadata: StorageMetadata;
53
+ /**
54
+ * Object visibility.
55
+ */
16
56
  visibility: StorageVisibility;
57
+ /**
58
+ * Last modification timestamp.
59
+ */
17
60
  lastModified: Date;
18
61
  }
62
+ /**
63
+ * Object metadata plus a one-shot readable body.
64
+ *
65
+ * Like Fetch response bodies, storage bodies can be consumed once. Call `get`
66
+ * again if you need another reader.
67
+ */
19
68
  export interface StorageObjectBody extends StorageObject {
20
69
  /**
21
70
  * Whether this object body has already been consumed. Like Fetch response
@@ -23,19 +72,60 @@ export interface StorageObjectBody extends StorageObject {
23
72
  * buffering them.
24
73
  */
25
74
  readonly bodyUsed: boolean;
75
+ /**
76
+ * Consume the object as a readable byte stream.
77
+ */
26
78
  stream(): ReadableStream<Uint8Array>;
79
+ /**
80
+ * Consume the object as bytes.
81
+ */
27
82
  bytes(): Promise<Uint8Array>;
83
+ /**
84
+ * Consume the object as an ArrayBuffer.
85
+ */
28
86
  arrayBuffer(): Promise<ArrayBuffer>;
87
+ /**
88
+ * Consume the object as UTF-8 text.
89
+ */
29
90
  text(): Promise<string>;
30
91
  }
92
+ /**
93
+ * App-facing object storage port.
94
+ *
95
+ * Implement this with S3, R2, local disk, or a test adapter. Application code
96
+ * should depend on this interface instead of provider-specific SDKs.
97
+ */
31
98
  export interface StoragePort {
99
+ /**
100
+ * Store an object and return its metadata.
101
+ */
32
102
  put(key: string, body: StorageBody, options?: StoragePutOptions): Promise<StorageObject>;
103
+ /**
104
+ * Return object metadata and body, or `null` when missing.
105
+ */
33
106
  get(key: string): Promise<StorageObjectBody | null>;
107
+ /**
108
+ * Return object metadata without its body, or `null` when missing.
109
+ */
34
110
  stat(key: string): Promise<StorageObject | null>;
111
+ /**
112
+ * Delete an object.
113
+ *
114
+ * @returns `true` when the object existed.
115
+ */
35
116
  delete(key: string): Promise<boolean>;
117
+ /**
118
+ * Return whether an object exists.
119
+ */
36
120
  exists(key: string): Promise<boolean>;
121
+ /**
122
+ * Return a public URL when the object is public and the adapter can build one.
123
+ */
37
124
  publicUrl(key: string): Promise<string | null>;
38
125
  }
126
+ /**
127
+ * Options for `createMemoryStorage(...)`.
128
+ */
39
129
  export interface MemoryStorageOptions {
40
130
  /**
41
131
  * Base URL used by `publicUrl(...)` for objects written with
@@ -43,5 +133,15 @@ export interface MemoryStorageOptions {
43
133
  */
44
134
  publicBaseUrl?: string;
45
135
  }
136
+ /**
137
+ * Create an in-memory object storage adapter for tests, examples, and
138
+ * single-process development.
139
+ *
140
+ * This adapter validates object keys using Beignet's storage key rules. It is
141
+ * not durable and does not share objects across processes.
142
+ *
143
+ * @param options - Optional public URL base for public objects.
144
+ * @returns A storage port backed by a local `Map`.
145
+ */
46
146
  export declare function createMemoryStorage(options?: MemoryStorageOptions): StoragePort;
47
147
  //# sourceMappingURL=storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/ports/storage.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAErD,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAErD,MAAM,MAAM,WAAW,GACnB,MAAM,GACN,WAAW,GACX,UAAU,GACV,IAAI,GACJ,cAAc,CAAC,UAAU,CAAC,CAAC;AAE/B,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,eAAe,CAAC;IAC1B,UAAU,EAAE,iBAAiB,CAAC;IAC9B,YAAY,EAAE,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,MAAM,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC;IACrC,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7B,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IACpC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,CACD,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,WAAW,EACjB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IACpD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAiKD,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,oBAAyB,GACjC,WAAW,CA0Db"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/ports/storage.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAErD;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAErD;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB,MAAM,GACN,WAAW,GACX,UAAU,GACV,IAAI,GACJ,cAAc,CAAC,UAAU,CAAC,CAAC;AAE/B;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;;OAEG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,QAAQ,EAAE,eAAe,CAAC;IAC1B;;OAEG;IACH,UAAU,EAAE,iBAAiB,CAAC;IAC9B;;OAEG;IACH,YAAY,EAAE,IAAI,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B;;OAEG;IACH,MAAM,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC;IACrC;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7B;;OAEG;IACH,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IACpC;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACzB;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,GAAG,CACD,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,WAAW,EACjB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1B;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IACpD;;OAEG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IACjD;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAiKD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,oBAAyB,GACjC,WAAW,CA0Db"}
@@ -127,6 +127,16 @@ function joinPublicUrl(baseUrl, key) {
127
127
  .join("/");
128
128
  return `${base}/${encodedKey}`;
129
129
  }
130
+ /**
131
+ * Create an in-memory object storage adapter for tests, examples, and
132
+ * single-process development.
133
+ *
134
+ * This adapter validates object keys using Beignet's storage key rules. It is
135
+ * not durable and does not share objects across processes.
136
+ *
137
+ * @param options - Optional public URL base for public objects.
138
+ * @returns A storage port backed by a local `Map`.
139
+ */
130
140
  export function createMemoryStorage(options = {}) {
131
141
  const objects = new Map();
132
142
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/ports/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/ports/storage.ts"],"names":[],"mappings":"AA4JA,SAAS,SAAS,CAAC,KAAiB;IAClC,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAiB;IAC3C,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACjD,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,KAAiB;IACtC,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9B,OAAO,IAAI,cAAc,CAAa;QACpC,KAAK,CAAC,UAAU;YACd,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACzB,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,MAAkC;IAElC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IAClC,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,IAAI,IAAI,GAAG,CAAC,CAAC;IAEb,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACnC,IAAI,MAAM,CAAC,IAAI;gBAAE,MAAM;YACvB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;QAClC,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC;IAC7B,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,IAAiB;IACjD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,IAAI,YAAY,UAAU,EAAE,CAAC;QAC/B,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,IAAI,YAAY,WAAW,EAAE,CAAC;QAChC,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,IAAI,YAAY,IAAI,EAAE,CAAC;QACzB,OAAO,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,WAAW,CAAC,KAAyB;IAC5C,OAAO;QACL,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS;YACjC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE;YACpC,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS;YAClC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE;YACtC,CAAC,CAAC,EAAE,CAAC;QACP,QAAQ,EAAE,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE;QAC/B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,YAAY,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAyB;IACjD,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,SAAS,YAAY;QACnB,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QAED,QAAQ,GAAG,IAAI,CAAC;QAChB,OAAO,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,OAAO;QACL,GAAG,MAAM;QACT,IAAI,QAAQ;YACV,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,MAAM;YACJ,OAAO,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,KAAK,CAAC,KAAK;YACT,OAAO,YAAY,EAAE,CAAC;QACxB,CAAC;QACD,KAAK,CAAC,WAAW;YACf,OAAO,kBAAkB,CAAC,YAAY,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,KAAK,CAAC,IAAI;YACR,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QAClD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW;IACrC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEhC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,IAAI,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,OAAe,EAAE,GAAW;IACjD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,GAAG;SACnB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;SACvC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,GAAG,IAAI,IAAI,UAAU,EAAE,CAAC;AACjC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CACjC,UAAgC,EAAE;IAElC,MAAM,OAAO,GAAG,IAAI,GAAG,EAA8B,CAAC;IAEtD,OAAO;QACL,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU;YAC7B,kBAAkB,CAAC,GAAG,CAAC,CAAC;YACxB,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAuB;gBAChC,GAAG;gBACH,IAAI,EAAE,KAAK,CAAC,UAAU;gBACtB,GAAG,CAAC,UAAU,EAAE,WAAW,KAAK,SAAS;oBACvC,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,WAAW,EAAE;oBACzC,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,UAAU,EAAE,YAAY,KAAK,SAAS;oBACxC,CAAC,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,YAAY,EAAE;oBAC3C,CAAC,CAAC,EAAE,CAAC;gBACP,QAAQ,EAAE,EAAE,GAAG,CAAC,UAAU,EAAE,QAAQ,IAAI,EAAE,CAAC,EAAE;gBAC7C,UAAU,EAAE,UAAU,EAAE,UAAU,IAAI,SAAS;gBAC/C,YAAY,EAAE,IAAI,IAAI,EAAE;gBACxB,KAAK;aACN,CAAC;YAEF,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAExB,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,GAAG;YACX,kBAAkB,CAAC,GAAG,CAAC,CAAC;YACxB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YAExB,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAG;YACZ,kBAAkB,CAAC,GAAG,CAAC,CAAC;YACxB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YAExB,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,GAAG;YACd,kBAAkB,CAAC,GAAG,CAAC,CAAC;YACxB,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,GAAG;YACd,kBAAkB,CAAC,GAAG,CAAC,CAAC;YACxB,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;QACD,KAAK,CAAC,SAAS,CAAC,GAAG;YACjB,kBAAkB,CAAC,GAAG,CAAC,CAAC;YACxB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;gBACtE,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,aAAa,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QACnD,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -30,12 +30,18 @@ export declare function createRecordingEventBus(): {
30
30
  bus: EventBusPort;
31
31
  events: RecordedEvent[];
32
32
  };
33
+ /**
34
+ * Expected outcome for one policy matrix case.
35
+ */
33
36
  export type PolicyMatrixExpectation = "allow" | "deny";
34
37
  type PolicyMatrixSubject<TResolver> = PolicySubjectArgs<TResolver> extends [subject: infer Subject] ? {
35
38
  subject: Subject;
36
39
  } : {
37
40
  subject?: never;
38
41
  };
42
+ /**
43
+ * One typed authorization matrix case for a policy ability.
44
+ */
39
45
  export type PolicyMatrixCase<TContext, TPolicies extends readonly PolicyDefinition[] = readonly PolicyDefinition[]> = {
40
46
  [TAbility in keyof PolicyMapFromDefinitions<TPolicies> & string]: {
41
47
  name: string;
@@ -46,6 +52,9 @@ export type PolicyMatrixCase<TContext, TPolicies extends readonly PolicyDefiniti
46
52
  code?: string;
47
53
  } & PolicyMatrixSubject<PolicyMapFromDefinitions<TPolicies>[TAbility]>;
48
54
  }[keyof PolicyMapFromDefinitions<TPolicies> & string];
55
+ /**
56
+ * Untyped policy matrix case used internally for failure reporting.
57
+ */
49
58
  export type UntypedPolicyMatrixCase<TContext> = {
50
59
  name: string;
51
60
  ctx: TContext;
@@ -55,19 +64,57 @@ export type UntypedPolicyMatrixCase<TContext> = {
55
64
  reason?: string;
56
65
  code?: string;
57
66
  };
67
+ /**
68
+ * Result for one evaluated policy matrix case.
69
+ */
58
70
  export type PolicyMatrixResult<TContext, TPolicies extends readonly PolicyDefinition[] = readonly PolicyDefinition[]> = {
59
71
  case: PolicyMatrixCase<TContext, TPolicies>;
60
72
  decision: GateDecision;
61
73
  passed: boolean;
62
74
  message?: string;
63
75
  };
76
+ /**
77
+ * Test helper for evaluating authorization policies.
78
+ */
64
79
  export type PolicyTester<TContext, TPolicies extends readonly PolicyDefinition[]> = {
80
+ /**
81
+ * Gate created from the same policies, useful for direct assertions.
82
+ */
65
83
  gate: GatePort<TContext, TPolicies>;
84
+ /**
85
+ * Evaluate cases and return structured pass/fail results.
86
+ */
66
87
  evaluateMatrix(cases: readonly PolicyMatrixCase<TContext, TPolicies>[]): Promise<PolicyMatrixResult<TContext, TPolicies>[]>;
88
+ /**
89
+ * Evaluate cases and throw a combined assertion error when any fail.
90
+ */
67
91
  assertMatrix(cases: readonly PolicyMatrixCase<TContext, TPolicies>[]): Promise<void>;
68
92
  };
93
+ /**
94
+ * Create a policy tester from the same options used by `createGate(...)`.
95
+ *
96
+ * Use this for table-driven authorization tests that document who can perform
97
+ * each ability against which subject.
98
+ *
99
+ * @param options - Policy definitions and optional denial mapper.
100
+ * @returns A policy tester with a gate plus matrix helpers.
101
+ */
69
102
  export declare function createPolicyTester<const TPolicies extends readonly PolicyDefinition[]>(options: CreateGateOptions<PolicyContextFromDefinitions<TPolicies>, TPolicies>): PolicyTester<PolicyContextFromDefinitions<TPolicies>, TPolicies>;
103
+ /**
104
+ * Evaluate a table of policy cases without throwing.
105
+ *
106
+ * @param gate - Gate under test.
107
+ * @param cases - Matrix cases to evaluate.
108
+ * @returns Structured result for each case.
109
+ */
70
110
  export declare function evaluatePolicyMatrix<TContext, TPolicies extends readonly PolicyDefinition[]>(gate: GatePort<TContext, TPolicies>, cases: readonly PolicyMatrixCase<TContext, TPolicies>[]): Promise<PolicyMatrixResult<TContext, TPolicies>[]>;
111
+ /**
112
+ * Assert that all policy matrix cases pass.
113
+ *
114
+ * @param gate - Gate under test.
115
+ * @param cases - Matrix cases to evaluate.
116
+ * @throws Combined error listing every failed case.
117
+ */
71
118
  export declare function assertPolicyMatrix<TContext, TPolicies extends readonly PolicyDefinition[]>(gate: GatePort<TContext, TPolicies>, cases: readonly PolicyMatrixCase<TContext, TPolicies>[]): Promise<void>;
72
119
  export {};
73
120
  //# sourceMappingURL=testing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/ports/testing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/ports/testing.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,15 @@ export function createRecordingEventBus() {
30
30
  };
31
31
  return { bus, events };
32
32
  }
33
+ /**
34
+ * Create a policy tester from the same options used by `createGate(...)`.
35
+ *
36
+ * Use this for table-driven authorization tests that document who can perform
37
+ * each ability against which subject.
38
+ *
39
+ * @param options - Policy definitions and optional denial mapper.
40
+ * @returns A policy tester with a gate plus matrix helpers.
41
+ */
33
42
  export function createPolicyTester(options) {
34
43
  const gate = createGate(options);
35
44
  return {
@@ -38,6 +47,13 @@ export function createPolicyTester(options) {
38
47
  assertMatrix: (cases) => assertPolicyMatrix(gate, cases),
39
48
  };
40
49
  }
50
+ /**
51
+ * Evaluate a table of policy cases without throwing.
52
+ *
53
+ * @param gate - Gate under test.
54
+ * @param cases - Matrix cases to evaluate.
55
+ * @returns Structured result for each case.
56
+ */
41
57
  export async function evaluatePolicyMatrix(gate, cases) {
42
58
  const results = [];
43
59
  for (const matrixCase of cases) {
@@ -54,6 +70,13 @@ export async function evaluatePolicyMatrix(gate, cases) {
54
70
  }
55
71
  return results;
56
72
  }
73
+ /**
74
+ * Assert that all policy matrix cases pass.
75
+ *
76
+ * @param gate - Gate under test.
77
+ * @param cases - Matrix cases to evaluate.
78
+ * @throws Combined error listing every failed case.
79
+ */
57
80
  export async function assertPolicyMatrix(gate, cases) {
58
81
  const results = await evaluatePolicyMatrix(gate, cases);
59
82
  const failures = results.filter((result) => !result.passed);
@@ -1 +1 @@
1
- {"version":3,"file":"testing.js","sourceRoot":"","sources":["../../src/ports/testing.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,UAAU,GAOX,MAAM,UAAU,CAAC;AAUlB;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,uBAAuB;IAIrC,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,MAAM,GAAG,GAAiB;QACxB,OAAO,CAAC,KAAK,EAAE,OAAO;YACpB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,SAAS;YACP,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;KACF,CAAC;IAEF,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AACzB,CAAC;AAwDD,MAAM,UAAU,kBAAkB,CAGhC,OAGC;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IAEjC,OAAO;QACL,IAAI;QACJ,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC;QAC5D,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC;KACzD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAIxC,IAAmC,EACnC,KAAuD;IAEvD,MAAM,OAAO,GAA8C,EAAE,CAAC;IAE9D,KAAK,MAAM,UAAU,IAAI,KAAK,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,sBAAsB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAE5D,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,UAAU;YAChB,QAAQ;YACR,MAAM;YACN,OAAO,EAAE,MAAM;gBACb,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,0BAA0B,CAAC,UAAU,EAAE,QAAQ,CAAC;SACrD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAItC,IAAmC,EACnC,KAAuD;IAEvD,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAE5D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAElC,MAAM,IAAI,KAAK,CACb;QACE,4BAA4B,QAAQ,CAAC,MAAM,QACzC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAC/B,GAAG;QACH,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC;KACrD,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,uBAAuB,CAIpC,IAAmC,EACnC,UAAiD;IAEjD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAuC,CAAC;IAE7D,IAAI,SAAS,IAAI,UAAU,EAAE,CAAC;QAC5B,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,sBAAsB,CAC7B,UAA6C,EAC7C,QAAsB;IAEtB,IAAI,UAAU,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IACvE,IAAI,UAAU,CAAC,QAAQ,KAAK,MAAM,IAAI,QAAQ,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IACrE,IAAI,UAAU,CAAC,MAAM,IAAI,QAAQ,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IACxD,IAAI,UAAU,CAAC,IAAI,IAAI,QAAQ,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IACtD,IAAI,QAAQ,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAElC,OAAO,CACL,CAAC,CAAC,UAAU,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,CAAC;QAC7D,CAAC,CAAC,UAAU,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,CAAC,CACxD,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CACjC,UAA6C,EAC7C,QAAsB;IAEtB,MAAM,QAAQ,GAAa,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,UAAU,CAAC,MAAM;QAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IACtE,IAAI,UAAU,CAAC,IAAI;QAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC;IAEhE,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO;QAC7B,CAAC,CAAC,OAAO;QACT,CAAC,CAAC;YACE,MAAM;YACN,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,SAAS;YAC3D,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS;SACtD;aACE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,IAAI,CAAC,CAAC;IAElB,OAAO,GAAG,UAAU,CAAC,IAAI,cAAc,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,MAAM,GAAG,CAAC;AACpF,CAAC"}
1
+ {"version":3,"file":"testing.js","sourceRoot":"","sources":["../../src/ports/testing.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,11 @@
1
1
  import type { DomainEventDef, EventBusPort, InferEventPayload } from "./events";
2
2
  type MaybePromise<T> = T | Promise<T>;
3
+ /**
4
+ * Work function executed inside a Unit of Work.
5
+ *
6
+ * `tx` contains transaction-scoped app ports, usually repositories plus
7
+ * side-effect recorders such as `events`, `jobs`, or `audit`.
8
+ */
3
9
  export type UnitOfWorkCallback<TxPorts, Result> = (tx: TxPorts) => MaybePromise<Result>;
4
10
  /**
5
11
  * A transaction boundary for application workflows.
@@ -9,8 +15,16 @@ export type UnitOfWorkCallback<TxPorts, Result> = (tx: TxPorts) => MaybePromise<
9
15
  * `createNoopUnitOfWork`.
10
16
  */
11
17
  export interface UnitOfWorkPort<TxPorts> {
18
+ /**
19
+ * Run application work with transaction-scoped ports.
20
+ *
21
+ * Durable implementations should commit only if this callback resolves.
22
+ */
12
23
  transaction<Result>(work: UnitOfWorkCallback<TxPorts, Result>): Promise<Result>;
13
24
  }
25
+ /**
26
+ * Hooks for `createNoopUnitOfWork(...)`.
27
+ */
14
28
  export interface NoopUnitOfWorkOptions<TxPorts> {
15
29
  /**
16
30
  * Runs after the callback completes successfully.
@@ -26,17 +40,51 @@ export interface NoopUnitOfWorkOptions<TxPorts> {
26
40
  */
27
41
  afterRollback?: (error: unknown, tx: TxPorts) => MaybePromise<void>;
28
42
  }
43
+ /**
44
+ * Domain event captured by a buffered event recorder.
45
+ */
29
46
  export interface RecordedDomainEvent {
47
+ /**
48
+ * Event definition used to validate the payload before publishing.
49
+ */
30
50
  event: DomainEventDef;
51
+ /**
52
+ * Stable event name.
53
+ */
31
54
  eventName: string;
55
+ /**
56
+ * Unparsed payload recorded during the transaction.
57
+ */
32
58
  payload: unknown;
33
59
  }
60
+ /**
61
+ * Transaction-scoped port used to record domain events.
62
+ *
63
+ * Use cases record events here during the Unit of Work. The adapter decides
64
+ * whether to publish after commit, enqueue through an outbox, or buffer for a
65
+ * test assertion.
66
+ */
34
67
  export interface DomainEventRecorderPort {
35
- record<E extends DomainEventDef>(event: E, payload: InferEventPayload<E>): void;
68
+ /**
69
+ * Record a domain event payload.
70
+ */
71
+ record<E extends DomainEventDef>(event: E, payload: InferEventPayload<E>): Promise<void> | void;
36
72
  }
73
+ /**
74
+ * In-memory event recorder that can be inspected, cleared, or flushed.
75
+ */
37
76
  export interface BufferedDomainEventRecorder extends DomainEventRecorderPort {
77
+ /**
78
+ * Return recorded events without clearing them.
79
+ */
38
80
  entries(): readonly RecordedDomainEvent[];
81
+ /**
82
+ * Remove all recorded events.
83
+ */
39
84
  clear(): void;
85
+ /**
86
+ * Validate and publish all recorded events to an event bus in FIFO order.
87
+ */
40
88
  flush(eventBus: EventBusPort): Promise<void>;
41
89
  }
42
90
  /**
@@ -45,11 +93,20 @@ export interface BufferedDomainEventRecorder extends DomainEventRecorderPort {
45
93
  *
46
94
  * This helper does not create database transactions. It gives applications the
47
95
  * same UOW shape everywhere and runs commit/rollback hooks around the callback.
96
+ *
97
+ * @param txPortsOrFactory - Transaction-scoped ports or a factory that creates
98
+ * them per transaction call.
99
+ * @param options - Optional commit and rollback hooks.
100
+ * @returns A Unit of Work port with no durable transaction semantics.
48
101
  */
49
102
  export declare function createNoopUnitOfWork<TxPorts>(txPortsOrFactory: TxPorts | (() => TxPorts), options?: NoopUnitOfWorkOptions<TxPorts>): UnitOfWorkPort<TxPorts>;
50
103
  /**
51
- * Buffer domain events during a transaction and publish them only after the
52
- * owning Unit of Work commits.
104
+ * Create a recorder that buffers domain events until the caller flushes them.
105
+ *
106
+ * Unit of Work adapters commonly flush this recorder from an `afterCommit`
107
+ * hook so events are not published when the work rolls back.
108
+ *
109
+ * @returns A buffered domain event recorder for tests or Unit of Work adapters.
53
110
  */
54
111
  export declare function createDomainEventRecorder(): BufferedDomainEventRecorder;
55
112
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"unit-of-work.d.ts","sourceRoot":"","sources":["../../src/ports/unit-of-work.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAEhF,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAEtC,MAAM,MAAM,kBAAkB,CAAC,OAAO,EAAE,MAAM,IAAI,CAChD,EAAE,EAAE,OAAO,KACR,YAAY,CAAC,MAAM,CAAC,CAAC;AAE1B;;;;;;GAMG;AACH,MAAM,WAAW,cAAc,CAAC,OAAO;IACrC,WAAW,CAAC,MAAM,EAChB,IAAI,EAAE,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,GACxC,OAAO,CAAC,MAAM,CAAC,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB,CAAC,OAAO;IAC5C;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;IAElD;;;;;OAKG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;CACrE;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,cAAc,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,CAAC,SAAS,cAAc,EAC7B,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAC5B,IAAI,CAAC;CACT;AAED,MAAM,WAAW,2BAA4B,SAAQ,uBAAuB;IAC1E,OAAO,IAAI,SAAS,mBAAmB,EAAE,CAAC;IAC1C,KAAK,IAAI,IAAI,CAAC;IACd,KAAK,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAC1C,gBAAgB,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,EAC3C,OAAO,GAAE,qBAAqB,CAAC,OAAO,CAAM,GAC3C,cAAc,CAAC,OAAO,CAAC,CA8BzB;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,2BAA2B,CA6BvE"}
1
+ {"version":3,"file":"unit-of-work.d.ts","sourceRoot":"","sources":["../../src/ports/unit-of-work.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAEhF,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,CAAC,OAAO,EAAE,MAAM,IAAI,CAChD,EAAE,EAAE,OAAO,KACR,YAAY,CAAC,MAAM,CAAC,CAAC;AAE1B;;;;;;GAMG;AACH,MAAM,WAAW,cAAc,CAAC,OAAO;IACrC;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAChB,IAAI,EAAE,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,GACxC,OAAO,CAAC,MAAM,CAAC,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB,CAAC,OAAO;IAC5C;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;IAElD;;;;;OAKG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;CACrE;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,KAAK,EAAE,cAAc,CAAC;IACtB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,MAAM,CAAC,CAAC,SAAS,cAAc,EAC7B,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,2BAA4B,SAAQ,uBAAuB;IAC1E;;OAEG;IACH,OAAO,IAAI,SAAS,mBAAmB,EAAE,CAAC;IAC1C;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;IACd;;OAEG;IACH,KAAK,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAC1C,gBAAgB,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,EAC3C,OAAO,GAAE,qBAAqB,CAAC,OAAO,CAAM,GAC3C,cAAc,CAAC,OAAO,CAAC,CA8BzB;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,IAAI,2BAA2B,CA6BvE"}
@@ -5,6 +5,11 @@ import { parseEventPayload } from "../events";
5
5
  *
6
6
  * This helper does not create database transactions. It gives applications the
7
7
  * same UOW shape everywhere and runs commit/rollback hooks around the callback.
8
+ *
9
+ * @param txPortsOrFactory - Transaction-scoped ports or a factory that creates
10
+ * them per transaction call.
11
+ * @param options - Optional commit and rollback hooks.
12
+ * @returns A Unit of Work port with no durable transaction semantics.
8
13
  */
9
14
  export function createNoopUnitOfWork(txPortsOrFactory, options = {}) {
10
15
  const createTxPorts = typeof txPortsOrFactory === "function"
@@ -32,8 +37,12 @@ export function createNoopUnitOfWork(txPortsOrFactory, options = {}) {
32
37
  };
33
38
  }
34
39
  /**
35
- * Buffer domain events during a transaction and publish them only after the
36
- * owning Unit of Work commits.
40
+ * Create a recorder that buffers domain events until the caller flushes them.
41
+ *
42
+ * Unit of Work adapters commonly flush this recorder from an `afterCommit`
43
+ * hook so events are not published when the work rolls back.
44
+ *
45
+ * @returns A buffered domain event recorder for tests or Unit of Work adapters.
37
46
  */
38
47
  export function createDomainEventRecorder() {
39
48
  const records = [];
@@ -1 +1 @@
1
- {"version":3,"file":"unit-of-work.js","sourceRoot":"","sources":["../../src/ports/unit-of-work.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AA0D9C;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,gBAA2C,EAC3C,UAA0C,EAAE;IAE5C,MAAM,aAAa,GACjB,OAAO,gBAAgB,KAAK,UAAU;QACpC,CAAC,CAAE,gBAAkC;QACrC,CAAC,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC;IAE7B,OAAO;QACL,KAAK,CAAC,WAAW,CACf,IAAyC;YAEzC,MAAM,EAAE,GAAG,aAAa,EAAE,CAAC;YAE3B,IAAI,MAAc,CAAC;YAEnB,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC;oBACH,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC3C,CAAC;gBAAC,MAAM,CAAC;oBACP,gEAAgE;gBAClE,CAAC;gBAED,MAAM,KAAK,CAAC;YACd,CAAC;YAED,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;YAChC,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB;IACvC,MAAM,OAAO,GAA0B,EAAE,CAAC;IAE1C,OAAO;QACL,MAAM,CAAC,KAAK,EAAE,OAAO;YACnB,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK;gBACL,SAAS,EAAE,KAAK,CAAC,IAAI;gBACrB,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,KAAK;YACH,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACrB,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,QAAQ;YAClB,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC1B,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;gBACtE,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAC9C,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"unit-of-work.js","sourceRoot":"","sources":["../../src/ports/unit-of-work.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AA0G9C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oBAAoB,CAClC,gBAA2C,EAC3C,UAA0C,EAAE;IAE5C,MAAM,aAAa,GACjB,OAAO,gBAAgB,KAAK,UAAU;QACpC,CAAC,CAAE,gBAAkC;QACrC,CAAC,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC;IAE7B,OAAO;QACL,KAAK,CAAC,WAAW,CACf,IAAyC;YAEzC,MAAM,EAAE,GAAG,aAAa,EAAE,CAAC;YAE3B,IAAI,MAAc,CAAC;YAEnB,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC;oBACH,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC3C,CAAC;gBAAC,MAAM,CAAC;oBACP,gEAAgE;gBAClE,CAAC;gBAED,MAAM,KAAK,CAAC;YACd,CAAC;YAED,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;YAChC,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB;IACvC,MAAM,OAAO,GAA0B,EAAE,CAAC;IAE1C,OAAO;QACL,MAAM,CAAC,KAAK,EAAE,OAAO;YACnB,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK;gBACL,SAAS,EAAE,KAAK,CAAC,IAAI;gBACrB,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,KAAK;YACH,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACrB,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,QAAQ;YAClB,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC1B,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;gBACtE,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAC9C,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}