@beignet/core 0.0.1

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 (331) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/README.md +288 -0
  3. package/dist/application/index.d.ts +260 -0
  4. package/dist/application/index.d.ts.map +1 -0
  5. package/dist/application/index.js +324 -0
  6. package/dist/application/index.js.map +1 -0
  7. package/dist/client/client.d.ts +241 -0
  8. package/dist/client/client.d.ts.map +1 -0
  9. package/dist/client/client.js +531 -0
  10. package/dist/client/client.js.map +1 -0
  11. package/dist/client/index.d.ts +10 -0
  12. package/dist/client/index.d.ts.map +1 -0
  13. package/dist/client/index.js +8 -0
  14. package/dist/client/index.js.map +1 -0
  15. package/dist/client/types.d.ts +139 -0
  16. package/dist/client/types.d.ts.map +1 -0
  17. package/dist/client/types.js +2 -0
  18. package/dist/client/types.js.map +1 -0
  19. package/dist/config/index.d.ts +122 -0
  20. package/dist/config/index.d.ts.map +1 -0
  21. package/dist/config/index.js +216 -0
  22. package/dist/config/index.js.map +1 -0
  23. package/dist/contracts/contract-builder.d.ts +121 -0
  24. package/dist/contracts/contract-builder.d.ts.map +1 -0
  25. package/dist/contracts/contract-builder.js +346 -0
  26. package/dist/contracts/contract-builder.js.map +1 -0
  27. package/dist/contracts/contract-group.d.ts +106 -0
  28. package/dist/contracts/contract-group.d.ts.map +1 -0
  29. package/dist/contracts/contract-group.js +240 -0
  30. package/dist/contracts/contract-group.js.map +1 -0
  31. package/dist/contracts/contract-like.d.ts +21 -0
  32. package/dist/contracts/contract-like.d.ts.map +1 -0
  33. package/dist/contracts/contract-like.js +9 -0
  34. package/dist/contracts/contract-like.js.map +1 -0
  35. package/dist/contracts/index.d.ts +15 -0
  36. package/dist/contracts/index.d.ts.map +1 -0
  37. package/dist/contracts/index.js +11 -0
  38. package/dist/contracts/index.js.map +1 -0
  39. package/dist/contracts/openapi-meta.d.ts +23 -0
  40. package/dist/contracts/openapi-meta.d.ts.map +1 -0
  41. package/dist/contracts/openapi-meta.js +2 -0
  42. package/dist/contracts/openapi-meta.js.map +1 -0
  43. package/dist/contracts/path-template.d.ts +17 -0
  44. package/dist/contracts/path-template.d.ts.map +1 -0
  45. package/dist/contracts/path-template.js +50 -0
  46. package/dist/contracts/path-template.js.map +1 -0
  47. package/dist/contracts/rate-limit.d.ts +50 -0
  48. package/dist/contracts/rate-limit.d.ts.map +1 -0
  49. package/dist/contracts/rate-limit.js +2 -0
  50. package/dist/contracts/rate-limit.js.map +1 -0
  51. package/dist/contracts/types.d.ts +97 -0
  52. package/dist/contracts/types.d.ts.map +1 -0
  53. package/dist/contracts/types.js +54 -0
  54. package/dist/contracts/types.js.map +1 -0
  55. package/dist/contracts/utils.d.ts +3 -0
  56. package/dist/contracts/utils.d.ts.map +1 -0
  57. package/dist/contracts/utils.js +44 -0
  58. package/dist/contracts/utils.js.map +1 -0
  59. package/dist/domain/entity.d.ts +87 -0
  60. package/dist/domain/entity.d.ts.map +1 -0
  61. package/dist/domain/entity.js +155 -0
  62. package/dist/domain/entity.js.map +1 -0
  63. package/dist/domain/events.d.ts +41 -0
  64. package/dist/domain/events.d.ts.map +1 -0
  65. package/dist/domain/events.js +21 -0
  66. package/dist/domain/events.js.map +1 -0
  67. package/dist/domain/index.d.ts +14 -0
  68. package/dist/domain/index.d.ts.map +1 -0
  69. package/dist/domain/index.js +14 -0
  70. package/dist/domain/index.js.map +1 -0
  71. package/dist/domain/value-object.d.ts +60 -0
  72. package/dist/domain/value-object.d.ts.map +1 -0
  73. package/dist/domain/value-object.js +87 -0
  74. package/dist/domain/value-object.js.map +1 -0
  75. package/dist/errors/catalog.d.ts +71 -0
  76. package/dist/errors/catalog.d.ts.map +1 -0
  77. package/dist/errors/catalog.js +71 -0
  78. package/dist/errors/catalog.js.map +1 -0
  79. package/dist/errors/http.d.ts +77 -0
  80. package/dist/errors/http.d.ts.map +1 -0
  81. package/dist/errors/http.js +74 -0
  82. package/dist/errors/http.js.map +1 -0
  83. package/dist/errors/index.d.ts +10 -0
  84. package/dist/errors/index.d.ts.map +1 -0
  85. package/dist/errors/index.js +14 -0
  86. package/dist/errors/index.js.map +1 -0
  87. package/dist/errors/response.d.ts +26 -0
  88. package/dist/errors/response.d.ts.map +1 -0
  89. package/dist/errors/response.js +34 -0
  90. package/dist/errors/response.js.map +1 -0
  91. package/dist/errors/validation.d.ts +18 -0
  92. package/dist/errors/validation.d.ts.map +1 -0
  93. package/dist/errors/validation.js +21 -0
  94. package/dist/errors/validation.js.map +1 -0
  95. package/dist/events/index.d.ts +58 -0
  96. package/dist/events/index.d.ts.map +1 -0
  97. package/dist/events/index.js +102 -0
  98. package/dist/events/index.js.map +1 -0
  99. package/dist/jobs/index.d.ts +56 -0
  100. package/dist/jobs/index.d.ts.map +1 -0
  101. package/dist/jobs/index.js +89 -0
  102. package/dist/jobs/index.js.map +1 -0
  103. package/dist/mail/index.d.ts +75 -0
  104. package/dist/mail/index.d.ts.map +1 -0
  105. package/dist/mail/index.js +84 -0
  106. package/dist/mail/index.js.map +1 -0
  107. package/dist/openapi/index.d.ts +207 -0
  108. package/dist/openapi/index.d.ts.map +1 -0
  109. package/dist/openapi/index.js +449 -0
  110. package/dist/openapi/index.js.map +1 -0
  111. package/dist/openapi/schema-introspector.d.ts +38 -0
  112. package/dist/openapi/schema-introspector.d.ts.map +1 -0
  113. package/dist/openapi/schema-introspector.js +67 -0
  114. package/dist/openapi/schema-introspector.js.map +1 -0
  115. package/dist/ports/audit.d.ts +58 -0
  116. package/dist/ports/audit.d.ts.map +1 -0
  117. package/dist/ports/audit.js +74 -0
  118. package/dist/ports/audit.js.map +1 -0
  119. package/dist/ports/auth.d.ts +23 -0
  120. package/dist/ports/auth.d.ts.map +1 -0
  121. package/dist/ports/auth.js +31 -0
  122. package/dist/ports/auth.js.map +1 -0
  123. package/dist/ports/builder.d.ts +61 -0
  124. package/dist/ports/builder.d.ts.map +1 -0
  125. package/dist/ports/builder.js +48 -0
  126. package/dist/ports/builder.js.map +1 -0
  127. package/dist/ports/cache.d.ts +15 -0
  128. package/dist/ports/cache.d.ts.map +1 -0
  129. package/dist/ports/cache.js +57 -0
  130. package/dist/ports/cache.js.map +1 -0
  131. package/dist/ports/clock.d.ts +10 -0
  132. package/dist/ports/clock.d.ts.map +1 -0
  133. package/dist/ports/clock.js +21 -0
  134. package/dist/ports/clock.js.map +1 -0
  135. package/dist/ports/events.d.ts +71 -0
  136. package/dist/ports/events.d.ts.map +1 -0
  137. package/dist/ports/events.js +2 -0
  138. package/dist/ports/events.js.map +1 -0
  139. package/dist/ports/id-generator.d.ts +12 -0
  140. package/dist/ports/id-generator.d.ts.map +1 -0
  141. package/dist/ports/id-generator.js +22 -0
  142. package/dist/ports/id-generator.js.map +1 -0
  143. package/dist/ports/index.d.ts +98 -0
  144. package/dist/ports/index.d.ts.map +1 -0
  145. package/dist/ports/index.js +67 -0
  146. package/dist/ports/index.js.map +1 -0
  147. package/dist/ports/logger.d.ts +22 -0
  148. package/dist/ports/logger.d.ts.map +1 -0
  149. package/dist/ports/logger.js +34 -0
  150. package/dist/ports/logger.js.map +1 -0
  151. package/dist/ports/mailer.d.ts +6 -0
  152. package/dist/ports/mailer.d.ts.map +1 -0
  153. package/dist/ports/mailer.js +2 -0
  154. package/dist/ports/mailer.js.map +1 -0
  155. package/dist/ports/policy.d.ts +53 -0
  156. package/dist/ports/policy.d.ts.map +1 -0
  157. package/dist/ports/policy.js +81 -0
  158. package/dist/ports/policy.js.map +1 -0
  159. package/dist/ports/rate-limit.d.ts +41 -0
  160. package/dist/ports/rate-limit.d.ts.map +1 -0
  161. package/dist/ports/rate-limit.js +37 -0
  162. package/dist/ports/rate-limit.js.map +1 -0
  163. package/dist/ports/redaction.d.ts +26 -0
  164. package/dist/ports/redaction.d.ts.map +1 -0
  165. package/dist/ports/redaction.js +126 -0
  166. package/dist/ports/redaction.js.map +1 -0
  167. package/dist/ports/schedules.d.ts +9 -0
  168. package/dist/ports/schedules.d.ts.map +1 -0
  169. package/dist/ports/schedules.js +2 -0
  170. package/dist/ports/schedules.js.map +1 -0
  171. package/dist/ports/storage.d.ts +47 -0
  172. package/dist/ports/storage.d.ts.map +1 -0
  173. package/dist/ports/storage.js +185 -0
  174. package/dist/ports/storage.js.map +1 -0
  175. package/dist/ports/testing.d.ts +73 -0
  176. package/dist/ports/testing.d.ts.map +1 -0
  177. package/dist/ports/testing.js +105 -0
  178. package/dist/ports/testing.js.map +1 -0
  179. package/dist/ports/unit-of-work.d.ts +56 -0
  180. package/dist/ports/unit-of-work.d.ts.map +1 -0
  181. package/dist/ports/unit-of-work.js +64 -0
  182. package/dist/ports/unit-of-work.js.map +1 -0
  183. package/dist/providers/index.d.ts +8 -0
  184. package/dist/providers/index.d.ts.map +1 -0
  185. package/dist/providers/index.js +8 -0
  186. package/dist/providers/index.js.map +1 -0
  187. package/dist/providers/instrumentation.d.ts +91 -0
  188. package/dist/providers/instrumentation.d.ts.map +1 -0
  189. package/dist/providers/instrumentation.js +93 -0
  190. package/dist/providers/instrumentation.js.map +1 -0
  191. package/dist/providers/provider.d.ts +146 -0
  192. package/dist/providers/provider.d.ts.map +1 -0
  193. package/dist/providers/provider.js +31 -0
  194. package/dist/providers/provider.js.map +1 -0
  195. package/dist/schedules/index.d.ts +105 -0
  196. package/dist/schedules/index.d.ts.map +1 -0
  197. package/dist/schedules/index.js +178 -0
  198. package/dist/schedules/index.js.map +1 -0
  199. package/dist/server/contract-like.d.ts +5 -0
  200. package/dist/server/contract-like.d.ts.map +1 -0
  201. package/dist/server/contract-like.js +5 -0
  202. package/dist/server/contract-like.js.map +1 -0
  203. package/dist/server/health.d.ts +41 -0
  204. package/dist/server/health.d.ts.map +1 -0
  205. package/dist/server/health.js +46 -0
  206. package/dist/server/health.js.map +1 -0
  207. package/dist/server/hooks/auth.d.ts +42 -0
  208. package/dist/server/hooks/auth.d.ts.map +1 -0
  209. package/dist/server/hooks/auth.js +61 -0
  210. package/dist/server/hooks/auth.js.map +1 -0
  211. package/dist/server/hooks/cors.d.ts +13 -0
  212. package/dist/server/hooks/cors.d.ts.map +1 -0
  213. package/dist/server/hooks/cors.js +70 -0
  214. package/dist/server/hooks/cors.js.map +1 -0
  215. package/dist/server/hooks/errors.d.ts +66 -0
  216. package/dist/server/hooks/errors.d.ts.map +1 -0
  217. package/dist/server/hooks/errors.js +83 -0
  218. package/dist/server/hooks/errors.js.map +1 -0
  219. package/dist/server/hooks/index.d.ts +12 -0
  220. package/dist/server/hooks/index.d.ts.map +1 -0
  221. package/dist/server/hooks/index.js +12 -0
  222. package/dist/server/hooks/index.js.map +1 -0
  223. package/dist/server/hooks/logging.d.ts +33 -0
  224. package/dist/server/hooks/logging.d.ts.map +1 -0
  225. package/dist/server/hooks/logging.js +90 -0
  226. package/dist/server/hooks/logging.js.map +1 -0
  227. package/dist/server/hooks/rate-limit.d.ts +29 -0
  228. package/dist/server/hooks/rate-limit.d.ts.map +1 -0
  229. package/dist/server/hooks/rate-limit.js +93 -0
  230. package/dist/server/hooks/rate-limit.js.map +1 -0
  231. package/dist/server/hooks/utils.d.ts +9 -0
  232. package/dist/server/hooks/utils.d.ts.map +1 -0
  233. package/dist/server/hooks/utils.js +16 -0
  234. package/dist/server/hooks/utils.js.map +1 -0
  235. package/dist/server/hooks.d.ts +2 -0
  236. package/dist/server/hooks.d.ts.map +1 -0
  237. package/dist/server/hooks.js +2 -0
  238. package/dist/server/hooks.js.map +1 -0
  239. package/dist/server/http.d.ts +124 -0
  240. package/dist/server/http.d.ts.map +1 -0
  241. package/dist/server/http.js +2 -0
  242. package/dist/server/http.js.map +1 -0
  243. package/dist/server/index.d.ts +19 -0
  244. package/dist/server/index.d.ts.map +1 -0
  245. package/dist/server/index.js +15 -0
  246. package/dist/server/index.js.map +1 -0
  247. package/dist/server/openapi.d.ts +32 -0
  248. package/dist/server/openapi.d.ts.map +1 -0
  249. package/dist/server/openapi.js +43 -0
  250. package/dist/server/openapi.js.map +1 -0
  251. package/dist/server/providers/index.d.ts +4 -0
  252. package/dist/server/providers/index.d.ts.map +1 -0
  253. package/dist/server/providers/index.js +4 -0
  254. package/dist/server/providers/index.js.map +1 -0
  255. package/dist/server/providers/loadProviderConfig.d.ts +7 -0
  256. package/dist/server/providers/loadProviderConfig.d.ts.map +1 -0
  257. package/dist/server/providers/loadProviderConfig.js +42 -0
  258. package/dist/server/providers/loadProviderConfig.js.map +1 -0
  259. package/dist/server/server.d.ts +86 -0
  260. package/dist/server/server.d.ts.map +1 -0
  261. package/dist/server/server.js +1031 -0
  262. package/dist/server/server.js.map +1 -0
  263. package/dist/server/types.d.ts +3 -0
  264. package/dist/server/types.d.ts.map +1 -0
  265. package/dist/server/types.js +3 -0
  266. package/dist/server/types.js.map +1 -0
  267. package/package.json +129 -0
  268. package/src/application/index.ts +747 -0
  269. package/src/client/client.ts +1105 -0
  270. package/src/client/index.ts +45 -0
  271. package/src/client/types.ts +305 -0
  272. package/src/config/index.ts +497 -0
  273. package/src/contracts/contract-builder.ts +583 -0
  274. package/src/contracts/contract-group.ts +502 -0
  275. package/src/contracts/contract-like.ts +29 -0
  276. package/src/contracts/index.ts +53 -0
  277. package/src/contracts/openapi-meta.ts +22 -0
  278. package/src/contracts/path-template.ts +91 -0
  279. package/src/contracts/rate-limit.ts +50 -0
  280. package/src/contracts/types.ts +207 -0
  281. package/src/contracts/utils.ts +56 -0
  282. package/src/domain/entity.ts +256 -0
  283. package/src/domain/events.ts +52 -0
  284. package/src/domain/index.ts +18 -0
  285. package/src/domain/value-object.ts +135 -0
  286. package/src/errors/catalog.ts +149 -0
  287. package/src/errors/http.ts +80 -0
  288. package/src/errors/index.ts +28 -0
  289. package/src/errors/response.ts +54 -0
  290. package/src/errors/validation.ts +35 -0
  291. package/src/events/index.ts +246 -0
  292. package/src/jobs/index.ts +211 -0
  293. package/src/mail/index.ts +177 -0
  294. package/src/openapi/index.ts +865 -0
  295. package/src/openapi/schema-introspector.ts +107 -0
  296. package/src/ports/audit.ts +176 -0
  297. package/src/ports/auth.ts +76 -0
  298. package/src/ports/builder.ts +97 -0
  299. package/src/ports/cache.ts +94 -0
  300. package/src/ports/clock.ts +34 -0
  301. package/src/ports/events.ts +100 -0
  302. package/src/ports/id-generator.ts +36 -0
  303. package/src/ports/index.ts +221 -0
  304. package/src/ports/logger.ts +67 -0
  305. package/src/ports/policy.ts +242 -0
  306. package/src/ports/rate-limit.ts +91 -0
  307. package/src/ports/redaction.ts +199 -0
  308. package/src/ports/storage.ts +282 -0
  309. package/src/ports/testing.ts +234 -0
  310. package/src/ports/unit-of-work.ts +134 -0
  311. package/src/providers/index.ts +40 -0
  312. package/src/providers/instrumentation.ts +248 -0
  313. package/src/providers/provider.ts +191 -0
  314. package/src/schedules/index.ts +442 -0
  315. package/src/server/contract-like.ts +8 -0
  316. package/src/server/health.ts +82 -0
  317. package/src/server/hooks/auth.ts +147 -0
  318. package/src/server/hooks/cors.ts +87 -0
  319. package/src/server/hooks/errors.ts +126 -0
  320. package/src/server/hooks/index.ts +43 -0
  321. package/src/server/hooks/logging.ts +121 -0
  322. package/src/server/hooks/rate-limit.ts +171 -0
  323. package/src/server/hooks/utils.ts +16 -0
  324. package/src/server/hooks.ts +1 -0
  325. package/src/server/http.ts +189 -0
  326. package/src/server/index.ts +35 -0
  327. package/src/server/openapi.ts +72 -0
  328. package/src/server/providers/index.ts +3 -0
  329. package/src/server/providers/loadProviderConfig.ts +72 -0
  330. package/src/server/server.ts +1521 -0
  331. package/src/server/types.ts +2 -0
@@ -0,0 +1,324 @@
1
+ /**
2
+ * Error thrown when a use case input or output fails schema validation.
3
+ */
4
+ export class UseCaseValidationError extends Error {
5
+ name = "UseCaseValidationError";
6
+ useCaseName;
7
+ phase;
8
+ issues;
9
+ constructor(args) {
10
+ super(`Use case "${args.useCaseName}" ${args.phase} validation failed: ${formatIssues(args.issues)}`);
11
+ this.useCaseName = args.useCaseName;
12
+ this.phase = args.phase;
13
+ this.issues = args.issues;
14
+ }
15
+ }
16
+ /**
17
+ * Error thrown when a use case tries to emit an event it did not declare with
18
+ * `.emits(...)`.
19
+ */
20
+ export class UseCaseEventDeclarationError extends Error {
21
+ name = "UseCaseEventDeclarationError";
22
+ useCaseName;
23
+ eventName;
24
+ declaredEventNames;
25
+ constructor(args) {
26
+ const declared = args.declaredEventNames.length > 0
27
+ ? args.declaredEventNames.map((name) => `"${name}"`).join(", ")
28
+ : "none";
29
+ super(`Use case "${args.useCaseName}" cannot emit undeclared event "${args.eventName}". Declare it with .emits([...]). Declared events: ${declared}.`);
30
+ this.useCaseName = args.useCaseName;
31
+ this.eventName = args.eventName;
32
+ this.declaredEventNames = args.declaredEventNames;
33
+ }
34
+ }
35
+ function formatPath(path) {
36
+ if (!path?.length)
37
+ return "";
38
+ return path
39
+ .map((segment) => typeof segment === "object" && segment !== null && "key" in segment
40
+ ? String(segment.key)
41
+ : String(segment))
42
+ .join(".");
43
+ }
44
+ function formatIssues(issues) {
45
+ return issues
46
+ .map((issue) => {
47
+ const path = formatPath(issue.path);
48
+ return path ? `${path}: ${issue.message}` : issue.message;
49
+ })
50
+ .join("; ");
51
+ }
52
+ /**
53
+ * Error thrown when a use-case event helper fails to validate an event payload
54
+ * before recording or publishing it.
55
+ */
56
+ export class UseCaseEventValidationError extends Error {
57
+ name = "UseCaseEventValidationError";
58
+ useCaseName;
59
+ eventName;
60
+ issues;
61
+ constructor(args) {
62
+ super(`Use case "${args.useCaseName}" event "${args.eventName}" payload validation failed: ${formatIssues(args.issues)}`);
63
+ this.useCaseName = args.useCaseName;
64
+ this.eventName = args.eventName;
65
+ this.issues = args.issues;
66
+ }
67
+ }
68
+ async function parseSchema(schema, value, useCaseName, phase) {
69
+ const result = await schema["~standard"].validate(value);
70
+ if (result.issues?.length) {
71
+ throw new UseCaseValidationError({
72
+ useCaseName,
73
+ phase,
74
+ issues: result.issues,
75
+ });
76
+ }
77
+ if ("value" in result) {
78
+ return result.value;
79
+ }
80
+ throw new Error("Invalid Standard Schema result: missing value");
81
+ }
82
+ async function parseEventPayload(event, payload, useCaseName) {
83
+ const result = await event.payload["~standard"].validate(payload);
84
+ if (result.issues?.length) {
85
+ throw new UseCaseEventValidationError({
86
+ useCaseName,
87
+ eventName: event.name,
88
+ issues: result.issues,
89
+ });
90
+ }
91
+ if ("value" in result) {
92
+ return result.value;
93
+ }
94
+ throw new Error("Invalid Standard Schema result: missing value");
95
+ }
96
+ function createUseCaseEventHelpers(useCaseName, declared) {
97
+ const declaredEventNames = declared.map((event) => event.name);
98
+ const declaredEventByName = new Map();
99
+ for (const event of declared) {
100
+ if (declaredEventByName.has(event.name)) {
101
+ throw new Error(`Use case "${useCaseName}" declares duplicate event "${event.name}". Event names must be unique within .emits([...]).`);
102
+ }
103
+ declaredEventByName.set(event.name, event);
104
+ }
105
+ function resolveDeclared(event) {
106
+ const declaredEvent = declaredEventByName.get(event.name);
107
+ if (declaredEvent)
108
+ return declaredEvent;
109
+ throw new UseCaseEventDeclarationError({
110
+ useCaseName,
111
+ eventName: event.name,
112
+ declaredEventNames,
113
+ });
114
+ }
115
+ function assertDeclared(event) {
116
+ resolveDeclared(event);
117
+ }
118
+ return {
119
+ declared,
120
+ isDeclared(event) {
121
+ return declaredEventByName.has(event.name);
122
+ },
123
+ assertDeclared,
124
+ async record(recorder, event, payload) {
125
+ const declaredEvent = resolveDeclared(event);
126
+ const parsed = await parseEventPayload(declaredEvent, payload, useCaseName);
127
+ recorder.record(declaredEvent, parsed);
128
+ },
129
+ async publish(eventBus, event, payload) {
130
+ const declaredEvent = resolveDeclared(event);
131
+ const parsed = await parseEventPayload(declaredEvent, payload, useCaseName);
132
+ await eventBus.publish(declaredEvent, parsed);
133
+ },
134
+ };
135
+ }
136
+ function normalizeValidationOptions(validate) {
137
+ if (validate === false) {
138
+ return { input: false, output: false };
139
+ }
140
+ if (typeof validate === "object" && validate !== null) {
141
+ return {
142
+ input: validate.input ?? true,
143
+ output: validate.output ?? true,
144
+ };
145
+ }
146
+ return { input: true, output: true };
147
+ }
148
+ /**
149
+ * Fluent builder for creating use cases
150
+ */
151
+ class UseCaseBuilder {
152
+ config;
153
+ onRun;
154
+ validation;
155
+ constructor(config, onRun, validation = {
156
+ input: true,
157
+ output: true,
158
+ }) {
159
+ this.config = config;
160
+ this.onRun = onRun;
161
+ this.validation = validation;
162
+ }
163
+ /**
164
+ * Define the input schema for this use case
165
+ */
166
+ input(schema) {
167
+ return new UseCaseBuilder({
168
+ ...this.config,
169
+ input: schema,
170
+ }, this.onRun, this.validation);
171
+ }
172
+ /**
173
+ * Define the output schema for this use case
174
+ */
175
+ output(schema) {
176
+ return new UseCaseBuilder({
177
+ ...this.config,
178
+ output: schema,
179
+ }, this.onRun, this.validation);
180
+ }
181
+ /**
182
+ * Define the domain events that this use case may emit.
183
+ */
184
+ emits(events) {
185
+ return new UseCaseBuilder({
186
+ ...this.config,
187
+ emits: events,
188
+ }, this.onRun, this.validation);
189
+ }
190
+ /**
191
+ * Define the run function and finalize the use case definition
192
+ */
193
+ run(fn) {
194
+ if (!this.config.input) {
195
+ throw new Error(`Use case "${this.config.name}" is missing input schema`);
196
+ }
197
+ if (!this.config.output) {
198
+ throw new Error(`Use case "${this.config.name}" is missing output schema`);
199
+ }
200
+ const useCaseName = this.config.name;
201
+ const useCaseKind = this.config.kind;
202
+ const onRun = this.onRun;
203
+ const inputSchema = this.config.input;
204
+ const outputSchema = this.config.output;
205
+ const validation = this.validation;
206
+ const eventHelpers = createUseCaseEventHelpers(useCaseName, this.config.emits);
207
+ const runFn = async (args) => {
208
+ const startedAt = Date.now();
209
+ onRun?.({
210
+ name: useCaseName,
211
+ kind: useCaseKind,
212
+ phase: "start",
213
+ ctx: args.ctx,
214
+ });
215
+ try {
216
+ const parsedInput = validation.input
217
+ ? await parseSchema(inputSchema, args.input, useCaseName, "input")
218
+ : args.input;
219
+ const rawResult = await fn({
220
+ ctx: args.ctx,
221
+ input: parsedInput,
222
+ events: eventHelpers,
223
+ });
224
+ const result = validation.output
225
+ ? await parseSchema(outputSchema, rawResult, useCaseName, "output")
226
+ : rawResult;
227
+ onRun?.({
228
+ name: useCaseName,
229
+ kind: useCaseKind,
230
+ phase: "end",
231
+ durationMs: Date.now() - startedAt,
232
+ ctx: args.ctx,
233
+ });
234
+ return result;
235
+ }
236
+ catch (err) {
237
+ onRun?.({
238
+ name: useCaseName,
239
+ kind: useCaseKind,
240
+ phase: "error",
241
+ durationMs: Date.now() - startedAt,
242
+ error: err,
243
+ ctx: args.ctx,
244
+ });
245
+ throw err;
246
+ }
247
+ };
248
+ // Type assertion required to satisfy the conditional return type.
249
+ // The runtime checks above ensure input/output schemas are set.
250
+ // The conditional types ensure type safety at compile time - run() returns
251
+ // UseCaseDef only when both InputSchema and OutputSchema are StandardSchemaV1.
252
+ return {
253
+ name: this.config.name,
254
+ kind: this.config.kind,
255
+ inputSchema: this.config.input,
256
+ outputSchema: this.config.output,
257
+ emits: this.config.emits,
258
+ run: runFn,
259
+ };
260
+ }
261
+ }
262
+ /**
263
+ * Create a small test harness for use cases.
264
+ *
265
+ * Pass a context factory when tests mutate ports or state. Pass a fixed context
266
+ * for simple, immutable tests.
267
+ */
268
+ export function createUseCaseTester(createContext) {
269
+ const ctx = async () => typeof createContext === "function"
270
+ ? await createContext()
271
+ : createContext;
272
+ return {
273
+ ctx,
274
+ async run(useCase, input, options) {
275
+ return useCase.run({
276
+ ctx: options?.ctx ?? (await ctx()),
277
+ input,
278
+ });
279
+ },
280
+ };
281
+ }
282
+ /**
283
+ * Create a use case builder with a specific context type.
284
+ *
285
+ * @example
286
+ * ```ts
287
+ * import { createUseCase } from "@beignet/core/application";
288
+ * import type { AppCtx } from "./ctx";
289
+ *
290
+ * export const useCase = createUseCase<AppCtx>();
291
+ *
292
+ * export const createTodo = useCase
293
+ * .command("todos.create")
294
+ * .input(CreateTodoInput)
295
+ * .output(CreateTodoOutput)
296
+ * .run(async ({ ctx, input }) => {
297
+ * const todo = await ctx.ports.db.todos.create(input);
298
+ * return { id: todo.id, title: todo.title };
299
+ * });
300
+ * ```
301
+ */
302
+ /** Empty emits array used as default */
303
+ const EMPTY_EMITS = [];
304
+ export function createUseCase(options) {
305
+ const onRun = options?.onRun;
306
+ const validation = normalizeValidationOptions(options?.validate);
307
+ return {
308
+ command(name) {
309
+ return new UseCaseBuilder({
310
+ name,
311
+ kind: "command",
312
+ emits: EMPTY_EMITS,
313
+ }, onRun, validation);
314
+ },
315
+ query(name) {
316
+ return new UseCaseBuilder({
317
+ name,
318
+ kind: "query",
319
+ emits: EMPTY_EMITS,
320
+ }, onRun, validation);
321
+ },
322
+ };
323
+ }
324
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/application/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,241 @@
1
+ import { type ContractLike, type HttpContractConfig, type ResolveContract, type StandardErrorResponseBody, type StandardSchemaV1 } from "../contracts";
2
+ import type { CallArgs, ClientConfig, EndpointResult, InferEndpointErrorResponse, InferEndpointErrorResponseByStatus, InferEndpointErrorStatus, InferSuccessResponse } from "./types";
3
+ export type ContractErrorSource = "http" | "client" | "network" | "contract";
4
+ export type ContractErrorWithSource<TError, TSource extends ContractErrorSource> = Extract<TError, {
5
+ readonly source: TSource;
6
+ }>;
7
+ export type ContractErrorWithStatus<TError, TStatus extends number> = Extract<TError, {
8
+ readonly status: TStatus;
9
+ }>;
10
+ export type ContractErrorWithCode<TError, TCode extends string> = Extract<TError, {
11
+ readonly code: TCode;
12
+ }>;
13
+ export type HttpContractError<TBody = unknown, TStatus extends number = number> = ContractError<TBody, TStatus, "http"> & {
14
+ readonly source: "http";
15
+ readonly status: TStatus;
16
+ readonly response: Response;
17
+ };
18
+ export type ClientContractError = ContractError<undefined, undefined, "client"> & {
19
+ readonly source: "client";
20
+ readonly status: undefined;
21
+ readonly response: undefined;
22
+ };
23
+ export type NetworkContractError = ContractError<undefined, undefined, "network"> & {
24
+ readonly source: "network";
25
+ readonly status: undefined;
26
+ readonly response: undefined;
27
+ };
28
+ export type ResponseContractError<TBody = unknown, TStatus extends number | undefined = number | undefined> = ContractError<TBody, TStatus, "contract"> & {
29
+ readonly source: "contract";
30
+ readonly status: TStatus;
31
+ };
32
+ export type AnyContractError = HttpContractError | ClientContractError | NetworkContractError | ResponseContractError;
33
+ type EndpointCatalogErrorDefinition<TContract extends HttpContractConfig> = TContract["metadata"] extends {
34
+ errors: infer TErrors;
35
+ } ? TErrors extends Record<string, {
36
+ code: string;
37
+ status: number;
38
+ message: string;
39
+ }> ? TErrors[keyof TErrors] : never : never;
40
+ type InferErrorDefinitionDetails<TDef> = TDef extends {
41
+ details: StandardSchemaV1;
42
+ } ? StandardSchemaV1.InferOutput<TDef["details"]> : unknown;
43
+ type StandardErrorBodyForDefinition<TDef extends {
44
+ code: string;
45
+ }> = StandardErrorResponseBody & {
46
+ code: TDef["code"];
47
+ details?: InferErrorDefinitionDetails<TDef>;
48
+ };
49
+ type EndpointCatalogContractError<TContract extends HttpContractConfig> = EndpointCatalogErrorDefinition<TContract> extends infer TDef ? TDef extends {
50
+ code: string;
51
+ status: number;
52
+ } ? HttpContractError<StandardErrorBodyForDefinition<TDef>, TDef["status"]> & {
53
+ readonly code: TDef["code"];
54
+ readonly details?: InferErrorDefinitionDetails<TDef>;
55
+ } : never : never;
56
+ export type InferEndpointErrorCode<TContract extends HttpContractConfig> = EndpointCatalogErrorDefinition<TContract>["code"];
57
+ export type InferEndpointContractError<TContract extends HttpContractConfig> = EndpointCatalogContractError<TContract> | {
58
+ [TStatus in InferEndpointErrorStatus<TContract>]: HttpContractError<InferEndpointErrorResponseByStatus<TContract, TStatus>, TStatus>;
59
+ }[InferEndpointErrorStatus<TContract>] | HttpContractError<InferEndpointErrorResponse<TContract>, number> | ClientContractError | NetworkContractError | ResponseContractError<InferEndpointErrorResponse<TContract>, number | undefined>;
60
+ /**
61
+ * HTTP client error with contract metadata
62
+ */
63
+ export declare class ContractError<TBody = unknown, TStatus extends number | undefined = number | undefined, TSource extends ContractErrorSource = ContractErrorSource> extends Error {
64
+ readonly source: TSource;
65
+ readonly status: TStatus;
66
+ readonly code?: string;
67
+ readonly body?: TBody;
68
+ readonly details?: unknown;
69
+ readonly response?: Response;
70
+ cause?: unknown;
71
+ constructor(args: {
72
+ source: TSource;
73
+ status?: TStatus;
74
+ code?: string;
75
+ message: string;
76
+ body?: TBody;
77
+ details?: unknown;
78
+ response?: Response;
79
+ cause?: unknown;
80
+ });
81
+ /**
82
+ * Check if this error has a specific HTTP status code
83
+ */
84
+ hasStatus<S extends number>(status: S): this is this & {
85
+ readonly status: S;
86
+ };
87
+ /**
88
+ * Check if this error came from a specific source.
89
+ */
90
+ hasSource<S extends ContractErrorSource>(source: S): this is this & {
91
+ readonly source: S;
92
+ };
93
+ /**
94
+ * Check if this error has a specific error code
95
+ */
96
+ hasCode<C extends string>(code: C): this is this & {
97
+ code: C;
98
+ };
99
+ }
100
+ /**
101
+ * Type guard to check if an unknown error is a ContractError,
102
+ * optionally narrowing by HTTP status code.
103
+ *
104
+ * @example
105
+ * ```ts
106
+ * try { await endpoint.call(...) }
107
+ * catch (err) {
108
+ * if (isContractError(err, 404)) {
109
+ * // err.status is 404
110
+ * }
111
+ * if (isContractError(err)) {
112
+ * // err is ContractError
113
+ * }
114
+ * }
115
+ * ```
116
+ */
117
+ export declare function isContractError(err: unknown): err is AnyContractError;
118
+ export declare function isContractError<S extends number>(err: unknown, status: S): err is HttpContractError<unknown, S>;
119
+ export declare function isContractError<TError extends AnyContractError, S extends number>(err: TError, criteria: {
120
+ status: S;
121
+ }): err is ContractErrorWithStatus<TError, S>;
122
+ export declare function isContractError<TError extends AnyContractError, S extends ContractErrorSource>(err: TError, criteria: {
123
+ source: S;
124
+ }): err is ContractErrorWithSource<TError, S>;
125
+ export declare function isContractError<TError extends ContractError, Status extends number, Source extends ContractErrorSource>(err: TError, criteria: {
126
+ status: Status;
127
+ source: Source;
128
+ }): err is ContractErrorWithSource<ContractErrorWithStatus<TError, Status>, Source>;
129
+ export declare function isContractError<TError extends ContractError, Code extends string>(err: TError, criteria: {
130
+ code: Code;
131
+ }): err is ContractErrorWithCode<TError, Code>;
132
+ export declare function isContractError<TError extends ContractError, Status extends number, Code extends string>(err: TError, criteria: {
133
+ status: Status;
134
+ code: Code;
135
+ }): err is ContractErrorWithCode<ContractErrorWithStatus<TError, Status>, Code>;
136
+ export declare function isContractError<TError extends ContractError, Source extends ContractErrorSource, Code extends string>(err: TError, criteria: {
137
+ source: Source;
138
+ code: Code;
139
+ }): err is ContractErrorWithCode<ContractErrorWithSource<TError, Source>, Code>;
140
+ export declare function isContractError<TError extends ContractError, Status extends number, Source extends ContractErrorSource, Code extends string>(err: TError, criteria: {
141
+ status: Status;
142
+ source: Source;
143
+ code: Code;
144
+ }): err is ContractErrorWithCode<ContractErrorWithSource<ContractErrorWithStatus<TError, Status>, Source>, Code>;
145
+ export declare function isContractError<S extends number>(err: unknown, criteria: {
146
+ status: S;
147
+ }): err is ContractError<unknown, S>;
148
+ export declare function isContractError<S extends ContractErrorSource>(err: unknown, criteria: {
149
+ source: S;
150
+ }): err is ContractError<unknown, number | undefined, S>;
151
+ export declare function isContractError<Status extends number, Source extends ContractErrorSource>(err: unknown, criteria: {
152
+ status: Status;
153
+ source: Source;
154
+ }): err is ContractErrorWithSource<HttpContractError<unknown, Status>, Source>;
155
+ export declare function isContractError<Code extends string>(err: unknown, criteria: {
156
+ code: Code;
157
+ }): err is ContractError<unknown, number | undefined> & {
158
+ readonly code: Code;
159
+ };
160
+ /**
161
+ * Endpoint wrapper for a specific contract
162
+ */
163
+ export declare class Endpoint<TContract extends HttpContractConfig, TProvidedHeaders extends string = never> {
164
+ private contract;
165
+ private config;
166
+ constructor(contract: TContract, config: ClientConfig<TProvidedHeaders>);
167
+ isError(err: unknown): err is InferEndpointContractError<TContract>;
168
+ isError<S extends InferEndpointErrorStatus<TContract>>(err: unknown, status: S): err is ContractErrorWithStatus<InferEndpointContractError<TContract>, S>;
169
+ isError<S extends number>(err: unknown, status: S): err is HttpContractError<unknown, S>;
170
+ isError<S extends InferEndpointErrorStatus<TContract>>(err: unknown, criteria: {
171
+ status: S;
172
+ }): err is ContractErrorWithStatus<InferEndpointContractError<TContract>, S>;
173
+ isError<S extends ContractErrorSource>(err: unknown, criteria: {
174
+ source: S;
175
+ }): err is ContractErrorWithSource<InferEndpointContractError<TContract>, S>;
176
+ isError<C extends InferEndpointErrorCode<TContract>>(err: unknown, criteria: {
177
+ code: C;
178
+ }): err is ContractErrorWithCode<InferEndpointContractError<TContract>, C>;
179
+ isError<C extends string>(err: unknown, criteria: {
180
+ code: C;
181
+ }): err is InferEndpointContractError<TContract> & {
182
+ readonly code: C;
183
+ };
184
+ isError<Status extends InferEndpointErrorStatus<TContract>, Source extends ContractErrorSource>(err: unknown, criteria: {
185
+ status: Status;
186
+ source: Source;
187
+ }): err is ContractErrorWithSource<ContractErrorWithStatus<InferEndpointContractError<TContract>, Status>, Source>;
188
+ isError<Status extends InferEndpointErrorStatus<TContract>, C extends InferEndpointErrorCode<TContract>>(err: unknown, criteria: {
189
+ status: Status;
190
+ code: C;
191
+ }): err is ContractErrorWithCode<ContractErrorWithStatus<InferEndpointContractError<TContract>, Status>, C>;
192
+ isError<Source extends ContractErrorSource, C extends InferEndpointErrorCode<TContract>>(err: unknown, criteria: {
193
+ source: Source;
194
+ code: C;
195
+ }): err is ContractErrorWithCode<ContractErrorWithSource<InferEndpointContractError<TContract>, Source>, C>;
196
+ isError<Status extends InferEndpointErrorStatus<TContract>, Source extends ContractErrorSource, C extends InferEndpointErrorCode<TContract>>(err: unknown, criteria: {
197
+ status: Status;
198
+ source: Source;
199
+ code: C;
200
+ }): err is ContractErrorWithCode<ContractErrorWithSource<ContractErrorWithStatus<InferEndpointContractError<TContract>, Status>, Source>, C>;
201
+ /**
202
+ * Call the endpoint with the given arguments
203
+ */
204
+ call(...callArgs: CallArgs<TContract, TProvidedHeaders>): Promise<InferSuccessResponse<TContract>>;
205
+ /**
206
+ * Call the endpoint and return a typed result instead of throwing ContractError.
207
+ */
208
+ safeCall(...callArgs: CallArgs<TContract, TProvidedHeaders>): Promise<EndpointResult<TContract, InferEndpointContractError<TContract>>>;
209
+ /**
210
+ * Build the full URL with path and query parameters
211
+ */
212
+ private buildUrl;
213
+ /**
214
+ * Build request headers
215
+ */
216
+ private buildHeaders;
217
+ /**
218
+ * Create a contract error
219
+ */
220
+ private createError;
221
+ }
222
+ /**
223
+ * Client for making contract-based requests
224
+ */
225
+ export declare class Client<TProvidedHeaders extends string = never> {
226
+ private config;
227
+ constructor(config: ClientConfig<TProvidedHeaders>);
228
+ /**
229
+ * Create an endpoint wrapper for a contract
230
+ *
231
+ * Accepts either an HttpContractConfig object or a ContractBuilder
232
+ * (which has a .config property that returns the config)
233
+ */
234
+ endpoint<TContractLike extends ContractLike>(contract: TContractLike): Endpoint<ResolveContract<TContractLike>, TProvidedHeaders>;
235
+ }
236
+ /**
237
+ * Create a configured client
238
+ */
239
+ export declare function createClient<const TProvidedHeaders extends string = never>(config?: ClientConfig<TProvidedHeaders>): Client<TProvidedHeaders>;
240
+ export {};
241
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"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"}