domain-knowledge-kit 0.1.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 (142) hide show
  1. package/LICENSE +94 -0
  2. package/README.md +266 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +40 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/features/adr/commands/adr-related.d.ts +14 -0
  8. package/dist/features/adr/commands/adr-related.d.ts.map +1 -0
  9. package/dist/features/adr/commands/adr-related.js +146 -0
  10. package/dist/features/adr/commands/adr-related.js.map +1 -0
  11. package/dist/features/adr/commands/adr-show.d.ts +10 -0
  12. package/dist/features/adr/commands/adr-show.d.ts.map +1 -0
  13. package/dist/features/adr/commands/adr-show.js +30 -0
  14. package/dist/features/adr/commands/adr-show.js.map +1 -0
  15. package/dist/features/pipeline/commands/render.d.ts +10 -0
  16. package/dist/features/pipeline/commands/render.d.ts.map +1 -0
  17. package/dist/features/pipeline/commands/render.js +71 -0
  18. package/dist/features/pipeline/commands/render.js.map +1 -0
  19. package/dist/features/pipeline/commands/validate.d.ts +10 -0
  20. package/dist/features/pipeline/commands/validate.d.ts.map +1 -0
  21. package/dist/features/pipeline/commands/validate.js +48 -0
  22. package/dist/features/pipeline/commands/validate.js.map +1 -0
  23. package/dist/features/pipeline/indexer.d.ts +36 -0
  24. package/dist/features/pipeline/indexer.d.ts.map +1 -0
  25. package/dist/features/pipeline/indexer.js +279 -0
  26. package/dist/features/pipeline/indexer.js.map +1 -0
  27. package/dist/features/pipeline/renderer.d.ts +42 -0
  28. package/dist/features/pipeline/renderer.d.ts.map +1 -0
  29. package/dist/features/pipeline/renderer.js +239 -0
  30. package/dist/features/pipeline/renderer.js.map +1 -0
  31. package/dist/features/pipeline/tests/indexer.test.d.ts +2 -0
  32. package/dist/features/pipeline/tests/indexer.test.d.ts.map +1 -0
  33. package/dist/features/pipeline/tests/indexer.test.js +224 -0
  34. package/dist/features/pipeline/tests/indexer.test.js.map +1 -0
  35. package/dist/features/pipeline/tests/renderer.test.d.ts +2 -0
  36. package/dist/features/pipeline/tests/renderer.test.d.ts.map +1 -0
  37. package/dist/features/pipeline/tests/renderer.test.js +252 -0
  38. package/dist/features/pipeline/tests/renderer.test.js.map +1 -0
  39. package/dist/features/pipeline/tests/validate-schemas.test.d.ts +2 -0
  40. package/dist/features/pipeline/tests/validate-schemas.test.d.ts.map +1 -0
  41. package/dist/features/pipeline/tests/validate-schemas.test.js +183 -0
  42. package/dist/features/pipeline/tests/validate-schemas.test.js.map +1 -0
  43. package/dist/features/pipeline/tests/validator.test.d.ts +2 -0
  44. package/dist/features/pipeline/tests/validator.test.d.ts.map +1 -0
  45. package/dist/features/pipeline/tests/validator.test.js +371 -0
  46. package/dist/features/pipeline/tests/validator.test.js.map +1 -0
  47. package/dist/features/pipeline/validator.d.ts +44 -0
  48. package/dist/features/pipeline/validator.d.ts.map +1 -0
  49. package/dist/features/pipeline/validator.js +289 -0
  50. package/dist/features/pipeline/validator.js.map +1 -0
  51. package/dist/features/query/commands/list.d.ts +10 -0
  52. package/dist/features/query/commands/list.d.ts.map +1 -0
  53. package/dist/features/query/commands/list.js +123 -0
  54. package/dist/features/query/commands/list.js.map +1 -0
  55. package/dist/features/query/commands/related.d.ts +10 -0
  56. package/dist/features/query/commands/related.d.ts.map +1 -0
  57. package/dist/features/query/commands/related.js +61 -0
  58. package/dist/features/query/commands/related.js.map +1 -0
  59. package/dist/features/query/commands/search.d.ts +10 -0
  60. package/dist/features/query/commands/search.d.ts.map +1 -0
  61. package/dist/features/query/commands/search.js +55 -0
  62. package/dist/features/query/commands/search.js.map +1 -0
  63. package/dist/features/query/commands/show.d.ts +10 -0
  64. package/dist/features/query/commands/show.d.ts.map +1 -0
  65. package/dist/features/query/commands/show.js +96 -0
  66. package/dist/features/query/commands/show.js.map +1 -0
  67. package/dist/features/query/searcher.d.ts +58 -0
  68. package/dist/features/query/searcher.d.ts.map +1 -0
  69. package/dist/features/query/searcher.js +185 -0
  70. package/dist/features/query/searcher.js.map +1 -0
  71. package/dist/features/query/tests/searcher.test.d.ts +2 -0
  72. package/dist/features/query/tests/searcher.test.d.ts.map +1 -0
  73. package/dist/features/query/tests/searcher.test.js +320 -0
  74. package/dist/features/query/tests/searcher.test.js.map +1 -0
  75. package/dist/shared/adr-parser.d.ts +14 -0
  76. package/dist/shared/adr-parser.d.ts.map +1 -0
  77. package/dist/shared/adr-parser.js +72 -0
  78. package/dist/shared/adr-parser.js.map +1 -0
  79. package/dist/shared/errors.d.ts +43 -0
  80. package/dist/shared/errors.d.ts.map +1 -0
  81. package/dist/shared/errors.js +60 -0
  82. package/dist/shared/errors.js.map +1 -0
  83. package/dist/shared/graph.d.ts +71 -0
  84. package/dist/shared/graph.d.ts.map +1 -0
  85. package/dist/shared/graph.js +250 -0
  86. package/dist/shared/graph.js.map +1 -0
  87. package/dist/shared/index.d.ts +16 -0
  88. package/dist/shared/index.d.ts.map +1 -0
  89. package/dist/shared/index.js +24 -0
  90. package/dist/shared/index.js.map +1 -0
  91. package/dist/shared/item-visitor.d.ts +62 -0
  92. package/dist/shared/item-visitor.d.ts.map +1 -0
  93. package/dist/shared/item-visitor.js +95 -0
  94. package/dist/shared/item-visitor.js.map +1 -0
  95. package/dist/shared/loader.d.ts +19 -0
  96. package/dist/shared/loader.d.ts.map +1 -0
  97. package/dist/shared/loader.js +166 -0
  98. package/dist/shared/loader.js.map +1 -0
  99. package/dist/shared/paths.d.ts +32 -0
  100. package/dist/shared/paths.d.ts.map +1 -0
  101. package/dist/shared/paths.js +62 -0
  102. package/dist/shared/paths.js.map +1 -0
  103. package/dist/shared/tests/graph.test.d.ts +2 -0
  104. package/dist/shared/tests/graph.test.d.ts.map +1 -0
  105. package/dist/shared/tests/graph.test.js +291 -0
  106. package/dist/shared/tests/graph.test.js.map +1 -0
  107. package/dist/shared/tests/loader.test.d.ts +2 -0
  108. package/dist/shared/tests/loader.test.d.ts.map +1 -0
  109. package/dist/shared/tests/loader.test.js +239 -0
  110. package/dist/shared/tests/loader.test.js.map +1 -0
  111. package/dist/shared/tests/verify-collision-fix.test.d.ts +2 -0
  112. package/dist/shared/tests/verify-collision-fix.test.d.ts.map +1 -0
  113. package/dist/shared/tests/verify-collision-fix.test.js +114 -0
  114. package/dist/shared/tests/verify-collision-fix.test.js.map +1 -0
  115. package/dist/shared/types/domain.d.ts +244 -0
  116. package/dist/shared/types/domain.d.ts.map +1 -0
  117. package/dist/shared/types/domain.js +6 -0
  118. package/dist/shared/types/domain.js.map +1 -0
  119. package/dist/shared/types/index.d.ts +34 -0
  120. package/dist/shared/types/index.d.ts.map +1 -0
  121. package/dist/shared/types/index.js +9 -0
  122. package/dist/shared/types/index.js.map +1 -0
  123. package/dist/shared/yaml.d.ts +13 -0
  124. package/dist/shared/yaml.d.ts.map +1 -0
  125. package/dist/shared/yaml.js +29 -0
  126. package/dist/shared/yaml.js.map +1 -0
  127. package/package.json +48 -0
  128. package/tools/domain-pack/schema/.gitkeep +0 -0
  129. package/tools/domain-pack/schema/actors.schema.json +42 -0
  130. package/tools/domain-pack/schema/adr-frontmatter.schema.json +51 -0
  131. package/tools/domain-pack/schema/aggregate.schema.json +58 -0
  132. package/tools/domain-pack/schema/command.schema.json +76 -0
  133. package/tools/domain-pack/schema/context.schema.json +51 -0
  134. package/tools/domain-pack/schema/event.schema.json +66 -0
  135. package/tools/domain-pack/schema/glossary.schema.json +33 -0
  136. package/tools/domain-pack/schema/index.schema.json +76 -0
  137. package/tools/domain-pack/schema/policy.schema.json +53 -0
  138. package/tools/domain-pack/schema/read-model.schema.json +39 -0
  139. package/tools/domain-pack/templates/.gitkeep +0 -0
  140. package/tools/domain-pack/templates/context.md.hbs +89 -0
  141. package/tools/domain-pack/templates/index.md.hbs +60 -0
  142. package/tools/domain-pack/templates/item.md.hbs +85 -0
@@ -0,0 +1,252 @@
1
+ /**
2
+ * Tests for the domain documentation renderer.
3
+ *
4
+ * Creates a temporary domain model in memory, renders it to a
5
+ * temporary output directory, and verifies the generated files.
6
+ */
7
+ import { mkdirSync, readFileSync, rmSync, existsSync, copyFileSync } from "node:fs";
8
+ import { join } from "node:path";
9
+ import { tmpdir } from "node:os";
10
+ import { renderDocs } from "../renderer.js";
11
+ // ── Helpers ───────────────────────────────────────────────────────────
12
+ let passed = 0;
13
+ let failed = 0;
14
+ function assert(label, condition) {
15
+ if (condition) {
16
+ passed++;
17
+ console.log(` ✓ ${label}`);
18
+ }
19
+ else {
20
+ failed++;
21
+ console.error(` ✗ ${label}`);
22
+ }
23
+ }
24
+ function assertContains(label, content, expected) {
25
+ assert(label, content.includes(expected));
26
+ }
27
+ // ── Fixtures ──────────────────────────────────────────────────────────
28
+ const TMP = join(tmpdir(), `dkk-renderer-test-${Date.now()}`);
29
+ const OUT_DIR = join(TMP, "output");
30
+ const TPL_DIR = join(TMP, "templates");
31
+ const REAL_TPL_DIR = join(import.meta.dirname, "../../../..", "tools", "domain-pack", "templates");
32
+ function buildModel() {
33
+ const index = {
34
+ contexts: [
35
+ { name: "ordering", description: "Order management" },
36
+ { name: "shipping", description: "Shipping logistics" },
37
+ ],
38
+ flows: [
39
+ {
40
+ name: "PlaceAndShip",
41
+ description: "End-to-end order to shipment",
42
+ steps: [
43
+ { ref: "ordering.PlaceOrder", type: "command" },
44
+ { ref: "ordering.OrderPlaced", type: "event" },
45
+ { ref: "shipping.ShipOrder", type: "command" },
46
+ ],
47
+ },
48
+ ],
49
+ };
50
+ const actors = [
51
+ { name: "Customer", type: "human", description: "A paying customer" },
52
+ { name: "WarehouseBot", type: "system", description: "Automated warehouse robot" },
53
+ ];
54
+ const ordering = {
55
+ name: "ordering",
56
+ description: "Handles the order lifecycle",
57
+ glossary: [
58
+ { term: "Order", definition: "A customer's purchase intent", aliases: ["Purchase"] },
59
+ ],
60
+ events: [
61
+ {
62
+ name: "OrderPlaced",
63
+ description: "Emitted when a customer places an order",
64
+ fields: [
65
+ { name: "orderId", type: "UUID" },
66
+ { name: "amount", type: "Money" },
67
+ ],
68
+ raised_by: "Order",
69
+ adr_refs: ["adr-0001"],
70
+ },
71
+ ],
72
+ commands: [
73
+ {
74
+ name: "PlaceOrder",
75
+ description: "Instructs the system to create an order",
76
+ actor: "Customer",
77
+ handled_by: "Order",
78
+ fields: [{ name: "items", type: "LineItem[]" }],
79
+ },
80
+ ],
81
+ policies: [
82
+ {
83
+ name: "SendConfirmation",
84
+ description: "Sends an email after order placement",
85
+ when: { events: ["OrderPlaced"] },
86
+ then: { commands: ["ConfirmationSent"] },
87
+ },
88
+ ],
89
+ aggregates: [
90
+ {
91
+ name: "Order",
92
+ description: "Order aggregate root",
93
+ handles: { commands: ["PlaceOrder"] },
94
+ emits: { events: ["OrderPlaced"] },
95
+ },
96
+ ],
97
+ read_models: [],
98
+ };
99
+ const shipping = {
100
+ name: "shipping",
101
+ description: "Manages shipment creation and tracking",
102
+ commands: [
103
+ {
104
+ name: "ShipOrder",
105
+ description: "Create a shipment for an order",
106
+ handled_by: "Shipment",
107
+ },
108
+ ],
109
+ read_models: [
110
+ {
111
+ name: "ShipmentTracker",
112
+ description: "Provides shipment status to customers",
113
+ subscribes_to: ["ShipmentCreated"],
114
+ used_by: ["Customer"],
115
+ },
116
+ ],
117
+ };
118
+ const contexts = new Map();
119
+ contexts.set("ordering", ordering);
120
+ contexts.set("shipping", shipping);
121
+ const adrs = new Map();
122
+ adrs.set("adr-0001", {
123
+ id: "adr-0001",
124
+ title: "Use YAML for domain models",
125
+ status: "accepted",
126
+ date: "2026-01-15",
127
+ deciders: ["Alice", "Bob"],
128
+ });
129
+ return { index, actors, contexts, adrs };
130
+ }
131
+ // ── Setup ─────────────────────────────────────────────────────────────
132
+ function setup() {
133
+ mkdirSync(OUT_DIR, { recursive: true });
134
+ mkdirSync(TPL_DIR, { recursive: true });
135
+ // Copy real templates to temp so we test the actual templates
136
+ for (const name of ["index.md.hbs", "context.md.hbs", "item.md.hbs"]) {
137
+ copyFileSync(join(REAL_TPL_DIR, name), join(TPL_DIR, name));
138
+ }
139
+ }
140
+ function teardown() {
141
+ rmSync(TMP, { recursive: true, force: true });
142
+ }
143
+ // ── Tests ─────────────────────────────────────────────────────────────
144
+ setup();
145
+ try {
146
+ const model = buildModel();
147
+ console.log("=== renderer.ts ===");
148
+ // ── Render ──────────────────────────────────────────────────────
149
+ const result = renderDocs(model, {
150
+ outputDir: OUT_DIR,
151
+ templateDir: TPL_DIR,
152
+ });
153
+ // ── File count ──────────────────────────────────────────────────
154
+ console.log(`\n Files rendered: ${result.fileCount}`);
155
+ // Expected: 1 index + 2 context index pages + items
156
+ // ordering: OrderPlaced, PlaceOrder, SendConfirmation, Order, Order(glossary) = 5
157
+ // shipping: ShipOrder, ShipmentTracker = 2
158
+ // Total: 1 + 2 + 5 + 2 = 10
159
+ assert("rendered 10 files", result.fileCount === 10);
160
+ // ── Top-level index ─────────────────────────────────────────────
161
+ console.log("\n -- index.md --");
162
+ const indexMd = readFileSync(join(OUT_DIR, "index.md"), "utf-8");
163
+ assertContains("index has title", indexMd, "# Domain Knowledge Index");
164
+ assertContains("index lists ordering context", indexMd, "ordering");
165
+ assertContains("index lists shipping context", indexMd, "shipping");
166
+ assertContains("index has actors table", indexMd, "Customer");
167
+ assertContains("index has WarehouseBot", indexMd, "WarehouseBot");
168
+ assertContains("index has glossary section", indexMd, "## Glossary Index");
169
+ assertContains("index glossary has Order term", indexMd, "Order");
170
+ assertContains("index has flows section", indexMd, "## Key Flows");
171
+ assertContains("index flow has PlaceAndShip", indexMd, "PlaceAndShip");
172
+ assertContains("index flow has step refs", indexMd, "ordering.PlaceOrder");
173
+ // ── Ordering context index ──────────────────────────────────────
174
+ console.log("\n -- ordering/index.md --");
175
+ const orderCtxMd = readFileSync(join(OUT_DIR, "ordering", "index.md"), "utf-8");
176
+ assertContains("ordering has title", orderCtxMd, "# ordering");
177
+ assertContains("ordering has description", orderCtxMd, "Handles the order lifecycle");
178
+ assertContains("ordering has event table", orderCtxMd, "OrderPlaced");
179
+ assertContains("ordering has command table", orderCtxMd, "PlaceOrder");
180
+ assertContains("ordering has policy table", orderCtxMd, "SendConfirmation");
181
+ assertContains("ordering has aggregate table", orderCtxMd, "Order");
182
+ assertContains("ordering has glossary term", orderCtxMd, "Order");
183
+ assertContains("ordering has linked ADR", orderCtxMd, "adr-0001");
184
+ // ── Shipping context index ──────────────────────────────────────
185
+ console.log("\n -- shipping/index.md --");
186
+ const shipCtxMd = readFileSync(join(OUT_DIR, "shipping", "index.md"), "utf-8");
187
+ assertContains("shipping has title", shipCtxMd, "# shipping");
188
+ assertContains("shipping has read model", shipCtxMd, "ShipmentTracker");
189
+ assertContains("shipping has command", shipCtxMd, "ShipOrder");
190
+ // ── Item pages ──────────────────────────────────────────────────
191
+ console.log("\n -- item pages --");
192
+ // Event item
193
+ const eventMd = readFileSync(join(OUT_DIR, "ordering", "OrderPlaced.md"), "utf-8");
194
+ assertContains("event item has name", eventMd, "# OrderPlaced");
195
+ assertContains("event item has type", eventMd, "Event");
196
+ assertContains("event item has context link", eventMd, "ordering");
197
+ assertContains("event item has description", eventMd, "Emitted when a customer places an order");
198
+ assertContains("event item has fields table", eventMd, "orderId");
199
+ assertContains("event item has field type", eventMd, "UUID");
200
+ assertContains("event item has raised_by", eventMd, "Raised by");
201
+ assertContains("event item has adr ref", eventMd, "adr-0001");
202
+ // Command item
203
+ const cmdMd = readFileSync(join(OUT_DIR, "ordering", "PlaceOrder.md"), "utf-8");
204
+ assertContains("command item has name", cmdMd, "# PlaceOrder");
205
+ assertContains("command item has actor", cmdMd, "Customer");
206
+ assertContains("command item has handled_by", cmdMd, "Order");
207
+ // Policy item
208
+ const policyMd = readFileSync(join(OUT_DIR, "ordering", "SendConfirmation.md"), "utf-8");
209
+ assertContains("policy item has name", policyMd, "# SendConfirmation");
210
+ assertContains("policy item has trigger", policyMd, "OrderPlaced");
211
+ assertContains("policy item has emit", policyMd, "ConfirmationSent");
212
+ // Read model item
213
+ const rmMd = readFileSync(join(OUT_DIR, "shipping", "ShipmentTracker.md"), "utf-8");
214
+ assertContains("read model has name", rmMd, "# ShipmentTracker");
215
+ assertContains("read model has subscribes_to", rmMd, "ShipmentCreated");
216
+ assertContains("read model has used_by", rmMd, "Customer");
217
+ // ── Edge: empty model ───────────────────────────────────────────
218
+ console.log("\n -- empty model --");
219
+ const emptyOut = join(TMP, "empty-output");
220
+ mkdirSync(emptyOut, { recursive: true });
221
+ const emptyModel = {
222
+ index: { contexts: [] },
223
+ actors: [],
224
+ contexts: new Map(),
225
+ adrs: new Map(),
226
+ };
227
+ const emptyResult = renderDocs(emptyModel, {
228
+ outputDir: emptyOut,
229
+ templateDir: TPL_DIR,
230
+ });
231
+ assert("empty model renders 1 file (index only)", emptyResult.fileCount === 1);
232
+ const emptyIndex = readFileSync(join(emptyOut, "index.md"), "utf-8");
233
+ assertContains("empty index has no contexts message", emptyIndex, "No bounded contexts registered");
234
+ assertContains("empty index has no actors message", emptyIndex, "No actors defined");
235
+ // ── Edge: output dirs are auto-created ──────────────────────────
236
+ console.log("\n -- auto-create output dirs --");
237
+ const freshOut = join(TMP, "fresh-nested", "deep", "output");
238
+ const freshResult = renderDocs(model, {
239
+ outputDir: freshOut,
240
+ templateDir: TPL_DIR,
241
+ });
242
+ assert("fresh nested output created", existsSync(join(freshOut, "index.md")));
243
+ assert("fresh nested has same count", freshResult.fileCount === 10);
244
+ }
245
+ finally {
246
+ teardown();
247
+ }
248
+ // ── Summary ───────────────────────────────────────────────────────────
249
+ console.log(`\n${passed} passed, ${failed} failed`);
250
+ if (failed > 0)
251
+ process.exit(1);
252
+ //# sourceMappingURL=renderer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.test.js","sourceRoot":"","sources":["../../../../src/features/pipeline/tests/renderer.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=validate-schemas.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-schemas.test.d.ts","sourceRoot":"","sources":["../../../../src/features/pipeline/tests/validate-schemas.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,183 @@
1
+ /**
2
+ * Quick validation smoke test for all JSON Schemas.
3
+ * Loads every schema into ajv with $ref resolution and
4
+ * validates one good + one bad sample for key schemas.
5
+ */
6
+ import { createRequire } from "node:module";
7
+ import { readFileSync, readdirSync } from "node:fs";
8
+ import { join } from "node:path";
9
+ // ajv & ajv-formats are CJS packages; use createRequire for clean interop
10
+ const require = createRequire(import.meta.url);
11
+ const Ajv = require("ajv").default;
12
+ const addFormats = require("ajv-formats").default;
13
+ const SCHEMA_DIR = join(import.meta.dirname, "../../../../tools/domain-pack/schema");
14
+ const files = readdirSync(SCHEMA_DIR).filter((f) => f.endsWith(".schema.json"));
15
+ // ---- Load all schemas into ajv ----
16
+ const ajv = new Ajv({ allErrors: true, strict: true });
17
+ addFormats(ajv);
18
+ const schemas = new Map();
19
+ for (const file of files) {
20
+ const schema = JSON.parse(readFileSync(join(SCHEMA_DIR, file), "utf-8"));
21
+ schemas.set(file, schema);
22
+ ajv.addSchema(schema, schema.$id);
23
+ }
24
+ let passed = 0;
25
+ let failed = 0;
26
+ function expect(label, schemaId, data, shouldPass) {
27
+ const valid = ajv.validate(schemaId, data);
28
+ const ok = valid === shouldPass;
29
+ if (!ok) {
30
+ console.error(`FAIL: ${label}`);
31
+ if (!shouldPass)
32
+ console.error(" Expected validation to fail but it passed");
33
+ else
34
+ console.error(" Errors:", ajv.errorsText());
35
+ failed++;
36
+ }
37
+ else {
38
+ console.log(` OK: ${label}`);
39
+ passed++;
40
+ }
41
+ }
42
+ console.log(`Loaded ${files.length} schemas: ${files.join(", ")}\n`);
43
+ // ---- actors.schema.json ----
44
+ expect("actors: valid", "actors.schema.json", {
45
+ actors: [{ name: "Customer", type: "human", description: "A person who buys" }],
46
+ }, true);
47
+ expect("actors: missing type", "actors.schema.json", {
48
+ actors: [{ name: "Customer", description: "A person" }],
49
+ }, false);
50
+ expect("actors: extra field", "actors.schema.json", {
51
+ actors: [{ name: "X", type: "human", description: "Y", extra: 1 }],
52
+ }, false);
53
+ // ---- event.schema.json ----
54
+ expect("event: valid", "event.schema.json", {
55
+ name: "OrderPlaced",
56
+ description: "An order was placed",
57
+ fields: [{ name: "orderId", type: "string" }],
58
+ raised_by: "Order",
59
+ }, true);
60
+ expect("event: missing description", "event.schema.json", {
61
+ name: "OrderPlaced",
62
+ }, false);
63
+ expect("event: bad name pattern", "event.schema.json", {
64
+ name: "order-placed",
65
+ description: "bad",
66
+ }, false);
67
+ // ---- command.schema.json ----
68
+ expect("command: valid", "command.schema.json", {
69
+ name: "PlaceOrder",
70
+ description: "Place a new order",
71
+ actor: "Customer",
72
+ handled_by: "Order",
73
+ }, true);
74
+ // ---- policy.schema.json ----
75
+ expect("policy: valid", "policy.schema.json", {
76
+ name: "SendConfirmation",
77
+ description: "Sends email after order",
78
+ when: { events: ["OrderPlaced"] },
79
+ then: { commands: ["SendEmail"] },
80
+ }, true);
81
+ expect("policy: flat triggers rejected", "policy.schema.json", {
82
+ name: "SendConfirmation",
83
+ description: "Sends email after order",
84
+ triggers: ["OrderPlaced"],
85
+ emits: ["SendEmail"],
86
+ }, false);
87
+ // ---- aggregate.schema.json ----
88
+ expect("aggregate: valid", "aggregate.schema.json", {
89
+ name: "Order",
90
+ description: "Order aggregate",
91
+ handles: { commands: ["PlaceOrder"] },
92
+ emits: { events: ["OrderPlaced"] },
93
+ }, true);
94
+ expect("aggregate: flat handles rejected", "aggregate.schema.json", {
95
+ name: "Order",
96
+ description: "Order aggregate",
97
+ handles: ["PlaceOrder"],
98
+ emits: ["OrderPlaced"],
99
+ }, false);
100
+ // ---- read-model.schema.json ----
101
+ expect("read-model: valid", "read-model.schema.json", {
102
+ name: "OrderSummary",
103
+ description: "Summary projection",
104
+ subscribes_to: ["OrderPlaced"],
105
+ used_by: ["Customer"],
106
+ }, true);
107
+ // ---- glossary.schema.json ----
108
+ expect("glossary: valid", "glossary.schema.json", {
109
+ term: "Order",
110
+ definition: "A request to purchase items",
111
+ aliases: ["Purchase Order"],
112
+ }, true);
113
+ expect("glossary: missing definition", "glossary.schema.json", {
114
+ term: "Order",
115
+ }, false);
116
+ // ---- adr-frontmatter.schema.json ----
117
+ expect("adr: valid", "adr-frontmatter.schema.json", {
118
+ id: "adr-0001",
119
+ title: "Use YAML for domain models",
120
+ status: "accepted",
121
+ date: "2026-02-20",
122
+ deciders: ["Kaan"],
123
+ domain_refs: ["ordering.OrderPlaced"],
124
+ }, true);
125
+ expect("adr: bad id", "adr-frontmatter.schema.json", {
126
+ id: "adr-1",
127
+ title: "Bad",
128
+ status: "accepted",
129
+ date: "2026-02-20",
130
+ }, false);
131
+ expect("adr: bad status", "adr-frontmatter.schema.json", {
132
+ id: "adr-0002",
133
+ title: "Bad status",
134
+ status: "draft",
135
+ date: "2026-02-20",
136
+ }, false);
137
+ expect("adr: bad domain_ref format", "adr-frontmatter.schema.json", {
138
+ id: "adr-0003",
139
+ title: "Bad ref",
140
+ status: "accepted",
141
+ date: "2026-02-20",
142
+ domain_refs: ["not-a-valid-ref"],
143
+ }, false);
144
+ // ---- index.schema.json ----
145
+ expect("index: valid", "index.schema.json", {
146
+ contexts: [{ name: "ordering", description: "Order management" }],
147
+ flows: [{
148
+ name: "Place Order Flow",
149
+ steps: [
150
+ { ref: "ordering.PlaceOrder", type: "command" },
151
+ { ref: "ordering.OrderPlaced", type: "event" },
152
+ ],
153
+ }],
154
+ }, true);
155
+ expect("index: bad context name", "index.schema.json", {
156
+ contexts: [{ name: "OrderContext" }],
157
+ }, false);
158
+ // ---- context.schema.json ----
159
+ expect("context: valid full", "context.schema.json", {
160
+ name: "ordering",
161
+ description: "Handles order lifecycle",
162
+ glossary: [{ term: "Order", definition: "A request to buy" }],
163
+ events: [{ name: "OrderPlaced", description: "Order was placed" }],
164
+ commands: [{ name: "PlaceOrder", description: "Place a new order" }],
165
+ policies: [{ name: "SendConfirmation", description: "Send email" }],
166
+ aggregates: [{ name: "Order", description: "Order aggregate" }],
167
+ read_models: [{ name: "OrderSummary", description: "Summary view" }],
168
+ }, true);
169
+ expect("context: minimal", "context.schema.json", {
170
+ name: "shipping",
171
+ description: "Handles shipment",
172
+ }, true);
173
+ expect("context: bad name", "context.schema.json", {
174
+ name: "Ordering",
175
+ description: "bad",
176
+ }, false);
177
+ // ---- Summary ----
178
+ console.log(`\n${"=".repeat(40)}`);
179
+ console.log(`Results: ${passed} passed, ${failed} failed`);
180
+ if (failed > 0) {
181
+ process.exit(1);
182
+ }
183
+ //# sourceMappingURL=validate-schemas.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-schemas.test.js","sourceRoot":"","sources":["../../../../src/features/pipeline/tests/validate-schemas.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=validator.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.test.d.ts","sourceRoot":"","sources":["../../../../src/features/pipeline/tests/validator.test.ts"],"names":[],"mappings":""}