domain-knowledge-kit 0.2.15 → 0.2.16
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.
- package/README.md +4 -0
- package/dist/cli.js +20 -0
- package/dist/cli.js.map +1 -1
- package/dist/features/agent/commands/init.d.ts.map +1 -1
- package/dist/features/agent/commands/init.js +141 -3
- package/dist/features/agent/commands/init.js.map +1 -1
- package/dist/features/agent/commands/prime.d.ts +11 -0
- package/dist/features/agent/commands/prime.d.ts.map +1 -1
- package/dist/features/agent/commands/prime.js +104 -8
- package/dist/features/agent/commands/prime.js.map +1 -1
- package/dist/features/federation/commands/consumers.d.ts +40 -0
- package/dist/features/federation/commands/consumers.d.ts.map +1 -0
- package/dist/features/federation/commands/consumers.js +126 -0
- package/dist/features/federation/commands/consumers.js.map +1 -0
- package/dist/features/federation/commands/peers-add.d.ts +14 -0
- package/dist/features/federation/commands/peers-add.d.ts.map +1 -0
- package/dist/features/federation/commands/peers-add.js +79 -0
- package/dist/features/federation/commands/peers-add.js.map +1 -0
- package/dist/features/federation/commands/peers-list.d.ts +8 -0
- package/dist/features/federation/commands/peers-list.d.ts.map +1 -0
- package/dist/features/federation/commands/peers-list.js +51 -0
- package/dist/features/federation/commands/peers-list.js.map +1 -0
- package/dist/features/federation/commands/peers-status.d.ts +8 -0
- package/dist/features/federation/commands/peers-status.d.ts.map +1 -0
- package/dist/features/federation/commands/peers-status.js +78 -0
- package/dist/features/federation/commands/peers-status.js.map +1 -0
- package/dist/features/federation/commands/pull.d.ts +18 -0
- package/dist/features/federation/commands/pull.d.ts.map +1 -0
- package/dist/features/federation/commands/pull.js +153 -0
- package/dist/features/federation/commands/pull.js.map +1 -0
- package/dist/features/federation/git-fetcher.d.ts +45 -0
- package/dist/features/federation/git-fetcher.d.ts.map +1 -0
- package/dist/features/federation/git-fetcher.js +70 -0
- package/dist/features/federation/git-fetcher.js.map +1 -0
- package/dist/features/federation/loader.d.ts +60 -0
- package/dist/features/federation/loader.d.ts.map +1 -0
- package/dist/features/federation/loader.js +193 -0
- package/dist/features/federation/loader.js.map +1 -0
- package/dist/features/federation/lock.d.ts +12 -0
- package/dist/features/federation/lock.d.ts.map +1 -0
- package/dist/features/federation/lock.js +48 -0
- package/dist/features/federation/lock.js.map +1 -0
- package/dist/features/federation/tests/git-fetcher.test.d.ts +2 -0
- package/dist/features/federation/tests/git-fetcher.test.d.ts.map +1 -0
- package/dist/features/federation/tests/git-fetcher.test.js +167 -0
- package/dist/features/federation/tests/git-fetcher.test.js.map +1 -0
- package/dist/features/federation/tests/loader.test.d.ts +2 -0
- package/dist/features/federation/tests/loader.test.d.ts.map +1 -0
- package/dist/features/federation/tests/loader.test.js +144 -0
- package/dist/features/federation/tests/loader.test.js.map +1 -0
- package/dist/features/federation/tests/phase5.test.d.ts +2 -0
- package/dist/features/federation/tests/phase5.test.d.ts.map +1 -0
- package/dist/features/federation/tests/phase5.test.js +137 -0
- package/dist/features/federation/tests/phase5.test.js.map +1 -0
- package/dist/features/federation/tests/schema-load.test.d.ts +2 -0
- package/dist/features/federation/tests/schema-load.test.d.ts.map +1 -0
- package/dist/features/federation/tests/schema-load.test.js +97 -0
- package/dist/features/federation/tests/schema-load.test.js.map +1 -0
- package/dist/features/federation/tests/validator.test.d.ts +2 -0
- package/dist/features/federation/tests/validator.test.d.ts.map +1 -0
- package/dist/features/federation/tests/validator.test.js +319 -0
- package/dist/features/federation/tests/validator.test.js.map +1 -0
- package/dist/features/mcp/commands/serve.d.ts +10 -0
- package/dist/features/mcp/commands/serve.d.ts.map +1 -0
- package/dist/features/mcp/commands/serve.js +12 -0
- package/dist/features/mcp/commands/serve.js.map +1 -0
- package/dist/features/mcp/server.d.ts +15 -0
- package/dist/features/mcp/server.d.ts.map +1 -0
- package/dist/features/mcp/server.js +438 -0
- package/dist/features/mcp/server.js.map +1 -0
- package/dist/features/pipeline/commands/validate.d.ts.map +1 -1
- package/dist/features/pipeline/commands/validate.js +7 -0
- package/dist/features/pipeline/commands/validate.js.map +1 -1
- package/dist/features/pipeline/indexer.d.ts +28 -2
- package/dist/features/pipeline/indexer.d.ts.map +1 -1
- package/dist/features/pipeline/indexer.js +82 -27
- package/dist/features/pipeline/indexer.js.map +1 -1
- package/dist/features/pipeline/validator.d.ts +10 -0
- package/dist/features/pipeline/validator.d.ts.map +1 -1
- package/dist/features/pipeline/validator.js +274 -27
- package/dist/features/pipeline/validator.js.map +1 -1
- package/dist/features/query/commands/list.d.ts +10 -0
- package/dist/features/query/commands/list.d.ts.map +1 -1
- package/dist/features/query/commands/list.js +1 -1
- package/dist/features/query/commands/list.js.map +1 -1
- package/dist/features/query/commands/locate.d.ts +1 -0
- package/dist/features/query/commands/locate.d.ts.map +1 -1
- package/dist/features/query/commands/locate.js +1 -1
- package/dist/features/query/commands/locate.js.map +1 -1
- package/dist/features/query/commands/search.d.ts.map +1 -1
- package/dist/features/query/commands/search.js +2 -0
- package/dist/features/query/commands/search.js.map +1 -1
- package/dist/features/query/commands/show.d.ts +15 -0
- package/dist/features/query/commands/show.d.ts.map +1 -1
- package/dist/features/query/commands/show.js +116 -58
- package/dist/features/query/commands/show.js.map +1 -1
- package/dist/features/query/commands/story.d.ts +70 -0
- package/dist/features/query/commands/story.d.ts.map +1 -1
- package/dist/features/query/commands/story.js +2 -2
- package/dist/features/query/commands/story.js.map +1 -1
- package/dist/features/query/commands/summary.d.ts +3 -0
- package/dist/features/query/commands/summary.d.ts.map +1 -1
- package/dist/features/query/commands/summary.js +1 -1
- package/dist/features/query/commands/summary.js.map +1 -1
- package/dist/features/query/searcher.d.ts +18 -1
- package/dist/features/query/searcher.d.ts.map +1 -1
- package/dist/features/query/searcher.js +11 -2
- package/dist/features/query/searcher.js.map +1 -1
- package/dist/features/scaffold/commands/service-init.d.ts +12 -0
- package/dist/features/scaffold/commands/service-init.d.ts.map +1 -0
- package/dist/features/scaffold/commands/service-init.js +69 -0
- package/dist/features/scaffold/commands/service-init.js.map +1 -0
- package/dist/shared/graph.d.ts +8 -0
- package/dist/shared/graph.d.ts.map +1 -1
- package/dist/shared/graph.js +180 -112
- package/dist/shared/graph.js.map +1 -1
- package/dist/shared/index.d.ts +4 -1
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +6 -1
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/loader.d.ts +22 -0
- package/dist/shared/loader.d.ts.map +1 -1
- package/dist/shared/loader.js +31 -1
- package/dist/shared/loader.js.map +1 -1
- package/dist/shared/paths.d.ts +59 -7
- package/dist/shared/paths.d.ts.map +1 -1
- package/dist/shared/paths.js +93 -11
- package/dist/shared/paths.js.map +1 -1
- package/dist/shared/refs.d.ts +96 -0
- package/dist/shared/refs.d.ts.map +1 -0
- package/dist/shared/refs.js +182 -0
- package/dist/shared/refs.js.map +1 -0
- package/dist/shared/service-id.d.ts +11 -0
- package/dist/shared/service-id.d.ts.map +1 -0
- package/dist/shared/service-id.js +64 -0
- package/dist/shared/service-id.js.map +1 -0
- package/dist/shared/tests/paths.test.d.ts +2 -0
- package/dist/shared/tests/paths.test.d.ts.map +1 -0
- package/dist/shared/tests/paths.test.js +111 -0
- package/dist/shared/tests/paths.test.js.map +1 -0
- package/dist/shared/tests/refs.test.d.ts +2 -0
- package/dist/shared/tests/refs.test.d.ts.map +1 -0
- package/dist/shared/tests/refs.test.js +104 -0
- package/dist/shared/tests/refs.test.js.map +1 -0
- package/dist/shared/types/domain.d.ts +14 -0
- package/dist/shared/types/domain.d.ts.map +1 -1
- package/dist/shared/types/federation.d.ts +60 -0
- package/dist/shared/types/federation.d.ts.map +1 -0
- package/dist/shared/types/federation.js +12 -0
- package/dist/shared/types/federation.js.map +1 -0
- package/package.json +6 -3
- package/tools/dkk/claude/agents/dkk-domain-reviewer.md +69 -0
- package/tools/dkk/claude/commands/dkk-adr.md +11 -0
- package/tools/dkk/claude/commands/dkk-impact.md +34 -0
- package/tools/dkk/claude/commands/dkk-implement.md +12 -0
- package/tools/dkk/claude/commands/dkk-prime.md +6 -0
- package/tools/dkk/claude/commands/dkk-review.md +12 -0
- package/tools/dkk/claude/commands/dkk-story.md +12 -0
- package/tools/dkk/claude/hooks/post-edit-validate.mjs +51 -0
- package/tools/dkk/claude/hooks/pre-edit-block-generated.mjs +39 -0
- package/tools/dkk/claude/hooks/session-start-prime.mjs +33 -0
- package/tools/dkk/claude/hooks/stop-validate.mjs +48 -0
- package/tools/dkk/claude/settings.json +62 -0
- package/tools/dkk/claude/skills/dkk-adr-author/SKILL.md +54 -0
- package/tools/dkk/claude/skills/dkk-flow-implementer/SKILL.md +51 -0
- package/tools/dkk/claude/skills/dkk-story-analyst/SKILL.md +108 -0
- package/tools/dkk/schema/actors.schema.json +1 -1
- package/tools/dkk/schema/adr-frontmatter.schema.json +4 -4
- package/tools/dkk/schema/aggregate.schema.json +1 -1
- package/tools/dkk/schema/command.schema.json +1 -1
- package/tools/dkk/schema/event.schema.json +1 -1
- package/tools/dkk/schema/federation.schema.json +71 -0
- package/tools/dkk/schema/glossary.schema.json +1 -1
- package/tools/dkk/schema/index.schema.json +2 -2
- package/tools/dkk/schema/policy.schema.json +1 -1
- package/tools/dkk/schema/read-model.schema.json +1 -1
- package/tools/dkk/schema/service.schema.json +30 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-fetcher.test.js","sourceRoot":"","sources":["../../../../src/features/federation/tests/git-fetcher.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.test.d.ts","sourceRoot":"","sources":["../../../../src/features/federation/tests/loader.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for the federation loader.
|
|
3
|
+
*
|
|
4
|
+
* Verifies two-repo local-path federation:
|
|
5
|
+
* - Local peer is reachable, its items are loaded into model.peers
|
|
6
|
+
* - Unreachable peer becomes a warning, not an error
|
|
7
|
+
* - DKK_PEER_<NAME> env override redirects a peer to a different path
|
|
8
|
+
* - Peer loading is one level deep (a peer's own federation.yml is ignored)
|
|
9
|
+
*/
|
|
10
|
+
import { mkdirSync, writeFileSync, rmSync, realpathSync } from "node:fs";
|
|
11
|
+
import { join } from "node:path";
|
|
12
|
+
import { tmpdir } from "node:os";
|
|
13
|
+
import { loadDomainModel } from "../../../shared/loader.js";
|
|
14
|
+
import { loadFederation, resolvePeerRoot, peerEnvKey } from "../loader.js";
|
|
15
|
+
let passed = 0;
|
|
16
|
+
let failed = 0;
|
|
17
|
+
function assert(label, condition, detail) {
|
|
18
|
+
if (condition) {
|
|
19
|
+
console.log(` OK: ${label}`);
|
|
20
|
+
passed++;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
console.error(`FAIL: ${label}${detail ? ` — ${detail}` : ""}`);
|
|
24
|
+
failed++;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const RAW_TMP = join(tmpdir(), `dkk-fed-${Date.now()}`);
|
|
28
|
+
mkdirSync(RAW_TMP, { recursive: true });
|
|
29
|
+
const TMP = realpathSync(RAW_TMP);
|
|
30
|
+
// Two-repo fixture layout:
|
|
31
|
+
// <TMP>/order-svc/.dkk/ — peer service "ordering" with one event
|
|
32
|
+
// <TMP>/billing-svc/.dkk/ — local service "billing" with federation.yml pointing at order-svc
|
|
33
|
+
const ORDER = join(TMP, "order-svc");
|
|
34
|
+
const BILLING = join(TMP, "billing-svc");
|
|
35
|
+
const ALT_ORDER = join(TMP, "alt-order-svc"); // for env override test
|
|
36
|
+
function writeServiceRepo(root, opts) {
|
|
37
|
+
const dkk = join(root, ".dkk");
|
|
38
|
+
const domain = join(dkk, "domain");
|
|
39
|
+
const ctx = join(domain, "contexts", opts.contextName);
|
|
40
|
+
mkdirSync(join(ctx, "events"), { recursive: true });
|
|
41
|
+
mkdirSync(join(dkk, "adr"), { recursive: true });
|
|
42
|
+
// service.yml
|
|
43
|
+
writeFileSync(join(dkk, "service.yml"), [`name: ${opts.serviceName}`, `exports:`, ` - ${opts.exportName}`].join("\n"));
|
|
44
|
+
// domain/index.yml
|
|
45
|
+
writeFileSync(join(domain, "index.yml"), [`contexts:`, ` - name: ${opts.contextName}`, ` description: ${opts.contextName} context`].join("\n"));
|
|
46
|
+
// domain/actors.yml
|
|
47
|
+
writeFileSync(join(domain, "actors.yml"), "actors: []\n");
|
|
48
|
+
// contexts/<name>/context.yml
|
|
49
|
+
writeFileSync(join(ctx, "context.yml"), [`name: ${opts.contextName}`, `description: ${opts.contextName} bounded context`].join("\n"));
|
|
50
|
+
if (opts.eventName) {
|
|
51
|
+
writeFileSync(join(ctx, "events", `${opts.eventName}.yml`), [`name: ${opts.eventName}`, `description: Raised when ${opts.eventName.toLowerCase()}.`].join("\n"));
|
|
52
|
+
}
|
|
53
|
+
if (opts.federationYml) {
|
|
54
|
+
writeFileSync(join(dkk, "federation.yml"), opts.federationYml);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
writeServiceRepo(ORDER, {
|
|
58
|
+
serviceName: "ordering",
|
|
59
|
+
exportName: "ordering",
|
|
60
|
+
contextName: "ordering",
|
|
61
|
+
eventName: "OrderPlaced",
|
|
62
|
+
});
|
|
63
|
+
writeServiceRepo(BILLING, {
|
|
64
|
+
serviceName: "billing",
|
|
65
|
+
exportName: "billing",
|
|
66
|
+
contextName: "billing",
|
|
67
|
+
federationYml: [
|
|
68
|
+
"peers:",
|
|
69
|
+
" - name: ordering",
|
|
70
|
+
" source:",
|
|
71
|
+
" type: local",
|
|
72
|
+
" path: ../order-svc",
|
|
73
|
+
].join("\n"),
|
|
74
|
+
});
|
|
75
|
+
// Alt peer for env override
|
|
76
|
+
writeServiceRepo(ALT_ORDER, {
|
|
77
|
+
serviceName: "ordering",
|
|
78
|
+
exportName: "ordering",
|
|
79
|
+
contextName: "ordering",
|
|
80
|
+
eventName: "OrderShipped",
|
|
81
|
+
});
|
|
82
|
+
try {
|
|
83
|
+
// ── loadFederation reads the manifest ─────────────────────────────────
|
|
84
|
+
console.log("\n=== loadFederation ===");
|
|
85
|
+
const manifest = loadFederation(BILLING);
|
|
86
|
+
assert("federation manifest loaded", manifest !== null);
|
|
87
|
+
assert("manifest has one peer", manifest?.peers.length === 1);
|
|
88
|
+
assert("peer name is ordering", manifest?.peers[0].name === "ordering");
|
|
89
|
+
assert("peer source type is local", manifest?.peers[0].source.type === "local");
|
|
90
|
+
// unfederated repo returns null
|
|
91
|
+
const noFed = loadFederation(ORDER);
|
|
92
|
+
assert("unfederated repo returns null", noFed === null);
|
|
93
|
+
// ── resolvePeerRoot for local source ──────────────────────────────────
|
|
94
|
+
console.log("\n=== resolvePeerRoot (local) ===");
|
|
95
|
+
const resolved = resolvePeerRoot(manifest.peers[0], BILLING);
|
|
96
|
+
assert("local peer is reachable", resolved.reachable);
|
|
97
|
+
assert("peerRoot resolves to order-svc", resolved.peerRoot === ORDER);
|
|
98
|
+
// ── resolvePeerRoot for unreachable local source ─────────────────────
|
|
99
|
+
console.log("\n=== resolvePeerRoot (unreachable local) ===");
|
|
100
|
+
const unreachable = resolvePeerRoot({
|
|
101
|
+
name: "missing",
|
|
102
|
+
source: { type: "local", path: "../does-not-exist" },
|
|
103
|
+
}, BILLING);
|
|
104
|
+
assert("unreachable peer not reachable", !unreachable.reachable);
|
|
105
|
+
assert("unreachable peer has reason", typeof unreachable.reason === "string");
|
|
106
|
+
// ── End-to-end: loadDomainModel from billing hydrates ordering peer ──
|
|
107
|
+
console.log("\n=== loadDomainModel with federation ===");
|
|
108
|
+
const model = loadDomainModel({ root: BILLING });
|
|
109
|
+
assert("model.service is billing", model.service?.name === "billing");
|
|
110
|
+
assert("model.peers exists", model.peers !== undefined);
|
|
111
|
+
assert("model.peers has ordering", model.peers?.has("ordering") === true);
|
|
112
|
+
const peer = model.peers?.get("ordering");
|
|
113
|
+
assert("peer has service identity", peer?.service?.name === "ordering");
|
|
114
|
+
assert("peer has ordering context", peer?.contexts.has("ordering") === true);
|
|
115
|
+
assert("peer has OrderPlaced event", (peer?.contexts.get("ordering")?.events ?? []).some((e) => e.name === "OrderPlaced"));
|
|
116
|
+
// ── One level deep: peer.peers stays undefined ────────────────────────
|
|
117
|
+
console.log("\n=== peer-of-peer not followed ===");
|
|
118
|
+
assert("peer.peers is undefined (no transitive)", peer?.peers === undefined);
|
|
119
|
+
// ── Env override redirects peer to a different path ──────────────────
|
|
120
|
+
console.log("\n=== env override ===");
|
|
121
|
+
const envKey = peerEnvKey("ordering");
|
|
122
|
+
assert("env key formatted correctly", envKey === "DKK_PEER_ORDERING");
|
|
123
|
+
const originalEnv = process.env[envKey];
|
|
124
|
+
process.env[envKey] = ALT_ORDER;
|
|
125
|
+
try {
|
|
126
|
+
const altModel = loadDomainModel({ root: BILLING });
|
|
127
|
+
const altPeer = altModel.peers?.get("ordering");
|
|
128
|
+
assert("env override points peer at alt-order-svc", (altPeer?.contexts.get("ordering")?.events ?? []).some((e) => e.name === "OrderShipped"));
|
|
129
|
+
assert("env override drops OrderPlaced (different repo)", !(altPeer?.contexts.get("ordering")?.events ?? []).some((e) => e.name === "OrderPlaced"));
|
|
130
|
+
}
|
|
131
|
+
finally {
|
|
132
|
+
if (originalEnv === undefined)
|
|
133
|
+
delete process.env[envKey];
|
|
134
|
+
else
|
|
135
|
+
process.env[envKey] = originalEnv;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
finally {
|
|
139
|
+
rmSync(RAW_TMP, { recursive: true, force: true });
|
|
140
|
+
}
|
|
141
|
+
console.log(`\n${passed} passed, ${failed} failed`);
|
|
142
|
+
if (failed > 0)
|
|
143
|
+
process.exit(1);
|
|
144
|
+
//# sourceMappingURL=loader.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.test.js","sourceRoot":"","sources":["../../../../src/features/federation/tests/loader.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACzE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE3E,IAAI,MAAM,GAAG,CAAC,CAAC;AACf,IAAI,MAAM,GAAG,CAAC,CAAC;AAEf,SAAS,MAAM,CAAC,KAAa,EAAE,SAAkB,EAAE,MAAe;IAChE,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;QAC9B,MAAM,EAAE,CAAC;IACX,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,SAAS,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/D,MAAM,EAAE,CAAC;IACX,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACxD,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACxC,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;AAElC,2BAA2B;AAC3B,0EAA0E;AAC1E,qGAAqG;AACrG,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;AACrC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;AACzC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC,wBAAwB;AAEtE,SAAS,gBAAgB,CAAC,IAAY,EAAE,IAMvC;IACC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACvD,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjD,cAAc;IACd,aAAa,CACX,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,EACxB,CAAC,SAAS,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC/E,CAAC;IAEF,mBAAmB;IACnB,aAAa,CACX,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EACzB,CAAC,WAAW,EAAE,aAAa,IAAI,CAAC,WAAW,EAAE,EAAE,oBAAoB,IAAI,CAAC,WAAW,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC1G,CAAC;IAEF,oBAAoB;IACpB,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC;IAE1D,8BAA8B;IAC9B,aAAa,CACX,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,EACxB,CAAC,SAAS,IAAI,CAAC,WAAW,EAAE,EAAE,gBAAgB,IAAI,CAAC,WAAW,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC7F,CAAC;IAEF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,aAAa,CACX,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,MAAM,CAAC,EAC5C,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE,EAAE,4BAA4B,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACpG,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED,gBAAgB,CAAC,KAAK,EAAE;IACtB,WAAW,EAAE,UAAU;IACvB,UAAU,EAAE,UAAU;IACtB,WAAW,EAAE,UAAU;IACvB,SAAS,EAAE,aAAa;CACzB,CAAC,CAAC;AAEH,gBAAgB,CAAC,OAAO,EAAE;IACxB,WAAW,EAAE,SAAS;IACtB,UAAU,EAAE,SAAS;IACrB,WAAW,EAAE,SAAS;IACtB,aAAa,EAAE;QACb,QAAQ;QACR,oBAAoB;QACpB,aAAa;QACb,mBAAmB;QACnB,0BAA0B;KAC3B,CAAC,IAAI,CAAC,IAAI,CAAC;CACb,CAAC,CAAC;AAEH,4BAA4B;AAC5B,gBAAgB,CAAC,SAAS,EAAE;IAC1B,WAAW,EAAE,UAAU;IACvB,UAAU,EAAE,UAAU;IACtB,WAAW,EAAE,UAAU;IACvB,SAAS,EAAE,cAAc;CAC1B,CAAC,CAAC;AAEH,IAAI,CAAC;IACH,yEAAyE;IACzE,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,CAAC,4BAA4B,EAAE,QAAQ,KAAK,IAAI,CAAC,CAAC;IACxD,MAAM,CAAC,uBAAuB,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;IAC9D,MAAM,CAAC,uBAAuB,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IACxE,MAAM,CACJ,2BAA2B,EAC3B,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,CAC3C,CAAC;IAEF,gCAAgC;IAChC,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,CAAC,+BAA+B,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC;IAExD,yEAAyE;IACzE,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC9D,MAAM,CAAC,yBAAyB,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IACtD,MAAM,CAAC,gCAAgC,EAAE,QAAQ,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC;IAEtE,wEAAwE;IACxE,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,eAAe,CACjC;QACE,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE;KACrD,EACD,OAAO,CACR,CAAC;IACF,MAAM,CAAC,gCAAgC,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACjE,MAAM,CAAC,6BAA6B,EAAE,OAAO,WAAW,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;IAE9E,wEAAwE;IACxE,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACjD,MAAM,CAAC,0BAA0B,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC;IACtE,MAAM,CAAC,oBAAoB,EAAE,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IACxD,MAAM,CAAC,0BAA0B,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,CAAC;IAE1E,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,CAAC,2BAA2B,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,KAAK,UAAU,CAAC,CAAC;IACxE,MAAM,CAAC,2BAA2B,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,CAAC;IAC7E,MAAM,CACJ,4BAA4B,EAC5B,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CACrF,CAAC;IAEF,yEAAyE;IACzE,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACnD,MAAM,CAAC,yCAAyC,EAAE,IAAI,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC;IAE7E,wEAAwE;IACxE,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,CAAC,6BAA6B,EAAE,MAAM,KAAK,mBAAmB,CAAC,CAAC;IAEtE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,eAAe,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACpD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,CACJ,2CAA2C,EAC3C,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CACzF,CAAC;QACF,MAAM,CACJ,iDAAiD,EACjD,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CACzF,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,IAAI,WAAW,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;;YACrD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC;IACzC,CAAC;AACH,CAAC;QAAS,CAAC;IACT,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,YAAY,MAAM,SAAS,CAAC,CAAC;AACpD,IAAI,MAAM,GAAG,CAAC;IAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phase5.test.d.ts","sourceRoot":"","sources":["../../../../src/features/federation/tests/phase5.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 5 integration tests — federated indexer, searcher, graph, and
|
|
3
|
+
* `dkk consumers`.
|
|
4
|
+
*
|
|
5
|
+
* Builds a two-repo fixture, then verifies:
|
|
6
|
+
* - Indexer namespaces peer rows with `<service>:` prefix.
|
|
7
|
+
* - Search returns peer hits with the `service` field populated.
|
|
8
|
+
* - Search `service` filter narrows correctly.
|
|
9
|
+
* - Graph contains both local and peer nodes, with peer node ids
|
|
10
|
+
* prefixed.
|
|
11
|
+
* - Local policy with `when.events: ['ordering:ordering.OrderPlaced']`
|
|
12
|
+
* produces a cross-service edge that BFS can traverse.
|
|
13
|
+
* - `findConsumers` walks peers correctly.
|
|
14
|
+
*/
|
|
15
|
+
import { mkdirSync, writeFileSync, rmSync, realpathSync } from "node:fs";
|
|
16
|
+
import { join } from "node:path";
|
|
17
|
+
import { tmpdir } from "node:os";
|
|
18
|
+
import { loadDomainModel } from "../../../shared/loader.js";
|
|
19
|
+
import { DomainGraph } from "../../../shared/graph.js";
|
|
20
|
+
import { buildIndex } from "../../pipeline/indexer.js";
|
|
21
|
+
import { search } from "../../query/searcher.js";
|
|
22
|
+
// Importing from consumers.js transitively registers the federation
|
|
23
|
+
// peer-hydration hook (via its side-effect import of ../loader.js).
|
|
24
|
+
import { findConsumers } from "../commands/consumers.js";
|
|
25
|
+
let passed = 0;
|
|
26
|
+
let failed = 0;
|
|
27
|
+
function assert(label, condition, detail) {
|
|
28
|
+
if (condition) {
|
|
29
|
+
console.log(` OK: ${label}`);
|
|
30
|
+
passed++;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
console.error(`FAIL: ${label}${detail ? ` — ${detail}` : ""}`);
|
|
34
|
+
failed++;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const RAW_TMP = join(tmpdir(), `dkk-p5-${Date.now()}`);
|
|
38
|
+
mkdirSync(RAW_TMP, { recursive: true });
|
|
39
|
+
const TMP = realpathSync(RAW_TMP);
|
|
40
|
+
const ORDER = join(TMP, "order-svc");
|
|
41
|
+
const BILLING = join(TMP, "billing-svc");
|
|
42
|
+
// ── Fixture: order-svc (peer) ───────────────────────────────────────────
|
|
43
|
+
mkdirSync(join(ORDER, ".dkk", "domain", "contexts", "ordering", "events"), { recursive: true });
|
|
44
|
+
mkdirSync(join(ORDER, ".dkk", "domain", "contexts", "ordering", "aggregates"), { recursive: true });
|
|
45
|
+
mkdirSync(join(ORDER, ".dkk", "adr"), { recursive: true });
|
|
46
|
+
writeFileSync(join(ORDER, ".dkk", "service.yml"), "name: ordering\nexports:\n - ordering\n");
|
|
47
|
+
writeFileSync(join(ORDER, ".dkk", "domain", "index.yml"), "contexts:\n - name: ordering\n description: Orders\nflows: []\n");
|
|
48
|
+
writeFileSync(join(ORDER, ".dkk", "domain", "actors.yml"), "actors: []\n");
|
|
49
|
+
writeFileSync(join(ORDER, ".dkk", "domain", "contexts", "ordering", "context.yml"), "name: ordering\ndescription: Ordering context\n");
|
|
50
|
+
writeFileSync(join(ORDER, ".dkk", "domain", "contexts", "ordering", "events", "OrderPlaced.yml"), "name: OrderPlaced\ndescription: Order is placed for processing.\nraised_by: Order\n");
|
|
51
|
+
writeFileSync(join(ORDER, ".dkk", "domain", "contexts", "ordering", "aggregates", "Order.yml"), "name: Order\ndescription: Order aggregate.\nemits:\n events:\n - OrderPlaced\n");
|
|
52
|
+
// ── Fixture: billing-svc (local) with a policy that subscribes to peer event ───
|
|
53
|
+
mkdirSync(join(BILLING, ".dkk", "domain", "contexts", "billing", "policies"), { recursive: true });
|
|
54
|
+
mkdirSync(join(BILLING, ".dkk", "domain", "contexts", "billing", "commands"), { recursive: true });
|
|
55
|
+
mkdirSync(join(BILLING, ".dkk", "domain", "contexts", "billing", "aggregates"), { recursive: true });
|
|
56
|
+
mkdirSync(join(BILLING, ".dkk", "adr"), { recursive: true });
|
|
57
|
+
writeFileSync(join(BILLING, ".dkk", "service.yml"), "name: billing\nexports:\n - billing\n");
|
|
58
|
+
writeFileSync(join(BILLING, ".dkk", "domain", "index.yml"), "contexts:\n - name: billing\n description: Billing\nflows: []\n");
|
|
59
|
+
writeFileSync(join(BILLING, ".dkk", "domain", "actors.yml"), "actors: []\n");
|
|
60
|
+
writeFileSync(join(BILLING, ".dkk", "domain", "contexts", "billing", "context.yml"), "name: billing\ndescription: Billing context\n");
|
|
61
|
+
writeFileSync(join(BILLING, ".dkk", "domain", "contexts", "billing", "commands", "IssueInvoice.yml"), "name: IssueInvoice\ndescription: Issue an invoice.\nhandled_by: Invoice\n");
|
|
62
|
+
writeFileSync(join(BILLING, ".dkk", "domain", "contexts", "billing", "aggregates", "Invoice.yml"), "name: Invoice\ndescription: Invoice aggregate.\nhandles:\n commands:\n - IssueInvoice\n");
|
|
63
|
+
writeFileSync(join(BILLING, ".dkk", "domain", "contexts", "billing", "policies", "InitiateInvoice.yml"), [
|
|
64
|
+
"name: InitiateInvoice",
|
|
65
|
+
"description: Issue an invoice when an order is placed.",
|
|
66
|
+
"when:",
|
|
67
|
+
" events:",
|
|
68
|
+
" - ordering:ordering.OrderPlaced",
|
|
69
|
+
"then:",
|
|
70
|
+
" commands:",
|
|
71
|
+
" - IssueInvoice",
|
|
72
|
+
].join("\n"));
|
|
73
|
+
writeFileSync(join(BILLING, ".dkk", "federation.yml"), [
|
|
74
|
+
"peers:",
|
|
75
|
+
" - name: ordering",
|
|
76
|
+
" source:",
|
|
77
|
+
" type: local",
|
|
78
|
+
" path: ../order-svc",
|
|
79
|
+
].join("\n") + "\n");
|
|
80
|
+
try {
|
|
81
|
+
const model = loadDomainModel({ root: BILLING });
|
|
82
|
+
// ── Indexer namespaces peer rows ─────────────────────────────────────
|
|
83
|
+
console.log("\n=== indexer namespaces peer rows ===");
|
|
84
|
+
const dbPath = buildIndex(model, { root: BILLING });
|
|
85
|
+
assert("index.db built", typeof dbPath === "string" && dbPath.length > 0);
|
|
86
|
+
const local = search("OrderPlaced", {}, { root: BILLING });
|
|
87
|
+
assert("search finds OrderPlaced", local.length > 0);
|
|
88
|
+
const peerHit = local.find((r) => r.id === "ordering:ordering.OrderPlaced");
|
|
89
|
+
assert("peer row has service-prefixed id", peerHit !== undefined);
|
|
90
|
+
assert("peer row carries service field", peerHit?.service === "ordering");
|
|
91
|
+
assert("peer row has ordering context", peerHit?.context === "ordering");
|
|
92
|
+
const localHit = local.find((r) => r.id === "billing.InitiateInvoice");
|
|
93
|
+
// (May or may not match depending on FTS tokenization of "OrderPlaced".)
|
|
94
|
+
// What matters is that the peer-prefixed and local rows don't collide.
|
|
95
|
+
assert("local + peer ids are disjoint", !local.some((r, i) => local.findIndex((other) => other.id === r.id && local.indexOf(r) !== i) >= 0));
|
|
96
|
+
void localHit;
|
|
97
|
+
// ── service filter narrows correctly ─────────────────────────────────
|
|
98
|
+
console.log("\n=== search service filter ===");
|
|
99
|
+
const onlyOrdering = search("OrderPlaced", { service: "ordering" }, { root: BILLING });
|
|
100
|
+
assert("service: ordering filter narrows to ordering rows", onlyOrdering.every((r) => r.service === "ordering"));
|
|
101
|
+
assert("service filter returns at least one row", onlyOrdering.length > 0);
|
|
102
|
+
const onlyBilling = search("Invoice", { service: "billing" }, { root: BILLING });
|
|
103
|
+
assert("service: billing filter narrows to billing rows", onlyBilling.every((r) => r.service === "billing"));
|
|
104
|
+
// ── graph contains both namespaces with cross-service edge ───────────
|
|
105
|
+
console.log("\n=== graph cross-service edge ===");
|
|
106
|
+
const graph = DomainGraph.from(model);
|
|
107
|
+
const localPolicyId = "billing.InitiateInvoice";
|
|
108
|
+
const peerEventId = "ordering:ordering.OrderPlaced";
|
|
109
|
+
assert("local policy node exists", graph.nodes.has(localPolicyId));
|
|
110
|
+
assert("peer event node exists with prefix", graph.nodes.has(peerEventId));
|
|
111
|
+
const fromPolicy = graph.getRelated(localPolicyId, 1);
|
|
112
|
+
assert("BFS from local policy reaches peer event in one hop", fromPolicy.has(peerEventId));
|
|
113
|
+
// ── findConsumers — reverse lookup from order-svc's perspective ──────
|
|
114
|
+
console.log("\n=== consumers reverse lookup ===");
|
|
115
|
+
// Build a federation manifest in order-svc that points back at
|
|
116
|
+
// billing-svc, so order-svc can ask "who consumes my OrderPlaced?".
|
|
117
|
+
writeFileSync(join(ORDER, ".dkk", "federation.yml"), [
|
|
118
|
+
"peers:",
|
|
119
|
+
" - name: billing",
|
|
120
|
+
" source:",
|
|
121
|
+
" type: local",
|
|
122
|
+
" path: ../billing-svc",
|
|
123
|
+
].join("\n") + "\n");
|
|
124
|
+
const orderModel = loadDomainModel({ root: ORDER });
|
|
125
|
+
const consumers = findConsumers(orderModel, "ordering.OrderPlaced", orderModel.service?.name);
|
|
126
|
+
assert("at least one consumer found", consumers.length > 0);
|
|
127
|
+
assert("consumer is billing.InitiateInvoice via when.events", consumers.some((c) => c.service === "billing" &&
|
|
128
|
+
c.relation === "when.events" &&
|
|
129
|
+
c.source === "billing:billing.InitiateInvoice"));
|
|
130
|
+
}
|
|
131
|
+
finally {
|
|
132
|
+
rmSync(RAW_TMP, { recursive: true, force: true });
|
|
133
|
+
}
|
|
134
|
+
console.log(`\n${passed} passed, ${failed} failed`);
|
|
135
|
+
if (failed > 0)
|
|
136
|
+
process.exit(1);
|
|
137
|
+
//# sourceMappingURL=phase5.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phase5.test.js","sourceRoot":"","sources":["../../../../src/features/federation/tests/phase5.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-load.test.d.ts","sourceRoot":"","sources":["../../../../src/features/federation/tests/schema-load.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema-at-load tests — `.dkk/service.yml` and `.dkk/federation.yml`
|
|
3
|
+
* are now validated against their JSON schemas when read, so malformed
|
|
4
|
+
* manifests produce a clean error up front rather than crashing later
|
|
5
|
+
* in the pipeline.
|
|
6
|
+
*/
|
|
7
|
+
import { mkdirSync, writeFileSync, rmSync, realpathSync } from "node:fs";
|
|
8
|
+
import { join } from "node:path";
|
|
9
|
+
import { tmpdir } from "node:os";
|
|
10
|
+
import { loadServiceId } from "../../../shared/service-id.js";
|
|
11
|
+
import { loadFederation } from "../loader.js";
|
|
12
|
+
let passed = 0;
|
|
13
|
+
let failed = 0;
|
|
14
|
+
function assert(label, condition, detail) {
|
|
15
|
+
if (condition) {
|
|
16
|
+
console.log(` OK: ${label}`);
|
|
17
|
+
passed++;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
console.error(`FAIL: ${label}${detail ? ` — ${detail}` : ""}`);
|
|
21
|
+
failed++;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function assertThrows(label, fn, match) {
|
|
25
|
+
try {
|
|
26
|
+
fn();
|
|
27
|
+
console.error(`FAIL: ${label} — expected throw, got success`);
|
|
28
|
+
failed++;
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
32
|
+
if (match.test(msg)) {
|
|
33
|
+
console.log(` OK: ${label}`);
|
|
34
|
+
passed++;
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
console.error(`FAIL: ${label} — error did not match: ${msg}`);
|
|
38
|
+
failed++;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const RAW_TMP = join(tmpdir(), `dkk-schema-load-${Date.now()}`);
|
|
43
|
+
mkdirSync(RAW_TMP, { recursive: true });
|
|
44
|
+
const TMP = realpathSync(RAW_TMP);
|
|
45
|
+
const ROOT = join(TMP, "repo");
|
|
46
|
+
mkdirSync(join(ROOT, ".dkk"), { recursive: true });
|
|
47
|
+
try {
|
|
48
|
+
// ── service.yml: valid manifests load ────────────────────────────────
|
|
49
|
+
console.log("\n=== service.yml: valid ===");
|
|
50
|
+
writeFileSync(join(ROOT, ".dkk", "service.yml"), "name: billing\nexports:\n - billing\n");
|
|
51
|
+
const ok = loadServiceId(ROOT);
|
|
52
|
+
assert("valid manifest loads", ok?.name === "billing");
|
|
53
|
+
// ── service.yml: PascalCase name rejected ────────────────────────────
|
|
54
|
+
console.log("\n=== service.yml: invalid name ===");
|
|
55
|
+
writeFileSync(join(ROOT, ".dkk", "service.yml"), "name: Billing\nexports:\n - billing\n");
|
|
56
|
+
assertThrows("PascalCase service name rejected", () => loadServiceId(ROOT), /Invalid.*service\.yml/);
|
|
57
|
+
// ── service.yml: missing required field ──────────────────────────────
|
|
58
|
+
console.log("\n=== service.yml: missing exports ===");
|
|
59
|
+
writeFileSync(join(ROOT, ".dkk", "service.yml"), "name: billing\n");
|
|
60
|
+
assertThrows("missing exports rejected", () => loadServiceId(ROOT), /exports/);
|
|
61
|
+
// ── service.yml: unknown property rejected ───────────────────────────
|
|
62
|
+
console.log("\n=== service.yml: unknown property ===");
|
|
63
|
+
writeFileSync(join(ROOT, ".dkk", "service.yml"), "name: billing\nexports:\n - billing\nrogue: true\n");
|
|
64
|
+
assertThrows("unknown property rejected", () => loadServiceId(ROOT), /additional/i);
|
|
65
|
+
// Restore a valid service.yml for federation tests.
|
|
66
|
+
writeFileSync(join(ROOT, ".dkk", "service.yml"), "name: billing\nexports:\n - billing\n");
|
|
67
|
+
// ── federation.yml: valid local peer ─────────────────────────────────
|
|
68
|
+
console.log("\n=== federation.yml: valid local ===");
|
|
69
|
+
writeFileSync(join(ROOT, ".dkk", "federation.yml"), "peers:\n - name: ordering\n source:\n type: local\n path: ../order-svc\n");
|
|
70
|
+
const fed = loadFederation(ROOT);
|
|
71
|
+
assert("valid local peer loads", fed?.peers[0].name === "ordering");
|
|
72
|
+
// ── federation.yml: missing source ───────────────────────────────────
|
|
73
|
+
console.log("\n=== federation.yml: missing source ===");
|
|
74
|
+
writeFileSync(join(ROOT, ".dkk", "federation.yml"), "peers:\n - name: ordering\n");
|
|
75
|
+
assertThrows("missing source rejected", () => loadFederation(ROOT), /Invalid.*federation\.yml/);
|
|
76
|
+
// ── federation.yml: invalid source type ──────────────────────────────
|
|
77
|
+
console.log("\n=== federation.yml: bogus source type ===");
|
|
78
|
+
writeFileSync(join(ROOT, ".dkk", "federation.yml"), "peers:\n - name: ordering\n source:\n type: ftp\n path: x\n");
|
|
79
|
+
assertThrows("invalid source type rejected", () => loadFederation(ROOT), /Invalid.*federation\.yml/);
|
|
80
|
+
// ── federation.yml: git source missing branch ────────────────────────
|
|
81
|
+
console.log("\n=== federation.yml: git missing branch ===");
|
|
82
|
+
writeFileSync(join(ROOT, ".dkk", "federation.yml"), "peers:\n - name: ordering\n source:\n type: git\n url: https://example.com/repo.git\n");
|
|
83
|
+
assertThrows("git without branch rejected", () => loadFederation(ROOT), /branch/);
|
|
84
|
+
// ── No manifest = null (no error) ────────────────────────────────────
|
|
85
|
+
console.log("\n=== absent manifest returns null ===");
|
|
86
|
+
rmSync(join(ROOT, ".dkk", "service.yml"));
|
|
87
|
+
rmSync(join(ROOT, ".dkk", "federation.yml"));
|
|
88
|
+
assert("loadServiceId returns null when absent", loadServiceId(ROOT) === null);
|
|
89
|
+
assert("loadFederation returns null when absent", loadFederation(ROOT) === null);
|
|
90
|
+
}
|
|
91
|
+
finally {
|
|
92
|
+
rmSync(RAW_TMP, { recursive: true, force: true });
|
|
93
|
+
}
|
|
94
|
+
console.log(`\n${passed} passed, ${failed} failed`);
|
|
95
|
+
if (failed > 0)
|
|
96
|
+
process.exit(1);
|
|
97
|
+
//# sourceMappingURL=schema-load.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-load.test.js","sourceRoot":"","sources":["../../../../src/features/federation/tests/schema-load.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.test.d.ts","sourceRoot":"","sources":["../../../../src/features/federation/tests/validator.test.ts"],"names":[],"mappings":"AAsBA,OAAO,cAAc,CAAC"}
|