@ddd-ts-kit/events 0.0.0-stage → 0.1.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 (230) hide show
  1. package/README.md +462 -2
  2. package/dist/asyncapi/async-api-document.d.ts +15 -0
  3. package/dist/asyncapi/async-api-document.d.ts.map +1 -0
  4. package/dist/asyncapi/async-api-document.js +2 -0
  5. package/dist/asyncapi/async-api-document.js.map +1 -0
  6. package/dist/asyncapi/async-api-info.d.ts +6 -0
  7. package/dist/asyncapi/async-api-info.d.ts.map +1 -0
  8. package/dist/asyncapi/async-api-info.js +2 -0
  9. package/dist/asyncapi/async-api-info.js.map +1 -0
  10. package/dist/asyncapi/async-api-server.d.ts +7 -0
  11. package/dist/asyncapi/async-api-server.d.ts.map +1 -0
  12. package/dist/asyncapi/async-api-server.js +2 -0
  13. package/dist/asyncapi/async-api-server.js.map +1 -0
  14. package/dist/asyncapi/check-async-api-drift.d.ts +6 -0
  15. package/dist/asyncapi/check-async-api-drift.d.ts.map +1 -0
  16. package/dist/asyncapi/check-async-api-drift.js +6 -0
  17. package/dist/asyncapi/check-async-api-drift.js.map +1 -0
  18. package/dist/asyncapi/generate-async-api.d.ts +16 -0
  19. package/dist/asyncapi/generate-async-api.d.ts.map +1 -0
  20. package/dist/asyncapi/generate-async-api.js +116 -0
  21. package/dist/asyncapi/generate-async-api.js.map +1 -0
  22. package/dist/asyncapi/stringify-async-api.d.ts +4 -0
  23. package/dist/asyncapi/stringify-async-api.d.ts.map +1 -0
  24. package/dist/asyncapi/stringify-async-api.js +5 -0
  25. package/dist/asyncapi/stringify-async-api.js.map +1 -0
  26. package/dist/asyncapi.d.ts +7 -0
  27. package/dist/asyncapi.d.ts.map +1 -0
  28. package/dist/asyncapi.js +7 -0
  29. package/dist/asyncapi.js.map +1 -0
  30. package/dist/catalog/generate-event-catalog.d.ts +12 -0
  31. package/dist/catalog/generate-event-catalog.d.ts.map +1 -0
  32. package/dist/catalog/generate-event-catalog.js +63 -0
  33. package/dist/catalog/generate-event-catalog.js.map +1 -0
  34. package/dist/catalog/payload-field.d.ts +8 -0
  35. package/dist/catalog/payload-field.d.ts.map +1 -0
  36. package/dist/catalog/payload-field.js +2 -0
  37. package/dist/catalog/payload-field.js.map +1 -0
  38. package/dist/catalog/payload-fields.d.ts +7 -0
  39. package/dist/catalog/payload-fields.d.ts.map +1 -0
  40. package/dist/catalog/payload-fields.js +105 -0
  41. package/dist/catalog/payload-fields.js.map +1 -0
  42. package/dist/definition/any-integration-event-definition.d.ts +4 -0
  43. package/dist/definition/any-integration-event-definition.d.ts.map +1 -0
  44. package/dist/definition/any-integration-event-definition.js +2 -0
  45. package/dist/definition/any-integration-event-definition.js.map +1 -0
  46. package/dist/definition/define-integration-event.d.ts +15 -0
  47. package/dist/definition/define-integration-event.d.ts.map +1 -0
  48. package/dist/definition/define-integration-event.js +73 -0
  49. package/dist/definition/define-integration-event.js.map +1 -0
  50. package/dist/definition/event-meta.d.ts +7 -0
  51. package/dist/definition/event-meta.d.ts.map +1 -0
  52. package/dist/definition/event-meta.js +2 -0
  53. package/dist/definition/event-meta.js.map +1 -0
  54. package/dist/definition/event-parse-error.d.ts +14 -0
  55. package/dist/definition/event-parse-error.d.ts.map +1 -0
  56. package/dist/definition/event-parse-error.js +2 -0
  57. package/dist/definition/event-parse-error.js.map +1 -0
  58. package/dist/definition/integration-event-definition.d.ts +20 -0
  59. package/dist/definition/integration-event-definition.d.ts.map +1 -0
  60. package/dist/definition/integration-event-definition.js +2 -0
  61. package/dist/definition/integration-event-definition.js.map +1 -0
  62. package/dist/definition/invalid-event-definition-error.d.ts +4 -0
  63. package/dist/definition/invalid-event-definition-error.d.ts.map +1 -0
  64. package/dist/definition/invalid-event-definition-error.js +7 -0
  65. package/dist/definition/invalid-event-definition-error.js.map +1 -0
  66. package/dist/definition/invalid-event-payload-error.d.ts +9 -0
  67. package/dist/definition/invalid-event-payload-error.d.ts.map +1 -0
  68. package/dist/definition/invalid-event-payload-error.js +16 -0
  69. package/dist/definition/invalid-event-payload-error.js.map +1 -0
  70. package/dist/definition/payload-of.d.ts +3 -0
  71. package/dist/definition/payload-of.d.ts.map +1 -0
  72. package/dist/definition/payload-of.js +2 -0
  73. package/dist/definition/payload-of.js.map +1 -0
  74. package/dist/index.d.ts +37 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +37 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/internal/json-schema/as-schema.d.ts +3 -0
  79. package/dist/internal/json-schema/as-schema.d.ts.map +1 -0
  80. package/dist/internal/json-schema/as-schema.js +5 -0
  81. package/dist/internal/json-schema/as-schema.js.map +1 -0
  82. package/dist/internal/json-schema/compare-text.d.ts +2 -0
  83. package/dist/internal/json-schema/compare-text.d.ts.map +1 -0
  84. package/dist/internal/json-schema/compare-text.js +5 -0
  85. package/dist/internal/json-schema/compare-text.js.map +1 -0
  86. package/dist/internal/json-schema/is-record.d.ts +2 -0
  87. package/dist/internal/json-schema/is-record.d.ts.map +1 -0
  88. package/dist/internal/json-schema/is-record.js +4 -0
  89. package/dist/internal/json-schema/is-record.js.map +1 -0
  90. package/dist/internal/json-schema/local-ref-name.d.ts +3 -0
  91. package/dist/internal/json-schema/local-ref-name.d.ts.map +1 -0
  92. package/dist/internal/json-schema/local-ref-name.js +6 -0
  93. package/dist/internal/json-schema/local-ref-name.js.map +1 -0
  94. package/dist/internal/json-schema/rewrite-local-refs.d.ts +2 -0
  95. package/dist/internal/json-schema/rewrite-local-refs.d.ts.map +1 -0
  96. package/dist/internal/json-schema/rewrite-local-refs.js +19 -0
  97. package/dist/internal/json-schema/rewrite-local-refs.js.map +1 -0
  98. package/dist/internal/json-schema/sort-keys.d.ts +2 -0
  99. package/dist/internal/json-schema/sort-keys.d.ts.map +1 -0
  100. package/dist/internal/json-schema/sort-keys.js +5 -0
  101. package/dist/internal/json-schema/sort-keys.js.map +1 -0
  102. package/dist/internal/json-schema/split-definitions.d.ts +8 -0
  103. package/dist/internal/json-schema/split-definitions.d.ts.map +1 -0
  104. package/dist/internal/json-schema/split-definitions.js +13 -0
  105. package/dist/internal/json-schema/split-definitions.js.map +1 -0
  106. package/dist/outbox/duplicate-outbox-event-error.d.ts +5 -0
  107. package/dist/outbox/duplicate-outbox-event-error.d.ts.map +1 -0
  108. package/dist/outbox/duplicate-outbox-event-error.js +8 -0
  109. package/dist/outbox/duplicate-outbox-event-error.js.map +1 -0
  110. package/dist/outbox/in-memory-outbox-store.d.ts +32 -0
  111. package/dist/outbox/in-memory-outbox-store.d.ts.map +1 -0
  112. package/dist/outbox/in-memory-outbox-store.js +121 -0
  113. package/dist/outbox/in-memory-outbox-store.js.map +1 -0
  114. package/dist/outbox/outbox-publisher.d.ts +14 -0
  115. package/dist/outbox/outbox-publisher.d.ts.map +1 -0
  116. package/dist/outbox/outbox-publisher.js +18 -0
  117. package/dist/outbox/outbox-publisher.js.map +1 -0
  118. package/dist/outbox/outbox-record.d.ts +14 -0
  119. package/dist/outbox/outbox-record.d.ts.map +1 -0
  120. package/dist/outbox/outbox-record.js +2 -0
  121. package/dist/outbox/outbox-record.js.map +1 -0
  122. package/dist/outbox/outbox-stats.d.ts +9 -0
  123. package/dist/outbox/outbox-stats.d.ts.map +1 -0
  124. package/dist/outbox/outbox-stats.js +2 -0
  125. package/dist/outbox/outbox-stats.js.map +1 -0
  126. package/dist/outbox/outbox-status.d.ts +2 -0
  127. package/dist/outbox/outbox-status.d.ts.map +1 -0
  128. package/dist/outbox/outbox-status.js +2 -0
  129. package/dist/outbox/outbox-status.js.map +1 -0
  130. package/dist/outbox/outbox-store.d.ts +33 -0
  131. package/dist/outbox/outbox-store.d.ts.map +1 -0
  132. package/dist/outbox/outbox-store.js +13 -0
  133. package/dist/outbox/outbox-store.js.map +1 -0
  134. package/dist/publishing/unknown-event-error.d.ts +7 -0
  135. package/dist/publishing/unknown-event-error.d.ts.map +1 -0
  136. package/dist/publishing/unknown-event-error.js +12 -0
  137. package/dist/publishing/unknown-event-error.js.map +1 -0
  138. package/dist/publishing/validating-publisher.d.ts +12 -0
  139. package/dist/publishing/validating-publisher.d.ts.map +1 -0
  140. package/dist/publishing/validating-publisher.js +33 -0
  141. package/dist/publishing/validating-publisher.js.map +1 -0
  142. package/dist/registry/create-event-registry.d.ts +4 -0
  143. package/dist/registry/create-event-registry.d.ts.map +1 -0
  144. package/dist/registry/create-event-registry.js +5 -0
  145. package/dist/registry/create-event-registry.js.map +1 -0
  146. package/dist/registry/duplicate-event-definition-error.d.ts +4 -0
  147. package/dist/registry/duplicate-event-definition-error.d.ts.map +1 -0
  148. package/dist/registry/duplicate-event-definition-error.js +7 -0
  149. package/dist/registry/duplicate-event-definition-error.js.map +1 -0
  150. package/dist/registry/event-registry.d.ts +11 -0
  151. package/dist/registry/event-registry.d.ts.map +1 -0
  152. package/dist/registry/event-registry.js +33 -0
  153. package/dist/registry/event-registry.js.map +1 -0
  154. package/dist/relay/claim-window.d.ts +6 -0
  155. package/dist/relay/claim-window.d.ts.map +1 -0
  156. package/dist/relay/claim-window.js +2 -0
  157. package/dist/relay/claim-window.js.map +1 -0
  158. package/dist/relay/error-code.d.ts +6 -0
  159. package/dist/relay/error-code.d.ts.map +1 -0
  160. package/dist/relay/error-code.js +16 -0
  161. package/dist/relay/error-code.js.map +1 -0
  162. package/dist/relay/event-key.d.ts +3 -0
  163. package/dist/relay/event-key.d.ts.map +1 -0
  164. package/dist/relay/event-key.js +2 -0
  165. package/dist/relay/event-key.js.map +1 -0
  166. package/dist/relay/hold-until.d.ts +3 -0
  167. package/dist/relay/hold-until.d.ts.map +1 -0
  168. package/dist/relay/hold-until.js +2 -0
  169. package/dist/relay/hold-until.js.map +1 -0
  170. package/dist/relay/in-memory-relay-signal.d.ts +9 -0
  171. package/dist/relay/in-memory-relay-signal.d.ts.map +1 -0
  172. package/dist/relay/in-memory-relay-signal.js +13 -0
  173. package/dist/relay/in-memory-relay-signal.js.map +1 -0
  174. package/dist/relay/key-order.d.ts +35 -0
  175. package/dist/relay/key-order.d.ts.map +1 -0
  176. package/dist/relay/key-order.js +102 -0
  177. package/dist/relay/key-order.js.map +1 -0
  178. package/dist/relay/keyed-record.d.ts +6 -0
  179. package/dist/relay/keyed-record.d.ts.map +1 -0
  180. package/dist/relay/keyed-record.js +2 -0
  181. package/dist/relay/keyed-record.js.map +1 -0
  182. package/dist/relay/outbox-backoff.d.ts +9 -0
  183. package/dist/relay/outbox-backoff.d.ts.map +1 -0
  184. package/dist/relay/outbox-backoff.js +2 -0
  185. package/dist/relay/outbox-backoff.js.map +1 -0
  186. package/dist/relay/outbox-ordering.d.ts +7 -0
  187. package/dist/relay/outbox-ordering.d.ts.map +1 -0
  188. package/dist/relay/outbox-ordering.js +2 -0
  189. package/dist/relay/outbox-ordering.js.map +1 -0
  190. package/dist/relay/outbox-relay-failure.d.ts +12 -0
  191. package/dist/relay/outbox-relay-failure.d.ts.map +1 -0
  192. package/dist/relay/outbox-relay-failure.js +2 -0
  193. package/dist/relay/outbox-relay-failure.js.map +1 -0
  194. package/dist/relay/outbox-relay.d.ts +85 -0
  195. package/dist/relay/outbox-relay.d.ts.map +1 -0
  196. package/dist/relay/outbox-relay.js +193 -0
  197. package/dist/relay/outbox-relay.js.map +1 -0
  198. package/dist/relay/record-group.d.ts +6 -0
  199. package/dist/relay/record-group.d.ts.map +1 -0
  200. package/dist/relay/record-group.js +2 -0
  201. package/dist/relay/record-group.js.map +1 -0
  202. package/dist/relay/relay-signal.d.ts +15 -0
  203. package/dist/relay/relay-signal.d.ts.map +1 -0
  204. package/dist/relay/relay-signal.js +12 -0
  205. package/dist/relay/relay-signal.js.map +1 -0
  206. package/dist/subscription/consume.d.ts +18 -0
  207. package/dist/subscription/consume.d.ts.map +1 -0
  208. package/dist/subscription/consume.js +10 -0
  209. package/dist/subscription/consume.js.map +1 -0
  210. package/dist/subscription/event-scope-options.d.ts +13 -0
  211. package/dist/subscription/event-scope-options.d.ts.map +1 -0
  212. package/dist/subscription/event-scope-options.js +2 -0
  213. package/dist/subscription/event-scope-options.js.map +1 -0
  214. package/dist/subscription/event-subscription.d.ts +6 -0
  215. package/dist/subscription/event-subscription.d.ts.map +1 -0
  216. package/dist/subscription/event-subscription.js +2 -0
  217. package/dist/subscription/event-subscription.js.map +1 -0
  218. package/dist/subscription/on.d.ts +26 -0
  219. package/dist/subscription/on.d.ts.map +1 -0
  220. package/dist/subscription/on.js +62 -0
  221. package/dist/subscription/on.js.map +1 -0
  222. package/dist/subscription/releasable-processed-event-store.d.ts +14 -0
  223. package/dist/subscription/releasable-processed-event-store.d.ts.map +1 -0
  224. package/dist/subscription/releasable-processed-event-store.js +2 -0
  225. package/dist/subscription/releasable-processed-event-store.js.map +1 -0
  226. package/dist/subscription/subscribe-all.d.ts +5 -0
  227. package/dist/subscription/subscribe-all.d.ts.map +1 -0
  228. package/dist/subscription/subscribe-all.js +12 -0
  229. package/dist/subscription/subscribe-all.js.map +1 -0
  230. package/package.json +37 -4
@@ -0,0 +1,116 @@
1
+ import { asSchema } from '../internal/json-schema/as-schema.js';
2
+ import { compareText } from '../internal/json-schema/compare-text.js';
3
+ import { rewriteLocalRefs } from '../internal/json-schema/rewrite-local-refs.js';
4
+ import { sortKeys } from '../internal/json-schema/sort-keys.js';
5
+ import { splitDefinitions } from '../internal/json-schema/split-definitions.js';
6
+ /**
7
+ * One channel per event type (its address is the type), one message per version, one `send`
8
+ * operation per channel. The output depends only on the registry content, never on the
9
+ * registration order, so the document can be committed and diffed in CI.
10
+ */
11
+ export function generateAsyncApi(options) {
12
+ const channels = {};
13
+ const operations = {};
14
+ const messages = {};
15
+ const schemas = {};
16
+ for (const [type, versions] of groupByType(options.registry.all())) {
17
+ const channelMessages = collectMessages(versions, { messages, schemas });
18
+ channels[type] = channel(type, versions.at(-1)?.description, channelMessages);
19
+ operations[`send.${type}`] = sendOperation(type, channelMessages);
20
+ }
21
+ return {
22
+ asyncapi: '3.0.0',
23
+ info: infoOf(options.info),
24
+ ...(options.servers === undefined ? {} : { servers: sortKeys(options.servers) }),
25
+ channels,
26
+ operations,
27
+ components: {
28
+ messages,
29
+ ...(Object.keys(schemas).length === 0 ? {} : { schemas: sortKeys(schemas) }),
30
+ },
31
+ };
32
+ }
33
+ // `all()` is sorted by type then version, so the groups and their content come out sorted.
34
+ function groupByType(definitions) {
35
+ const groups = new Map();
36
+ for (const definition of definitions) {
37
+ groups.set(definition.type, [...(groups.get(definition.type) ?? []), definition]);
38
+ }
39
+ return groups;
40
+ }
41
+ /** Adds every version to the components and returns the references the channel lists. */
42
+ function collectMessages(versions, components) {
43
+ const channelMessages = {};
44
+ for (const definition of versions) {
45
+ const messageId = `${definition.type}.v${definition.version}`;
46
+ components.messages[messageId] = message(definition, messageId, components.schemas);
47
+ channelMessages[`v${definition.version}`] = { $ref: `#/components/messages/${messageId}` };
48
+ }
49
+ return channelMessages;
50
+ }
51
+ function message(definition, messageId, schemas) {
52
+ return {
53
+ name: definition.type,
54
+ title: `${definition.type} v${definition.version}`,
55
+ ...(definition.description === undefined ? {} : { summary: definition.description }),
56
+ ...(definition.deprecated ? { deprecated: true } : {}),
57
+ contentType: 'application/json',
58
+ tags: [{ name: definition.producer }],
59
+ payload: envelope(definition, payloadSchema(definition, messageId, schemas)),
60
+ };
61
+ }
62
+ /**
63
+ * Local definitions (`$defs`) of a payload schema are moved to `components.schemas` under the
64
+ * message id, because a `#/$defs/...` pointer means nothing once the schema is embedded.
65
+ */
66
+ function payloadSchema(definition, messageId, schemas) {
67
+ const { schema, definitions } = splitDefinitions(definition.payload.toJsonSchema());
68
+ const names = Object.keys(definitions).sort(compareText);
69
+ const rename = (name) => names.includes(name) ? `#/components/schemas/${messageId}.${name}` : undefined;
70
+ for (const name of names) {
71
+ schemas[`${messageId}.${name}`] = asSchema(rewriteLocalRefs(definitions[name], rename));
72
+ }
73
+ return asSchema(rewriteLocalRefs(schema, rename));
74
+ }
75
+ function envelope(definition, payload) {
76
+ return {
77
+ type: 'object',
78
+ required: ['id', 'type', 'version', 'occurredAt', 'payload'],
79
+ properties: {
80
+ id: { type: 'string', description: 'Unique id of the event: the idempotency key.' },
81
+ type: { type: 'string', const: definition.type },
82
+ version: { type: 'integer', const: definition.version },
83
+ occurredAt: { type: 'string', format: 'date-time' },
84
+ payload,
85
+ traceparent: {
86
+ type: 'string',
87
+ description: 'W3C traceparent captured at publication.',
88
+ },
89
+ correlationId: { type: 'string' },
90
+ },
91
+ };
92
+ }
93
+ function channel(type, description, channelMessages) {
94
+ return {
95
+ address: type,
96
+ ...(description === undefined ? {} : { description }),
97
+ messages: channelMessages,
98
+ };
99
+ }
100
+ function sendOperation(type, channelMessages) {
101
+ return {
102
+ action: 'send',
103
+ channel: { $ref: `#/channels/${type}` },
104
+ messages: Object.keys(channelMessages).map((key) => ({
105
+ $ref: `#/channels/${type}/messages/${key}`,
106
+ })),
107
+ };
108
+ }
109
+ function infoOf(info) {
110
+ return {
111
+ title: info.title,
112
+ version: info.version,
113
+ ...(info.description === undefined ? {} : { description: info.description }),
114
+ };
115
+ }
116
+ //# sourceMappingURL=generate-async-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-async-api.js","sourceRoot":"","sources":["../../src/asyncapi/generate-async-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { AsyncApiDocument } from './async-api-document.js';
2
+ /** The exact bytes to commit: two-space JSON and a trailing newline. */
3
+ export declare function stringifyAsyncApi(document: AsyncApiDocument): string;
4
+ //# sourceMappingURL=stringify-async-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringify-async-api.d.ts","sourceRoot":"","sources":["../../src/asyncapi/stringify-async-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,wEAAwE;AACxE,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,CAEpE"}
@@ -0,0 +1,5 @@
1
+ /** The exact bytes to commit: two-space JSON and a trailing newline. */
2
+ export function stringifyAsyncApi(document) {
3
+ return `${JSON.stringify(document, null, 2)}\n`;
4
+ }
5
+ //# sourceMappingURL=stringify-async-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringify-async-api.js","sourceRoot":"","sources":["../../src/asyncapi/stringify-async-api.ts"],"names":[],"mappings":"AAEA,wEAAwE;AACxE,MAAM,UAAU,iBAAiB,CAAC,QAA0B;IAC1D,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AAClD,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './asyncapi/async-api-document.js';
2
+ export * from './asyncapi/async-api-info.js';
3
+ export * from './asyncapi/async-api-server.js';
4
+ export * from './asyncapi/check-async-api-drift.js';
5
+ export * from './asyncapi/generate-async-api.js';
6
+ export * from './asyncapi/stringify-async-api.js';
7
+ //# sourceMappingURL=asyncapi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asyncapi.d.ts","sourceRoot":"","sources":["../src/asyncapi.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qCAAqC,CAAC;AACpD,cAAc,kCAAkC,CAAC;AACjD,cAAc,mCAAmC,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './asyncapi/async-api-document.js';
2
+ export * from './asyncapi/async-api-info.js';
3
+ export * from './asyncapi/async-api-server.js';
4
+ export * from './asyncapi/check-async-api-drift.js';
5
+ export * from './asyncapi/generate-async-api.js';
6
+ export * from './asyncapi/stringify-async-api.js';
7
+ //# sourceMappingURL=asyncapi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asyncapi.js","sourceRoot":"","sources":["../src/asyncapi.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qCAAqC,CAAC;AACpD,cAAc,kCAAkC,CAAC;AACjD,cAAc,mCAAmC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { EventRegistry } from '../registry/event-registry.js';
2
+ export interface EventCatalogOptions {
3
+ readonly title?: string;
4
+ /** Consuming contexts by event type. Declared by hand: a producer does not know them. */
5
+ readonly consumers?: Readonly<Record<string, readonly string[]>>;
6
+ }
7
+ /**
8
+ * A Markdown catalog of every declared event, grouped by producer context. Deterministic:
9
+ * commit the file and let CI fail when the regenerated content differs.
10
+ */
11
+ export declare function generateEventCatalog(registry: EventRegistry, options?: EventCatalogOptions): string;
12
+ //# sourceMappingURL=generate-event-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-event-catalog.d.ts","sourceRoot":"","sources":["../../src/catalog/generate-event-catalog.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAInE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,yFAAyF;IACzF,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;CAClE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,GAAE,mBAAwB,GAAG,MAAM,CAmBvG"}
@@ -0,0 +1,63 @@
1
+ import { compareText } from '../internal/json-schema/compare-text.js';
2
+ import { payloadFields } from './payload-fields.js';
3
+ /**
4
+ * A Markdown catalog of every declared event, grouped by producer context. Deterministic:
5
+ * commit the file and let CI fail when the regenerated content differs.
6
+ */
7
+ export function generateEventCatalog(registry, options = {}) {
8
+ const definitions = registry.all();
9
+ const producers = [...new Set(definitions.map((definition) => definition.producer))].sort(compareText);
10
+ const lines = [
11
+ `# ${options.title ?? 'Event catalog'}`,
12
+ '',
13
+ 'Generated from the integration event declarations. Do not edit by hand: regenerate.',
14
+ ...producers.flatMap((producer) => producerSection(producer, definitions.filter((definition) => definition.producer === producer), options)),
15
+ ];
16
+ return `${lines.join('\n')}\n`;
17
+ }
18
+ function producerSection(producer, owned, options) {
19
+ const types = [...new Set(owned.map((definition) => definition.type))];
20
+ return [
21
+ '',
22
+ `## ${producer}`,
23
+ ...types.flatMap((type) => eventSection(type, owned.filter((definition) => definition.type === type), options.consumers?.[type] ?? [])),
24
+ ];
25
+ }
26
+ function eventSection(type, versions, consumers) {
27
+ const names = [...consumers].sort(compareText);
28
+ return [
29
+ '',
30
+ `### ${type}`,
31
+ '',
32
+ ...versionsTable(versions),
33
+ ...(names.length === 0 ? [] : ['', `Consumers: ${names.map((name) => `\`${name}\``).join(', ')}`]),
34
+ ...versions.flatMap((definition) => [
35
+ '',
36
+ `#### Payload of version ${definition.version}`,
37
+ '',
38
+ ...payloadTable(payloadFields(definition.payload.toJsonSchema())),
39
+ ]),
40
+ ];
41
+ }
42
+ function versionsTable(versions) {
43
+ return table(['Type', 'Version', 'Description', 'Deprecated'], versions.map((definition) => [
44
+ `\`${definition.type}\``,
45
+ String(definition.version),
46
+ definition.description ?? '',
47
+ definition.deprecated ? 'yes' : 'no',
48
+ ]));
49
+ }
50
+ function payloadTable(fields) {
51
+ if (fields.length === 0) {
52
+ return ['No documented field.'];
53
+ }
54
+ return table(['Field', 'Type', 'Required', 'Description'], fields.map((field) => [`\`${field.path}\``, field.type, field.required ? 'yes' : 'no', field.description]));
55
+ }
56
+ function table(header, rows) {
57
+ const line = (cells) => `| ${cells.map(escapeCell).join(' | ')} |`;
58
+ return [line(header), line(header.map(() => '---')), ...rows.map(line)];
59
+ }
60
+ function escapeCell(text) {
61
+ return text.replaceAll('|', '\\|').replaceAll(/\s*\n\s*/g, ' ');
62
+ }
63
+ //# sourceMappingURL=generate-event-catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-event-catalog.js","sourceRoot":"","sources":["../../src/catalog/generate-event-catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface PayloadField {
2
+ /** Dotted path; an array is written `lines[]` and its item fields `lines[].sku`. */
3
+ readonly path: string;
4
+ readonly type: string;
5
+ readonly required: boolean;
6
+ readonly description: string;
7
+ }
8
+ //# sourceMappingURL=payload-field.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload-field.d.ts","sourceRoot":"","sources":["../../src/catalog/payload-field.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,oFAAoF;IACpF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=payload-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload-field.js","sourceRoot":"","sources":["../../src/catalog/payload-field.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import type { PayloadField } from './payload-field.js';
2
+ /**
3
+ * Flattens the object properties of a JSON Schema: nested objects with dotted paths, one
4
+ * level of arrays as `name[]`. Fields keep the order of the schema.
5
+ */
6
+ export declare function payloadFields(jsonSchema: Record<string, unknown>): PayloadField[];
7
+ //# sourceMappingURL=payload-fields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload-fields.d.ts","sourceRoot":"","sources":["../../src/catalog/payload-fields.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,EAAE,CAIjF"}
@@ -0,0 +1,105 @@
1
+ import { isRecord } from '../internal/json-schema/is-record.js';
2
+ import { localRefName } from '../internal/json-schema/local-ref-name.js';
3
+ import { splitDefinitions } from '../internal/json-schema/split-definitions.js';
4
+ /**
5
+ * Flattens the object properties of a JSON Schema: nested objects with dotted paths, one
6
+ * level of arrays as `name[]`. Fields keep the order of the schema.
7
+ */
8
+ export function payloadFields(jsonSchema) {
9
+ const { schema, definitions } = splitDefinitions(jsonSchema);
10
+ return fieldsOf(schema, '', { definitions, insideArray: false, visiting: [] });
11
+ }
12
+ function fieldsOf(node, prefix, walk) {
13
+ const resolved = resolve(node, walk);
14
+ if (resolved === undefined || !isRecord(resolved.schema['properties'])) {
15
+ return [];
16
+ }
17
+ const inner = resolved.walk;
18
+ const required = Array.isArray(resolved.schema['required']) ? resolved.schema['required'] : [];
19
+ return Object.entries(resolved.schema['properties']).flatMap(([name, property]) => {
20
+ const target = resolve(property, inner)?.schema ?? {};
21
+ const field = (path) => ({
22
+ path,
23
+ type: typeLabel(property, inner),
24
+ required: required.includes(name),
25
+ description: describe(property, target),
26
+ });
27
+ if (target['type'] !== 'array') {
28
+ return [field(prefix + name), ...fieldsOf(property, `${prefix}${name}.`, inner)];
29
+ }
30
+ const items = inner.insideArray
31
+ ? []
32
+ : fieldsOf(target['items'], `${prefix}${name}[].`, { ...inner, insideArray: true });
33
+ return [field(`${prefix}${name}[]`), ...items];
34
+ });
35
+ }
36
+ /** Follows local references and unwraps "X or null" down to the schema that has the shape. */
37
+ function resolve(node, walk) {
38
+ if (!isRecord(node)) {
39
+ return undefined;
40
+ }
41
+ const name = localRefName(node['$ref']);
42
+ if (name !== undefined) {
43
+ if (walk.visiting.includes(name)) {
44
+ return undefined;
45
+ }
46
+ return resolve(walk.definitions[name], { ...walk, visiting: [...walk.visiting, name] });
47
+ }
48
+ const meaningful = alternatives(node).filter((alternative) => !isRecord(alternative) || alternative['type'] !== 'null');
49
+ if (meaningful.length === 1 && alternatives(node).length > 1) {
50
+ return resolve(meaningful[0], walk);
51
+ }
52
+ return { schema: node, walk };
53
+ }
54
+ function alternatives(node) {
55
+ const list = node['anyOf'] ?? node['oneOf'];
56
+ return Array.isArray(list) ? list : [];
57
+ }
58
+ function typeLabel(node, walk) {
59
+ if (!isRecord(node)) {
60
+ return 'any';
61
+ }
62
+ const name = localRefName(node['$ref']);
63
+ if (name !== undefined) {
64
+ return walk.visiting.includes(name)
65
+ ? name
66
+ : typeLabel(walk.definitions[name], { ...walk, visiting: [...walk.visiting, name] });
67
+ }
68
+ const literal = literalLabel(node);
69
+ if (literal !== undefined) {
70
+ return literal;
71
+ }
72
+ const options = alternatives(node);
73
+ if (options.length > 0) {
74
+ return [...new Set(options.map((option) => typeLabel(option, walk)))].join(' | ');
75
+ }
76
+ return declaredTypeLabel(node, walk);
77
+ }
78
+ function literalLabel(node) {
79
+ if ('const' in node) {
80
+ return `const ${JSON.stringify(node['const'])}`;
81
+ }
82
+ if (Array.isArray(node['enum'])) {
83
+ return `enum (${node['enum'].map((value) => JSON.stringify(value)).join(', ')})`;
84
+ }
85
+ return undefined;
86
+ }
87
+ function declaredTypeLabel(node, walk) {
88
+ const type = node['type'];
89
+ if (Array.isArray(type)) {
90
+ return type.map(String).join(' | ');
91
+ }
92
+ if (type === 'array') {
93
+ return `array of ${typeLabel(node['items'], walk)}`;
94
+ }
95
+ if (typeof type !== 'string') {
96
+ return 'any';
97
+ }
98
+ return typeof node['format'] === 'string' ? `${type} (${node['format']})` : type;
99
+ }
100
+ function describe(property, target) {
101
+ const own = isRecord(property) ? property['description'] : undefined;
102
+ const description = own ?? target['description'];
103
+ return typeof description === 'string' ? description : '';
104
+ }
105
+ //# sourceMappingURL=payload-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload-fields.js","sourceRoot":"","sources":["../../src/catalog/payload-fields.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { IntegrationEventDefinition } from './integration-event-definition.js';
2
+ /** A definition whose payload type is not known statically (registry, generators). */
3
+ export type AnyIntegrationEventDefinition = IntegrationEventDefinition<unknown>;
4
+ //# sourceMappingURL=any-integration-event-definition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"any-integration-event-definition.d.ts","sourceRoot":"","sources":["../../src/definition/any-integration-event-definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAEpF,sFAAsF;AACtF,MAAM,MAAM,6BAA6B,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=any-integration-event-definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"any-integration-event-definition.js","sourceRoot":"","sources":["../../src/definition/any-integration-event-definition.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import type { Schema } from '@ddd-ts-kit/validation';
2
+ import type { IntegrationEventDefinition } from './integration-event-definition.js';
3
+ export interface DefineIntegrationEventOptions<P> {
4
+ /** Routing key, `<context>.<aggregate>.<fact>`, each segment in kebab-case. */
5
+ readonly type: string;
6
+ /** Positive integer, bumped on every breaking change of the payload. */
7
+ readonly version: number;
8
+ readonly payload: Schema<P>;
9
+ readonly description?: string;
10
+ /** The bounded context that owns the event. Defaults to the first segment of `type`. */
11
+ readonly producer?: string;
12
+ readonly deprecated?: boolean;
13
+ }
14
+ export declare function defineIntegrationEvent<P>(options: DefineIntegrationEventOptions<P>): IntegrationEventDefinition<P>;
15
+ //# sourceMappingURL=define-integration-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-integration-event.d.ts","sourceRoot":"","sources":["../../src/definition/define-integration-event.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAGrD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAIpF,MAAM,WAAW,6BAA6B,CAAC,CAAC;IAC9C,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,wFAAwF;IACxF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,OAAO,EAAE,6BAA6B,CAAC,CAAC,CAAC,GAAG,0BAA0B,CAAC,CAAC,CAAC,CAkBlH"}
@@ -0,0 +1,73 @@
1
+ import { err, ok } from '@ddd-ts-kit/kernel';
2
+ import { InvalidEventDefinitionError } from './invalid-event-definition-error.js';
3
+ import { InvalidEventPayloadError } from './invalid-event-payload-error.js';
4
+ export function defineIntegrationEvent(options) {
5
+ const { type, version, payload } = options;
6
+ assertTypeAndVersion(type, version);
7
+ const contract = { type, version, payload };
8
+ return {
9
+ ...contract,
10
+ producer: producerOf(options),
11
+ ...(options.description === undefined ? {} : { description: options.description }),
12
+ deprecated: options.deprecated === true,
13
+ create: (input, meta) => createEvent(contract, input, meta),
14
+ parse: (event) => parseEvent(contract, event),
15
+ is(event) {
16
+ return event.type === type && event.version === version;
17
+ },
18
+ };
19
+ }
20
+ const SEGMENT = '[a-z][a-z0-9]*(?:-[a-z0-9]+)*';
21
+ const EVENT_TYPE = new RegExp(`^${SEGMENT}\\.${SEGMENT}\\.${SEGMENT}$`);
22
+ const KEBAB_CASE = new RegExp(`^${SEGMENT}$`);
23
+ function assertTypeAndVersion(type, version) {
24
+ if (!EVENT_TYPE.test(type)) {
25
+ throw new InvalidEventDefinitionError(`Event type "${type}" must be <context>.<aggregate>.<fact> with kebab-case segments`);
26
+ }
27
+ if (!Number.isInteger(version) || version < 1) {
28
+ throw new InvalidEventDefinitionError(`Version of ${type} must be a positive integer`);
29
+ }
30
+ }
31
+ function producerOf({ type, producer }) {
32
+ const name = producer ?? type.slice(0, type.indexOf('.'));
33
+ if (!KEBAB_CASE.test(name)) {
34
+ throw new InvalidEventDefinitionError(`Producer of ${type} must be a kebab-case context name`);
35
+ }
36
+ return name;
37
+ }
38
+ function createEvent({ type, version, payload }, input, meta) {
39
+ const parsed = payload.parse(input);
40
+ if (!parsed.ok) {
41
+ throw new InvalidEventPayloadError(type, version, parsed.error);
42
+ }
43
+ return {
44
+ id: meta.id,
45
+ type,
46
+ version,
47
+ occurredAt: isoInstant(type, meta.occurredAt),
48
+ payload: parsed.value,
49
+ ...(meta.traceparent === undefined ? {} : { traceparent: meta.traceparent }),
50
+ ...(meta.correlationId === undefined ? {} : { correlationId: meta.correlationId }),
51
+ };
52
+ }
53
+ function isoInstant(type, occurredAt) {
54
+ const date = typeof occurredAt === 'string' ? new Date(occurredAt) : occurredAt;
55
+ if (Number.isNaN(date.getTime())) {
56
+ throw new InvalidEventDefinitionError(`occurredAt of ${type} is not a valid date`);
57
+ }
58
+ return typeof occurredAt === 'string' ? occurredAt : date.toISOString();
59
+ }
60
+ function parseEvent({ type, version, payload }, event) {
61
+ if (event.type !== type) {
62
+ return err({ reason: 'type-mismatch', expected: type, actual: event.type });
63
+ }
64
+ if (event.version !== version) {
65
+ return err({ reason: 'version-mismatch', expected: version, actual: event.version });
66
+ }
67
+ const parsed = payload.parse(event.payload);
68
+ if (!parsed.ok) {
69
+ return err({ reason: 'invalid-payload', issues: parsed.error });
70
+ }
71
+ return ok({ ...event, payload: parsed.value });
72
+ }
73
+ //# sourceMappingURL=define-integration-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-integration-event.js","sourceRoot":"","sources":["../../src/definition/define-integration-event.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export interface EventMeta {
2
+ readonly id: string;
3
+ readonly occurredAt: Date | string;
4
+ readonly correlationId?: string;
5
+ readonly traceparent?: string;
6
+ }
7
+ //# sourceMappingURL=event-meta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-meta.d.ts","sourceRoot":"","sources":["../../src/definition/event-meta.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,UAAU,EAAE,IAAI,GAAG,MAAM,CAAC;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=event-meta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-meta.js","sourceRoot":"","sources":["../../src/definition/event-meta.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import type { ValidationIssue } from '@ddd-ts-kit/validation';
2
+ export type EventParseError = {
3
+ readonly reason: 'type-mismatch';
4
+ readonly expected: string;
5
+ readonly actual: string;
6
+ } | {
7
+ readonly reason: 'version-mismatch';
8
+ readonly expected: number;
9
+ readonly actual: number;
10
+ } | {
11
+ readonly reason: 'invalid-payload';
12
+ readonly issues: readonly ValidationIssue[];
13
+ };
14
+ //# sourceMappingURL=event-parse-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-parse-error.d.ts","sourceRoot":"","sources":["../../src/definition/event-parse-error.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACxF;IAAE,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC3F;IAAE,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAA;CAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=event-parse-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-parse-error.js","sourceRoot":"","sources":["../../src/definition/event-parse-error.ts"],"names":[],"mappings":""}
@@ -0,0 +1,20 @@
1
+ import type { IntegrationEvent, Result } from '@ddd-ts-kit/kernel';
2
+ import type { Schema } from '@ddd-ts-kit/validation';
3
+ import type { EventMeta } from './event-meta.js';
4
+ import type { EventParseError } from './event-parse-error.js';
5
+ /** The single declaration of an integration event: its type, its version and its payload contract. */
6
+ export interface IntegrationEventDefinition<P> {
7
+ readonly type: string;
8
+ readonly version: number;
9
+ readonly payload: Schema<P>;
10
+ readonly producer: string;
11
+ readonly description?: string;
12
+ readonly deprecated: boolean;
13
+ /** Producer side. Throws InvalidEventPayloadError: publishing an invalid event is a bug. */
14
+ create(payload: P, meta: EventMeta): IntegrationEvent<P>;
15
+ /** Consumer side. Checks type, version and payload, and never throws. */
16
+ parse(event: IntegrationEvent): Result<IntegrationEvent<P>, EventParseError>;
17
+ /** Cheap guard on type and version only. Use `parse` when the payload is not trusted. */
18
+ is(event: IntegrationEvent): event is IntegrationEvent<P>;
19
+ }
20
+ //# sourceMappingURL=integration-event-definition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration-event-definition.d.ts","sourceRoot":"","sources":["../../src/definition/integration-event-definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,sGAAsG;AACtG,MAAM,WAAW,0BAA0B,CAAC,CAAC;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,4FAA4F;IAC5F,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACzD,yEAAyE;IACzE,KAAK,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;IAC7E,yFAAyF;IACzF,EAAE,CAAC,KAAK,EAAE,gBAAgB,GAAG,KAAK,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC;CAC3D"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=integration-event-definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration-event-definition.js","sourceRoot":"","sources":["../../src/definition/integration-event-definition.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export declare class InvalidEventDefinitionError extends Error {
2
+ constructor(message: string);
3
+ }
4
+ //# sourceMappingURL=invalid-event-definition-error.d.ts.map