hexok 1.0.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. package/README.md +9 -0
  2. package/dist/adapter.d.ts +18 -0
  3. package/dist/adapter.d.ts.map +1 -0
  4. package/dist/adapter.js +21 -0
  5. package/dist/adapter.js.map +1 -0
  6. package/dist/catalog.d.ts +88 -0
  7. package/dist/catalog.d.ts.map +1 -0
  8. package/dist/catalog.js +79 -0
  9. package/dist/catalog.js.map +1 -0
  10. package/dist/{core/coded-error.d.ts → coded-error.d.ts} +9 -4
  11. package/dist/coded-error.d.ts.map +1 -0
  12. package/dist/{core/coded-error.js → coded-error.js} +9 -4
  13. package/dist/coded-error.js.map +1 -0
  14. package/dist/cow-draft.d.ts.map +1 -0
  15. package/dist/cow-draft.js.map +1 -0
  16. package/dist/entity.d.ts +63 -0
  17. package/dist/entity.d.ts.map +1 -0
  18. package/dist/{domain/entity.js → entity.js} +52 -80
  19. package/dist/entity.js.map +1 -0
  20. package/dist/error-map.d.ts +22 -0
  21. package/dist/error-map.d.ts.map +1 -0
  22. package/dist/error-map.js +2 -0
  23. package/dist/error-map.js.map +1 -0
  24. package/dist/errors.d.ts +85 -0
  25. package/dist/errors.d.ts.map +1 -0
  26. package/dist/errors.js +85 -0
  27. package/dist/errors.js.map +1 -0
  28. package/dist/event-handler.d.ts +31 -0
  29. package/dist/event-handler.d.ts.map +1 -0
  30. package/dist/event-handler.js +28 -0
  31. package/dist/event-handler.js.map +1 -0
  32. package/dist/event.d.ts +37 -0
  33. package/dist/event.d.ts.map +1 -0
  34. package/dist/event.js +44 -0
  35. package/dist/event.js.map +1 -0
  36. package/dist/index.d.ts +16 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +14 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/mapper.d.ts +100 -0
  41. package/dist/mapper.d.ts.map +1 -0
  42. package/dist/mapper.js +167 -0
  43. package/dist/mapper.js.map +1 -0
  44. package/dist/port.d.ts +20 -0
  45. package/dist/port.d.ts.map +1 -0
  46. package/dist/port.js +25 -0
  47. package/dist/port.js.map +1 -0
  48. package/dist/result.d.ts.map +1 -0
  49. package/dist/result.js.map +1 -0
  50. package/dist/schema.d.ts +37 -0
  51. package/dist/schema.d.ts.map +1 -0
  52. package/dist/schema.js +50 -0
  53. package/dist/schema.js.map +1 -0
  54. package/dist/{core/standard-schema.d.ts → standard-schema.d.ts} +1 -1
  55. package/dist/standard-schema.d.ts.map +1 -0
  56. package/dist/standard-schema.js.map +1 -0
  57. package/dist/use-case.d.ts +183 -0
  58. package/dist/use-case.d.ts.map +1 -0
  59. package/dist/use-case.js +221 -0
  60. package/dist/use-case.js.map +1 -0
  61. package/dist/{core/schema.d.ts → validate.d.ts} +1 -1
  62. package/dist/validate.d.ts.map +1 -0
  63. package/dist/{core/schema.js → validate.js} +1 -1
  64. package/dist/validate.js.map +1 -0
  65. package/package.json +16 -26
  66. package/dist/app/api-use-case.d.ts +0 -52
  67. package/dist/app/api-use-case.d.ts.map +0 -1
  68. package/dist/app/api-use-case.js +0 -59
  69. package/dist/app/api-use-case.js.map +0 -1
  70. package/dist/app/callable-use-case.d.ts +0 -34
  71. package/dist/app/callable-use-case.d.ts.map +0 -1
  72. package/dist/app/callable-use-case.js +0 -41
  73. package/dist/app/callable-use-case.js.map +0 -1
  74. package/dist/app/contract.d.ts +0 -46
  75. package/dist/app/contract.d.ts.map +0 -1
  76. package/dist/app/contract.js +0 -28
  77. package/dist/app/contract.js.map +0 -1
  78. package/dist/app/error-factory.d.ts +0 -9
  79. package/dist/app/error-factory.d.ts.map +0 -1
  80. package/dist/app/error-factory.js +0 -30
  81. package/dist/app/error-factory.js.map +0 -1
  82. package/dist/app/event-channel.d.ts +0 -133
  83. package/dist/app/event-channel.d.ts.map +0 -1
  84. package/dist/app/event-channel.js +0 -49
  85. package/dist/app/event-channel.js.map +0 -1
  86. package/dist/app/event-use-case.d.ts +0 -47
  87. package/dist/app/event-use-case.d.ts.map +0 -1
  88. package/dist/app/event-use-case.js +0 -54
  89. package/dist/app/event-use-case.js.map +0 -1
  90. package/dist/app/execute-ctx.d.ts +0 -92
  91. package/dist/app/execute-ctx.d.ts.map +0 -1
  92. package/dist/app/execute-ctx.js +0 -2
  93. package/dist/app/execute-ctx.js.map +0 -1
  94. package/dist/app/external-use-case.d.ts +0 -25
  95. package/dist/app/external-use-case.d.ts.map +0 -1
  96. package/dist/app/external-use-case.js +0 -25
  97. package/dist/app/external-use-case.js.map +0 -1
  98. package/dist/app/index.d.ts +0 -9
  99. package/dist/app/index.d.ts.map +0 -1
  100. package/dist/app/index.js +0 -8
  101. package/dist/app/index.js.map +0 -1
  102. package/dist/app/internal-use-case.d.ts +0 -26
  103. package/dist/app/internal-use-case.d.ts.map +0 -1
  104. package/dist/app/internal-use-case.js +0 -26
  105. package/dist/app/internal-use-case.js.map +0 -1
  106. package/dist/app/nest.d.ts +0 -9
  107. package/dist/app/nest.d.ts.map +0 -1
  108. package/dist/app/nest.js +0 -28
  109. package/dist/app/nest.js.map +0 -1
  110. package/dist/app/types.d.ts +0 -153
  111. package/dist/app/types.d.ts.map +0 -1
  112. package/dist/app/types.js +0 -17
  113. package/dist/app/types.js.map +0 -1
  114. package/dist/core/coded-error.d.ts.map +0 -1
  115. package/dist/core/coded-error.js.map +0 -1
  116. package/dist/core/error-map.d.ts +0 -21
  117. package/dist/core/error-map.d.ts.map +0 -1
  118. package/dist/core/error-map.js +0 -5
  119. package/dist/core/error-map.js.map +0 -1
  120. package/dist/core/index.d.ts +0 -6
  121. package/dist/core/index.d.ts.map +0 -1
  122. package/dist/core/index.js +0 -5
  123. package/dist/core/index.js.map +0 -1
  124. package/dist/core/result.d.ts.map +0 -1
  125. package/dist/core/result.js.map +0 -1
  126. package/dist/core/schema.d.ts.map +0 -1
  127. package/dist/core/schema.js.map +0 -1
  128. package/dist/core/standard-schema.d.ts.map +0 -1
  129. package/dist/core/standard-schema.js.map +0 -1
  130. package/dist/domain/capabilities.d.ts +0 -42
  131. package/dist/domain/capabilities.d.ts.map +0 -1
  132. package/dist/domain/capabilities.js +0 -2
  133. package/dist/domain/capabilities.js.map +0 -1
  134. package/dist/domain/catalog.d.ts +0 -46
  135. package/dist/domain/catalog.d.ts.map +0 -1
  136. package/dist/domain/catalog.js +0 -114
  137. package/dist/domain/catalog.js.map +0 -1
  138. package/dist/domain/channel.d.ts +0 -36
  139. package/dist/domain/channel.d.ts.map +0 -1
  140. package/dist/domain/channel.js +0 -2
  141. package/dist/domain/channel.js.map +0 -1
  142. package/dist/domain/cow-draft.d.ts.map +0 -1
  143. package/dist/domain/cow-draft.js.map +0 -1
  144. package/dist/domain/entity.d.ts +0 -120
  145. package/dist/domain/entity.d.ts.map +0 -1
  146. package/dist/domain/entity.js.map +0 -1
  147. package/dist/domain/envelope.d.ts +0 -59
  148. package/dist/domain/envelope.d.ts.map +0 -1
  149. package/dist/domain/envelope.js +0 -2
  150. package/dist/domain/envelope.js.map +0 -1
  151. package/dist/domain/event.d.ts +0 -44
  152. package/dist/domain/event.d.ts.map +0 -1
  153. package/dist/domain/event.js +0 -21
  154. package/dist/domain/event.js.map +0 -1
  155. package/dist/domain/index.d.ts +0 -8
  156. package/dist/domain/index.d.ts.map +0 -1
  157. package/dist/domain/index.js +0 -5
  158. package/dist/domain/index.js.map +0 -1
  159. package/dist/domain/port.d.ts +0 -45
  160. package/dist/domain/port.d.ts.map +0 -1
  161. package/dist/domain/port.js +0 -41
  162. package/dist/domain/port.js.map +0 -1
  163. package/dist/infra/adapter.d.ts +0 -22
  164. package/dist/infra/adapter.d.ts.map +0 -1
  165. package/dist/infra/adapter.js +0 -18
  166. package/dist/infra/adapter.js.map +0 -1
  167. package/dist/infra/index.d.ts +0 -3
  168. package/dist/infra/index.d.ts.map +0 -1
  169. package/dist/infra/index.js +0 -3
  170. package/dist/infra/index.js.map +0 -1
  171. package/dist/infra/mapper.d.ts +0 -48
  172. package/dist/infra/mapper.d.ts.map +0 -1
  173. package/dist/infra/mapper.js +0 -77
  174. package/dist/infra/mapper.js.map +0 -1
  175. package/dist/runtime/app.d.ts +0 -100
  176. package/dist/runtime/app.d.ts.map +0 -1
  177. package/dist/runtime/app.js +0 -292
  178. package/dist/runtime/app.js.map +0 -1
  179. package/dist/runtime/channel.d.ts +0 -34
  180. package/dist/runtime/channel.d.ts.map +0 -1
  181. package/dist/runtime/channel.js +0 -110
  182. package/dist/runtime/channel.js.map +0 -1
  183. package/dist/runtime/client.d.ts +0 -21
  184. package/dist/runtime/client.d.ts.map +0 -1
  185. package/dist/runtime/client.js +0 -2
  186. package/dist/runtime/client.js.map +0 -1
  187. package/dist/runtime/completeness.d.ts +0 -89
  188. package/dist/runtime/completeness.d.ts.map +0 -1
  189. package/dist/runtime/completeness.js +0 -2
  190. package/dist/runtime/completeness.js.map +0 -1
  191. package/dist/runtime/envelope.d.ts +0 -7
  192. package/dist/runtime/envelope.d.ts.map +0 -1
  193. package/dist/runtime/envelope.js +0 -69
  194. package/dist/runtime/envelope.js.map +0 -1
  195. package/dist/runtime/events.d.ts +0 -6
  196. package/dist/runtime/events.d.ts.map +0 -1
  197. package/dist/runtime/events.js +0 -48
  198. package/dist/runtime/events.js.map +0 -1
  199. package/dist/runtime/http-status.d.ts +0 -3
  200. package/dist/runtime/http-status.d.ts.map +0 -1
  201. package/dist/runtime/http-status.js +0 -11
  202. package/dist/runtime/http-status.js.map +0 -1
  203. package/dist/runtime/http.d.ts +0 -4
  204. package/dist/runtime/http.d.ts.map +0 -1
  205. package/dist/runtime/http.js +0 -58
  206. package/dist/runtime/http.js.map +0 -1
  207. package/dist/runtime/index.d.ts +0 -10
  208. package/dist/runtime/index.d.ts.map +0 -1
  209. package/dist/runtime/index.js +0 -6
  210. package/dist/runtime/index.js.map +0 -1
  211. package/dist/runtime/interceptor.d.ts +0 -61
  212. package/dist/runtime/interceptor.d.ts.map +0 -1
  213. package/dist/runtime/interceptor.js +0 -7
  214. package/dist/runtime/interceptor.js.map +0 -1
  215. package/dist/runtime/invoke.d.ts +0 -34
  216. package/dist/runtime/invoke.d.ts.map +0 -1
  217. package/dist/runtime/invoke.js +0 -235
  218. package/dist/runtime/invoke.js.map +0 -1
  219. package/dist/runtime/middleware.d.ts +0 -20
  220. package/dist/runtime/middleware.d.ts.map +0 -1
  221. package/dist/runtime/middleware.js +0 -2
  222. package/dist/runtime/middleware.js.map +0 -1
  223. package/dist/runtime/rpc.d.ts +0 -24
  224. package/dist/runtime/rpc.d.ts.map +0 -1
  225. package/dist/runtime/rpc.js +0 -16
  226. package/dist/runtime/rpc.js.map +0 -1
  227. package/dist/testing/app-test.d.ts +0 -77
  228. package/dist/testing/app-test.d.ts.map +0 -1
  229. package/dist/testing/app-test.js +0 -109
  230. package/dist/testing/app-test.js.map +0 -1
  231. package/dist/testing/in-memory-broker.d.ts +0 -18
  232. package/dist/testing/in-memory-broker.d.ts.map +0 -1
  233. package/dist/testing/in-memory-broker.js +0 -42
  234. package/dist/testing/in-memory-broker.js.map +0 -1
  235. package/dist/testing/in-memory-bus.d.ts +0 -19
  236. package/dist/testing/in-memory-bus.d.ts.map +0 -1
  237. package/dist/testing/in-memory-bus.js +0 -31
  238. package/dist/testing/in-memory-bus.js.map +0 -1
  239. package/dist/testing/in-memory-channel.d.ts +0 -32
  240. package/dist/testing/in-memory-channel.d.ts.map +0 -1
  241. package/dist/testing/in-memory-channel.js +0 -65
  242. package/dist/testing/in-memory-channel.js.map +0 -1
  243. package/dist/testing/in-memory-queue.d.ts +0 -24
  244. package/dist/testing/in-memory-queue.d.ts.map +0 -1
  245. package/dist/testing/in-memory-queue.js +0 -66
  246. package/dist/testing/in-memory-queue.js.map +0 -1
  247. package/dist/testing/in-memory-repository.d.ts +0 -44
  248. package/dist/testing/in-memory-repository.d.ts.map +0 -1
  249. package/dist/testing/in-memory-repository.js +0 -60
  250. package/dist/testing/in-memory-repository.js.map +0 -1
  251. package/dist/testing/index.d.ts +0 -6
  252. package/dist/testing/index.d.ts.map +0 -1
  253. package/dist/testing/index.js +0 -6
  254. package/dist/testing/index.js.map +0 -1
  255. /package/dist/{domain/cow-draft.d.ts → cow-draft.d.ts} +0 -0
  256. /package/dist/{domain/cow-draft.js → cow-draft.js} +0 -0
  257. /package/dist/{core/result.d.ts → result.d.ts} +0 -0
  258. /package/dist/{core/result.js → result.js} +0 -0
  259. /package/dist/{core/standard-schema.js → standard-schema.js} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity.js","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { StandardSchemaV1 } from './standard-schema.js';
2
+ /**
3
+ * One code in an {@link Errors} catalog. The key of an {@link ErrorMap} is the code.
4
+ *
5
+ * ```ts
6
+ * const defs = {
7
+ * UserExists: { message: 'User already exists' },
8
+ * }
9
+ * ```
10
+ */
11
+ export interface ErrorDef {
12
+ /**
13
+ * Default message. The factory uses the code when this is omitted.
14
+ * A call may override it by passing a string first.
15
+ */
16
+ message?: string;
17
+ /** Payload schema. The member factory requires this schema's output. */
18
+ data?: StandardSchemaV1;
19
+ }
20
+ /** Definition map passed to {@link Errors}. Keys are the member codes. */
21
+ export type ErrorMap = Record<string, ErrorDef>;
22
+ //# sourceMappingURL=error-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-map.d.ts","sourceRoot":"","sources":["../src/error-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D;;;;;;;;GAQG;AACH,MAAM,WAAW,QAAQ;IACvB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACzB;AAED,0EAA0E;AAC1E,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=error-map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-map.js","sourceRoot":"","sources":["../src/error-map.ts"],"names":[],"mappings":""}
@@ -0,0 +1,85 @@
1
+ import type { ErrorMap } from './error-map.js';
2
+ import type { StandardSchemaV1 } from './standard-schema.js';
3
+ import type { Infer } from './validate.js';
4
+ /**
5
+ * Nominal catalog brand. The symbol is shared. The type argument is the
6
+ * catalog token, so two catalogs are not the same error.
7
+ */
8
+ export declare const catalogBrand: unique symbol;
9
+ type MessageOf<Code extends string, Def> = Def extends {
10
+ readonly message: infer M extends string;
11
+ } ? M : Code;
12
+ type DataOf<Def> = Def extends {
13
+ readonly data: infer S extends StandardSchemaV1;
14
+ } ? Infer<S> : undefined;
15
+ /** One member. `code` and `data` are the pair a gateway matches on. */
16
+ export type CatalogMember<Token extends string, Code extends string, Message extends string, Data> = Error & {
17
+ readonly [catalogBrand]: Token;
18
+ readonly catalog: Token;
19
+ readonly code: Code;
20
+ readonly message: Message;
21
+ readonly data: Data;
22
+ };
23
+ /** Discriminated union of every member. Returned by {@link ErrorsHandle.is}. */
24
+ export type CatalogUnion<Token extends string, M> = {
25
+ [K in keyof M & string]: CatalogMember<Token, K, string, DataOf<M[K]>>;
26
+ }[keyof M & string];
27
+ /**
28
+ * One object type so `class X extends Errors(...)` is legal.
29
+ * A union here is TS2509. Payloads are discriminated by `is()`.
30
+ */
31
+ export interface CatalogInstance<Token extends string, M extends ErrorMap> extends Error {
32
+ readonly [catalogBrand]: Token;
33
+ readonly catalog: Token;
34
+ readonly code: keyof M & string;
35
+ readonly data: unknown;
36
+ }
37
+ type MatchReturns<Keys extends string> = Record<Keys, any>;
38
+ type Matchers<Token extends string, M, R extends MatchReturns<keyof M & string>> = {
39
+ [K in keyof M & string]: (error: CatalogMember<Token, K, string, DataOf<M[K]>>) => R[K];
40
+ };
41
+ /**
42
+ * Message, when passed, is the first argument. The catalog message is the default.
43
+ * With `data`: `(data)` or `(message, data)`. Without `data`: `()` or `(message)`.
44
+ */
45
+ type Factory<Token extends string, Code extends string, Def> = Def extends {
46
+ readonly data: infer S extends StandardSchemaV1;
47
+ } ? {
48
+ <M extends string>(message: M, data: Infer<S>): CatalogMember<Token, Code, M, Infer<S>>;
49
+ (data: Infer<S>): CatalogMember<Token, Code, MessageOf<Code, Def>, Infer<S>>;
50
+ } : {
51
+ (): CatalogMember<Token, Code, MessageOf<Code, Def>, undefined>;
52
+ <M extends string>(message: M): CatalogMember<Token, Code, M, undefined>;
53
+ };
54
+ /**
55
+ * Abstract constructor, `is`, `match`, and one static factory per code.
56
+ * Factories return the error. The caller throws.
57
+ * `init: never` blocks `new DomainError()`.
58
+ */
59
+ export type ErrorsHandle<Token extends string, M extends ErrorMap> = {
60
+ readonly token: Token;
61
+ readonly prototype: CatalogInstance<Token, M>;
62
+ is(error: unknown): error is CatalogUnion<Token, M>;
63
+ match<R extends MatchReturns<keyof M & string>>(error: CatalogUnion<Token, M>, cases: Matchers<Token, M, R>): R[keyof R & keyof M & string];
64
+ } & {
65
+ [K in keyof M & string]: Factory<Token, K, M[K]>;
66
+ } & (abstract new (init: never) => CatalogInstance<Token, M>);
67
+ /**
68
+ * Branded error catalog. Throw a member from any layer. A gateway imports
69
+ * the catalog and maps it. The catalog does not know about HTTP.
70
+ *
71
+ * ```ts
72
+ * class DomainError extends Errors('domain', {
73
+ * BlankName: { message: 'Name is blank' },
74
+ * UserExists: { message: 'User already exists', data: z.object({ id: z.string() }) },
75
+ * }) {}
76
+ *
77
+ * throw DomainError.BlankName()
78
+ * throw DomainError.BlankName('Name cannot be empty')
79
+ * throw DomainError.UserExists({ id })
80
+ * throw DomainError.UserExists('User ada already exists', { id })
81
+ * ```
82
+ */
83
+ export declare function Errors<const Token extends string, const M extends ErrorMap>(token: Token, defs: M): ErrorsHandle<Token, M>;
84
+ export {};
85
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
package/dist/errors.js ADDED
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Nominal catalog brand. The symbol is shared. The type argument is the
3
+ * catalog token, so two catalogs are not the same error.
4
+ */
5
+ export const catalogBrand = Symbol('hexok.catalog');
6
+ const RESERVED = new Set(['is', 'match', 'prototype', 'token']);
7
+ /**
8
+ * Branded error catalog. Throw a member from any layer. A gateway imports
9
+ * the catalog and maps it. The catalog does not know about HTTP.
10
+ *
11
+ * ```ts
12
+ * class DomainError extends Errors('domain', {
13
+ * BlankName: { message: 'Name is blank' },
14
+ * UserExists: { message: 'User already exists', data: z.object({ id: z.string() }) },
15
+ * }) {}
16
+ *
17
+ * throw DomainError.BlankName()
18
+ * throw DomainError.BlankName('Name cannot be empty')
19
+ * throw DomainError.UserExists({ id })
20
+ * throw DomainError.UserExists('User ada already exists', { id })
21
+ * ```
22
+ */
23
+ export function Errors(token, defs) {
24
+ for (const code of Object.keys(defs)) {
25
+ if (RESERVED.has(code)) {
26
+ throw new Error(`hexok: error code "${code}" is reserved`);
27
+ }
28
+ }
29
+ class CatalogError extends Error {
30
+ /** Catalog name. Literal type of the string passed to {@link Errors}. */
31
+ static token = token;
32
+ catalog = token;
33
+ code;
34
+ data;
35
+ [catalogBrand];
36
+ /** Per-call class identity. Public nominality is `catalogBrand`. */
37
+ #brand = true;
38
+ constructor(code, message, data) {
39
+ super(message);
40
+ this.name = `${token}.${code}`;
41
+ this.code = code;
42
+ this.data = data;
43
+ this[catalogBrand] = token;
44
+ void this.#brand;
45
+ }
46
+ /** True when `error` is a member of this catalog. */
47
+ static is(error) {
48
+ return error instanceof this;
49
+ }
50
+ /**
51
+ * Run the handler for `error.code`. A missing handler is a type error.
52
+ * An unknown code at runtime is a programming error.
53
+ */
54
+ static match(error, cases) {
55
+ const handler = cases[error.code];
56
+ if (handler === undefined) {
57
+ throw new Error(`hexok: unmatched ${token}.${error.code}`);
58
+ }
59
+ return handler(error);
60
+ }
61
+ }
62
+ for (const code of Object.keys(defs)) {
63
+ const def = defs[code];
64
+ if (def === undefined)
65
+ continue;
66
+ const fallback = def.message ?? code;
67
+ const withData = def.data !== undefined;
68
+ Object.defineProperty(CatalogError, code, {
69
+ enumerable: true,
70
+ configurable: true,
71
+ writable: true,
72
+ value(...args) {
73
+ if (!withData) {
74
+ return new this(code, args.length === 0 ? fallback : args[0], undefined);
75
+ }
76
+ if (args.length > 1) {
77
+ return new this(code, args[0], args[1]);
78
+ }
79
+ return new this(code, fallback, args[0]);
80
+ },
81
+ });
82
+ }
83
+ return CatalogError;
84
+ }
85
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { EventConstructor } from './catalog.js';
2
+ type EventInstanceOf<Event> = Event extends abstract new (...args: never[]) => infer Instance ? Instance : never;
3
+ /**
4
+ * Application service for one event. Pass ports through the constructor.
5
+ * `handle` is required; the compiler errors on the class when it is missing.
6
+ * Annotate the event parameter with the event class.
7
+ *
8
+ * ```ts
9
+ * class OnUserCreated extends EventHandler('on.user.created', UserCreated) {
10
+ * handle(event: UserCreated): void {
11
+ * event.payload.email
12
+ * }
13
+ * }
14
+ * ```
15
+ */
16
+ export declare function EventHandler<const Token extends string, E extends EventConstructor>(token: Token, event: E): (abstract new () => {
17
+ /** Nominal marker. Each `EventHandler(...)` call is a distinct class. */
18
+ readonly "__#private@#brand": true;
19
+ /**
20
+ * Required. Annotate `event` with the event class passed to
21
+ * {@link EventHandler}. Return `void` or `Promise<void>`.
22
+ */
23
+ handle(event: EventInstanceOf<E>): Promise<void> | void;
24
+ }) & {
25
+ /** Handler name. Literal type of the string passed to {@link EventHandler}. */
26
+ readonly token: Token;
27
+ /** Event class this handler receives. */
28
+ readonly event: E;
29
+ };
30
+ export {};
31
+ //# sourceMappingURL=event-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-handler.d.ts","sourceRoot":"","sources":["../src/event-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD,KAAK,eAAe,CAAC,KAAK,IAAI,KAAK,SAAS,QAAQ,MAClD,GAAG,IAAI,EAAE,KAAK,EAAE,KACb,MAAM,QAAQ,GACf,QAAQ,GACR,KAAK,CAAC;AAEV;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAC1B,KAAK,CAAC,KAAK,SAAS,MAAM,EAC1B,CAAC,SAAS,gBAAgB,EAC1B,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAQpB,yEAAyE;kCACvD,IAAI;IAMtB;;;OAGG;uCAC+B,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;;IAftD,+EAA+E;oBACxD,KAAK;IAC5B,yCAAyC;oBAClB,CAAC;EAgB3B"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Application service for one event. Pass ports through the constructor.
3
+ * `handle` is required; the compiler errors on the class when it is missing.
4
+ * Annotate the event parameter with the event class.
5
+ *
6
+ * ```ts
7
+ * class OnUserCreated extends EventHandler('on.user.created', UserCreated) {
8
+ * handle(event: UserCreated): void {
9
+ * event.payload.email
10
+ * }
11
+ * }
12
+ * ```
13
+ */
14
+ export function EventHandler(token, event) {
15
+ class HandlerClass {
16
+ /** Handler name. Literal type of the string passed to {@link EventHandler}. */
17
+ static token = token;
18
+ /** Event class this handler receives. */
19
+ static event = event;
20
+ /** Nominal marker. Each `EventHandler(...)` call is a distinct class. */
21
+ #brand = true;
22
+ constructor() {
23
+ void this.#brand;
24
+ }
25
+ }
26
+ return HandlerClass;
27
+ }
28
+ //# sourceMappingURL=event-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-handler.js","sourceRoot":"","sources":["../src/event-handler.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAG1B,KAAY,EAAE,KAAQ;IAGtB,MAAe,YAAY;QACzB,+EAA+E;QAC/E,MAAM,CAAU,KAAK,GAAU,KAAK,CAAC;QACrC,yCAAyC;QACzC,MAAM,CAAU,KAAK,GAAM,KAAK,CAAC;QACjC,yEAAyE;QAChE,MAAM,GAAG,IAAI,CAAC;QAEvB;YACE,KAAK,IAAI,CAAC,MAAM,CAAC;QACnB,CAAC;;IASH,OAAO,YAAY,CAAC;AACtB,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { type InferSchema, type ResolvedSchema, type SchemaSource } from './schema.js';
2
+ /**
3
+ * A fact the domain records. The token and payload schema are arguments.
4
+ * `new` trusts an already-typed payload. `parse` validates unknown input.
5
+ *
6
+ * ```ts
7
+ * class UserCreated extends Event('user.created', userSchema) {}
8
+ * ```
9
+ */
10
+ export declare function Event<const Token extends string, S extends SchemaSource>(token: Token, schema: S): {
11
+ new (payload: InferSchema<S>): {
12
+ /** Nominal marker. Each `Event(...)` call is a distinct class. */
13
+ readonly "__#private@#brand": true;
14
+ /** Event name. Same literal as the static token. */
15
+ readonly token: Token;
16
+ /** Typed payload. Not validated in the constructor. */
17
+ readonly payload: InferSchema<S>;
18
+ };
19
+ /** Event name. Literal type of the string passed to {@link Event}. */
20
+ readonly token: Token;
21
+ /** Payload schema. A Schema class is stored as its definition. */
22
+ readonly schema: ResolvedSchema<S>;
23
+ /**
24
+ * Validate `value` and construct an event.
25
+ * Throws `CodedError` `VALIDATION` when the schema rejects it.
26
+ * A subclass receives its own instance. Override to customize the boundary.
27
+ */
28
+ parse<T extends {
29
+ /** Nominal marker. Each `Event(...)` call is a distinct class. */
30
+ readonly "__#private@#brand": true;
31
+ /** Event name. Same literal as the static token. */
32
+ readonly token: Token;
33
+ /** Typed payload. Not validated in the constructor. */
34
+ readonly payload: InferSchema<S>;
35
+ }>(this: new (payload: InferSchema<S>) => T, value: unknown): T;
36
+ };
37
+ //# sourceMappingURL=event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../src/event.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,YAAY,EAElB,MAAM,aAAa,CAAC;AAGrB;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,KAAK,CAAC,KAAK,SAAS,MAAM,EAAE,CAAC,SAAS,YAAY,EACtE,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,CAAC;kBAiBc,WAAW,CAAC,CAAC,CAAC;QAPnC,kEAAkE;sCAChD,IAAI;QACtB,oDAAoD;wBACpC,KAAK;QACrB,uDAAuD;0BACrC,WAAW,CAAC,CAAC,CAAC;;IAVhC,sEAAsE;oBAC/C,KAAK;IAC5B,kEAAkE;qBAC1C,cAAc,CAAC,CAAC,CAAC;IAczC;;;;OAIG;UACU,CAAC;QAjBd,kEAAkE;sCAChD,IAAI;QACtB,oDAAoD;wBACpC,KAAK;QACrB,uDAAuD;0BACrC,WAAW,CAAC,CAAC,CAAC;aAaxB,KACJ,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,KACpB,CAAC,SACC,OAAO,GACb,CAAC;EAaP"}
package/dist/event.js ADDED
@@ -0,0 +1,44 @@
1
+ import { validationError } from './coded-error.js';
2
+ import { schemaDefinition, } from './schema.js';
3
+ import { validate } from './validate.js';
4
+ /**
5
+ * A fact the domain records. The token and payload schema are arguments.
6
+ * `new` trusts an already-typed payload. `parse` validates unknown input.
7
+ *
8
+ * ```ts
9
+ * class UserCreated extends Event('user.created', userSchema) {}
10
+ * ```
11
+ */
12
+ export function Event(token, schema) {
13
+ const definition = schemaDefinition(schema);
14
+ class EventClass {
15
+ /** Event name. Literal type of the string passed to {@link Event}. */
16
+ static token = token;
17
+ /** Payload schema. A Schema class is stored as its definition. */
18
+ static schema = definition;
19
+ /** Nominal marker. Each `Event(...)` call is a distinct class. */
20
+ #brand = true;
21
+ /** Event name. Same literal as the static token. */
22
+ token = token;
23
+ /** Typed payload. Not validated in the constructor. */
24
+ payload;
25
+ constructor(payload) {
26
+ this.payload = payload;
27
+ void this.#brand;
28
+ }
29
+ /**
30
+ * Validate `value` and construct an event.
31
+ * Throws `CodedError` `VALIDATION` when the schema rejects it.
32
+ * A subclass receives its own instance. Override to customize the boundary.
33
+ */
34
+ static parse(value) {
35
+ const parsed = validate(definition, value);
36
+ if (!parsed.ok) {
37
+ throw validationError(`hexok: ${token} validation failed`, parsed.issues);
38
+ }
39
+ return new this(parsed.value);
40
+ }
41
+ }
42
+ return EventClass;
43
+ }
44
+ //# sourceMappingURL=event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.js","sourceRoot":"","sources":["../src/event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAIL,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;;;;;GAOG;AACH,MAAM,UAAU,KAAK,CACnB,KAAY,EACZ,MAAS;IAET,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAE5C,MAAM,UAAU;QACd,sEAAsE;QACtE,MAAM,CAAU,KAAK,GAAU,KAAK,CAAC;QACrC,kEAAkE;QAClE,MAAM,CAAU,MAAM,GAAsB,UAAU,CAAC;QAEvD,kEAAkE;QACzD,MAAM,GAAG,IAAI,CAAC;QACvB,oDAAoD;QAC3C,KAAK,GAAU,KAAK,CAAC;QAC9B,uDAAuD;QAC9C,OAAO,CAAiB;QAEjC,YAAY,OAAuB;YACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,KAAK,IAAI,CAAC,MAAM,CAAC;QACnB,CAAC;QAED;;;;WAIG;QACH,MAAM,CAAC,KAAK,CAIV,KAAc;YAEd,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,eAAe,CACnB,UAAU,KAAK,oBAAoB,EACnC,MAAM,CAAC,MAAM,CACd,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,KAAuB,CAAC,CAAC;QAClD,CAAC;;IAGH,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -0,0 +1,16 @@
1
+ export { Adapter } from './adapter.js';
2
+ export { EventCatalog, type EventInstance, type EventMessage, } from './catalog.js';
3
+ export { CodedError, validationError } from './coded-error.js';
4
+ export { type DeepReadonly, Entity, type EntityInstance } from './entity.js';
5
+ export type { ErrorDef, ErrorMap } from './error-map.js';
6
+ export { type CatalogMember, type CatalogUnion, catalogBrand, Errors, type ErrorsHandle, } from './errors.js';
7
+ export { Event } from './event.js';
8
+ export { EventHandler } from './event-handler.js';
9
+ export { Mapper, type MapperClass } from './mapper.js';
10
+ export { Port } from './port.js';
11
+ export { fail, ok, type Result } from './result.js';
12
+ export { type InferSchema, Schema, type SchemaSource } from './schema.js';
13
+ export type { StandardSchemaV1 } from './standard-schema.js';
14
+ export { UseCase } from './use-case.js';
15
+ export { type Infer, validate } from './validate.js';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EACL,YAAY,EACZ,KAAK,aAAa,EAClB,KAAK,YAAY,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7E,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,YAAY,EACZ,MAAM,EACN,KAAK,YAAY,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1E,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,KAAK,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,14 @@
1
+ export { Adapter } from './adapter.js';
2
+ export { EventCatalog, } from './catalog.js';
3
+ export { CodedError, validationError } from './coded-error.js';
4
+ export { Entity } from './entity.js';
5
+ export { catalogBrand, Errors, } from './errors.js';
6
+ export { Event } from './event.js';
7
+ export { EventHandler } from './event-handler.js';
8
+ export { Mapper } from './mapper.js';
9
+ export { Port } from './port.js';
10
+ export { fail, ok } from './result.js';
11
+ export { Schema } from './schema.js';
12
+ export { UseCase } from './use-case.js';
13
+ export { validate } from './validate.js';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EACL,YAAY,GAGb,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAqB,MAAM,EAAuB,MAAM,aAAa,CAAC;AAE7E,OAAO,EAGL,YAAY,EACZ,MAAM,GAEP,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAoB,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAe,MAAM,aAAa,CAAC;AACpD,OAAO,EAAoB,MAAM,EAAqB,MAAM,aAAa,CAAC;AAE1E,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAc,QAAQ,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,100 @@
1
+ import { type InferSchema, type ResolvedSchema, type SchemaSource } from './schema.js';
2
+ import type { StandardSchemaV1 } from './standard-schema.js';
3
+ /** Instance type of a constructor. Raw schemas have no prototype, so this is `never`. */
4
+ type PrototypeOf<T> = T extends {
5
+ readonly prototype: infer P;
6
+ } ? P : never;
7
+ /**
8
+ * Entity instances expose `props` and `toProps`.
9
+ * A missing prototype is `never`, and `never extends …` is true, so raw schemas are excluded.
10
+ */
11
+ type IsEntity<T> = [PrototypeOf<T>] extends [never] ? false : PrototypeOf<T> extends {
12
+ readonly props: object;
13
+ toProps(): unknown;
14
+ } ? true : false;
15
+ /** Value `fromSource` receives and `fromModel` returns. */
16
+ type SourceModel<T> = IsEntity<T> extends true ? PrototypeOf<T> : T extends SchemaSource ? InferSchema<T> : never;
17
+ /** Draft `toSource` returns. Entities yield props; the kit builds the instance. */
18
+ type SourceDraft<T> = IsEntity<T> extends true ? T extends {
19
+ readonly schema: infer S extends SchemaSource;
20
+ } ? InferSchema<S> : never : T extends SchemaSource ? InferSchema<T> : never;
21
+ type MapperOptions = {
22
+ readonly validate?: boolean;
23
+ };
24
+ /**
25
+ * Instance base of {@link Mapper}. Exported so declaration emit can name it.
26
+ * An anonymous base cannot publish protected `fromSource` or `toSource` (TS4094).
27
+ * Extend {@link Mapper}, not this class.
28
+ */
29
+ export declare abstract class MapperClass<Token extends string, Source, Stored extends SchemaSource> {
30
+ #private;
31
+ /** Mapper name. Literal type of the string passed to {@link Mapper}. */
32
+ static readonly token: string;
33
+ /** Stored Standard Schema. A Schema class is stored as its definition. */
34
+ static readonly schema: StandardSchemaV1;
35
+ /** Entity, Schema class, or Standard Schema this mapper reads and builds. */
36
+ static readonly source: unknown;
37
+ protected constructor(brand: Token);
38
+ /**
39
+ * Source to an unchecked model draft.
40
+ * An entity source receives the instance. A schema source receives its output.
41
+ */
42
+ protected abstract fromSource(source: SourceModel<Source>): unknown;
43
+ /**
44
+ * Model output to a source draft.
45
+ * An entity draft is props. A schema draft is that schema's output.
46
+ */
47
+ protected abstract toSource(model: InferSchema<Stored>): SourceDraft<Source>;
48
+ /**
49
+ * Run `fromSource`. With `{ validate: true }`, check the draft against the model schema.
50
+ * A failure throws `CodedError` `VALIDATION` using this mapper's token.
51
+ * Do not override.
52
+ */
53
+ toModel(source: SourceModel<Source>, options?: MapperOptions): InferSchema<Stored>;
54
+ /**
55
+ * Run `toSource` and build the source.
56
+ * With `{ validate: true }`, check `value` against the model schema first.
57
+ * An entity is then `parse`d. Otherwise an entity is `restore`d.
58
+ * Do not override.
59
+ */
60
+ fromModel(value: unknown, options?: MapperOptions): SourceModel<Source>;
61
+ }
62
+ type MapperCtor<Token extends string, Source, Stored extends SchemaSource> = (abstract new () => MapperClass<Token, Source, Stored>) & {
63
+ readonly token: Token;
64
+ readonly schema: ResolvedSchema<Stored>;
65
+ readonly source: Source;
66
+ };
67
+ /**
68
+ * Persistence translator. An adapter maps the source a port speaks — an
69
+ * entity, a Schema class, or a Standard Schema — to the shape that adapter
70
+ * stores. Domain code does not import the stored schema. The mapper is
71
+ * stateless; do not `commit()` inside it. The adapter commits after the
72
+ * driver succeeds.
73
+ *
74
+ * The subclass writes `fromSource` and `toSource`. Adapters call `toModel` and
75
+ * `fromModel` and do not override them. Checks are off. Pass
76
+ * `{ validate: true }` to the factory or to a call to run the model schema.
77
+ * A checked `fromModel` uses `parse`. The default restores an entity.
78
+ *
79
+ * ```ts
80
+ * class MongoUser extends Mapper('mongo.User', User, mongoUserSchema) {
81
+ * protected fromSource(user: User) {
82
+ * const props = user.toProps()
83
+ * const [lat, lng] = props.location
84
+ * return {
85
+ * _id: props.id,
86
+ * name: props.name,
87
+ * location: { type: 'Point' as const, coordinates: [lng, lat] },
88
+ * }
89
+ * }
90
+ *
91
+ * protected toSource(doc: MongoUserDoc) {
92
+ * const [lng, lat] = doc.location.coordinates
93
+ * return { id: doc._id, name: doc.name, location: [lat, lng] }
94
+ * }
95
+ * }
96
+ * ```
97
+ */
98
+ export declare function Mapper<const Token extends string, Source, Stored extends SchemaSource>(token: Token, source: Source, storedSchema: Stored, options?: MapperOptions): MapperCtor<Token, Source, Stored>;
99
+ export {};
100
+ //# sourceMappingURL=mapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapper.d.ts","sourceRoot":"","sources":["../src/mapper.ts"],"names":[],"mappings":"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"}