@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 @@
1
+ {"version":3,"file":"contract-builder.d.ts","sourceRoot":"","sources":["../../src/contracts/contract-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE3D,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACtB,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,EACV,6BAA6B,EAC7B,cAAc,EACf,MAAM,SAAS,CAAC;AA4DjB;;;GAGG;AACH,qBAAa,eAAe,CAC1B,OAAO,SAAS,UAAU,EAC1B,WAAW,SAAS,cAAc,GAAG,IAAI,EACzC,MAAM,SAAS,cAAc,GAAG,IAAI,EACpC,KAAK,SAAS,cAAc,GAAG,IAAI,EACnC,QAAQ,SAAS,qBAAqB,EACtC,UAAU,SAAS,iBAAiB,EACpC,KAAK,SAAS,YAAY,EAC1B,KAAK,SAAS,MAAM,GAAG,MAAM;IAE7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;gBAG5B,MAAM,EAAE,kBAAkB,CACxB,OAAO,EACP,WAAW,EACX,MAAM,EACN,KAAK,EACL,UAAU,EACV,KAAK,EACL,KAAK,EACL,QAAQ,CACT;IAqBH;;OAEG;IACH,IAAI,MAAM;;;;;;MAQT;IAED;;OAEG;IACH,IAAI,eAAe,IAAI,UAAU,CAEhC;IAED;;OAEG;IACH,IAAI,YAAY,IAAI,KAAK,CAExB;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,KAAK,CAEhB;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,KAAK,CAEpB;IAED;;;OAGG;IACH,IAAI,MAAM,IAAI,kBAAkB,CAC9B,OAAO,EACP,WAAW,EACX,MAAM,EACN,KAAK,EACL,UAAU,EACV,KAAK,EACL,KAAK,EACL,QAAQ,CACT,CAeA;IAED;;OAEG;IACH,UAAU,CAAC,cAAc,SAAS,gBAAgB,EAChD,MAAM,EAAE,cAAc,GACrB,eAAe,CAChB,OAAO,EACP,cAAc,EACd,MAAM,EACN,KAAK,EACL,QAAQ,EACR,UAAU,EACV,KAAK,EACL,KAAK,CACN;IAiBD;;OAEG;IACH,KAAK,CAAC,SAAS,SAAS,gBAAgB,EACtC,MAAM,EAAE,SAAS,GAChB,eAAe,CAChB,OAAO,EACP,WAAW,EACX,SAAS,EACT,KAAK,EACL,QAAQ,EACR,UAAU,EACV,KAAK,EACL,KAAK,CACN;IAiBD;;;OAGG;IACH,IAAI,CAAC,QAAQ,SAAS,gBAAgB,EACpC,IAAI,EAAE,eAAe,CACnB,cAAc,EACd,cAAc,GAAG,IAAI,EACrB,cAAc,GAAG,IAAI,EACrB,cAAc,GAAG,IAAI,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,EACZ,KAAK,CACN,EACD,MAAM,EAAE,QAAQ,GACf,eAAe,CAChB,OAAO,EACP,WAAW,EACX,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,KAAK,EACL,KAAK,CACN;IA2BD;;;;;OAKG;IACH,OAAO,CAAC,WAAW,SAAS,gBAAgB,EAC1C,MAAM,EAAE,WAAW,GAClB,eAAe,CAChB,OAAO,EACP,WAAW,EACX,MAAM,EACN,KAAK,EACL,QAAQ,SAAS,SAAS,cAAc,EAAE,GACtC,SAAS,CAAC,GAAG,QAAQ,EAAE,WAAW,CAAC,GACnC,QAAQ,SAAS,cAAc,GAC7B,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC,GAChC,SAAS,CAAC,WAAW,CAAC,EAC5B,UAAU,EACV,KAAK,EACL,KAAK,CACN;IA8BD;;;OAGG;IACH,SAAS,CAAC,aAAa,SAAS,iBAAiB,EAC/C,eAAe,EAAE,aAAa,GAC7B,eAAe,CAChB,OAAO,EACP,WAAW,EACX,MAAM,EACN,KAAK,EACL,QAAQ,EACR,IAAI,CAAC,UAAU,EAAE,MAAM,aAAa,CAAC,GAAG,aAAa,EACrD,KAAK,EACL,KAAK,CACN;IAqBD;;;;;OAKG;IACH,MAAM,CAAC,UAAU,SAAS,sBAAsB,EAC9C,SAAS,EAAE,UAAU,GACpB,eAAe,CAChB,OAAO,EACP,WAAW,EACX,MAAM,EACN,KAAK,EACL,QAAQ,EACR,IAAI,CAAC,UAAU,EAAE,MAAM,6BAA6B,CAAC,UAAU,CAAC,CAAC,GAC/D,6BAA6B,CAAC,UAAU,CAAC,EAC3C,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG;QAAE,MAAM,EAAE,UAAU,CAAA;KAAE,EAC9C,KAAK,CACN;IA6BD;;OAEG;IACH,IAAI,CAAC,QAAQ,SAAS,YAAY,EAChC,OAAO,EAAE,QAAQ,GAChB,eAAe,CAChB,OAAO,EACP,WAAW,EACX,MAAM,EACN,KAAK,EACL,QAAQ,EACR,UAAU,EACV,IAAI,CAAC,KAAK,EAAE,MAAM,QAAQ,CAAC,GAAG,QAAQ,EACtC,KAAK,CACN;IAoBD;;OAEG;IACH,OAAO,CACL,KAAK,EAAE,OAAO,CAAC,oBAAoB,CAAC,GACnC,eAAe,CAChB,OAAO,EACP,WAAW,EACX,MAAM,EACN,KAAK,EACL,QAAQ,EACR,UAAU,EACV,KAAK,EACL,KAAK,CACN;CAuBF;AAED;;GAEG;AACH,MAAM,MAAM,qBAAqB,CAC/B,OAAO,SAAS,UAAU,GAAG,UAAU,EACvC,KAAK,SAAS,MAAM,GAAG,MAAM,IAC3B;IACF,iEAAiE;IACjE,MAAM,EAAE,OAAO,CAAC;IAChB,iDAAiD;IACjD,IAAI,EAAE,KAAK,CAAC;IACZ,iFAAiF;IACjF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC5B,OAAO,SAAS,UAAU,EAC1B,KAAK,CAAC,KAAK,SAAS,MAAM,EAE1B,OAAO,EAAE,qBAAqB,CAAC,OAAO,EAAE,KAAK,CAAC,GAC7C,eAAe,CAChB,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EACpB,YAAY,EACZ,KAAK,CACN,CAiBA"}
@@ -0,0 +1,346 @@
1
+ import { parsePathTemplate } from "./path-template";
2
+ import { methodSupportsRequestBody, STANDARD_ERROR_RESPONSE_SCHEMA, } from "./types";
3
+ import { generateContractName } from "./utils";
4
+ function responsesFromErrors(errors) {
5
+ const responses = {};
6
+ for (const error of Object.values(errors)) {
7
+ responses[error.status] = STANDARD_ERROR_RESPONSE_SCHEMA;
8
+ }
9
+ return responses;
10
+ }
11
+ function assertNoResponseStatusConflicts(current, next) {
12
+ const currentStatuses = new Set(Object.keys(current));
13
+ const conflicts = Object.keys(next).filter((status) => currentStatuses.has(status));
14
+ if (conflicts.length) {
15
+ throw new Error(`.errors() cannot declare status ${conflicts.join(", ")} because a response schema for that status already exists. Use .responses() without .errors() when you need a custom error response body.`);
16
+ }
17
+ }
18
+ function assertNoCatalogErrorStatusConflicts(metadata, next) {
19
+ const errors = metadata.errors;
20
+ if (typeof errors !== "object" || errors === null)
21
+ return;
22
+ const errorStatuses = new Set(Object.values(errors)
23
+ .map((error) => typeof error === "object" &&
24
+ error !== null &&
25
+ typeof error.status === "number"
26
+ ? String(error.status)
27
+ : undefined)
28
+ .filter((status) => status !== undefined));
29
+ const conflicts = Object.keys(next).filter((status) => errorStatuses.has(status));
30
+ if (conflicts.length) {
31
+ throw new Error(`.responses() cannot declare status ${conflicts.join(", ")} because that status is already declared by .errors(). Use .responses() without .errors() when you need a custom error response body.`);
32
+ }
33
+ }
34
+ /**
35
+ * Contract builder for constructing HTTP contracts in a fluent API style
36
+ * Schemas are accessible via the .schema property for introspection
37
+ */
38
+ export class ContractBuilder {
39
+ kind;
40
+ name;
41
+ namespace;
42
+ localName;
43
+ method;
44
+ _path;
45
+ _pathParams;
46
+ _query;
47
+ _body;
48
+ _headers;
49
+ _responses;
50
+ _meta;
51
+ constructor(config) {
52
+ if (config.body && !methodSupportsRequestBody(config.method)) {
53
+ throw new Error(`Request bodies are not supported for ${config.method} contracts. Use POST, PUT, or PATCH for contract request bodies.`);
54
+ }
55
+ this.kind = config.kind;
56
+ this.name = config.name;
57
+ this.namespace = config.namespace;
58
+ this.localName = config.localName ?? config.name;
59
+ this.method = config.method;
60
+ this._path = config.path;
61
+ this._pathParams = config.pathParams;
62
+ this._query = config.query;
63
+ this._body = config.body;
64
+ this._headers = config.headers ?? null;
65
+ this._responses = config.responses;
66
+ this._meta = config.metadata;
67
+ }
68
+ /**
69
+ * Access schemas for introspection
70
+ */
71
+ get schema() {
72
+ return {
73
+ pathParams: this._pathParams,
74
+ query: this._query,
75
+ headers: this._headers,
76
+ body: this._body,
77
+ responses: this._responses,
78
+ };
79
+ }
80
+ /**
81
+ * Get response schemas for introspection
82
+ */
83
+ get responseSchemas() {
84
+ return this._responses;
85
+ }
86
+ /**
87
+ * Get the URL path template
88
+ */
89
+ get pathTemplate() {
90
+ return this._path;
91
+ }
92
+ /**
93
+ * Get the URL path (alias for pathTemplate)
94
+ */
95
+ get path() {
96
+ return this._path;
97
+ }
98
+ /**
99
+ * Get contract metadata
100
+ */
101
+ get metadata() {
102
+ return this._meta;
103
+ }
104
+ /**
105
+ * Get the contract as an HttpContractConfig object
106
+ * Use this when passing to adapters that expect the plain config type
107
+ */
108
+ get config() {
109
+ return {
110
+ kind: this.kind,
111
+ name: this.name,
112
+ namespace: this.namespace,
113
+ localName: this.localName,
114
+ method: this.method,
115
+ path: this._path,
116
+ pathParams: this._pathParams,
117
+ query: this._query,
118
+ headers: this._headers,
119
+ body: this._body,
120
+ responses: this._responses,
121
+ metadata: this._meta,
122
+ };
123
+ }
124
+ /**
125
+ * Set path parameters schema (chainable builder method)
126
+ */
127
+ pathParams(schema) {
128
+ return new ContractBuilder({
129
+ kind: this.kind,
130
+ name: this.name,
131
+ namespace: this.namespace,
132
+ localName: this.localName,
133
+ method: this.method,
134
+ path: this._path,
135
+ pathParams: schema,
136
+ query: this._query,
137
+ headers: this._headers,
138
+ body: this._body,
139
+ responses: this._responses,
140
+ metadata: this._meta,
141
+ });
142
+ }
143
+ /**
144
+ * Set query parameters schema (chainable builder method)
145
+ */
146
+ query(schema) {
147
+ return new ContractBuilder({
148
+ kind: this.kind,
149
+ name: this.name,
150
+ namespace: this.namespace,
151
+ localName: this.localName,
152
+ method: this.method,
153
+ path: this._path,
154
+ pathParams: this._pathParams,
155
+ query: schema,
156
+ headers: this._headers,
157
+ body: this._body,
158
+ responses: this._responses,
159
+ metadata: this._meta,
160
+ });
161
+ }
162
+ /**
163
+ * Set request body schema (chainable builder method)
164
+ * Only available on POST, PUT, and PATCH contracts.
165
+ */
166
+ body(schema) {
167
+ const self = this;
168
+ return new ContractBuilder({
169
+ kind: self.kind,
170
+ name: self.name,
171
+ namespace: self.namespace,
172
+ localName: self.localName,
173
+ method: self.method,
174
+ path: self._path,
175
+ pathParams: self._pathParams,
176
+ query: self._query,
177
+ headers: self._headers,
178
+ body: schema,
179
+ responses: self._responses,
180
+ metadata: self._meta,
181
+ });
182
+ }
183
+ /**
184
+ * Add request header schema (chainable).
185
+ *
186
+ * Multiple schemas are evaluated in declaration order and their parsed
187
+ * outputs are merged. This keeps group-level headers library-agnostic.
188
+ */
189
+ headers(schema) {
190
+ const existingHeaders = this._headers
191
+ ? Array.isArray(this._headers)
192
+ ? this._headers
193
+ : [this._headers]
194
+ : [];
195
+ return new ContractBuilder({
196
+ kind: this.kind,
197
+ name: this.name,
198
+ namespace: this.namespace,
199
+ localName: this.localName,
200
+ method: this.method,
201
+ path: this._path,
202
+ pathParams: this._pathParams,
203
+ query: this._query,
204
+ headers: [
205
+ ...existingHeaders,
206
+ schema,
207
+ ],
208
+ body: this._body,
209
+ responses: this._responses,
210
+ metadata: this._meta,
211
+ });
212
+ }
213
+ /**
214
+ * Add or replace response schemas by status code (chainable).
215
+ * Use `null` for void/empty responses such as 204 No Content.
216
+ */
217
+ responses(responseSchemas) {
218
+ assertNoCatalogErrorStatusConflicts(this._meta, responseSchemas);
219
+ return new ContractBuilder({
220
+ kind: this.kind,
221
+ name: this.name,
222
+ namespace: this.namespace,
223
+ localName: this.localName,
224
+ method: this.method,
225
+ path: this._path,
226
+ pathParams: this._pathParams,
227
+ query: this._query,
228
+ headers: this._headers,
229
+ body: this._body,
230
+ responses: {
231
+ ...this._responses,
232
+ ...responseSchemas,
233
+ },
234
+ metadata: this._meta,
235
+ });
236
+ }
237
+ /**
238
+ * Declare route-owned application errors from an error catalog.
239
+ *
240
+ * Catalog errors use Beignet's standard error response envelope. Use
241
+ * `.responses()` when a route needs a custom error response body.
242
+ */
243
+ errors(errorDefs) {
244
+ const errorResponses = responsesFromErrors(errorDefs);
245
+ assertNoResponseStatusConflicts(this._responses, errorResponses);
246
+ return new ContractBuilder({
247
+ kind: this.kind,
248
+ name: this.name,
249
+ namespace: this.namespace,
250
+ localName: this.localName,
251
+ method: this.method,
252
+ path: this._path,
253
+ pathParams: this._pathParams,
254
+ query: this._query,
255
+ headers: this._headers,
256
+ body: this._body,
257
+ responses: {
258
+ ...this._responses,
259
+ ...errorResponses,
260
+ },
261
+ metadata: {
262
+ ...this._meta,
263
+ errors: errorDefs,
264
+ },
265
+ });
266
+ }
267
+ /**
268
+ * Set or merge contract metadata (chainable builder method)
269
+ */
270
+ meta(newMeta) {
271
+ return new ContractBuilder({
272
+ kind: this.kind,
273
+ name: this.name,
274
+ namespace: this.namespace,
275
+ localName: this.localName,
276
+ method: this.method,
277
+ path: this._path,
278
+ pathParams: this._pathParams,
279
+ query: this._query,
280
+ headers: this._headers,
281
+ body: this._body,
282
+ responses: this._responses,
283
+ metadata: {
284
+ ...this._meta,
285
+ ...newMeta,
286
+ },
287
+ });
288
+ }
289
+ /**
290
+ * Set or merge OpenAPI metadata for this operation (chainable)
291
+ */
292
+ openapi(patch) {
293
+ const existingOpenApi = this._meta.openapi ?? {};
294
+ return new ContractBuilder({
295
+ kind: this.kind,
296
+ name: this.name,
297
+ namespace: this.namespace,
298
+ localName: this.localName,
299
+ method: this.method,
300
+ path: this._path,
301
+ pathParams: this._pathParams,
302
+ query: this._query,
303
+ headers: this._headers,
304
+ body: this._body,
305
+ responses: this._responses,
306
+ metadata: {
307
+ ...this._meta,
308
+ openapi: {
309
+ ...existingOpenApi,
310
+ ...patch,
311
+ },
312
+ },
313
+ });
314
+ }
315
+ }
316
+ /**
317
+ * Create a new HTTP contract with the builder pattern.
318
+ *
319
+ * @example
320
+ * ```ts
321
+ * const getTodo = createContract({
322
+ * method: "GET",
323
+ * path: "/api/todos/:id",
324
+ * })
325
+ * .pathParams(z.object({ id: z.string() }))
326
+ * .responses({ 200: TodoSchema });
327
+ * ```
328
+ */
329
+ export function createContract(options) {
330
+ parsePathTemplate(options.path);
331
+ const name = options.name || generateContractName(options.method, options.path);
332
+ return new ContractBuilder({
333
+ kind: "http",
334
+ name,
335
+ localName: name,
336
+ method: options.method,
337
+ path: options.path,
338
+ pathParams: null,
339
+ query: null,
340
+ headers: null,
341
+ body: null,
342
+ responses: {},
343
+ metadata: {},
344
+ });
345
+ }
346
+ //# sourceMappingURL=contract-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract-builder.js","sourceRoot":"","sources":["../../src/contracts/contract-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ import { ContractBuilder } from "./contract-builder";
2
+ import type { ContractErrorResponses, ContractHeaderSchemas, ContractMeta, ContractResponses, ResponsesFromErrorDefinitions, StandardSchema } from "./types";
3
+ type TrimLeadingSlash<T extends string> = T extends `/${infer Rest}` ? TrimLeadingSlash<Rest> : T;
4
+ type TrimTrailingSlash<T extends string> = T extends "/" ? "" : T extends `${infer Rest}/` ? TrimTrailingSlash<Rest> : T;
5
+ type NormalizedPrefix<T extends string> = T extends "" | "/" ? "" : TrimTrailingSlash<T>;
6
+ type NormalizedChildPath<T extends string> = TrimTrailingSlash<TrimLeadingSlash<T>>;
7
+ type JoinPaths<TPrefix extends string, TPath extends string> = string extends TPrefix | TPath ? string : NormalizedPrefix<TPrefix> extends "" ? TPath : NormalizedChildPath<TPath> extends "" ? NormalizedPrefix<TPrefix> : `${NormalizedPrefix<TPrefix>}/${NormalizedChildPath<TPath>}`;
8
+ /**
9
+ * ContractGroup is a feature-scoped factory for creating related contracts
10
+ * with shared configuration. Immutable — each method returns a new instance.
11
+ */
12
+ export declare class ContractGroup<TSharedResponses extends ContractResponses = Record<never, never>, TSharedMeta extends ContractMeta = ContractMeta, TSharedHeaders extends ContractHeaderSchemas = null, TPathPrefix extends string = ""> {
13
+ private readonly _namespace;
14
+ private readonly _meta;
15
+ private readonly _responses;
16
+ private readonly _headers;
17
+ private readonly _pathPrefix;
18
+ constructor(state?: {
19
+ namespace?: string;
20
+ meta?: TSharedMeta;
21
+ responses?: TSharedResponses;
22
+ headers?: TSharedHeaders;
23
+ pathPrefix?: TPathPrefix;
24
+ });
25
+ /**
26
+ * Set the namespace for all contracts created from this group
27
+ */
28
+ namespace(ns: string): ContractGroup<TSharedResponses, TSharedMeta, TSharedHeaders, TPathPrefix>;
29
+ /**
30
+ * Add a path prefix to all contracts created from this group.
31
+ *
32
+ * Prefixes compose immutably, so `prefix("/api").prefix("/v1")`
33
+ * produces paths under `/api/v1`.
34
+ */
35
+ prefix<const TNewPrefix extends string>(pathPrefix: TNewPrefix): ContractGroup<TSharedResponses, TSharedMeta, TSharedHeaders, JoinPaths<TPathPrefix, TNewPrefix>>;
36
+ /**
37
+ * Set shared metadata for all contracts created from this group
38
+ */
39
+ meta<TNewMeta extends ContractMeta>(meta: TNewMeta): ContractGroup<TSharedResponses, Omit<TSharedMeta, keyof TNewMeta> & TNewMeta, TSharedHeaders, TPathPrefix>;
40
+ /**
41
+ * Set shared response schemas for all contracts created from this group.
42
+ * Typically used for shared error responses (e.g. 401, 403, 500).
43
+ */
44
+ responses<TNewResponses extends ContractResponses>(responseSchemas: TNewResponses): ContractGroup<Omit<TSharedResponses, keyof TNewResponses> & TNewResponses, TSharedMeta, TSharedHeaders, TPathPrefix>;
45
+ /**
46
+ * Set shared route-owned application errors for all contracts in the group.
47
+ */
48
+ errors<TErrorDefs extends ContractErrorResponses>(errorDefs: TErrorDefs): ContractGroup<Omit<TSharedResponses, keyof ResponsesFromErrorDefinitions<TErrorDefs>> & ResponsesFromErrorDefinitions<TErrorDefs>, Omit<TSharedMeta, "errors"> & {
49
+ errors: TErrorDefs;
50
+ }, TSharedHeaders, TPathPrefix>;
51
+ /**
52
+ * Add shared request header schema for all contracts created from this group.
53
+ */
54
+ headers<TNewHeaders extends StandardSchema>(schema: TNewHeaders): ContractGroup<TSharedResponses, TSharedMeta, TSharedHeaders extends readonly StandardSchema[] ? readonly [...TSharedHeaders, TNewHeaders] : TSharedHeaders extends StandardSchema ? readonly [TSharedHeaders, TNewHeaders] : readonly [TNewHeaders], TPathPrefix>;
55
+ /**
56
+ * Create a GET contract
57
+ */
58
+ get<const TPath extends string>(path: TPath, name?: string): ContractBuilder<"GET", null, null, null, TSharedHeaders, TSharedResponses, TSharedMeta, JoinPaths<TPathPrefix, TPath>>;
59
+ /**
60
+ * Create a POST contract
61
+ */
62
+ post<const TPath extends string>(path: TPath, name?: string): ContractBuilder<"POST", null, null, null, TSharedHeaders, TSharedResponses, TSharedMeta, JoinPaths<TPathPrefix, TPath>>;
63
+ /**
64
+ * Create a PUT contract
65
+ */
66
+ put<const TPath extends string>(path: TPath, name?: string): ContractBuilder<"PUT", null, null, null, TSharedHeaders, TSharedResponses, TSharedMeta, JoinPaths<TPathPrefix, TPath>>;
67
+ /**
68
+ * Create a PATCH contract
69
+ */
70
+ patch<const TPath extends string>(path: TPath, name?: string): ContractBuilder<"PATCH", null, null, null, TSharedHeaders, TSharedResponses, TSharedMeta, JoinPaths<TPathPrefix, TPath>>;
71
+ /**
72
+ * Create a DELETE contract
73
+ */
74
+ delete<const TPath extends string>(path: TPath, name?: string): ContractBuilder<"DELETE", null, null, null, TSharedHeaders, TSharedResponses, TSharedMeta, JoinPaths<TPathPrefix, TPath>>;
75
+ /**
76
+ * Create a HEAD contract
77
+ */
78
+ head<const TPath extends string>(path: TPath, name?: string): ContractBuilder<"HEAD", null, null, null, TSharedHeaders, TSharedResponses, TSharedMeta, JoinPaths<TPathPrefix, TPath>>;
79
+ /**
80
+ * Create a OPTIONS contract
81
+ */
82
+ options<const TPath extends string>(path: TPath, name?: string): ContractBuilder<"OPTIONS", null, null, null, TSharedHeaders, TSharedResponses, TSharedMeta, JoinPaths<TPathPrefix, TPath>>;
83
+ /**
84
+ * Internal helper to create a contract builder with shared config
85
+ */
86
+ private createBuilder;
87
+ }
88
+ /**
89
+ * Create a new ContractGroup for grouping related contracts with shared configuration.
90
+ *
91
+ * @example
92
+ * ```ts
93
+ * const todos = createContractGroup()
94
+ * .namespace("todos")
95
+ * .prefix("/api/todos")
96
+ * .meta({ auth: "required" })
97
+ * .responses({
98
+ * 401: z.object({ message: z.literal("Unauthorized") }),
99
+ * });
100
+ *
101
+ * const getTodo = todos.get("/:id")...
102
+ * ```
103
+ */
104
+ export declare function createContractGroup(): ContractGroup<Record<never, never>, ContractMeta, null, "">;
105
+ export {};
106
+ //# sourceMappingURL=contract-group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract-group.d.ts","sourceRoot":"","sources":["../../src/contracts/contract-group.ts"],"names":[],"mappings":"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"}